Skip to content

Commit 30ddf6a

Browse files
authored
Fix transforming record types (#10052)
1 parent ad16ba8 commit 30ddf6a

File tree

13 files changed

+55
-24
lines changed

13 files changed

+55
-24
lines changed

instrumentation/internal/internal-lambda/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/lambda/InnerClassLambdaMetafactoryInstrumentation.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import io.opentelemetry.javaagent.bootstrap.DefineClassHelper.Handler.DefineClassContext;
1313
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
1414
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
15+
import io.opentelemetry.javaagent.extension.instrumentation.internal.AsmApi;
1516
import net.bytebuddy.asm.Advice;
1617
import net.bytebuddy.asm.AsmVisitorWrapper;
1718
import net.bytebuddy.description.field.FieldDescription;
@@ -89,7 +90,7 @@ private static class MetaFactoryClassVisitor extends ClassVisitor {
8990
private final String slashClassName;
9091

9192
MetaFactoryClassVisitor(ClassVisitor cv, String slashClassName) {
92-
super(Opcodes.ASM7, cv);
93+
super(AsmApi.VERSION, cv);
9394
this.slashClassName = slashClassName;
9495
}
9596

instrumentation/internal/internal-reflection/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/reflection/ClassInstrumentation.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import com.google.errorprone.annotations.CanIgnoreReturnValue;
1111
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
1212
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
13+
import io.opentelemetry.javaagent.extension.instrumentation.internal.AsmApi;
1314
import net.bytebuddy.asm.AsmVisitorWrapper;
1415
import net.bytebuddy.description.field.FieldDescription;
1516
import net.bytebuddy.description.field.FieldList;
@@ -65,7 +66,7 @@ public ClassVisitor wrap(
6566
private static class ClassClassVisitor extends ClassVisitor {
6667

6768
ClassClassVisitor(ClassVisitor cv) {
68-
super(Opcodes.ASM7, cv);
69+
super(AsmApi.VERSION, cv);
6970
}
7071

7172
@Override

instrumentation/kotlinx-coroutines/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kotlinxcoroutines/instrumentationannotations/ExpandFramesClassVisitor.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
package io.opentelemetry.javaagent.instrumentation.kotlinxcoroutines.instrumentationannotations;
77

8+
import io.opentelemetry.javaagent.extension.instrumentation.internal.AsmApi;
89
import java.lang.reflect.Modifier;
910
import java.util.ArrayList;
1011
import java.util.Iterator;
@@ -22,7 +23,7 @@ class ExpandFramesClassVisitor extends ClassVisitor {
2223
private String className;
2324

2425
ExpandFramesClassVisitor(ClassVisitor classVisitor) {
25-
super(Opcodes.ASM9, classVisitor);
26+
super(AsmApi.VERSION, classVisitor);
2627
}
2728

2829
@Override
@@ -50,7 +51,7 @@ private static class ExpandFramesMethodVisitor extends MethodVisitor {
5051

5152
ExpandFramesMethodVisitor(
5253
MethodVisitor mv, String className, String methodName, int access, String descriptor) {
53-
super(Opcodes.ASM9, mv);
54+
super(AsmApi.VERSION, mv);
5455
if ("<init>".equals(methodName)) {
5556
currentLocals.add(Opcodes.UNINITIALIZED_THIS);
5657
} else if (!Modifier.isStatic(access)) {

instrumentation/kotlinx-coroutines/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kotlinxcoroutines/instrumentationannotations/WithSpanInstrumentation.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import io.opentelemetry.javaagent.bootstrap.internal.InstrumentationConfig;
2020
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
2121
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
22+
import io.opentelemetry.javaagent.extension.instrumentation.internal.AsmApi;
2223
import io.opentelemetry.javaagent.instrumentation.instrumentationannotations.AnnotationExcludedMethods;
2324
import io.opentelemetry.javaagent.instrumentation.kotlinxcoroutines.instrumentationannotations.SpanAttributeUtil.Parameter;
2425
import java.util.Arrays;
@@ -136,7 +137,7 @@ private static class WithSpanClassVisitor extends ClassVisitor {
136137
String className;
137138

138139
WithSpanClassVisitor(ClassVisitor cv) {
139-
super(Opcodes.ASM9, cv);
140+
super(AsmApi.VERSION, cv);
140141
}
141142

142143
@Override
@@ -213,7 +214,8 @@ private static MethodVisitor instrument(
213214
source.signature,
214215
source.exceptions.toArray(new String[0]));
215216
GeneratorAdapter generatorAdapter =
216-
new GeneratorAdapter(Opcodes.ASM9, methodNode, source.access, source.name, source.desc) {
217+
new GeneratorAdapter(
218+
AsmApi.VERSION, methodNode, source.access, source.name, source.desc) {
217219
int requestLocal;
218220
int ourContinuationLocal;
219221
int contextLocal;

instrumentation/payara/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/payara/StandardWrapperInstrumentation.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import com.google.errorprone.annotations.CanIgnoreReturnValue;
1111
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
1212
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
13+
import io.opentelemetry.javaagent.extension.instrumentation.internal.AsmApi;
1314
import net.bytebuddy.asm.AsmVisitorWrapper;
1415
import net.bytebuddy.description.field.FieldDescription;
1516
import net.bytebuddy.description.field.FieldList;
@@ -64,7 +65,7 @@ public ClassVisitor wrap(
6465
private static class StandardWrapperClassVisitor extends ClassVisitor {
6566

6667
StandardWrapperClassVisitor(ClassVisitor cv) {
67-
super(Opcodes.ASM7, cv);
68+
super(AsmApi.VERSION, cv);
6869
}
6970

7071
@Override
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.javaagent.extension.instrumentation.internal;
7+
8+
import org.objectweb.asm.Opcodes;
9+
10+
/**
11+
* This class is internal and is hence not for public use. Its APIs are unstable and can change at
12+
* any time.
13+
*/
14+
public final class AsmApi {
15+
public static final int VERSION = Opcodes.ASM9;
16+
17+
private AsmApi() {}
18+
}

javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentStarterImpl.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import io.opentelemetry.instrumentation.api.internal.cache.weaklockfree.WeakConcurrentMapCleaner;
1010
import io.opentelemetry.javaagent.bootstrap.AgentInitializer;
1111
import io.opentelemetry.javaagent.bootstrap.AgentStarter;
12+
import io.opentelemetry.javaagent.extension.instrumentation.internal.AsmApi;
1213
import io.opentelemetry.javaagent.tooling.config.EarlyInitAgentConfig;
1314
import java.io.File;
1415
import java.lang.instrument.ClassFileTransformer;
@@ -151,7 +152,7 @@ public byte[] transform(
151152
ClassReader cr = new ClassReader(classfileBuffer);
152153
ClassWriter cw = new ClassWriter(cr, 0);
153154
ClassVisitor cv =
154-
new ClassVisitor(Opcodes.ASM7, cw) {
155+
new ClassVisitor(AsmApi.VERSION, cw) {
155156
@Override
156157
public MethodVisitor visitMethod(
157158
int access, String name, String descriptor, String signature, String[] exceptions) {

javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/field/RealFieldInjector.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
import com.google.errorprone.annotations.CanIgnoreReturnValue;
1313
import io.opentelemetry.javaagent.bootstrap.VirtualFieldInstalledMarker;
14+
import io.opentelemetry.javaagent.extension.instrumentation.internal.AsmApi;
1415
import io.opentelemetry.javaagent.tooling.Utils;
1516
import java.util.Arrays;
1617
import java.util.LinkedHashSet;
@@ -66,7 +67,7 @@ public ClassVisitor wrap(
6667
int writerFlags,
6768
int readerFlags) {
6869

69-
return new ClassVisitor(Opcodes.ASM7, classVisitor) {
70+
return new ClassVisitor(AsmApi.VERSION, classVisitor) {
7071
// We are using Object class name instead of fieldTypeName here because this gets
7172
// injected onto the bootstrap class loader where context class may be unavailable
7273
private final TypeDescription fieldType = TypeDescription.ForLoadedType.of(Object.class);

javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/field/VirtualFieldFindRewriter.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
import com.google.errorprone.annotations.CanIgnoreReturnValue;
1111
import io.opentelemetry.instrumentation.api.util.VirtualField;
12+
import io.opentelemetry.javaagent.extension.instrumentation.internal.AsmApi;
1213
import io.opentelemetry.javaagent.tooling.TransformSafeLogger;
1314
import io.opentelemetry.javaagent.tooling.Utils;
1415
import io.opentelemetry.javaagent.tooling.muzzle.VirtualFieldMappings;
@@ -81,12 +82,12 @@ public ClassVisitor wrap(
8182
int writerFlags,
8283
int readerFlags) {
8384

84-
return new ClassVisitor(Opcodes.ASM7, classVisitor) {
85+
return new ClassVisitor(AsmApi.VERSION, classVisitor) {
8586
@Override
8687
public MethodVisitor visitMethod(
8788
int access, String name, String descriptor, String signature, String[] exceptions) {
8889
MethodVisitor mv = super.visitMethod(access, name, descriptor, signature, exceptions);
89-
return new MethodVisitor(Opcodes.ASM7, mv) {
90+
return new MethodVisitor(api, mv) {
9091
/** The most recent objects pushed to the stack. */
9192
private final Object[] stack = {null, null};
9293

javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/field/VirtualFieldImplementationsGenerator.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import com.google.errorprone.annotations.CanIgnoreReturnValue;
1313
import io.opentelemetry.instrumentation.api.internal.cache.Cache;
1414
import io.opentelemetry.instrumentation.api.util.VirtualField;
15+
import io.opentelemetry.javaagent.extension.instrumentation.internal.AsmApi;
1516
import io.opentelemetry.javaagent.tooling.Utils;
1617
import io.opentelemetry.javaagent.tooling.muzzle.VirtualFieldMappings;
1718
import java.util.HashMap;
@@ -109,7 +110,7 @@ public ClassVisitor wrap(
109110
MethodList<?> methods,
110111
int writerFlags,
111112
int readerFlags) {
112-
return new ClassVisitor(Opcodes.ASM7, classVisitor) {
113+
return new ClassVisitor(AsmApi.VERSION, classVisitor) {
113114

114115
private final TypeDescription accessorInterface =
115116
fieldAccessorInterfaces.find(typeName, fieldTypeName);

javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/indy/AdviceTransformer.java

+8-7
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
package io.opentelemetry.javaagent.tooling.instrumentation.indy;
77

8+
import io.opentelemetry.javaagent.extension.instrumentation.internal.AsmApi;
89
import java.util.ArrayList;
910
import java.util.Arrays;
1011
import java.util.Comparator;
@@ -63,7 +64,7 @@ static byte[] transform(byte[] bytes) {
6364

6465
TransformationContext context = new TransformationContext();
6566
ClassVisitor cv =
66-
new ClassVisitor(Opcodes.ASM9, cw) {
67+
new ClassVisitor(AsmApi.VERSION, cw) {
6768

6869
@Override
6970
public MethodVisitor visitMethod(
@@ -282,7 +283,7 @@ private static MethodVisitor instrumentWritableArguments(
282283
List<OutputArgument> writableArguments,
283284
int returnIndex) {
284285
MethodVisitor result =
285-
new MethodVisitor(Opcodes.ASM9, target) {
286+
new MethodVisitor(AsmApi.VERSION, target) {
286287
@Override
287288
public void visitCode() {
288289
AnnotationVisitor av =
@@ -348,7 +349,7 @@ public void visitInsn(int opcode) {
348349
private static MethodVisitor instrumentWritableReturn(
349350
MethodVisitor target, MethodNode source, OutputArgument writableReturn, int returnIndex) {
350351
MethodVisitor result =
351-
new MethodVisitor(Opcodes.ASM9, target) {
352+
new MethodVisitor(AsmApi.VERSION, target) {
352353
@Override
353354
public void visitCode() {
354355
AnnotationVisitor av =
@@ -421,7 +422,7 @@ private static MethodVisitor instrumentAdviceLocals(
421422
AtomicInteger dataIndex = new AtomicInteger();
422423

423424
target =
424-
new MethodVisitor(Opcodes.ASM9, target) {
425+
new MethodVisitor(AsmApi.VERSION, target) {
425426
@Override
426427
public AnnotationVisitor visitParameterAnnotation(
427428
int parameter, String descriptor, boolean visible) {
@@ -738,7 +739,7 @@ private static Object getAnnotationValue(AnnotationNode annotationNode) {
738739

739740
private static MethodVisitor addReturnArray(
740741
TransformationContext context, MethodVisitor target, int returnArraySize) {
741-
return new MethodVisitor(Opcodes.ASM9, target) {
742+
return new MethodVisitor(AsmApi.VERSION, target) {
742743
@Override
743744
public void visitInsn(int opcode) {
744745
if (Opcodes.RETURN == opcode) {
@@ -777,7 +778,7 @@ public void visitInsn(int opcode) {
777778
* annotation to {@code 0}.
778779
*/
779780
private static MethodVisitor delegateAdvice(TransformationContext context, MethodVisitor target) {
780-
return new MethodVisitor(Opcodes.ASM9, target) {
781+
return new MethodVisitor(AsmApi.VERSION, target) {
781782
@Override
782783
public AnnotationVisitor visitAnnotation(String descriptor, boolean visible) {
783784
AnnotationVisitor av = super.visitAnnotation(descriptor, visible);
@@ -818,7 +819,7 @@ public void visitEnd() {
818819

819820
/** If annotation has {@code readOnly} attribute set it to {@code true}. */
820821
private static MethodVisitor makeReadOnly(Class<?> annotationType, MethodVisitor target) {
821-
return new MethodVisitor(Opcodes.ASM9, target) {
822+
return new MethodVisitor(AsmApi.VERSION, target) {
822823

823824
@Override
824825
public AnnotationVisitor visitParameterAnnotation(

muzzle/src/main/java/io/opentelemetry/javaagent/tooling/muzzle/ReferenceCollectingClassVisitor.java

+5-4
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import com.google.common.collect.EvictingQueue;
99
import io.opentelemetry.instrumentation.api.util.VirtualField;
10+
import io.opentelemetry.javaagent.extension.instrumentation.internal.AsmApi;
1011
import io.opentelemetry.javaagent.tooling.muzzle.references.ClassRef;
1112
import io.opentelemetry.javaagent.tooling.muzzle.references.ClassRefBuilder;
1213
import io.opentelemetry.javaagent.tooling.muzzle.references.Flag;
@@ -126,7 +127,7 @@ private static Type underlyingType(Type type) {
126127

127128
ReferenceCollectingClassVisitor(
128129
HelperClassPredicate helperClassPredicate, boolean isAdviceClass) {
129-
super(Opcodes.ASM7);
130+
super(AsmApi.VERSION);
130131
this.helperClassPredicate = helperClassPredicate;
131132
this.isAdviceClass = isAdviceClass;
132133
}
@@ -252,7 +253,7 @@ public MethodVisitor visitMethod(
252253
MethodVisitor methodVisitor =
253254
super.visitMethod(access, name, descriptor, signature, exceptions);
254255
MethodVisitor methodNode =
255-
new MethodNode(Opcodes.ASM9, access, name, descriptor, signature, exceptions) {
256+
new MethodNode(AsmApi.VERSION, access, name, descriptor, signature, exceptions) {
256257
@Override
257258
public void visitEnd() {
258259
super.visitEnd();
@@ -312,7 +313,7 @@ private class AdviceReferenceMethodVisitor extends MethodVisitor {
312313
private int currentLineNumber = -1;
313314

314315
public AdviceReferenceMethodVisitor(MethodVisitor methodVisitor) {
315-
super(Opcodes.ASM7, methodVisitor);
316+
super(AsmApi.VERSION, methodVisitor);
316317
}
317318

318319
@Override
@@ -526,7 +527,7 @@ private class VirtualFieldCollectingMethodVisitor extends MethodVisitor {
526527
private final EvictingQueue<Type> lastTwoClassConstants = EvictingQueue.create(2);
527528

528529
VirtualFieldCollectingMethodVisitor(MethodVisitor methodVisitor) {
529-
super(Opcodes.ASM7, methodVisitor);
530+
super(AsmApi.VERSION, methodVisitor);
530531
}
531532

532533
@Override

muzzle/src/main/java/io/opentelemetry/javaagent/tooling/muzzle/generation/MuzzleCodeGenerator.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import com.google.errorprone.annotations.CanIgnoreReturnValue;
1111
import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule;
1212
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
13+
import io.opentelemetry.javaagent.extension.instrumentation.internal.AsmApi;
1314
import io.opentelemetry.javaagent.tooling.muzzle.HelperResource;
1415
import io.opentelemetry.javaagent.tooling.muzzle.HelperResourceBuilderImpl;
1516
import io.opentelemetry.javaagent.tooling.muzzle.InstrumentationModuleMuzzle;
@@ -98,7 +99,7 @@ private static class GenerateMuzzleMethodsAndFields extends ClassVisitor {
9899
private boolean generateVirtualFieldsMethod = true;
99100

100101
public GenerateMuzzleMethodsAndFields(ClassVisitor classVisitor, URLClassLoader classLoader) {
101-
super(Opcodes.ASM7, classVisitor);
102+
super(AsmApi.VERSION, classVisitor);
102103
this.classLoader = classLoader;
103104
}
104105

0 commit comments

Comments
 (0)