Skip to content

Commit c0db6ba

Browse files
authored
make internal indy-ready (#14646)
1 parent cb6abd2 commit c0db6ba

File tree

8 files changed

+51
-30
lines changed

8 files changed

+51
-30
lines changed

instrumentation/internal/internal-class-loader/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/classloader/BootDelegationInstrumentation.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
2222
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
2323
import net.bytebuddy.asm.Advice;
24+
import net.bytebuddy.asm.Advice.AssignReturned;
2425
import net.bytebuddy.description.method.MethodDescription;
2526
import net.bytebuddy.description.type.TypeDescription;
2627
import net.bytebuddy.matcher.ElementMatcher;
@@ -99,13 +100,15 @@ public static Class<?> onEnter(@Advice.Argument(0) String name) {
99100
return null;
100101
}
101102

103+
@AssignReturned.ToReturned
102104
@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
103-
public static void onExit(
104-
@Advice.Return(readOnly = false) Class<?> result,
105-
@Advice.Enter Class<?> resultFromBootstrapLoader) {
105+
public static Class<?> onExit(
106+
@Advice.Return Class<?> originalResult, @Advice.Enter Class<?> resultFromBootstrapLoader) {
107+
Class<?> result = originalResult;
106108
if (resultFromBootstrapLoader != null) {
107109
result = resultFromBootstrapLoader;
108110
}
111+
return result;
109112
}
110113
}
111114
}

instrumentation/internal/internal-class-loader/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/classloader/ClassLoaderInstrumentationModule.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,4 +48,11 @@ public List<TypeInstrumentation> typeInstrumentations() {
4848
new ResourceInjectionInstrumentation(),
4949
new DefineClassInstrumentation());
5050
}
51+
52+
@Override
53+
public boolean isIndyReady() {
54+
// This module uses inlined advices to prevent recursion issues with invokedynamic, which is
55+
// forced by using 'applyInlineAdvice' in 'transform' method of instrumentations.
56+
return true;
57+
}
5158
}

instrumentation/internal/internal-class-loader/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/classloader/LoadInjectedClassInstrumentation.java

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
2121
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
2222
import net.bytebuddy.asm.Advice;
23+
import net.bytebuddy.asm.Advice.AssignReturned;
2324
import net.bytebuddy.description.method.MethodDescription;
2425
import net.bytebuddy.description.type.TypeDescription;
2526
import net.bytebuddy.matcher.ElementMatcher;
@@ -59,20 +60,14 @@ public static class LoadClassAdvice {
5960
@Advice.OnMethodEnter(skipOn = Advice.OnNonDefaultValue.class)
6061
public static Class<?> onEnter(
6162
@Advice.This ClassLoader classLoader, @Advice.Argument(0) String name) {
62-
Class<?> helperClass = InjectedClassHelper.loadHelperClass(classLoader, name);
63-
if (helperClass != null) {
64-
return helperClass;
65-
}
66-
67-
return null;
63+
return InjectedClassHelper.loadHelperClass(classLoader, name);
6864
}
6965

66+
@AssignReturned.ToReturned
7067
@Advice.OnMethodExit(onThrowable = Throwable.class)
71-
public static void onExit(
72-
@Advice.Return(readOnly = false) Class<?> result, @Advice.Enter Class<?> loadedClass) {
73-
if (loadedClass != null) {
74-
result = loadedClass;
75-
}
68+
public static Class<?> onExit(
69+
@Advice.Return Class<?> originalResult, @Advice.Enter Class<?> loadedClass) {
70+
return loadedClass != null ? loadedClass : originalResult;
7671
}
7772
}
7873
}

instrumentation/internal/internal-eclipse-osgi-3.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/osgi/EclipseOsgiInstrumentation.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
1414
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
1515
import net.bytebuddy.asm.Advice;
16+
import net.bytebuddy.asm.Advice.AssignReturned;
1617
import net.bytebuddy.description.type.TypeDescription;
1718
import net.bytebuddy.matcher.ElementMatcher;
1819

@@ -52,13 +53,11 @@ public static boolean onEnter(@Advice.Argument(0) String packageName) {
5253
return InClassLoaderMatcher.get() && !packageName.startsWith("io.opentelemetry.");
5354
}
5455

56+
@AssignReturned.ToReturned
5557
@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
56-
public static void onExit(
57-
@Advice.Return(readOnly = false) boolean result,
58-
@Advice.Enter boolean inClassLoaderMatcher) {
59-
if (inClassLoaderMatcher) {
60-
result = false;
61-
}
58+
public static boolean onExit(
59+
@Advice.Return boolean originalResult, @Advice.Enter boolean inClassLoaderMatcher) {
60+
return inClassLoaderMatcher ? false : originalResult;
6261
}
6362
}
6463
}

instrumentation/internal/internal-eclipse-osgi-3.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/osgi/EclipseOsgiInstrumentationModule.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,13 @@
1010
import com.google.auto.service.AutoService;
1111
import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule;
1212
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
13+
import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule;
1314
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
1415
import java.util.List;
1516

1617
@AutoService(InstrumentationModule.class)
17-
public class EclipseOsgiInstrumentationModule extends InstrumentationModule {
18+
public class EclipseOsgiInstrumentationModule extends InstrumentationModule
19+
implements ExperimentalInstrumentationModule {
1820
public EclipseOsgiInstrumentationModule() {
1921
super("internal-eclipse-osgi", "internal-eclipse-osgi-3.6");
2022
}
@@ -29,4 +31,9 @@ public boolean defaultEnabled(ConfigProperties config) {
2931
public List<TypeInstrumentation> typeInstrumentations() {
3032
return singletonList(new EclipseOsgiInstrumentation());
3133
}
34+
35+
@Override
36+
public boolean isIndyReady() {
37+
return true;
38+
}
3239
}

instrumentation/internal/internal-reflection/javaagent-integration-tests/src/main/java/instrumentation/TestTypeInstrumentation.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
1212
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
1313
import net.bytebuddy.asm.Advice;
14+
import net.bytebuddy.asm.Advice.AssignReturned;
1415
import net.bytebuddy.description.type.TypeDescription;
1516
import net.bytebuddy.matcher.ElementMatcher;
1617

@@ -32,21 +33,21 @@ public void transform(TypeTransformer transformer) {
3233
@SuppressWarnings("unused")
3334
public static class TestAdvice {
3435

36+
@AssignReturned.ToReturned
3537
@Advice.OnMethodExit
36-
public static void methodExit(
37-
@Advice.This Runnable test, @Advice.Return(readOnly = false) String result) {
38+
public static String methodExit(@Advice.This Runnable test) {
3839
VirtualField.find(Runnable.class, String.class).set(test, "instrumented");
39-
result = "instrumented";
40+
return "instrumented";
4041
}
4142
}
4243

4344
@SuppressWarnings("unused")
4445
public static class Test2Advice {
4546

47+
@AssignReturned.ToReturned
4648
@Advice.OnMethodExit
47-
public static void methodExit(
48-
@Advice.This Runnable test, @Advice.Return(readOnly = false) String result) {
49-
result = VirtualField.find(Runnable.class, String.class).get(test);
49+
public static String methodExit(@Advice.This Runnable test) {
50+
return VirtualField.find(Runnable.class, String.class).get(test);
5051
}
5152
}
5253
}

instrumentation/internal/internal-url-class-loader/javaagent-integration-tests/src/main/java/instrumentation/TestInstrumentationModule.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,12 @@
1010
import com.google.auto.service.AutoService;
1111
import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule;
1212
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
13+
import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule;
1314
import java.util.List;
1415

1516
@AutoService(InstrumentationModule.class)
16-
public class TestInstrumentationModule extends InstrumentationModule {
17+
public class TestInstrumentationModule extends InstrumentationModule
18+
implements ExperimentalInstrumentationModule {
1719
public TestInstrumentationModule() {
1820
super("test-instrumentation");
1921
}
@@ -22,4 +24,9 @@ public TestInstrumentationModule() {
2224
public List<TypeInstrumentation> typeInstrumentations() {
2325
return singletonList(new TestTypeInstrumentation());
2426
}
27+
28+
@Override
29+
public boolean isIndyReady() {
30+
return true;
31+
}
2532
}

instrumentation/internal/internal-url-class-loader/javaagent-integration-tests/src/main/java/instrumentation/TestTypeInstrumentation.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
1212
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
1313
import net.bytebuddy.asm.Advice;
14+
import net.bytebuddy.asm.Advice.AssignReturned;
1415
import net.bytebuddy.description.type.TypeDescription;
1516
import net.bytebuddy.matcher.ElementMatcher;
1617

@@ -34,9 +35,10 @@ public void transform(TypeTransformer transformer) {
3435
@SuppressWarnings("unused")
3536
public static class GetHostNameAdvice {
3637

38+
@AssignReturned.ToReturned
3739
@Advice.OnMethodExit
38-
public static void methodExit(@Advice.Return(readOnly = false) String hostName) {
39-
hostName = "not-the-host-name";
40+
public static String methodExit() {
41+
return "not-the-host-name";
4042
}
4143
}
4244
}

0 commit comments

Comments
 (0)