Minor InstrumentationClassPredicate refactor (don't treat javaagent-t… (#2536)

* Minor InstrumentationClassPredicate refactor (don't treat javaagent-tooling as helper classes)

* Update javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/muzzle/InstrumentationClassPredicate.java

Co-authored-by: Trask Stalnaker <trask.stalnaker@gmail.com>

* fix tests

Co-authored-by: Trask Stalnaker <trask.stalnaker@gmail.com>
This commit is contained in:
Mateusz Rzeszutek 2021-03-12 16:36:34 +01:00 committed by GitHub
parent ff3542eff8
commit 670a9cde3f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 26 additions and 24 deletions

View File

@ -11,7 +11,7 @@ import io.opentelemetry.context.Context;
import io.opentelemetry.instrumentation.api.servlet.ServletContextPath; import io.opentelemetry.instrumentation.api.servlet.ServletContextPath;
import io.opentelemetry.instrumentation.api.tracer.BaseTracer; import io.opentelemetry.instrumentation.api.tracer.BaseTracer;
import io.opentelemetry.instrumentation.api.tracer.ServerSpan; import io.opentelemetry.instrumentation.api.tracer.ServerSpan;
import io.opentelemetry.javaagent.tooling.ClassHierarchyIterable; import io.opentelemetry.javaagent.instrumentation.api.ClassHierarchyIterable;
import java.lang.annotation.Annotation; import java.lang.annotation.Annotation;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.Map; import java.util.Map;

View File

@ -12,7 +12,7 @@ import io.opentelemetry.context.Context;
import io.opentelemetry.instrumentation.api.servlet.ServletContextPath; import io.opentelemetry.instrumentation.api.servlet.ServletContextPath;
import io.opentelemetry.instrumentation.api.tracer.BaseTracer; import io.opentelemetry.instrumentation.api.tracer.BaseTracer;
import io.opentelemetry.instrumentation.api.tracer.ServerSpan; import io.opentelemetry.instrumentation.api.tracer.ServerSpan;
import io.opentelemetry.javaagent.tooling.ClassHierarchyIterable; import io.opentelemetry.javaagent.instrumentation.api.ClassHierarchyIterable;
import java.lang.annotation.Annotation; import java.lang.annotation.Annotation;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.Map; import java.util.Map;

View File

@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
*/ */
package io.opentelemetry.javaagent.tooling; package io.opentelemetry.javaagent.instrumentation.api;
import java.util.ArrayDeque; import java.util.ArrayDeque;
import java.util.HashSet; import java.util.HashSet;

View File

@ -6,34 +6,36 @@
package io.opentelemetry.javaagent.tooling.muzzle; package io.opentelemetry.javaagent.tooling.muzzle;
public final class InstrumentationClassPredicate { public final class InstrumentationClassPredicate {
// non-shaded packages // javaagent instrumentation packages
private static final String AUTO_INSTRUMENTATION_PACKAGE = private static final String JAVAAGENT_INSTRUMENTATION_PACKAGE =
"io.opentelemetry.javaagent.instrumentation."; "io.opentelemetry.javaagent.instrumentation.";
private static final String JAVA_AGENT_TOOLING_PACKAGE = "io.opentelemetry.javaagent.tooling."; private static final String JAVAAGENT_API_PACKAGE =
private static final String AUTO_INSTRUMENTATION_API_PACKAGE =
"io.opentelemetry.javaagent.instrumentation.api."; "io.opentelemetry.javaagent.instrumentation.api.";
// shaded packages // library instrumentation packages (both shaded in the agent)
private static final String LIBRARY_INSTRUMENTATION_PACKAGE = "io.opentelemetry.instrumentation."; private static final String LIBRARY_INSTRUMENTATION_PACKAGE = "io.opentelemetry.instrumentation.";
private static final String INSTRUMENTATION_API_PACKAGE = "io.opentelemetry.instrumentation.api."; private static final String INSTRUMENTATION_API_PACKAGE = "io.opentelemetry.instrumentation.api.";
/** /**
* Defines which classes are treated by muzzle as "internal", "helper" instrumentation classes. * Defines which classes are treated by muzzle as "internal", "helper" instrumentation classes.
* *
* <p>This set of classes is defined by a package naming convention: all automatic and manual * <p>This set of classes is defined by a package naming convention: all javaagent and library
* instrumentation classes and {@code javaagent.tooling} classes are treated as "helper" classes * instrumentation classes are treated as "helper" classes and are subjected to the reference
* and are subjected to the reference collection process. All others (including {@code * collection process. All others (including {@code instrumentation-api} and {@code javaagent-api}
* instrumentation-api} and {@code javaagent-api} modules are not scanned for referenced (but * modules are not scanned for references (but references to them are collected).
* references to them are collected).
*/ */
public static boolean isInstrumentationClass(String className) { public static boolean isInstrumentationClass(String className) {
if (className.startsWith(INSTRUMENTATION_API_PACKAGE) return isJavaagentInstrumentationClass(className) || isLibraryInstrumentationClass(className);
|| className.startsWith(AUTO_INSTRUMENTATION_API_PACKAGE)) { }
return false;
} private static boolean isJavaagentInstrumentationClass(String className) {
return className.startsWith(AUTO_INSTRUMENTATION_PACKAGE) return className.startsWith(JAVAAGENT_INSTRUMENTATION_PACKAGE)
|| className.startsWith(JAVA_AGENT_TOOLING_PACKAGE) && !className.startsWith(JAVAAGENT_API_PACKAGE);
|| className.startsWith(LIBRARY_INSTRUMENTATION_PACKAGE); }
private static boolean isLibraryInstrumentationClass(String className) {
return className.startsWith(LIBRARY_INSTRUMENTATION_PACKAGE)
&& !className.startsWith(INSTRUMENTATION_API_PACKAGE);
} }
private InstrumentationClassPredicate() {} private InstrumentationClassPredicate() {}

View File

@ -15,10 +15,9 @@ class InstrumentationClassPredicateTest extends Specification {
InstrumentationClassPredicate.isInstrumentationClass(className) InstrumentationClassPredicate.isInstrumentationClass(className)
where: where:
desc | className desc | className
"auto instrumentation class" | "io.opentelemetry.javaagent.instrumentation.some_instrumentation.Advice" "javaagent instrumentation class" | "io.opentelemetry.javaagent.instrumentation.some_instrumentation.Advice"
"javaagent-tooling class" | "io.opentelemetry.javaagent.tooling.Constants" "library instrumentation class" | "io.opentelemetry.instrumentation.LibraryClass"
"library instrumentation class" | "io.opentelemetry.instrumentation.LibraryClass"
} }
@Unroll @Unroll
@ -29,6 +28,7 @@ class InstrumentationClassPredicateTest extends Specification {
where: where:
desc | className desc | className
"Java SDK class" | "java.util.ArrayList" "Java SDK class" | "java.util.ArrayList"
"javaagent-tooling class" | "io.opentelemetry.javaagent.tooling.Constants"
"instrumentation-api class" | "io.opentelemetry.instrumentation.api.InstrumentationVersion" "instrumentation-api class" | "io.opentelemetry.instrumentation.api.InstrumentationVersion"
"javaagent-api class" | "io.opentelemetry.javaagent.instrumentation.api.ContextStore" "javaagent-api class" | "io.opentelemetry.javaagent.instrumentation.api.ContextStore"
} }