public abstract class jdk.vm.ci.services.JVMCIServiceLocator
  minor version: 0
  major version: 59
  flags: flags: (0x0421) ACC_PUBLIC, ACC_SUPER, ACC_ABSTRACT
  this_class: jdk.vm.ci.services.JVMCIServiceLocator
  super_class: java.lang.Object
{
  private static volatile java.util.List<jdk.vm.ci.services.JVMCIServiceLocator> cachedLocators;
    descriptor: Ljava/util/List;
    flags: (0x004a) ACC_PRIVATE, ACC_STATIC, ACC_VOLATILE
    Signature: Ljava/util/List<Ljdk/vm/ci/services/JVMCIServiceLocator;>;

  private static java.lang.Void checkPermission();
    descriptor: ()Ljava/lang/Void;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=1, args_size=0
         0: .line 44
            invokestatic java.lang.System.getSecurityManager:()Ljava/lang/SecurityManager;
            astore 0 /* sm */
        start local 0 // java.lang.SecurityManager sm
         1: .line 45
            aload 0 /* sm */
            ifnull 3
         2: .line 46
            aload 0 /* sm */
            new jdk.vm.ci.services.JVMCIPermission
            dup
            invokespecial jdk.vm.ci.services.JVMCIPermission.<init>:()V
            invokevirtual java.lang.SecurityManager.checkPermission:(Ljava/security/Permission;)V
         3: .line 48
      StackMap locals: java.lang.SecurityManager
      StackMap stack:
            aconst_null
            areturn
        end local 0 // java.lang.SecurityManager sm
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            1    4     0    sm  Ljava/lang/SecurityManager;

  private void <init>(java.lang.Void);
    descriptor: (Ljava/lang/Void;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=1, locals=2, args_size=2
        start local 0 // jdk.vm.ci.services.JVMCIServiceLocator this
        start local 1 // java.lang.Void ignore
         0: .line 52
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 53
            return
        end local 1 // java.lang.Void ignore
        end local 0 // jdk.vm.ci.services.JVMCIServiceLocator this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    2     0    this  Ljdk/vm/ci/services/JVMCIServiceLocator;
            0    2     1  ignore  Ljava/lang/Void;
    MethodParameters:
        Name  Flags
      ignore  

  protected void <init>();
    descriptor: ()V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // jdk.vm.ci.services.JVMCIServiceLocator this
         0: .line 63
            aload 0 /* this */
            invokestatic jdk.vm.ci.services.JVMCIServiceLocator.checkPermission:()Ljava/lang/Void;
            invokespecial jdk.vm.ci.services.JVMCIServiceLocator.<init>:(Ljava/lang/Void;)V
         1: .line 64
            invokestatic jdk.vm.ci.services.Services.checkJVMCIEnabled:()V
         2: .line 65
            aload 0 /* this */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            invokevirtual java.lang.Class.getModule:()Ljava/lang/Module;
            invokestatic jdk.vm.ci.services.Services.openJVMCITo:(Ljava/lang/Module;)V
         3: .line 66
            return
        end local 0 // jdk.vm.ci.services.JVMCIServiceLocator this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    4     0  this  Ljdk/vm/ci/services/JVMCIServiceLocator;

  protected abstract <S> S getProvider(java.lang.Class<S>);
    descriptor: (Ljava/lang/Class;)Ljava/lang/Object;
    flags: (0x0404) ACC_PROTECTED, ACC_ABSTRACT
    Signature: <S:Ljava/lang/Object;>(Ljava/lang/Class<TS;>;)TS;
    MethodParameters:
         Name  Flags
      service  

  private static java.lang.Iterable<jdk.vm.ci.services.JVMCIServiceLocator> getJVMCIServiceLocators();
    descriptor: ()Ljava/lang/Iterable;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=4, args_size=0
         0: .line 77
            getstatic jdk.vm.ci.services.JVMCIServiceLocator.cachedLocators:Ljava/util/List;
            astore 0 /* result */
        start local 0 // java.lang.Iterable result
         1: .line 78
            aload 0 /* result */
            ifnull 3
         2: .line 79
            aload 0 /* result */
            areturn
         3: .line 81
      StackMap locals: java.lang.Iterable
      StackMap stack:
            ldc Ljdk/vm/ci/services/JVMCIServiceLocator;
            invokestatic java.lang.ClassLoader.getSystemClassLoader:()Ljava/lang/ClassLoader;
            invokestatic java.util.ServiceLoader.load:(Ljava/lang/Class;Ljava/lang/ClassLoader;)Ljava/util/ServiceLoader;
            astore 0 /* result */
         4: .line 82
            getstatic jdk.vm.ci.services.Services.IS_BUILDING_NATIVE_IMAGE:Z
            ifeq 13
         5: .line 83
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            astore 1 /* l */
        start local 1 // java.util.ArrayList l
         6: .line 84
            aload 0 /* result */
            invokeinterface java.lang.Iterable.iterator:()Ljava/util/Iterator;
            astore 3
            goto 9
      StackMap locals: java.lang.Iterable java.util.ArrayList top java.util.Iterator
      StackMap stack:
         7: aload 3
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast jdk.vm.ci.services.JVMCIServiceLocator
            astore 2 /* locator */
        start local 2 // jdk.vm.ci.services.JVMCIServiceLocator locator
         8: .line 85
            aload 1 /* l */
            aload 2 /* locator */
            invokevirtual java.util.ArrayList.add:(Ljava/lang/Object;)Z
            pop
        end local 2 // jdk.vm.ci.services.JVMCIServiceLocator locator
         9: .line 84
      StackMap locals:
      StackMap stack:
            aload 3
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 7
        10: .line 87
            aload 1 /* l */
            invokevirtual java.util.ArrayList.trimToSize:()V
        11: .line 88
            aload 1 /* l */
            putstatic jdk.vm.ci.services.JVMCIServiceLocator.cachedLocators:Ljava/util/List;
        12: .line 89
            aload 1 /* l */
            areturn
        end local 1 // java.util.ArrayList l
        13: .line 91
      StackMap locals: java.lang.Iterable
      StackMap stack:
            aload 0 /* result */
            areturn
        end local 0 // java.lang.Iterable result
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            1   14     0   result  Ljava/lang/Iterable<Ljdk/vm/ci/services/JVMCIServiceLocator;>;
            6   13     1        l  Ljava/util/ArrayList<Ljdk/vm/ci/services/JVMCIServiceLocator;>;
            8    9     2  locator  Ljdk/vm/ci/services/JVMCIServiceLocator;
    Signature: ()Ljava/lang/Iterable<Ljdk/vm/ci/services/JVMCIServiceLocator;>;

  public static <S> java.util.List<S> getProviders(java.lang.Class<S>);
    descriptor: (Ljava/lang/Class;)Ljava/util/List;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=6, args_size=1
        start local 0 // java.lang.Class service
         0: .line 102
            invokestatic jdk.vm.ci.services.Services.checkJVMCIEnabled:()V
         1: .line 103
            invokestatic java.lang.System.getSecurityManager:()Ljava/lang/SecurityManager;
            astore 1 /* sm */
        start local 1 // java.lang.SecurityManager sm
         2: .line 104
            aload 1 /* sm */
            ifnull 4
         3: .line 105
            aload 1 /* sm */
            new jdk.vm.ci.services.JVMCIPermission
            dup
            invokespecial jdk.vm.ci.services.JVMCIPermission.<init>:()V
            invokevirtual java.lang.SecurityManager.checkPermission:(Ljava/security/Permission;)V
         4: .line 107
      StackMap locals: java.lang.SecurityManager
      StackMap stack:
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            astore 2 /* providers */
        start local 2 // java.util.List providers
         5: .line 108
            invokestatic jdk.vm.ci.services.JVMCIServiceLocator.getJVMCIServiceLocators:()Ljava/lang/Iterable;
            invokeinterface java.lang.Iterable.iterator:()Ljava/util/Iterator;
            astore 4
            goto 10
      StackMap locals: java.lang.Class java.lang.SecurityManager java.util.List top java.util.Iterator
      StackMap stack:
         6: aload 4
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast jdk.vm.ci.services.JVMCIServiceLocator
            astore 3 /* access */
        start local 3 // jdk.vm.ci.services.JVMCIServiceLocator access
         7: .line 109
            aload 3 /* access */
            aload 0 /* service */
            invokevirtual jdk.vm.ci.services.JVMCIServiceLocator.getProvider:(Ljava/lang/Class;)Ljava/lang/Object;
            astore 5 /* provider */
        start local 5 // java.lang.Object provider
         8: .line 110
            aload 5 /* provider */
            ifnull 10
         9: .line 111
            aload 2 /* providers */
            aload 5 /* provider */
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        end local 5 // java.lang.Object provider
        end local 3 // jdk.vm.ci.services.JVMCIServiceLocator access
        10: .line 108
      StackMap locals:
      StackMap stack:
            aload 4
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 6
        11: .line 114
            aload 2 /* providers */
            areturn
        end local 2 // java.util.List providers
        end local 1 // java.lang.SecurityManager sm
        end local 0 // java.lang.Class service
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   12     0    service  Ljava/lang/Class<TS;>;
            2   12     1         sm  Ljava/lang/SecurityManager;
            5   12     2  providers  Ljava/util/List<TS;>;
            7   10     3     access  Ljdk/vm/ci/services/JVMCIServiceLocator;
            8   10     5   provider  TS;
    Signature: <S:Ljava/lang/Object;>(Ljava/lang/Class<TS;>;)Ljava/util/List<TS;>;
    MethodParameters:
         Name  Flags
      service  
}
SourceFile: "JVMCIServiceLocator.java"