ClassVisitor не предоставляет приватные методы с содержимым лямбда-выражения - PullRequest
0 голосов
/ 07 ноября 2018

Этот ClassVisitor никогда не показывает сгенерированные частные методы, которые содержат содержимое лямбда-выражений.

ClassVisitor используется следующим образом (я обрезал функцию, я просто хочу знать, почему ClassVisitor не посещает private void lambda, он работает с другими методами, такими как charm).

ClassReader classReader = new ClassReader(className);
ClassWriter classWriter = new ClassWriter(4);

CustomClassVisitor customClassVisitor = new CustomClassVisitor(classWriter);

classReader.accept(customClassVisitor,0);

modifiedClass = classWriter.toByteArray();

ClassVisitor:

import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.MethodVisitor;

import static org.objectweb.asm.Opcodes.ASM7;

public class CustomClassVisitor extends ClassVisitor {

    public CustomClassVisitor(ClassWriter classWriter) {

        super(ASM7, classWriter);
    }

    public MethodVisitor visitMethod(
            int access,
            String name,
            String desc,
            String signature,
            String[] exceptions) {

            final MethodVisitor methodVisitor = cv.visitMethod(access, name, desc, signature, exceptions);

            return methodVisitor;       
    }
}

Они в байт-коде:

  private void lambda$main$0(java.lang.Integer) 
    descriptor: (Ljava/lang/Integer;)V
    flags: (0x1002) ACC_PRIVATE, ACC_SYNTHETIC
    Code:
      stack=3, locals=2, args_size=2
         0: aload_0
         1: bipush        100
         3: aload_1
         4: invokevirtual #11                 // Method java/lang/Integer.intValue:()I
         7: invokevirtual #4                  // Method wait:(II)V
        10: return
      LineNumberTable:
        line 45: 0
        line 46: 10
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
            0      11     0  this   Lorg/Lambda;
            0      11     1  elem   Ljava/lang/Integer;

Как я могу увидеть этот метод в ASM ClassVisitor? Есть ли дополнительный параметр? ClassWriter находится в режиме 4.

...