Skip to content

Commit cedb49b

Browse files
DRY class name/resource name construction
1 parent 8e8d1e2 commit cedb49b

17 files changed

Lines changed: 94 additions & 70 deletions

File tree

dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/Agent.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import static datadog.trace.util.AgentThreadFactory.AgentThread.PROFILER_STARTUP;
88
import static datadog.trace.util.AgentThreadFactory.AgentThread.TRACE_STARTUP;
99
import static datadog.trace.util.AgentThreadFactory.newAgentThread;
10+
import static datadog.trace.util.Strings.getResourceName;
1011

1112
import datadog.trace.util.AgentTaskScheduler;
1213
import datadog.trace.util.AgentThreadFactory.AgentThread;
@@ -572,7 +573,7 @@ private static boolean isAppUsingCustomLogManager(final EnumSet<Library> librari
572573
final String logManagerProp = System.getProperty("java.util.logging.manager");
573574
if (logManagerProp != null) {
574575
final boolean onSysClasspath =
575-
ClassLoader.getSystemResource(logManagerProp.replace('.', '/') + ".class") != null;
576+
ClassLoader.getSystemResource(getResourceName(logManagerProp)) != null;
576577
log.debug("Prop - logging.manager: " + logManagerProp);
577578
log.debug("logging.manager on system classpath: " + onSysClasspath);
578579
// Some applications set java.util.logging.manager but never actually initialize the logger.
@@ -610,7 +611,7 @@ private static boolean isAppUsingCustomJMXBuilder(final EnumSet<Library> librari
610611
final String jmxBuilderProp = System.getProperty("javax.management.builder.initial");
611612
if (jmxBuilderProp != null) {
612613
final boolean onSysClasspath =
613-
ClassLoader.getSystemResource(jmxBuilderProp.replace('.', '/') + ".class") != null;
614+
ClassLoader.getSystemResource(getResourceName(jmxBuilderProp)) != null;
614615
log.debug("Prop - javax.management.builder.initial: " + jmxBuilderProp);
615616
log.debug("javax.management.builder.initial on system classpath: " + onSysClasspath);
616617
// Some applications set javax.management.builder.initial but never actually initialize JMX.
@@ -634,7 +635,7 @@ private static boolean isJavaBefore9WithJFR() {
634635
// FIXME: this is quite a hack because there maybe jfr classes on classpath somehow that have
635636
// nothing to do with JDK but this should be safe because only thing this does is to delay
636637
// tracer install
637-
final String jfrClassResourceName = "jdk.jfr.Recording".replace('.', '/') + ".class";
638-
return Thread.currentThread().getContextClassLoader().getResource(jfrClassResourceName) != null;
638+
return Thread.currentThread().getContextClassLoader().getResource("jdk/jfr/Recording.class")
639+
!= null;
639640
}
640641
}

dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/ClassLoaderMatcher.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package datadog.trace.agent.tooling;
22

33
import static datadog.trace.bootstrap.AgentClassLoading.PROBING_CLASSLOADER;
4+
import static datadog.trace.util.Strings.getResourceName;
45

56
import datadog.trace.api.Tracer;
67
import datadog.trace.bootstrap.PatchLogger;
@@ -128,7 +129,7 @@ private static class ClassLoaderHasClassesNamedMatcher
128129
private ClassLoaderHasClassesNamedMatcher(final String... classNames) {
129130
resources = classNames;
130131
for (int i = 0; i < resources.length; i++) {
131-
resources[i] = resources[i].replace(".", "/") + ".class";
132+
resources[i] = getResourceName(resources[i]);
132133
}
133134
}
134135

dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/Utils.java

Lines changed: 0 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -39,39 +39,6 @@ public static ClassLoader getBootstrapProxy() {
3939
}
4040
}
4141

42-
/** com.foo.Bar -> com/foo/Bar.class */
43-
public static String getResourceName(final String className) {
44-
if (!className.endsWith(".class")) {
45-
return className.replace('.', '/') + ".class";
46-
} else {
47-
return className;
48-
}
49-
}
50-
51-
/** com/foo/Bar.class -> com.foo.Bar */
52-
public static String getClassName(final String resourceName) {
53-
if (resourceName.endsWith(".class")) {
54-
return resourceName.substring(0, resourceName.length() - 6).replace('/', '.');
55-
}
56-
return resourceName.replace('/', '.');
57-
}
58-
59-
/** com.foo.Bar -> com/foo/Bar */
60-
public static String getInternalName(final String resourceName) {
61-
return resourceName.replace('.', '/');
62-
}
63-
64-
/**
65-
* Convert class name to a format that can be used as part of inner class name by replacing all
66-
* '.'s with '$'s.
67-
*
68-
* @param className class named to be converted
69-
* @return convertd name
70-
*/
71-
public static String getInnerClassName(final String className) {
72-
return className.replace('.', '$');
73-
}
74-
7542
/**
7643
* Get method definition for given {@link TypeDefinition} and method name.
7744
*

dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/bytebuddy/DDClassFileLocator.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package datadog.trace.agent.tooling.bytebuddy;
22

33
import static datadog.trace.bootstrap.AgentClassLoading.LOCATING_CLASS;
4+
import static datadog.trace.util.Strings.getResourceName;
45

56
import datadog.trace.agent.tooling.Utils;
67
import java.io.IOException;
@@ -23,7 +24,7 @@ public DDClassFileLocator(final ClassLoader classLoader) {
2324

2425
@Override
2526
public Resolution locate(final String className) throws IOException {
26-
String resourceName = className.replace('.', '/') + ".class";
27+
String resourceName = getResourceName(className);
2728

2829
// try bootstrap first
2930
Resolution resolution = loadClassResource(Utils.getBootstrapProxy(), resourceName);

dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/bytebuddy/NewTaskForRewritingVisitor.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package datadog.trace.agent.tooling.bytebuddy;
22

3-
import datadog.trace.agent.tooling.Utils;
3+
import static datadog.trace.util.Strings.getInternalName;
4+
45
import datadog.trace.bootstrap.instrumentation.java.concurrent.NewTaskForPlaceholder;
56
import java.util.concurrent.RunnableFuture;
67
import net.bytebuddy.asm.AsmVisitorWrapper;
@@ -23,7 +24,7 @@ public final class NewTaskForRewritingVisitor implements AsmVisitorWrapper {
2324
static final NewTaskForRewritingVisitor INSTANCE = new NewTaskForRewritingVisitor();
2425

2526
static final String NEW_TASK_FOR_PLACEHOLDER_CLASS =
26-
Utils.getInternalName(NewTaskForPlaceholder.class.getName());
27+
getInternalName(NewTaskForPlaceholder.class.getName());
2728

2829
static final String ABSTRACT_EXECUTOR_SERVICE_CLASS =
2930
"java/util/concurrent/AbstractExecutorService";

dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/context/ContextStoreReadsRewritingVisitor.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package datadog.trace.agent.tooling.context;
22

33
import static datadog.trace.agent.tooling.context.ContextStoreUtils.getContextStoreImplementationClassName;
4+
import static datadog.trace.util.Strings.getInternalName;
45

5-
import datadog.trace.agent.tooling.Utils;
66
import datadog.trace.bootstrap.ContextStore;
77
import datadog.trace.bootstrap.InstrumentationContext;
88
import java.util.Map;
@@ -29,7 +29,7 @@ final class ContextStoreReadsRewritingVisitor implements AsmVisitorWrapper {
2929
LoggerFactory.getLogger(ContextStoreReadsRewritingVisitor.class);
3030

3131
private static final String INSTRUMENTATION_CONTEXT_CLASS =
32-
Utils.getInternalName(InstrumentationContext.class.getName());
32+
getInternalName(InstrumentationContext.class.getName());
3333

3434
private static final String GET_METHOD = "get";
3535
private static final String GET_METHOD_DESCRIPTOR =

dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/context/ContextStoreUtils.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package datadog.trace.agent.tooling.context;
22

33
import static datadog.trace.agent.tooling.ClassLoaderMatcher.BOOTSTRAP_CLASSLOADER;
4+
import static datadog.trace.util.Strings.getInnerClassName;
45

56
import datadog.trace.agent.tooling.HelperInjector;
6-
import datadog.trace.agent.tooling.Utils;
77
import java.util.Collection;
88
import java.util.Collections;
99
import java.util.HashMap;
@@ -92,9 +92,9 @@ static String getContextStoreImplementationClassName(
9292
return DYNAMIC_CLASSES_PACKAGE
9393
+ FieldBackedProvider.class.getSimpleName()
9494
+ "$ContextStore$"
95-
+ Utils.getInnerClassName(keyClassName)
95+
+ getInnerClassName(keyClassName)
9696
+ "$"
97-
+ Utils.getInnerClassName(contextClassName);
97+
+ getInnerClassName(contextClassName);
9898
}
9999

100100
@Deprecated
@@ -103,14 +103,14 @@ static String getContextAccessorInterfaceName(
103103
return DYNAMIC_CLASSES_PACKAGE
104104
+ FieldBackedProvider.class.getSimpleName()
105105
+ "$ContextAccessor$"
106-
+ Utils.getInnerClassName(keyClassName)
106+
+ getInnerClassName(keyClassName)
107107
+ "$"
108-
+ Utils.getInnerClassName(contextClassName);
108+
+ getInnerClassName(contextClassName);
109109
}
110110

111111
@Deprecated
112112
static String getContextFieldName(final String keyClassName) {
113-
return "__datadogContext$" + Utils.getInnerClassName(keyClassName);
113+
return "__datadogContext$" + getInnerClassName(keyClassName);
114114
}
115115

116116
@Deprecated

dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/context/FieldBackedContextInjector.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
import static datadog.trace.agent.tooling.context.ShouldInjectFieldsMatcher.hasInjectedField;
44
import static datadog.trace.bootstrap.FieldBackedContextStores.getContextStoreId;
5+
import static datadog.trace.util.Strings.getInternalName;
56

6-
import datadog.trace.agent.tooling.Utils;
77
import datadog.trace.api.Config;
88
import datadog.trace.bootstrap.ContextStore;
99
import datadog.trace.bootstrap.FieldBackedContextAccessor;
@@ -35,10 +35,10 @@ final class FieldBackedContextInjector implements AsmVisitorWrapper {
3535
private static final Logger log = LoggerFactory.getLogger(FieldBackedContextInjector.class);
3636

3737
static final String FIELD_BACKED_CONTEXT_STORES_CLASS =
38-
Utils.getInternalName(FieldBackedContextStores.class.getName());
38+
getInternalName(FieldBackedContextStores.class.getName());
3939

4040
static final String FIELD_BACKED_CONTEXT_ACCESSOR_CLASS =
41-
Utils.getInternalName(FieldBackedContextAccessor.class.getName());
41+
getInternalName(FieldBackedContextAccessor.class.getName());
4242

4343
static final String CONTEXT_STORE_ACCESS_PREFIX = "__datadogContext$";
4444

@@ -62,7 +62,7 @@ final class FieldBackedContextInjector implements AsmVisitorWrapper {
6262

6363
static final String OBJECT_DESCRIPTOR = Type.getDescriptor(Object.class);
6464

65-
static final String LINKAGE_ERROR_CLASS = Utils.getInternalName(LinkageError.class.getName());
65+
static final String LINKAGE_ERROR_CLASS = getInternalName(LinkageError.class.getName());
6666

6767
/** Keeps track of injection requests for the class being transformed by the current thread. */
6868
static final ThreadLocal<BitSet> INJECTED_STORE_IDS = new ThreadLocal<>();

dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/context/FieldBackedContextRequestRewriter.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package datadog.trace.agent.tooling.context;
22

33
import static datadog.trace.bootstrap.FieldBackedContextStores.getContextStoreId;
4+
import static datadog.trace.util.Strings.getInternalName;
45

5-
import datadog.trace.agent.tooling.Utils;
66
import datadog.trace.bootstrap.ContextStore;
77
import datadog.trace.bootstrap.FieldBackedContextStore;
88
import datadog.trace.bootstrap.FieldBackedContextStores;
@@ -33,10 +33,10 @@ final class FieldBackedContextRequestRewriter implements AsmVisitorWrapper {
3333
LoggerFactory.getLogger(FieldBackedContextRequestRewriter.class);
3434

3535
static final String INSTRUMENTATION_CONTEXT_CLASS =
36-
Utils.getInternalName(InstrumentationContext.class.getName());
36+
getInternalName(InstrumentationContext.class.getName());
3737

3838
static final String FIELD_BACKED_CONTEXT_STORES_CLASS =
39-
Utils.getInternalName(FieldBackedContextStores.class.getName());
39+
getInternalName(FieldBackedContextStores.class.getName());
4040

4141
static final String GET_METHOD = "get";
4242
static final String GET_METHOD_DESCRIPTOR =

dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/context/FieldInjectionVisitor.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package datadog.trace.agent.tooling.context;
22

3+
import static datadog.trace.util.Strings.getInternalName;
4+
35
import datadog.trace.agent.tooling.Utils;
46
import datadog.trace.api.Config;
57
import datadog.trace.bootstrap.FieldBackedContextStoreAppliedMarker;
@@ -29,7 +31,7 @@ final class FieldInjectionVisitor implements AsmVisitorWrapper {
2931
private static final Logger log = LoggerFactory.getLogger(FieldInjectionVisitor.class);
3032

3133
private static final String INJECTED_FIELDS_MARKER_CLASS_NAME =
32-
Utils.getInternalName(FieldBackedContextStoreAppliedMarker.class.getName());
34+
getInternalName(FieldBackedContextStoreAppliedMarker.class.getName());
3335

3436
private final boolean serialVersionUIDFieldInjection =
3537
Config.get().isSerialVersionUIDFieldInjection();

0 commit comments

Comments
 (0)