Class SyntheticParameterClassVisitor

java.lang.Object
org.objectweb.asm.ClassVisitor
net.fabricmc.loom.util.SyntheticParameterClassVisitor

public class SyntheticParameterClassVisitor extends org.objectweb.asm.ClassVisitor
ProGuard has a bug where parameter annotations are applied incorrectly in the presence of synthetic arguments. This causes javac to balk when trying to load affected classes.

We use several heuristics to guess what the synthetic arguments may be for a particular constructor. We then check if the constructor matches our guess, and if so, offset all parameter annotations.

  • Field Summary

    Fields inherited from class org.objectweb.asm.ClassVisitor

    api, cv
  • Constructor Summary

    Constructors
    Constructor
    Description
    SyntheticParameterClassVisitor(int api, org.objectweb.asm.ClassVisitor cv)
     
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    visit(int version, int access, String name, String signature, String superName, String[] interfaces)
     
    void
    visitInnerClass(String name, String outerName, String innerName, int access)
     
    org.objectweb.asm.MethodVisitor
    visitMethod(int access, String name, String descriptor, String signature, String[] exceptions)
     

    Methods inherited from class org.objectweb.asm.ClassVisitor

    getDelegate, visitAnnotation, visitAttribute, visitEnd, visitField, visitModule, visitNestHost, visitNestMember, visitOuterClass, visitPermittedSubclass, visitRecordComponent, visitSource, visitTypeAnnotation

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • SyntheticParameterClassVisitor

      public SyntheticParameterClassVisitor(int api, org.objectweb.asm.ClassVisitor cv)
  • Method Details

    • visit

      public void visit(int version, int access, String name, String signature, String superName, String[] interfaces)
      Overrides:
      visit in class org.objectweb.asm.ClassVisitor
    • visitInnerClass

      public void visitInnerClass(String name, String outerName, String innerName, int access)
      Overrides:
      visitInnerClass in class org.objectweb.asm.ClassVisitor
    • visitMethod

      public org.objectweb.asm.MethodVisitor visitMethod(int access, String name, String descriptor, String signature, String[] exceptions)
      Overrides:
      visitMethod in class org.objectweb.asm.ClassVisitor