2020import  org .objectweb .asm .ClassReader ;
2121import  org .objectweb .asm .ClassVisitor ;
2222import  org .objectweb .asm .ClassWriter ;
23- import  org .objectweb .asm .Label ;
2423import  org .objectweb .asm .MethodVisitor ;
2524import  org .objectweb .asm .Opcodes ;
2625import  org .objectweb .asm .Type ;
@@ -125,20 +124,6 @@ private void init() {
125124  private  void  instrumentInetAddress () {
126125    InetAddressClassFileTransformer  transformer  = new  InetAddressClassFileTransformer ();
127126    instrumentation .addTransformer (transformer , true );
128- 
129-     try  {
130-       Class <?> clazz  = Class .forName ("java.net.InetAddress" , false , null );
131-       if  (transformer .transformed ) {
132-         // InetAddress was loaded and got transformed 
133-         return ;
134-       }
135-       // InetAddress was already loaded before we set up transformer 
136-       instrumentation .retransformClasses (clazz );
137-     } catch  (ClassNotFoundException  | UnmodifiableClassException  ignore ) {
138-       // ignore 
139-     } finally  {
140-       instrumentation .removeTransformer (transformer );
141-     }
142127  }
143128
144129  @ SuppressWarnings ("SystemOut" )
@@ -209,56 +194,6 @@ public void visitCode() {
209194
210195  private  static  class  InetAddressClassFileTransformer  implements  ClassFileTransformer  {
211196    boolean  hookInserted  = false ;
212-     boolean  transformed  = false ;
213-     boolean  wrapperMethodCreated  = false ;
214- 
215-     private  static  void  createWrapperMethod (ClassWriter  cw ) {
216-       /* 
217-        private static boolean isAgentAndVmBooted(); 
218-        Code: 
219-           0: invokestatic  #X                 // Method io/opentelemetry/javaagent/bootstrap/AgentInitializer/isAgentStarted:()Z 
220-           3: ifeq          16 
221-           6: invokestatic  #Y                 // Method jdk/internal/misc/VM.isBooted:()Z 
222-           9: ifeq          16 
223-          12: iconst_1 
224-          13: goto          17 
225-          16: iconst_0 
226-          17: ireturn 
227-       */ 
228- 
229-       String  descriptor  = Type .getMethodDescriptor (Type .BOOLEAN_TYPE );
230-       Label  elseLabel  = new  Label ();
231-       Label  endLabel  = new  Label ();
232- 
233-       MethodVisitor  mv  =
234-           cw .visitMethod (
235-               Opcodes .ACC_PRIVATE  | Opcodes .ACC_STATIC ,
236-               "isAgentAndVmBooted" ,
237-               descriptor ,
238-               null ,
239-               null );
240-       mv .visitCode ();
241- 
242-       mv .visitMethodInsn (
243-           Opcodes .INVOKESTATIC ,
244-           Type .getInternalName (AgentInitializer .class ),
245-           "isAgentStarted" ,
246-           descriptor ,
247-           false );
248-       mv .visitJumpInsn (Opcodes .IFEQ , elseLabel );
249-       mv .visitMethodInsn (
250-           Opcodes .INVOKESTATIC , "jdk/internal/misc/VM" , "isBooted" , descriptor , false );
251-       mv .visitJumpInsn (Opcodes .IFEQ , elseLabel );
252-       mv .visitInsn (Opcodes .ICONST_1 );
253-       mv .visitJumpInsn (Opcodes .GOTO , endLabel );
254-       mv .visitLabel (elseLabel );
255-       mv .visitInsn (Opcodes .ICONST_0 );
256-       mv .visitLabel (endLabel );
257-       mv .visitInsn (Opcodes .IRETURN );
258- 
259-       mv .visitMaxs (0 , 0 );
260-       mv .visitEnd ();
261-     }
262197
263198    @ Override 
264199    public  byte [] transform (
@@ -270,17 +205,15 @@ public byte[] transform(
270205      if  (!"java/net/InetAddress" .equals (className )) {
271206        return  null ;
272207      }
273-       transformed  = true ;
274208      ClassReader  cr  = new  ClassReader (classfileBuffer );
275-       ClassWriter  cw  = new  ClassWriter (cr , ClassWriter . COMPUTE_MAXS  |  ClassWriter . COMPUTE_FRAMES );
209+       ClassWriter  cw  = new  ClassWriter (cr , 0 );
276210      ClassVisitor  cv  =
277211          new  ClassVisitor (AsmApi .VERSION , cw ) {
278212            @ Override 
279213            public  MethodVisitor  visitMethod (
280214                int  access , String  name , String  descriptor , String  signature , String [] exceptions ) {
281215              MethodVisitor  mv  = super .visitMethod (access , name , descriptor , signature , exceptions );
282-               // We don't want to patch "jdk.internal.misc.VM.isBooted" call in our wrapper 
283-               if  ("isAgentAndVmBooted" .equals (name )) {
216+               if  (!"resolver" .equals (name )) {
284217                return  mv ;
285218              }
286219              return  new  MethodVisitor (api , mv ) {
@@ -291,23 +224,17 @@ public void visitMethodInsn(
291224                    String  methodName ,
292225                    String  descriptor ,
293226                    boolean  isInterface ) {
227+                   super .visitMethodInsn (
228+                       opcode , ownerClassName , methodName , descriptor , isInterface );
294229                  if  ("jdk/internal/misc/VM" .equals (ownerClassName )
295230                      && "isBooted" .equals (methodName )) {
296-                     // Create wrapper method only once 
297-                     if  (!wrapperMethodCreated ) {
298-                       createWrapperMethod (cw );
299-                       wrapperMethodCreated  = true ;
300-                     }
301231                    super .visitMethodInsn (
302232                        Opcodes .INVOKESTATIC ,
303-                         "java/net/InetAddress" ,
304-                         "isAgentAndVmBooted " ,
305-                         "()Z" ,
306-                         isInterface );
233+                         Type . getInternalName ( AgentInitializer . class ) ,
234+                         "isAgentStarted " ,
235+                         "(Z )Z" ,
236+                         false );
307237                    hookInserted  = true ;
308-                   } else  {
309-                     super .visitMethodInsn (
310-                         opcode , ownerClassName , methodName , descriptor , isInterface );
311238                  }
312239                }
313240              };
0 commit comments