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.tracer.BaseTracer;
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.reflect.Method;
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.tracer.BaseTracer;
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.reflect.Method;
import java.util.Map;

View File

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

View File

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

View File

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