public class com.oracle.truffle.api.test.polyglot.LanguageCacheTest
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: com.oracle.truffle.api.test.polyglot.LanguageCacheTest
  super_class: java.lang.Object
{
  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.oracle.truffle.api.test.polyglot.LanguageCacheTest this
         0: .line 81
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
            return
        end local 0 // com.oracle.truffle.api.test.polyglot.LanguageCacheTest this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/oracle/truffle/api/test/polyglot/LanguageCacheTest;

  public void testDuplicateLanguageIds();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=5, args_size=1
        start local 0 // com.oracle.truffle.api.test.polyglot.LanguageCacheTest this
         0: .line 85
            ldc Lcom/oracle/truffle/api/test/polyglot/LanguageCacheTest;
            invokevirtual java.lang.Class.getProtectionDomain:()Ljava/security/ProtectionDomain;
            invokevirtual java.security.ProtectionDomain.getCodeSource:()Ljava/security/CodeSource;
            astore 1 /* codeSource */
        start local 1 // java.security.CodeSource codeSource
         1: iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
         2: .line 86
            aload 1 /* codeSource */
            aastore
            invokestatic org.junit.Assume.assumeNotNull:([Ljava/lang/Object;)V
         3: .line 87
            aload 1 /* codeSource */
            invokevirtual java.security.CodeSource.getLocation:()Ljava/net/URL;
            invokevirtual java.net.URL.toURI:()Ljava/net/URI;
            invokestatic java.nio.file.Paths.get:(Ljava/net/URI;)Ljava/nio/file/Path;
            astore 2 /* location */
        start local 2 // java.nio.file.Path location
         4: .line 88
            new com.oracle.truffle.api.test.polyglot.LanguageCacheTest$1
            dup
            aload 0 /* this */
            aload 2 /* location */
            invokespecial com.oracle.truffle.api.test.polyglot.LanguageCacheTest$1.<init>:(Lcom/oracle/truffle/api/test/polyglot/LanguageCacheTest;Ljava/nio/file/Path;)V
            astore 3 /* loader */
        start local 3 // java.util.function.Function loader
         5: .line 102
            new com.oracle.truffle.api.test.polyglot.LanguageCacheTest$TestClassLoader
            dup
            aload 3 /* loader */
            invokespecial com.oracle.truffle.api.test.polyglot.LanguageCacheTest$TestClassLoader.<init>:(Ljava/util/function/Function;)V
            astore 4 /* testClassLoader */
        start local 4 // java.lang.ClassLoader testClassLoader
         6: .line 103
            iconst_2
            anewarray java.lang.ClassLoader
            dup
            iconst_0
         7: .line 104
            ldc Lcom/oracle/truffle/api/test/polyglot/LanguageCacheTest;
            invokevirtual java.lang.Class.getClassLoader:()Ljava/lang/ClassLoader;
            aastore
            dup
            iconst_1
            aload 4 /* testClassLoader */
            aastore
            invokestatic com.oracle.truffle.api.test.polyglot.LanguageCacheTest.invokeLanguageCacheCreateLanguages:([Ljava/lang/ClassLoader;)Ljava/util/Map;
            pop
         8: .line 105
            ldc "Expected IllegalStateException"
            invokestatic org.junit.Assert.fail:(Ljava/lang/String;)V
         9: .line 106
            goto 11
      StackMap locals: com.oracle.truffle.api.test.polyglot.LanguageCacheTest java.security.CodeSource java.nio.file.Path java.util.function.Function java.lang.ClassLoader
      StackMap stack: java.lang.IllegalStateException
        10: pop
        11: .line 109
      StackMap locals:
      StackMap stack:
            return
        end local 4 // java.lang.ClassLoader testClassLoader
        end local 3 // java.util.function.Function loader
        end local 2 // java.nio.file.Path location
        end local 1 // java.security.CodeSource codeSource
        end local 0 // com.oracle.truffle.api.test.polyglot.LanguageCacheTest this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0   12     0             this  Lcom/oracle/truffle/api/test/polyglot/LanguageCacheTest;
            1   12     1       codeSource  Ljava/security/CodeSource;
            4   12     2         location  Ljava/nio/file/Path;
            5   12     3           loader  Ljava/util/function/Function<Ljava/lang/String;Ljava/util/List<Ljava/net/URL;>;>;
            6   12     4  testClassLoader  Ljava/lang/ClassLoader;
      Exception table:
        from    to  target  type
           6     9      10  Class java.lang.IllegalStateException
    Exceptions:
      throws java.lang.Throwable
    RuntimeVisibleAnnotations: 
      org.junit.Test()

  public void testNestedArchives();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=8, args_size=1
        start local 0 // com.oracle.truffle.api.test.polyglot.LanguageCacheTest this
         0: .line 113
            ldc Lcom/oracle/truffle/api/test/polyglot/LanguageCacheTest;
            invokevirtual java.lang.Class.getProtectionDomain:()Ljava/security/ProtectionDomain;
            invokevirtual java.security.ProtectionDomain.getCodeSource:()Ljava/security/CodeSource;
            astore 1 /* codeSource */
        start local 1 // java.security.CodeSource codeSource
         1: iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
         2: .line 114
            aload 1 /* codeSource */
            aastore
            invokestatic org.junit.Assume.assumeNotNull:([Ljava/lang/Object;)V
         3: .line 115
            aload 1 /* codeSource */
            invokevirtual java.security.CodeSource.getLocation:()Ljava/net/URL;
            astore 2 /* location */
        start local 2 // java.net.URL location
         4: .line 116
            aload 2 /* location */
            invokevirtual java.net.URL.toURI:()Ljava/net/URI;
            invokestatic java.nio.file.Paths.get:(Ljava/net/URI;)Ljava/nio/file/Path;
            astore 3 /* source */
        start local 3 // java.nio.file.Path source
         5: .line 117
            aload 3 /* source */
            iconst_0
            anewarray java.nio.file.LinkOption
            invokestatic java.nio.file.Files.isRegularFile:(Ljava/nio/file/Path;[Ljava/nio/file/LinkOption;)Z
            invokestatic org.junit.Assume.assumeTrue:(Z)V
         6: .line 118
            aconst_null
            astore 4
            aconst_null
            astore 5
         7: new com.oracle.truffle.api.test.polyglot.LanguageCacheTest$NestedJarLoader
            dup
            aload 3 /* source */
            new java.lang.StringBuilder
            dup
            invokespecial java.lang.StringBuilder.<init>:()V
            aload 2 /* location */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            ldc "!/inner.jar!/"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial com.oracle.truffle.api.test.polyglot.LanguageCacheTest$NestedJarLoader.<init>:(Ljava/nio/file/Path;Ljava/lang/String;)V
            astore 6 /* loader */
        start local 6 // com.oracle.truffle.api.test.polyglot.LanguageCacheTest$NestedJarLoader loader
         8: .line 119
            new com.oracle.truffle.api.test.polyglot.LanguageCacheTest$TestClassLoader
            dup
            aload 6 /* loader */
            invokespecial com.oracle.truffle.api.test.polyglot.LanguageCacheTest$TestClassLoader.<init>:(Ljava/util/function/Function;)V
            astore 7 /* testClassLoader */
        start local 7 // java.lang.ClassLoader testClassLoader
         9: iconst_1
            anewarray java.lang.ClassLoader
            dup
            iconst_0
        10: .line 120
            aload 7 /* testClassLoader */
            aastore
            invokestatic com.oracle.truffle.api.test.polyglot.LanguageCacheTest.invokeLanguageCacheCreateLanguages:([Ljava/lang/ClassLoader;)Ljava/util/Map;
            pop
        end local 7 // java.lang.ClassLoader testClassLoader
        11: .line 121
            aload 6 /* loader */
            ifnull 17
            aload 6 /* loader */
            invokevirtual com.oracle.truffle.api.test.polyglot.LanguageCacheTest$NestedJarLoader.close:()V
            goto 17
      StackMap locals: com.oracle.truffle.api.test.polyglot.LanguageCacheTest java.security.CodeSource java.net.URL java.nio.file.Path java.lang.Throwable java.lang.Throwable com.oracle.truffle.api.test.polyglot.LanguageCacheTest$NestedJarLoader
      StackMap stack: java.lang.Throwable
        12: astore 4
            aload 6 /* loader */
            ifnull 13
            aload 6 /* loader */
            invokevirtual com.oracle.truffle.api.test.polyglot.LanguageCacheTest$NestedJarLoader.close:()V
        end local 6 // com.oracle.truffle.api.test.polyglot.LanguageCacheTest$NestedJarLoader loader
      StackMap locals:
      StackMap stack:
        13: aload 4
            athrow
      StackMap locals:
      StackMap stack: java.lang.Throwable
        14: astore 5
            aload 4
            ifnonnull 15
            aload 5
            astore 4
            goto 16
      StackMap locals:
      StackMap stack:
        15: aload 4
            aload 5
            if_acmpeq 16
            aload 4
            aload 5
            invokevirtual java.lang.Throwable.addSuppressed:(Ljava/lang/Throwable;)V
      StackMap locals:
      StackMap stack:
        16: aload 4
            athrow
        17: .line 122
      StackMap locals:
      StackMap stack:
            return
        end local 3 // java.nio.file.Path source
        end local 2 // java.net.URL location
        end local 1 // java.security.CodeSource codeSource
        end local 0 // com.oracle.truffle.api.test.polyglot.LanguageCacheTest this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0   18     0             this  Lcom/oracle/truffle/api/test/polyglot/LanguageCacheTest;
            1   18     1       codeSource  Ljava/security/CodeSource;
            4   18     2         location  Ljava/net/URL;
            5   18     3           source  Ljava/nio/file/Path;
            8   13     6           loader  Lcom/oracle/truffle/api/test/polyglot/LanguageCacheTest$NestedJarLoader;
            9   11     7  testClassLoader  Ljava/lang/ClassLoader;
      Exception table:
        from    to  target  type
           8    11      12  any
           7    14      14  any
    Exceptions:
      throws java.lang.Throwable
    RuntimeVisibleAnnotations: 
      org.junit.Test()

  private static java.util.Map<java.lang.String, java.lang.Object> invokeLanguageCacheCreateLanguages(java.lang.ClassLoader[]);
    descriptor: ([Ljava/lang/ClassLoader;)Ljava/util/Map;
    flags: (0x008a) ACC_PRIVATE, ACC_STATIC, ACC_VARARGS
    Code:
      stack=7, locals=3, args_size=1
        start local 0 // java.lang.ClassLoader[] loaders
         0: .line 127
            ldc "com.oracle.truffle.polyglot.LanguageCache"
            iconst_1
            ldc Lcom/oracle/truffle/api/test/polyglot/LanguageCacheTest;
            invokevirtual java.lang.Class.getClassLoader:()Ljava/lang/ClassLoader;
            invokestatic java.lang.Class.forName:(Ljava/lang/String;ZLjava/lang/ClassLoader;)Ljava/lang/Class;
            astore 1 /* langCacheClz */
        start local 1 // java.lang.Class langCacheClz
         1: .line 128
            aload 1 /* langCacheClz */
            ldc "createLanguages"
            iconst_1
            anewarray java.lang.Class
            dup
            iconst_0
            ldc Ljava/util/List;
            aastore
            invokevirtual java.lang.Class.getDeclaredMethod:(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;
            astore 2 /* createLanguages */
        start local 2 // java.lang.reflect.Method createLanguages
         2: .line 129
            aload 2 /* createLanguages */
            iconst_1
            invokevirtual java.lang.reflect.Method.setAccessible:(Z)V
         3: .line 143
            aload 2 /* createLanguages */
            aconst_null
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
         4: .line 144
            aload 0 /* loaders */
            invokestatic java.util.Arrays.stream:([Ljava/lang/Object;)Ljava/util/stream/Stream;
            invokedynamic apply()Ljava/util/function/Function;
              Bootstrap: invokestatic java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
                Method arguments:
                  (Ljava/lang/Object;)Ljava/lang/Object;
                  com/oracle/truffle/api/test/polyglot/LanguageCacheTest$1LoaderSupplier.<init>(Ljava/lang/ClassLoader;)V (8)
                  (Ljava/lang/ClassLoader;)Lcom/oracle/truffle/api/test/polyglot/LanguageCacheTest$1LoaderSupplier;
            invokeinterface java.util.stream.Stream.map:(Ljava/util/function/Function;)Ljava/util/stream/Stream;
            invokestatic java.util.stream.Collectors.toList:()Ljava/util/stream/Collector;
            invokeinterface java.util.stream.Stream.collect:(Ljava/util/stream/Collector;)Ljava/lang/Object;
            aastore
         5: .line 143
            invokevirtual java.lang.reflect.Method.invoke:(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.util.Map
         6: areturn
        end local 2 // java.lang.reflect.Method createLanguages
        end local 1 // java.lang.Class langCacheClz
         7: .line 145
      StackMap locals:
      StackMap stack: java.lang.reflect.InvocationTargetException
            astore 1 /* ite */
        start local 1 // java.lang.reflect.InvocationTargetException ite
         8: .line 146
            aload 1 /* ite */
            invokevirtual java.lang.reflect.InvocationTargetException.getCause:()Ljava/lang/Throwable;
            athrow
        end local 1 // java.lang.reflect.InvocationTargetException ite
         9: .line 147
      StackMap locals:
      StackMap stack: java.lang.ReflectiveOperationException
            astore 1 /* re */
        start local 1 // java.lang.ReflectiveOperationException re
        10: .line 148
            new java.lang.RuntimeException
            dup
            aload 1 /* re */
            invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/Throwable;)V
            athrow
        end local 1 // java.lang.ReflectiveOperationException re
        end local 0 // java.lang.ClassLoader[] loaders
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0   11     0          loaders  [Ljava/lang/ClassLoader;
            1    7     1     langCacheClz  Ljava/lang/Class<*>;
            2    7     2  createLanguages  Ljava/lang/reflect/Method;
            8    9     1              ite  Ljava/lang/reflect/InvocationTargetException;
           10   11     1               re  Ljava/lang/ReflectiveOperationException;
      Exception table:
        from    to  target  type
           0     6       7  Class java.lang.reflect.InvocationTargetException
           0     6       9  Class java.lang.ReflectiveOperationException
    Exceptions:
      throws java.lang.Throwable
    Signature: ([Ljava/lang/ClassLoader;)Ljava/util/Map<Ljava/lang/String;Ljava/lang/Object;>;
    MethodParameters:
         Name  Flags
      loaders  
}
SourceFile: "LanguageCacheTest.java"
NestMembers:
  com.oracle.truffle.api.test.polyglot.LanguageCacheTest$1  com.oracle.truffle.api.test.polyglot.LanguageCacheTest$1LoaderSupplier  com.oracle.truffle.api.test.polyglot.LanguageCacheTest$DuplicateIdLanguage  com.oracle.truffle.api.test.polyglot.LanguageCacheTest$NestedJarLoader  com.oracle.truffle.api.test.polyglot.LanguageCacheTest$NestedJarLoader$NestedJarURLStreamHandler  com.oracle.truffle.api.test.polyglot.LanguageCacheTest$NestedJarLoader$NestedJarURLStreamHandler$1  com.oracle.truffle.api.test.polyglot.LanguageCacheTest$TestClassLoader
InnerClasses:
  com.oracle.truffle.api.test.polyglot.LanguageCacheTest$1
  LoaderSupplier = com.oracle.truffle.api.test.polyglot.LanguageCacheTest$1LoaderSupplier
  public final DuplicateIdLanguage = com.oracle.truffle.api.test.polyglot.LanguageCacheTest$DuplicateIdLanguage of com.oracle.truffle.api.test.polyglot.LanguageCacheTest
  private final NestedJarLoader = com.oracle.truffle.api.test.polyglot.LanguageCacheTest$NestedJarLoader of com.oracle.truffle.api.test.polyglot.LanguageCacheTest
  private final TestClassLoader = com.oracle.truffle.api.test.polyglot.LanguageCacheTest$TestClassLoader of com.oracle.truffle.api.test.polyglot.LanguageCacheTest
  public final Lookup = java.lang.invoke.MethodHandles$Lookup of java.lang.invoke.MethodHandles