All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.opentelemetry.javaagent.bootstrap.internal.InClassLoaderMatcher Maven / Gradle / Ivy

There is a newer version: 2.11.0-alpha
Show newest version
/*
 * 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; } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy