Skip to content

Commit 055c71c

Browse files
committed
make external-annotations indy-ready
1 parent 16545ef commit 055c71c

File tree

2 files changed

+44
-25
lines changed

2 files changed

+44
-25
lines changed

instrumentation/external-annotations/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/extannotations/ExternalAnnotationInstrumentation.java

Lines changed: 36 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import io.opentelemetry.context.Scope;
2121
import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig;
2222
import io.opentelemetry.instrumentation.api.incubator.semconv.util.ClassAndMethod;
23-
import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge;
2423
import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig;
2524
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
2625
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
@@ -32,6 +31,7 @@
3231
import java.util.Map;
3332
import java.util.Set;
3433
import java.util.logging.Logger;
34+
import javax.annotation.Nullable;
3535
import net.bytebuddy.asm.Advice;
3636
import net.bytebuddy.description.ByteCodeElement;
3737
import net.bytebuddy.description.NamedElement;
@@ -168,36 +168,48 @@ private static ElementMatcher.Junction<MethodDescription> configureExcludedMetho
168168
@SuppressWarnings("unused")
169169
public static class ExternalAnnotationAdvice {
170170

171-
@Advice.OnMethodEnter(suppress = Throwable.class)
172-
public static void onEnter(
173-
@Advice.Origin("#t") Class<?> declaringClass,
174-
@Advice.Origin("#m") String methodName,
175-
@Advice.Local("otelRequest") ClassAndMethod request,
176-
@Advice.Local("otelContext") Context context,
177-
@Advice.Local("otelScope") Scope scope) {
178-
179-
Context parentContext = Java8BytecodeBridge.currentContext();
180-
request = ClassAndMethod.create(declaringClass, methodName);
181-
if (!instrumenter().shouldStart(parentContext, request)) {
182-
return;
171+
public static class AdviceScope {
172+
private final ClassAndMethod classAndMethod;
173+
private final Context context;
174+
private final Scope scope;
175+
176+
private AdviceScope(ClassAndMethod classAndMethod, Context context, Scope scope) {
177+
this.classAndMethod = classAndMethod;
178+
this.context = context;
179+
this.scope = scope;
180+
}
181+
182+
@Nullable
183+
public static AdviceScope start(Class<?> declaringClass, String methodName) {
184+
Context parentContext = Context.current();
185+
ClassAndMethod classAndMethod = ClassAndMethod.create(declaringClass, methodName);
186+
if (!instrumenter().shouldStart(parentContext, classAndMethod)) {
187+
return null;
188+
}
189+
190+
Context context = instrumenter().start(parentContext, classAndMethod);
191+
return new AdviceScope(classAndMethod, context, context.makeCurrent());
183192
}
184193

185-
context = instrumenter().start(parentContext, request);
186-
scope = context.makeCurrent();
194+
public void end(@Nullable Throwable throwable) {
195+
scope.close();
196+
instrumenter().end(context, classAndMethod, null, throwable);
197+
}
198+
}
199+
200+
@Advice.OnMethodEnter(suppress = Throwable.class)
201+
public static AdviceScope onEnter(
202+
@Advice.Origin("#t") Class<?> declaringClass, @Advice.Origin("#m") String methodName) {
203+
return AdviceScope.start(declaringClass, methodName);
187204
}
188205

189206
@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
190207
public static void stopSpan(
191-
@Advice.Local("otelRequest") ClassAndMethod request,
192-
@Advice.Local("otelContext") Context context,
193-
@Advice.Local("otelScope") Scope scope,
194-
@Advice.Thrown Throwable throwable) {
195-
196-
if (scope == null) {
197-
return;
208+
@Advice.Thrown @Nullable Throwable throwable,
209+
@Advice.Enter @Nullable AdviceScope adviceScope) {
210+
if (adviceScope != null) {
211+
adviceScope.end(throwable);
198212
}
199-
scope.close();
200-
instrumenter().end(context, request, null, throwable);
201213
}
202214
}
203215
}

instrumentation/external-annotations/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/extannotations/ExternalAnnotationInstrumentationModule.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 ExternalAnnotationInstrumentationModule extends InstrumentationModule {
17+
public class ExternalAnnotationInstrumentationModule extends InstrumentationModule
18+
implements ExperimentalInstrumentationModule {
1719

1820
public ExternalAnnotationInstrumentationModule() {
1921
super("external-annotations");
@@ -23,4 +25,9 @@ public ExternalAnnotationInstrumentationModule() {
2325
public List<TypeInstrumentation> typeInstrumentations() {
2426
return singletonList(new ExternalAnnotationInstrumentation());
2527
}
28+
29+
@Override
30+
public boolean isIndyReady() {
31+
return true;
32+
}
2633
}

0 commit comments

Comments
 (0)