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 java.lang.Void checkPermission();
    descriptor: ()Ljava/lang/Void;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=1, args_size=0
         0: .line 43
            invokestatic java.lang.System.getSecurityManager:()Ljava/lang/SecurityManager;
            astore 0 /* sm */
        start local 0 // java.lang.SecurityManager sm
         1: .line 44
            aload 0 /* sm */
            ifnull 3
         2: .line 45
            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 47
      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 51
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 52
            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 62
            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 63
            invokestatic jdk.vm.ci.services.Services.checkJVMCIEnabled:()V
         2: .line 64
            aload 0 /* this */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            invokestatic jdk.vm.ci.services.internal.ReflectionAccessJDK.openJVMCITo:(Ljava/lang/Class;)V
         3: .line 65
            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  

  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 81
            invokestatic jdk.vm.ci.services.Services.checkJVMCIEnabled:()V
         1: .line 82
            invokestatic java.lang.System.getSecurityManager:()Ljava/lang/SecurityManager;
            astore 1 /* sm */
        start local 1 // java.lang.SecurityManager sm
         2: .line 83
            aload 1 /* sm */
            ifnull 4
         3: .line 84
            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 86
      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 87
            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;
            invokevirtual java.util.ServiceLoader.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 88
            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 89
            aload 5 /* provider */
            ifnull 10
         9: .line 90
            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 87
      StackMap locals:
      StackMap stack:
            aload 4
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 6
        11: .line 93
            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"