
io.opentelemetry.javaagent.tooling.Utils Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of opentelemetry-javaagent-tooling Show documentation
Show all versions of opentelemetry-javaagent-tooling Show documentation
Instrumentation of Java libraries using OpenTelemetry.
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.javaagent.tooling;
import static net.bytebuddy.matcher.ElementMatchers.named;
import io.opentelemetry.javaagent.bootstrap.AgentClassLoader;
import io.opentelemetry.javaagent.bootstrap.AgentClassLoader.BootstrapClassLoaderProxy;
import io.opentelemetry.javaagent.bootstrap.AgentInitializer;
import net.bytebuddy.description.method.MethodDescription;
import net.bytebuddy.description.type.TypeDefinition;
public class Utils {
private static final BootstrapClassLoaderProxy unitTestBootstrapProxy =
new BootstrapClassLoaderProxy(null);
/** Return the class loader the core agent is running on. */
public static ClassLoader getAgentClassLoader() {
return AgentInstaller.class.getClassLoader();
}
public static ClassLoader getExtensionsClassLoader() {
return AgentInitializer.getExtensionsClassLoader();
}
/** Return a class loader which can be used to look up bootstrap resources. */
public static BootstrapClassLoaderProxy getBootstrapProxy() {
if (getAgentClassLoader() instanceof AgentClassLoader) {
return ((AgentClassLoader) getAgentClassLoader()).getBootstrapProxy();
}
// in a unit test
return unitTestBootstrapProxy;
}
/** com.foo.Bar to com/foo/Bar.class */
public static String getResourceName(String className) {
return className.replace('.', '/') + ".class";
}
/** com/foo/Bar to com.foo.Bar */
public static String getClassName(String internalName) {
return internalName.replace('/', '.');
}
/** com.foo.Bar to com/foo/Bar */
public static String getInternalName(Class> clazz) {
return clazz.getName().replace('.', '/');
}
/**
* Get method definition for given {@link TypeDefinition} and method name.
*
* @param type type
* @param methodName method name
* @return {@link MethodDescription} for given method
* @throws IllegalStateException if more then one method matches (i.e. in case of overloaded
* methods) or if no method found
*/
public static MethodDescription getMethodDefinition(TypeDefinition type, String methodName) {
return type.getDeclaredMethods().filter(named(methodName)).getOnly();
}
private Utils() {}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy