final class com.oracle.truffle.polyglot.InstrumentCache$ServicesLoader extends com.oracle.truffle.polyglot.InstrumentCache$Loader
  minor version: 0
  major version: 59
  flags: flags: (0x0030) ACC_FINAL, ACC_SUPER
  this_class: com.oracle.truffle.polyglot.InstrumentCache$ServicesLoader
  super_class: com.oracle.truffle.polyglot.InstrumentCache$Loader
{
  static final com.oracle.truffle.polyglot.InstrumentCache$Loader INSTANCE;
    descriptor: Lcom/oracle/truffle/polyglot/InstrumentCache$Loader;
    flags: (0x0018) ACC_STATIC, ACC_FINAL

  private static final java.lang.String DEBUGGER_CLASS;
    descriptor: Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: "com.oracle.truffle.api.debug.impl.DebuggerInstrument"

  private static final java.lang.String DEBUGGER_PROVIDER;
    descriptor: Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: "com.oracle.truffle.api.debug.impl.DebuggerInstrumentProvider"

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=2, locals=0, args_size=0
         0: .line 355
            new com.oracle.truffle.polyglot.InstrumentCache$ServicesLoader
            dup
            invokespecial com.oracle.truffle.polyglot.InstrumentCache$ServicesLoader.<init>:()V
            putstatic com.oracle.truffle.polyglot.InstrumentCache$ServicesLoader.INSTANCE:Lcom/oracle/truffle/polyglot/InstrumentCache$Loader;
         1: .line 357
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  private void <init>();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.oracle.truffle.polyglot.InstrumentCache$ServicesLoader this
         0: .line 359
            aload 0 /* this */
            invokespecial com.oracle.truffle.polyglot.InstrumentCache$Loader.<init>:()V
         1: .line 360
            return
        end local 0 // com.oracle.truffle.polyglot.InstrumentCache$ServicesLoader this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lcom/oracle/truffle/polyglot/InstrumentCache$ServicesLoader;

  void loadImpl(java.lang.ClassLoader, java.util.List<? super com.oracle.truffle.polyglot.InstrumentCache>, java.util.Set<? super java.lang.String>);
    descriptor: (Ljava/lang/ClassLoader;Ljava/util/List;Ljava/util/Set;)V
    flags: (0x0000) 
    Code:
      stack=3, locals=6, args_size=4
        start local 0 // com.oracle.truffle.polyglot.InstrumentCache$ServicesLoader this
        start local 1 // java.lang.ClassLoader loader
        start local 2 // java.util.List list
        start local 3 // java.util.Set classNamesUsed
         0: .line 364
            aload 1 /* loader */
            invokestatic com.oracle.truffle.polyglot.InstrumentCache$ServicesLoader.exportTruffle:(Ljava/lang/ClassLoader;)V
         1: .line 365
            ldc Lcom/oracle/truffle/api/instrumentation/TruffleInstrument$Provider;
            aload 1 /* loader */
            invokestatic java.util.ServiceLoader.load:(Ljava/lang/Class;Ljava/lang/ClassLoader;)Ljava/util/ServiceLoader;
            invokevirtual java.util.ServiceLoader.iterator:()Ljava/util/Iterator;
            astore 5
            goto 4
      StackMap locals: com.oracle.truffle.polyglot.InstrumentCache$ServicesLoader java.lang.ClassLoader java.util.List java.util.Set top java.util.Iterator
      StackMap stack:
         2: aload 5
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast com.oracle.truffle.api.instrumentation.TruffleInstrument$Provider
            astore 4 /* provider */
        start local 4 // com.oracle.truffle.api.instrumentation.TruffleInstrument$Provider provider
         3: .line 366
            aload 4 /* provider */
            aload 2 /* list */
            aload 3 /* classNamesUsed */
            invokestatic com.oracle.truffle.polyglot.InstrumentCache$ServicesLoader.loadInstrumentImpl:(Lcom/oracle/truffle/api/instrumentation/TruffleInstrument$Provider;Ljava/util/List;Ljava/util/Set;)V
        end local 4 // com.oracle.truffle.api.instrumentation.TruffleInstrument$Provider provider
         4: .line 365
      StackMap locals:
      StackMap stack:
            aload 5
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 2
         5: .line 379
            aload 3 /* classNamesUsed */
            ldc "com.oracle.truffle.api.debug.impl.DebuggerInstrument"
            invokeinterface java.util.Set.contains:(Ljava/lang/Object;)Z
            ifne 12
         6: .line 381
            aload 1 /* loader */
            ldc "com.oracle.truffle.api.debug.impl.DebuggerInstrumentProvider"
            invokevirtual java.lang.ClassLoader.loadClass:(Ljava/lang/String;)Ljava/lang/Class;
            iconst_0
            anewarray java.lang.Class
            invokevirtual java.lang.Class.getConstructor:([Ljava/lang/Class;)Ljava/lang/reflect/Constructor;
            iconst_0
            anewarray java.lang.Object
            invokevirtual java.lang.reflect.Constructor.newInstance:([Ljava/lang/Object;)Ljava/lang/Object;
            checkcast com.oracle.truffle.api.instrumentation.TruffleInstrument$Provider
            aload 2 /* list */
         7: .line 382
            aload 3 /* classNamesUsed */
         8: .line 381
            invokestatic com.oracle.truffle.polyglot.InstrumentCache$ServicesLoader.loadInstrumentImpl:(Lcom/oracle/truffle/api/instrumentation/TruffleInstrument$Provider;Ljava/util/List;Ljava/util/Set;)V
         9: .line 383
            goto 12
      StackMap locals: com.oracle.truffle.polyglot.InstrumentCache$ServicesLoader java.lang.ClassLoader java.util.List java.util.Set
      StackMap stack: java.lang.Exception
        10: astore 4 /* e */
        start local 4 // java.lang.Exception e
        11: .line 384
            ldc "Failed to discover debugger instrument."
            aload 4 /* e */
            invokestatic com.oracle.truffle.api.CompilerDirectives.shouldNotReachHere:(Ljava/lang/String;Ljava/lang/Throwable;)Ljava/lang/RuntimeException;
            athrow
        end local 4 // java.lang.Exception e
        12: .line 387
      StackMap locals:
      StackMap stack:
            return
        end local 3 // java.util.Set classNamesUsed
        end local 2 // java.util.List list
        end local 1 // java.lang.ClassLoader loader
        end local 0 // com.oracle.truffle.polyglot.InstrumentCache$ServicesLoader this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0   13     0            this  Lcom/oracle/truffle/polyglot/InstrumentCache$ServicesLoader;
            0   13     1          loader  Ljava/lang/ClassLoader;
            0   13     2            list  Ljava/util/List<-Lcom/oracle/truffle/polyglot/InstrumentCache;>;
            0   13     3  classNamesUsed  Ljava/util/Set<-Ljava/lang/String;>;
            3    4     4        provider  Lcom/oracle/truffle/api/instrumentation/TruffleInstrument$Provider;
           11   12     4               e  Ljava/lang/Exception;
      Exception table:
        from    to  target  type
           6     9      10  Class java.lang.Exception
    Signature: (Ljava/lang/ClassLoader;Ljava/util/List<-Lcom/oracle/truffle/polyglot/InstrumentCache;>;Ljava/util/Set<-Ljava/lang/String;>;)V
    MethodParameters:
                Name  Flags
      loader          
      list            
      classNamesUsed  

  static void loadInstrumentImpl(com.oracle.truffle.api.instrumentation.TruffleInstrument$Provider, java.util.List<? super com.oracle.truffle.polyglot.InstrumentCache>, java.util.Set<? super java.lang.String>);
    descriptor: (Lcom/oracle/truffle/api/instrumentation/TruffleInstrument$Provider;Ljava/util/List;Ljava/util/Set;)V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=10, locals=12, args_size=3
        start local 0 // com.oracle.truffle.api.instrumentation.TruffleInstrument$Provider provider
        start local 1 // java.util.List list
        start local 2 // java.util.Set classNamesUsed
         0: .line 390
            aload 0 /* provider */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            ldc Lcom/oracle/truffle/api/instrumentation/TruffleInstrument$Registration;
            invokevirtual java.lang.Class.getAnnotation:(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;
            checkcast com.oracle.truffle.api.instrumentation.TruffleInstrument$Registration
            astore 3 /* reg */
        start local 3 // com.oracle.truffle.api.instrumentation.TruffleInstrument$Registration reg
         1: .line 391
            aload 3 /* reg */
            ifnonnull 5
         2: .line 392
            getstatic java.lang.System.err:Ljava/io/PrintStream;
            astore 4 /* out */
        start local 4 // java.io.PrintStream out
         3: .line 393
            aload 4 /* out */
            new java.lang.StringBuilder
            dup
            ldc "Provider "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 0 /* provider */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            ldc " is missing @Registration annotation."
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokevirtual java.io.PrintStream.println:(Ljava/lang/String;)V
         4: .line 394
            return
        end local 4 // java.io.PrintStream out
         5: .line 396
      StackMap locals: com.oracle.truffle.api.instrumentation.TruffleInstrument$Registration
      StackMap stack:
            aload 0 /* provider */
            invokeinterface com.oracle.truffle.api.instrumentation.TruffleInstrument$Provider.getInstrumentClassName:()Ljava/lang/String;
            astore 4 /* className */
        start local 4 // java.lang.String className
         6: .line 397
            aload 3 /* reg */
            invokeinterface com.oracle.truffle.api.instrumentation.TruffleInstrument$Registration.name:()Ljava/lang/String;
            astore 5 /* name */
        start local 5 // java.lang.String name
         7: .line 398
            aload 3 /* reg */
            invokeinterface com.oracle.truffle.api.instrumentation.TruffleInstrument$Registration.id:()Ljava/lang/String;
            astore 6 /* id */
        start local 6 // java.lang.String id
         8: .line 399
            aload 6 /* id */
            ifnull 9
            aload 6 /* id */
            invokevirtual java.lang.String.isEmpty:()Z
            ifeq 10
         9: .line 400
      StackMap locals: java.lang.String java.lang.String java.lang.String
      StackMap stack:
            aload 4 /* className */
            invokestatic com.oracle.truffle.polyglot.InstrumentCache$ServicesLoader.defaultId:(Ljava/lang/String;)Ljava/lang/String;
            astore 6 /* id */
        10: .line 402
      StackMap locals:
      StackMap stack:
            aload 3 /* reg */
            invokeinterface com.oracle.truffle.api.instrumentation.TruffleInstrument$Registration.version:()Ljava/lang/String;
            astore 7 /* version */
        start local 7 // java.lang.String version
        11: .line 403
            aload 3 /* reg */
            invokeinterface com.oracle.truffle.api.instrumentation.TruffleInstrument$Registration.internal:()Z
            istore 8 /* internal */
        start local 8 // boolean internal
        12: .line 404
            new java.util.TreeSet
            dup
            invokespecial java.util.TreeSet.<init>:()V
            astore 9 /* servicesClassNames */
        start local 9 // java.util.Set servicesClassNames
        13: .line 405
            aload 0 /* provider */
            invokeinterface com.oracle.truffle.api.instrumentation.TruffleInstrument$Provider.getServicesClassNames:()Ljava/util/Collection;
            invokeinterface java.util.Collection.iterator:()Ljava/util/Iterator;
            astore 11
            goto 16
      StackMap locals: com.oracle.truffle.api.instrumentation.TruffleInstrument$Provider java.util.List java.util.Set com.oracle.truffle.api.instrumentation.TruffleInstrument$Registration java.lang.String java.lang.String java.lang.String java.lang.String int java.util.Set top java.util.Iterator
      StackMap stack:
        14: aload 11
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.lang.String
            astore 10 /* service */
        start local 10 // java.lang.String service
        15: .line 406
            aload 9 /* servicesClassNames */
            aload 10 /* service */
            invokeinterface java.util.Set.add:(Ljava/lang/Object;)Z
            pop
        end local 10 // java.lang.String service
        16: .line 405
      StackMap locals:
      StackMap stack:
            aload 11
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 14
        17: .line 409
            aload 2 /* classNamesUsed */
            aload 4 /* className */
            invokeinterface java.util.Set.contains:(Ljava/lang/Object;)Z
            ifne 21
        18: .line 410
            aload 2 /* classNamesUsed */
            aload 4 /* className */
            invokeinterface java.util.Set.add:(Ljava/lang/Object;)Z
            pop
        19: .line 411
            new com.oracle.truffle.polyglot.InstrumentCache$ServicesLoader$ServiceLoaderInstrumentReflection
            dup
            aload 0 /* provider */
            invokespecial com.oracle.truffle.polyglot.InstrumentCache$ServicesLoader$ServiceLoaderInstrumentReflection.<init>:(Lcom/oracle/truffle/api/instrumentation/TruffleInstrument$Provider;)V
            astore 10 /* reflection */
        start local 10 // com.oracle.truffle.polyglot.InstrumentCache$InstrumentReflection reflection
        20: .line 412
            aload 1 /* list */
            new com.oracle.truffle.polyglot.InstrumentCache
            dup
            aload 6 /* id */
            aload 5 /* name */
            aload 7 /* version */
            aload 4 /* className */
            iload 8 /* internal */
            aload 9 /* servicesClassNames */
            aload 10 /* reflection */
            invokespecial com.oracle.truffle.polyglot.InstrumentCache.<init>:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZLjava/util/Set;Lcom/oracle/truffle/polyglot/InstrumentCache$InstrumentReflection;)V
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        end local 10 // com.oracle.truffle.polyglot.InstrumentCache$InstrumentReflection reflection
        21: .line 414
      StackMap locals: com.oracle.truffle.api.instrumentation.TruffleInstrument$Provider java.util.List java.util.Set com.oracle.truffle.api.instrumentation.TruffleInstrument$Registration java.lang.String java.lang.String java.lang.String java.lang.String int java.util.Set
      StackMap stack:
            return
        end local 9 // java.util.Set servicesClassNames
        end local 8 // boolean internal
        end local 7 // java.lang.String version
        end local 6 // java.lang.String id
        end local 5 // java.lang.String name
        end local 4 // java.lang.String className
        end local 3 // com.oracle.truffle.api.instrumentation.TruffleInstrument$Registration reg
        end local 2 // java.util.Set classNamesUsed
        end local 1 // java.util.List list
        end local 0 // com.oracle.truffle.api.instrumentation.TruffleInstrument$Provider provider
      LocalVariableTable:
        Start  End  Slot                Name  Signature
            0   22     0            provider  Lcom/oracle/truffle/api/instrumentation/TruffleInstrument$Provider;
            0   22     1                list  Ljava/util/List<-Lcom/oracle/truffle/polyglot/InstrumentCache;>;
            0   22     2      classNamesUsed  Ljava/util/Set<-Ljava/lang/String;>;
            1   22     3                 reg  Lcom/oracle/truffle/api/instrumentation/TruffleInstrument$Registration;
            3    5     4                 out  Ljava/io/PrintStream;
            6   22     4           className  Ljava/lang/String;
            7   22     5                name  Ljava/lang/String;
            8   22     6                  id  Ljava/lang/String;
           11   22     7             version  Ljava/lang/String;
           12   22     8            internal  Z
           13   22     9  servicesClassNames  Ljava/util/Set<Ljava/lang/String;>;
           15   16    10             service  Ljava/lang/String;
           20   21    10          reflection  Lcom/oracle/truffle/polyglot/InstrumentCache$InstrumentReflection;
    Signature: (Lcom/oracle/truffle/api/instrumentation/TruffleInstrument$Provider;Ljava/util/List<-Lcom/oracle/truffle/polyglot/InstrumentCache;>;Ljava/util/Set<-Ljava/lang/String;>;)V
    MethodParameters:
                Name  Flags
      provider        
      list            
      classNamesUsed  
}
SourceFile: "InstrumentCache.java"
NestHost: com.oracle.truffle.polyglot.InstrumentCache
InnerClasses:
  public abstract Provider = com.oracle.truffle.api.instrumentation.TruffleInstrument$Provider of com.oracle.truffle.api.instrumentation.TruffleInstrument
  public abstract Registration = com.oracle.truffle.api.instrumentation.TruffleInstrument$Registration of com.oracle.truffle.api.instrumentation.TruffleInstrument
  private abstract InstrumentReflection = com.oracle.truffle.polyglot.InstrumentCache$InstrumentReflection of com.oracle.truffle.polyglot.InstrumentCache
  private abstract Loader = com.oracle.truffle.polyglot.InstrumentCache$Loader of com.oracle.truffle.polyglot.InstrumentCache
  private final ServicesLoader = com.oracle.truffle.polyglot.InstrumentCache$ServicesLoader of com.oracle.truffle.polyglot.InstrumentCache
  private final ServiceLoaderInstrumentReflection = com.oracle.truffle.polyglot.InstrumentCache$ServicesLoader$ServiceLoaderInstrumentReflection of com.oracle.truffle.polyglot.InstrumentCache$ServicesLoader