public final class com.oracle.truffle.dsl.processor.AnnotationProcessor<M extends com.oracle.truffle.dsl.processor.model.Template>
  minor version: 0
  major version: 59
  flags: flags: (0x0031) ACC_PUBLIC, ACC_FINAL, ACC_SUPER
  this_class: com.oracle.truffle.dsl.processor.AnnotationProcessor
  super_class: java.lang.Object
{
  private final com.oracle.truffle.dsl.processor.parser.AbstractParser<M> parser;
    descriptor: Lcom/oracle/truffle/dsl/processor/parser/AbstractParser;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Lcom/oracle/truffle/dsl/processor/parser/AbstractParser<TM;>;

  private final com.oracle.truffle.dsl.processor.generator.CodeTypeElementFactory<M> factory;
    descriptor: Lcom/oracle/truffle/dsl/processor/generator/CodeTypeElementFactory;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Lcom/oracle/truffle/dsl/processor/generator/CodeTypeElementFactory<TM;>;

  private final java.util.Set<java.lang.String> processedElements;
    descriptor: Ljava/util/Set;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/Set<Ljava/lang/String;>;

  private final java.util.Map<java.lang.String, java.util.Map<java.lang.String, javax.lang.model.element.Element>> serviceRegistrations;
    descriptor: Ljava/util/Map;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/Map<Ljava/lang/String;Ljava/util/Map<Ljava/lang/String;Ljavax/lang/model/element/Element;>;>;

  void <init>(com.oracle.truffle.dsl.processor.parser.AbstractParser<M>, com.oracle.truffle.dsl.processor.generator.CodeTypeElementFactory<M>);
    descriptor: (Lcom/oracle/truffle/dsl/processor/parser/AbstractParser;Lcom/oracle/truffle/dsl/processor/generator/CodeTypeElementFactory;)V
    flags: (0x0000) 
    Code:
      stack=3, locals=3, args_size=3
        start local 0 // com.oracle.truffle.dsl.processor.AnnotationProcessor this
        start local 1 // com.oracle.truffle.dsl.processor.parser.AbstractParser parser
        start local 2 // com.oracle.truffle.dsl.processor.generator.CodeTypeElementFactory factory
         0: .line 73
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 70
            aload 0 /* this */
            new java.util.HashSet
            dup
            invokespecial java.util.HashSet.<init>:()V
            putfield com.oracle.truffle.dsl.processor.AnnotationProcessor.processedElements:Ljava/util/Set;
         2: .line 71
            aload 0 /* this */
            new java.util.LinkedHashMap
            dup
            invokespecial java.util.LinkedHashMap.<init>:()V
            putfield com.oracle.truffle.dsl.processor.AnnotationProcessor.serviceRegistrations:Ljava/util/Map;
         3: .line 74
            aload 0 /* this */
            aload 1 /* parser */
            putfield com.oracle.truffle.dsl.processor.AnnotationProcessor.parser:Lcom/oracle/truffle/dsl/processor/parser/AbstractParser;
         4: .line 75
            aload 0 /* this */
            aload 2 /* factory */
            putfield com.oracle.truffle.dsl.processor.AnnotationProcessor.factory:Lcom/oracle/truffle/dsl/processor/generator/CodeTypeElementFactory;
         5: .line 76
            return
        end local 2 // com.oracle.truffle.dsl.processor.generator.CodeTypeElementFactory factory
        end local 1 // com.oracle.truffle.dsl.processor.parser.AbstractParser parser
        end local 0 // com.oracle.truffle.dsl.processor.AnnotationProcessor this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    6     0     this  Lcom/oracle/truffle/dsl/processor/AnnotationProcessor<TM;>;
            0    6     1   parser  Lcom/oracle/truffle/dsl/processor/parser/AbstractParser<TM;>;
            0    6     2  factory  Lcom/oracle/truffle/dsl/processor/generator/CodeTypeElementFactory<TM;>;
    Signature: (Lcom/oracle/truffle/dsl/processor/parser/AbstractParser<TM;>;Lcom/oracle/truffle/dsl/processor/generator/CodeTypeElementFactory<TM;>;)V
    MethodParameters:
         Name  Flags
      parser   
      factory  

  public com.oracle.truffle.dsl.processor.parser.AbstractParser<M> getParser();
    descriptor: ()Lcom/oracle/truffle/dsl/processor/parser/AbstractParser;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.oracle.truffle.dsl.processor.AnnotationProcessor this
         0: .line 79
            aload 0 /* this */
            getfield com.oracle.truffle.dsl.processor.AnnotationProcessor.parser:Lcom/oracle/truffle/dsl/processor/parser/AbstractParser;
            areturn
        end local 0 // com.oracle.truffle.dsl.processor.AnnotationProcessor this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/oracle/truffle/dsl/processor/AnnotationProcessor<TM;>;
    Signature: ()Lcom/oracle/truffle/dsl/processor/parser/AbstractParser<TM;>;

  public java.util.Map<java.lang.String, java.util.Map<java.lang.String, javax.lang.model.element.Element>> getServiceRegistrations();
    descriptor: ()Ljava/util/Map;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.oracle.truffle.dsl.processor.AnnotationProcessor this
         0: .line 83
            aload 0 /* this */
            getfield com.oracle.truffle.dsl.processor.AnnotationProcessor.serviceRegistrations:Ljava/util/Map;
            areturn
        end local 0 // com.oracle.truffle.dsl.processor.AnnotationProcessor this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/oracle/truffle/dsl/processor/AnnotationProcessor<TM;>;
    Signature: ()Ljava/util/Map<Ljava/lang/String;Ljava/util/Map<Ljava/lang/String;Ljavax/lang/model/element/Element;>;>;

  public void registerService(java.lang.String, java.lang.String, javax.lang.model.element.Element);
    descriptor: (Ljava/lang/String;Ljava/lang/String;Ljavax/lang/model/element/Element;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=5, args_size=4
        start local 0 // com.oracle.truffle.dsl.processor.AnnotationProcessor this
        start local 1 // java.lang.String serviceBinaryName
        start local 2 // java.lang.String implBinaryName
        start local 3 // javax.lang.model.element.Element sourceElement
         0: .line 87
            aload 3 /* sourceElement */
            instanceof com.oracle.truffle.dsl.processor.java.model.GeneratedElement
            ifeq 2
         1: .line 88
            new java.lang.IllegalArgumentException
            dup
            ldc "Service source element must not be generated."
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
         2: .line 90
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.oracle.truffle.dsl.processor.AnnotationProcessor.serviceRegistrations:Ljava/util/Map;
            aload 1 /* serviceBinaryName */
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.util.Map
            astore 4 /* services */
        start local 4 // java.util.Map services
         3: .line 91
            aload 4 /* services */
            ifnonnull 6
         4: .line 92
            new java.util.LinkedHashMap
            dup
            invokespecial java.util.LinkedHashMap.<init>:()V
            astore 4 /* services */
         5: .line 93
            aload 0 /* this */
            getfield com.oracle.truffle.dsl.processor.AnnotationProcessor.serviceRegistrations:Ljava/util/Map;
            aload 1 /* serviceBinaryName */
            aload 4 /* services */
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         6: .line 95
      StackMap locals: java.util.Map
      StackMap stack:
            aload 4 /* services */
            aload 2 /* implBinaryName */
            aload 3 /* sourceElement */
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         7: .line 96
            return
        end local 4 // java.util.Map services
        end local 3 // javax.lang.model.element.Element sourceElement
        end local 2 // java.lang.String implBinaryName
        end local 1 // java.lang.String serviceBinaryName
        end local 0 // com.oracle.truffle.dsl.processor.AnnotationProcessor this
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0    8     0               this  Lcom/oracle/truffle/dsl/processor/AnnotationProcessor<TM;>;
            0    8     1  serviceBinaryName  Ljava/lang/String;
            0    8     2     implBinaryName  Ljava/lang/String;
            0    8     3      sourceElement  Ljavax/lang/model/element/Element;
            3    8     4           services  Ljava/util/Map<Ljava/lang/String;Ljavax/lang/model/element/Element;>;
    MethodParameters:
                   Name  Flags
      serviceBinaryName  
      implBinaryName     
      sourceElement      

  public void process(javax.lang.model.element.Element, boolean);
    descriptor: (Ljavax/lang/model/element/Element;Z)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=4, args_size=3
        start local 0 // com.oracle.truffle.dsl.processor.AnnotationProcessor this
        start local 1 // javax.lang.model.element.Element element
        start local 2 // boolean callback
         0: .line 101
            iload 2 /* callback */
            ifne 5
         1: .line 102
            aload 1 /* element */
            checkcast javax.lang.model.element.TypeElement
            invokestatic com.oracle.truffle.dsl.processor.java.ElementUtils.getQualifiedName:(Ljavax/lang/model/element/TypeElement;)Ljava/lang/String;
            astore 3 /* qualifiedName */
        start local 3 // java.lang.String qualifiedName
         2: .line 103
            aload 0 /* this */
            getfield com.oracle.truffle.dsl.processor.AnnotationProcessor.processedElements:Ljava/util/Set;
            aload 3 /* qualifiedName */
            invokeinterface java.util.Set.contains:(Ljava/lang/Object;)Z
            ifeq 4
         3: .line 104
            return
         4: .line 106
      StackMap locals: java.lang.String
      StackMap stack:
            aload 0 /* this */
            getfield com.oracle.truffle.dsl.processor.AnnotationProcessor.processedElements:Ljava/util/Set;
            aload 3 /* qualifiedName */
            invokeinterface java.util.Set.add:(Ljava/lang/Object;)Z
            pop
        end local 3 // java.lang.String qualifiedName
         5: .line 109
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* element */
            iload 2 /* callback */
            invokevirtual com.oracle.truffle.dsl.processor.AnnotationProcessor.processImpl:(Ljavax/lang/model/element/Element;Z)V
         6: .line 110
            return
        end local 2 // boolean callback
        end local 1 // javax.lang.model.element.Element element
        end local 0 // com.oracle.truffle.dsl.processor.AnnotationProcessor this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    7     0           this  Lcom/oracle/truffle/dsl/processor/AnnotationProcessor<TM;>;
            0    7     1        element  Ljavax/lang/model/element/Element;
            0    7     2       callback  Z
            2    5     3  qualifiedName  Ljava/lang/String;
    MethodParameters:
          Name  Flags
      element   
      callback  

  private void processImpl(javax.lang.model.element.Element, boolean);
    descriptor: (Ljavax/lang/model/element/Element;Z)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=7, locals=11, args_size=3
        start local 0 // com.oracle.truffle.dsl.processor.AnnotationProcessor this
        start local 1 // javax.lang.model.element.Element element
        start local 2 // boolean callback
         0: .line 114
            invokestatic com.oracle.truffle.dsl.processor.ProcessorContext.getInstance:()Lcom/oracle/truffle/dsl/processor/ProcessorContext;
            astore 3 /* context */
        start local 3 // com.oracle.truffle.dsl.processor.ProcessorContext context
         1: .line 115
            aload 1 /* element */
            checkcast javax.lang.model.element.TypeElement
            astore 4 /* type */
        start local 4 // javax.lang.model.element.TypeElement type
         2: .line 117
            aload 3 /* context */
            aload 4 /* type */
            invokeinterface javax.lang.model.element.TypeElement.asType:()Ljavax/lang/model/type/TypeMirror;
            iconst_0
            invokevirtual com.oracle.truffle.dsl.processor.ProcessorContext.getTemplate:(Ljavax/lang/model/type/TypeMirror;Z)Lcom/oracle/truffle/dsl/processor/model/Template;
            astore 5 /* model */
        start local 5 // com.oracle.truffle.dsl.processor.model.Template model
         3: .line 118
            aload 3 /* context */
            aload 4 /* type */
            invokevirtual com.oracle.truffle.dsl.processor.ProcessorContext.containsTemplate:(Ljavax/lang/model/element/TypeElement;)Z
            ifeq 4
            iconst_0
            goto 5
      StackMap locals: com.oracle.truffle.dsl.processor.ProcessorContext javax.lang.model.element.TypeElement com.oracle.truffle.dsl.processor.model.Template
      StackMap stack:
         4: iconst_1
      StackMap locals:
      StackMap stack: int
         5: istore 6 /* firstRun */
        start local 6 // boolean firstRun
         6: .line 120
            iload 6 /* firstRun */
            ifne 7
            iload 2 /* callback */
            ifne 29
         7: .line 121
      StackMap locals: int
      StackMap stack:
            aload 3 /* context */
            aload 4 /* type */
            aconst_null
            invokevirtual com.oracle.truffle.dsl.processor.ProcessorContext.registerTemplate:(Ljavax/lang/model/element/TypeElement;Lcom/oracle/truffle/dsl/processor/model/Template;)V
         8: .line 122
            aload 0 /* this */
            getfield com.oracle.truffle.dsl.processor.AnnotationProcessor.parser:Lcom/oracle/truffle/dsl/processor/parser/AbstractParser;
            aload 1 /* element */
            invokevirtual com.oracle.truffle.dsl.processor.parser.AbstractParser.parse:(Ljavax/lang/model/element/Element;)Lcom/oracle/truffle/dsl/processor/model/MessageContainer;
            checkcast com.oracle.truffle.dsl.processor.model.Template
            astore 5 /* model */
         9: .line 123
            aload 3 /* context */
            aload 4 /* type */
            aload 5 /* model */
            invokevirtual com.oracle.truffle.dsl.processor.ProcessorContext.registerTemplate:(Ljavax/lang/model/element/TypeElement;Lcom/oracle/truffle/dsl/processor/model/Template;)V
        10: .line 125
            aload 5 /* model */
            ifnull 29
        11: .line 128
            aload 0 /* this */
            getfield com.oracle.truffle.dsl.processor.AnnotationProcessor.factory:Lcom/oracle/truffle/dsl/processor/generator/CodeTypeElementFactory;
            invokestatic com.oracle.truffle.dsl.processor.ProcessorContext.getInstance:()Lcom/oracle/truffle/dsl/processor/ProcessorContext;
            aload 0 /* this */
            aload 5 /* model */
            invokevirtual com.oracle.truffle.dsl.processor.generator.CodeTypeElementFactory.create:(Lcom/oracle/truffle/dsl/processor/ProcessorContext;Lcom/oracle/truffle/dsl/processor/AnnotationProcessor;Ljava/lang/Object;)Ljava/util/List;
            astore 7 /* units */
        start local 7 // java.util.List units
        12: .line 129
            goto 17
        end local 7 // java.util.List units
      StackMap locals:
      StackMap stack: java.lang.Throwable
        13: astore 8 /* e */
        start local 8 // java.lang.Throwable e
        14: .line 130
            new java.lang.RuntimeException
            dup
            ldc "Failed to write code for %s."
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 4 /* type */
            invokestatic com.oracle.truffle.dsl.processor.java.ElementUtils.getQualifiedName:(Ljavax/lang/model/element/TypeElement;)Ljava/lang/String;
            aastore
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/String;)V
            astore 9 /* ex */
        start local 9 // java.lang.RuntimeException ex
        15: .line 131
            aload 8 /* e */
            aload 9 /* ex */
            invokevirtual java.lang.Throwable.addSuppressed:(Ljava/lang/Throwable;)V
        16: .line 132
            aload 8 /* e */
            athrow
        end local 9 // java.lang.RuntimeException ex
        end local 8 // java.lang.Throwable e
        start local 7 // java.util.List units
        17: .line 134
      StackMap locals: java.util.List
      StackMap stack:
            aload 7 /* units */
            ifnull 18
            aload 7 /* units */
            invokeinterface java.util.List.isEmpty:()Z
            ifeq 19
        18: .line 135
      StackMap locals:
      StackMap stack:
            return
        19: .line 137
      StackMap locals:
      StackMap stack:
            aload 7 /* units */
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 9
            goto 28
      StackMap locals: com.oracle.truffle.dsl.processor.AnnotationProcessor javax.lang.model.element.Element int com.oracle.truffle.dsl.processor.ProcessorContext javax.lang.model.element.TypeElement com.oracle.truffle.dsl.processor.model.Template int java.util.List top java.util.Iterator
      StackMap stack:
        20: aload 9
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast com.oracle.truffle.dsl.processor.java.model.CodeTypeElement
            astore 8 /* unit */
        start local 8 // com.oracle.truffle.dsl.processor.java.model.CodeTypeElement unit
        21: .line 138
            aload 8 /* unit */
            aload 5 /* model */
            invokevirtual com.oracle.truffle.dsl.processor.model.Template.getTemplateTypeAnnotation:()Ljavax/lang/model/element/AnnotationMirror;
            invokevirtual com.oracle.truffle.dsl.processor.java.model.CodeTypeElement.setGeneratorAnnotationMirror:(Ljavax/lang/model/element/AnnotationMirror;)V
        22: .line 139
            aload 8 /* unit */
            aload 5 /* model */
            invokevirtual com.oracle.truffle.dsl.processor.model.Template.getTemplateType:()Ljavax/lang/model/element/TypeElement;
            invokevirtual com.oracle.truffle.dsl.processor.java.model.CodeTypeElement.setGeneratorElement:(Ljavax/lang/model/element/Element;)V
        23: .line 141
            aload 3 /* context */
            ldc Ljava/lang/Override;
            invokevirtual com.oracle.truffle.dsl.processor.ProcessorContext.getType:(Ljava/lang/Class;)Ljavax/lang/model/type/TypeMirror;
            checkcast javax.lang.model.type.DeclaredType
            astore 10 /* overrideType */
        start local 10 // javax.lang.model.type.DeclaredType overrideType
        24: .line 142
            aload 8 /* unit */
            new com.oracle.truffle.dsl.processor.java.transform.GenerateOverrideVisitor
            dup
            aload 10 /* overrideType */
            invokespecial com.oracle.truffle.dsl.processor.java.transform.GenerateOverrideVisitor.<init>:(Ljavax/lang/model/type/DeclaredType;)V
            aconst_null
            invokevirtual com.oracle.truffle.dsl.processor.java.model.CodeTypeElement.accept:(Ljavax/lang/model/element/ElementVisitor;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        25: .line 143
            aload 8 /* unit */
            new com.oracle.truffle.dsl.processor.java.transform.FixWarningsVisitor
            dup
            aload 5 /* model */
            invokevirtual com.oracle.truffle.dsl.processor.model.Template.getTemplateType:()Ljavax/lang/model/element/TypeElement;
            aload 10 /* overrideType */
            invokespecial com.oracle.truffle.dsl.processor.java.transform.FixWarningsVisitor.<init>:(Ljavax/lang/model/element/Element;Ljavax/lang/model/type/DeclaredType;)V
            aconst_null
            invokevirtual com.oracle.truffle.dsl.processor.java.model.CodeTypeElement.accept:(Ljavax/lang/model/element/ElementVisitor;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        26: .line 145
            iload 2 /* callback */
            ifne 28
        27: .line 146
            aload 8 /* unit */
            new com.oracle.truffle.dsl.processor.CodeWriter
            dup
            aload 3 /* context */
            invokevirtual com.oracle.truffle.dsl.processor.ProcessorContext.getEnvironment:()Ljavax/annotation/processing/ProcessingEnvironment;
            aload 1 /* element */
            invokespecial com.oracle.truffle.dsl.processor.CodeWriter.<init>:(Ljavax/annotation/processing/ProcessingEnvironment;Ljavax/lang/model/element/Element;)V
            aconst_null
            invokevirtual com.oracle.truffle.dsl.processor.java.model.CodeTypeElement.accept:(Ljavax/lang/model/element/ElementVisitor;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        end local 10 // javax.lang.model.type.DeclaredType overrideType
        end local 8 // com.oracle.truffle.dsl.processor.java.model.CodeTypeElement unit
        28: .line 137
      StackMap locals:
      StackMap stack:
            aload 9
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 20
        end local 7 // java.util.List units
        29: .line 151
      StackMap locals: com.oracle.truffle.dsl.processor.AnnotationProcessor javax.lang.model.element.Element int com.oracle.truffle.dsl.processor.ProcessorContext javax.lang.model.element.TypeElement com.oracle.truffle.dsl.processor.model.Template int
      StackMap stack:
            return
        end local 6 // boolean firstRun
        end local 5 // com.oracle.truffle.dsl.processor.model.Template model
        end local 4 // javax.lang.model.element.TypeElement type
        end local 3 // com.oracle.truffle.dsl.processor.ProcessorContext context
        end local 2 // boolean callback
        end local 1 // javax.lang.model.element.Element element
        end local 0 // com.oracle.truffle.dsl.processor.AnnotationProcessor this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   30     0          this  Lcom/oracle/truffle/dsl/processor/AnnotationProcessor<TM;>;
            0   30     1       element  Ljavax/lang/model/element/Element;
            0   30     2      callback  Z
            1   30     3       context  Lcom/oracle/truffle/dsl/processor/ProcessorContext;
            2   30     4          type  Ljavax/lang/model/element/TypeElement;
            3   30     5         model  TM;
            6   30     6      firstRun  Z
           12   13     7         units  Ljava/util/List<Lcom/oracle/truffle/dsl/processor/java/model/CodeTypeElement;>;
           17   29     7         units  Ljava/util/List<Lcom/oracle/truffle/dsl/processor/java/model/CodeTypeElement;>;
           14   17     8             e  Ljava/lang/Throwable;
           15   17     9            ex  Ljava/lang/RuntimeException;
           21   28     8          unit  Lcom/oracle/truffle/dsl/processor/java/model/CodeTypeElement;
           24   28    10  overrideType  Ljavax/lang/model/type/DeclaredType;
      Exception table:
        from    to  target  type
          11    12      13  Class java.lang.Throwable
    MethodParameters:
          Name  Flags
      element   
      callback  
}
Signature: <M:Lcom/oracle/truffle/dsl/processor/model/Template;>Ljava/lang/Object;
SourceFile: "AnnotationProcessor.java"