1010
1111import io .ktor .server .application .Application ;
1212import io .ktor .server .application .ApplicationPluginKt ;
13+ import io .ktor .server .engine .EmbeddedServer ;
1314import io .opentelemetry .api .GlobalOpenTelemetry ;
1415import io .opentelemetry .instrumentation .ktor .v2_0 .common .AbstractKtorServerTelemetryBuilder ;
1516import io .opentelemetry .instrumentation .ktor .v2_0 .common .internal .KtorBuilderUtil ;
1617import io .opentelemetry .instrumentation .ktor .v3_0 .KtorServerTelemetryBuilderKt ;
1718import io .opentelemetry .javaagent .bootstrap .internal .AgentCommonConfig ;
1819import io .opentelemetry .javaagent .extension .instrumentation .TypeInstrumentation ;
1920import io .opentelemetry .javaagent .extension .instrumentation .TypeTransformer ;
21+ import java .lang .invoke .MethodHandle ;
22+ import java .lang .invoke .MethodHandles ;
2023import kotlin .Unit ;
2124import kotlin .jvm .functions .Function1 ;
2225import net .bytebuddy .asm .Advice ;
@@ -39,7 +42,18 @@ public void transform(TypeTransformer transformer) {
3942 public static class ConstructorAdvice {
4043
4144 @ Advice .OnMethodExit
42- public static void onExit (@ Advice .FieldValue ("_applicationInstance" ) Application application ) {
45+ public static void onExit (
46+ @ Advice .This EmbeddedServer <?, ?> server , @ Advice .Origin MethodHandles .Lookup lookup )
47+ throws Throwable {
48+ MethodHandle getter ;
49+ try {
50+ // since 3.0.3
51+ getter = lookup .findGetter (EmbeddedServer .class , "applicationInstance" , Application .class );
52+ } catch (NoSuchFieldException exception ) {
53+ // before 3.0.3
54+ getter = lookup .findGetter (EmbeddedServer .class , "_applicationInstance" , Application .class );
55+ }
56+ Application application = (Application ) getter .invoke (server );
4357 ApplicationPluginKt .install (
4458 application , KtorServerTelemetryBuilderKt .getKtorServerTelemetry (), new SetupFunction ());
4559 }
0 commit comments