Fix ktor3 latest dep test (#12937)

This commit is contained in:
Lauri Tulmin 2024-12-20 17:52:53 +02:00 committed by GitHub
parent fa32671be5
commit de6e0ef675
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 16 additions and 2 deletions

View File

@ -10,6 +10,7 @@ import static net.bytebuddy.matcher.ElementMatchers.named;
import io.ktor.server.application.Application;
import io.ktor.server.application.ApplicationPluginKt;
import io.ktor.server.engine.EmbeddedServer;
import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.instrumentation.ktor.v2_0.common.AbstractKtorServerTelemetryBuilder;
import io.opentelemetry.instrumentation.ktor.v2_0.common.internal.KtorBuilderUtil;
@ -17,6 +18,8 @@ import io.opentelemetry.instrumentation.ktor.v3_0.KtorServerTelemetryBuilderKt;
import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig;
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import kotlin.Unit;
import kotlin.jvm.functions.Function1;
import net.bytebuddy.asm.Advice;
@ -39,7 +42,18 @@ public class ServerInstrumentation implements TypeInstrumentation {
public static class ConstructorAdvice {
@Advice.OnMethodExit
public static void onExit(@Advice.FieldValue("_applicationInstance") Application application) {
public static void onExit(
@Advice.This EmbeddedServer<?, ?> server, @Advice.Origin MethodHandles.Lookup lookup)
throws Throwable {
MethodHandle getter;
try {
// since 3.0.3
getter = lookup.findGetter(EmbeddedServer.class, "applicationInstance", Application.class);
} catch (NoSuchFieldException exception) {
// before 3.0.3
getter = lookup.findGetter(EmbeddedServer.class, "_applicationInstance", Application.class);
}
Application application = (Application) getter.invoke(server);
ApplicationPluginKt.install(
application, KtorServerTelemetryBuilderKt.getKtorServerTelemetry(), new SetupFunction());
}

View File

@ -85,7 +85,7 @@ class AdviceSignatureEraser {
String reference = matcher.group();
if (reference.startsWith("Ljava/")) {
// do not erase java.* references
matcher.appendReplacement(result, reference);
matcher.appendReplacement(result, Matcher.quoteReplacement(reference));
} else {
matcher.appendReplacement(result, "Ljava/lang/Object;");
}