io.opentelemetry.javaagent.bootstrap.internal.InClassLoaderMatcher Maven / Gradle / Ivy
Show all versions of opentelemetry-javaagent-extension-api Show documentation
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.javaagent.bootstrap.internal;
/**
* This class is internal and is hence not for public use. Its APIs are unstable and can change at
* any time.
*/
public final class InClassLoaderMatcher {
// using boolean[] to avoid an extra thread local lookup for getAndSet() below
private static final ThreadLocal inClassLoaderMatcher =
ThreadLocal.withInitial(() -> new boolean[1]);
private InClassLoaderMatcher() {}
/**
* Returns whether the ClassLoaderMatcher is currently executing.
*
* This is used (at least) by the {@code internal-eclipse-osgi} instrumentation in order to
* suppress a side effect in the Eclipse OSGi class loader that occurs when ClassLoaderMatcher
* calls ClassLoader.getResource(). See {@code EclipseOsgiInstrumentationModule} for more details.
*/
public static boolean get() {
return inClassLoaderMatcher.get()[0];
}
/**
* WARNING This should not be used by instrumentation. It should only be used by
* io.opentelemetry.javaagent.tooling.bytebuddy.matcher.ClassLoaderMatcher.
*
*
The reason it can't be (easily) hidden is that this class needs to live in the bootstrap
* class loader to be accessible to instrumentation, while the ClassLoaderMatcher lives in the
* agent class loader.
*/
public static boolean getAndSet(boolean value) {
boolean[] arr = inClassLoaderMatcher.get();
boolean curr = arr[0];
arr[0] = value;
return curr;
}
/**
* WARNING This should not be used by instrumentation. It should only be used by
* io.opentelemetry.javaagent.tooling.bytebuddy.matcher.ClassLoaderMatcher.
*
*
The reason it can't be (easily) hidden is that this class needs to live in the bootstrap
* class loader to be accessible to instrumentation, while the ClassLoaderMatcher lives in the
* agent class loader.
*/
public static void set(boolean value) {
inClassLoaderMatcher.get()[0] = value;
}
}