public class com.oracle.truffle.tools.chromeinspector.test.TestMemoryLeaks
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: com.oracle.truffle.tools.chromeinspector.test.TestMemoryLeaks
  super_class: java.lang.Object
{
  private static final java.lang.String[] REMOTE_OBJECTS_MAP_NAMES;
    descriptor: [Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=4, locals=0, args_size=0
         0: .line 41
            iconst_4
            anewarray java.lang.String
            dup
            iconst_0
            ldc "remotesByIDs"
            aastore
            dup
            iconst_1
            ldc "remotesByValue"
            aastore
            dup
            iconst_2
            ldc "customPreviewBodies"
            aastore
            dup
            iconst_3
            ldc "customPreviewConfigs"
            aastore
            putstatic com.oracle.truffle.tools.chromeinspector.test.TestMemoryLeaks.REMOTE_OBJECTS_MAP_NAMES:[Ljava/lang/String;
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.oracle.truffle.tools.chromeinspector.test.TestMemoryLeaks this
         0: .line 39
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
            return
        end local 0 // com.oracle.truffle.tools.chromeinspector.test.TestMemoryLeaks this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/oracle/truffle/tools/chromeinspector/test/TestMemoryLeaks;

  public void testRemoteObjectsLeak();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=7, locals=5, args_size=1
        start local 0 // com.oracle.truffle.tools.chromeinspector.test.TestMemoryLeaks this
         0: .line 45
            iconst_0
            invokestatic com.oracle.truffle.tools.chromeinspector.test.InspectorTester.start:(Z)Lcom/oracle/truffle/tools/chromeinspector/test/InspectorTester;
            astore 1 /* tester */
        start local 1 // com.oracle.truffle.tools.chromeinspector.test.InspectorTester tester
         1: .line 46
            aload 1 /* tester */
            invokevirtual com.oracle.truffle.tools.chromeinspector.test.InspectorTester.getInspectorContext:()Lcom/oracle/truffle/tools/chromeinspector/InspectorExecutionContext;
            invokevirtual com.oracle.truffle.tools.chromeinspector.InspectorExecutionContext.getRemoteObjectsHandler:()Lcom/oracle/truffle/tools/chromeinspector/RemoteObjectsHandler;
            astore 2 /* remoteObjectsHandler */
        start local 2 // com.oracle.truffle.tools.chromeinspector.RemoteObjectsHandler remoteObjectsHandler
         2: .line 47
            aload 2 /* remoteObjectsHandler */
            invokestatic com.oracle.truffle.tools.chromeinspector.test.TestMemoryLeaks.assertEmptyRemoteObjectsMaps:(Lcom/oracle/truffle/tools/chromeinspector/RemoteObjectsHandler;)V
         3: .line 49
            ldc "sl"
            ldc "function main() {\n  func1();\n  func2(new());\n  func3();\n}\nfunction func1() {\n  a = 0;\n  b = new();\n  debugger;\n}\nfunction func2(arg) {\n  c = new();\n  d = 3;\n  debugger;\n}\nfunction func3() {\n  debugger;\n}\n"
         4: .line 66
            ldc "code"
         5: .line 49
            invokestatic org.graalvm.polyglot.Source.newBuilder:(Ljava/lang/String;Ljava/lang/CharSequence;Ljava/lang/String;)Lorg/graalvm/polyglot/Source$Builder;
         6: .line 66
            invokevirtual org.graalvm.polyglot.Source$Builder.build:()Lorg/graalvm/polyglot/Source;
         7: .line 49
            astore 3 /* source */
        start local 3 // org.graalvm.polyglot.Source source
         8: .line 67
            aload 3 /* source */
            invokevirtual org.graalvm.polyglot.Source.getURI:()Ljava/net/URI;
            invokestatic com.oracle.truffle.tools.chromeinspector.test.InspectorTester.getStringURI:(Ljava/net/URI;)Ljava/lang/String;
            astore 4 /* slTestURI */
        start local 4 // java.lang.String slTestURI
         9: .line 68
            aload 1 /* tester */
            ldc "{\"id\":1,\"method\":\"Runtime.enable\"}"
            invokevirtual com.oracle.truffle.tools.chromeinspector.test.InspectorTester.sendMessage:(Ljava/lang/String;)V
        10: .line 69
            aload 1 /* tester */
            ldc "{\"id\":2,\"method\":\"Debugger.enable\"}"
            invokevirtual com.oracle.truffle.tools.chromeinspector.test.InspectorTester.sendMessage:(Ljava/lang/String;)V
        11: .line 70
            aload 1 /* tester */
            ldc "{\"id\":3,\"method\":\"Runtime.runIfWaitingForDebugger\"}"
            invokevirtual com.oracle.truffle.tools.chromeinspector.test.InspectorTester.sendMessage:(Ljava/lang/String;)V
        12: .line 71
            aload 1 /* tester */
            ldc "{\"result\":{},\"id\":1}\n{\"result\":{},\"id\":2}\n{\"result\":{},\"id\":3}\n{\"method\":\"Runtime.executionContextCreated\",\"params\":{\"context\":{\"origin\":\"\",\"name\":\"test\",\"id\":1}}}\n"
            invokevirtual com.oracle.truffle.tools.chromeinspector.test.InspectorTester.compareReceivedMessages:(Ljava/lang/String;)Z
            invokestatic org.junit.Assert.assertTrue:(Z)V
        13: .line 76
            aload 1 /* tester */
            aload 3 /* source */
            invokevirtual com.oracle.truffle.tools.chromeinspector.test.InspectorTester.eval:(Lorg/graalvm/polyglot/Source;)Ljava/util/concurrent/Future;
            pop
        14: .line 79
            aload 1 /* tester */
            iconst_3
            anewarray java.lang.String
            dup
            iconst_0
        15: .line 80
            ldc "{\"method\":\"Debugger.scriptParsed\""
            aastore
            dup
            iconst_1
        16: .line 81
            ldc "{\"method\":\"Debugger.paused\""
            aastore
            dup
            iconst_2
        17: .line 82
            new java.lang.StringBuilder
            dup
            ldc "\"url\":\""
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 4 /* slTestURI */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc "\"}]}}\n"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            aastore
        18: .line 79
            invokevirtual com.oracle.truffle.tools.chromeinspector.test.InspectorTester.receiveMessages:([Ljava/lang/String;)Ljava/lang/String;
            pop
        19: .line 83
            aload 1 /* tester */
            ldc "{\"id\":5,\"method\":\"Runtime.getProperties\",\"params\":{\"objectId\":\"1\"}}"
            invokevirtual com.oracle.truffle.tools.chromeinspector.test.InspectorTester.sendMessage:(Ljava/lang/String;)V
        20: .line 84
            aload 1 /* tester */
            iconst_4
            anewarray java.lang.String
            dup
            iconst_0
        21: .line 85
            ldc "{\"result\":"
            aastore
            dup
            iconst_1
        22: .line 86
            ldc "\"name\":\"a\""
            aastore
            dup
            iconst_2
        23: .line 87
            ldc "\"name\":\"b\""
            aastore
            dup
            iconst_3
        24: .line 88
            ldc "\"id\":5}\n"
            aastore
        25: .line 84
            invokevirtual com.oracle.truffle.tools.chromeinspector.test.InspectorTester.receiveMessages:([Ljava/lang/String;)Ljava/lang/String;
            pop
        26: .line 89
            aload 2 /* remoteObjectsHandler */
            iconst_5
            invokestatic com.oracle.truffle.tools.chromeinspector.test.TestMemoryLeaks.assertRemoteObjectsMapsSize:(Lcom/oracle/truffle/tools/chromeinspector/RemoteObjectsHandler;I)V
        27: .line 91
            aload 1 /* tester */
            ldc "{\"id\":10,\"method\":\"Debugger.resume\"}"
            invokevirtual com.oracle.truffle.tools.chromeinspector.test.InspectorTester.sendMessage:(Ljava/lang/String;)V
        28: .line 92
            aload 1 /* tester */
            ldc "{\"result\":{},\"id\":10}\n{\"method\":\"Debugger.resumed\"}\n"
            invokevirtual com.oracle.truffle.tools.chromeinspector.test.InspectorTester.compareReceivedMessages:(Ljava/lang/String;)Z
            invokestatic org.junit.Assert.assertTrue:(Z)V
        29: .line 97
            aload 1 /* tester */
            iconst_2
            anewarray java.lang.String
            dup
            iconst_0
        30: .line 98
            ldc "{\"method\":\"Debugger.paused\""
            aastore
            dup
            iconst_1
        31: .line 99
            new java.lang.StringBuilder
            dup
            ldc "\"url\":\""
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 4 /* slTestURI */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc "\"}]}}\n"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            aastore
        32: .line 97
            invokevirtual com.oracle.truffle.tools.chromeinspector.test.InspectorTester.receiveMessages:([Ljava/lang/String;)Ljava/lang/String;
            pop
        33: .line 100
            aload 1 /* tester */
            ldc "{\"id\":15,\"method\":\"Runtime.getProperties\",\"params\":{\"objectId\":\"8\"}}"
            invokevirtual com.oracle.truffle.tools.chromeinspector.test.InspectorTester.sendMessage:(Ljava/lang/String;)V
        34: .line 101
            aload 1 /* tester */
            iconst_5
            anewarray java.lang.String
            dup
            iconst_0
        35: .line 102
            ldc "{\"result\":"
            aastore
            dup
            iconst_1
        36: .line 103
            ldc "\"name\":\"arg\""
            aastore
            dup
            iconst_2
        37: .line 104
            ldc "\"name\":\"c\""
            aastore
            dup
            iconst_3
        38: .line 105
            ldc "\"name\":\"d\""
            aastore
            dup
            iconst_4
        39: .line 106
            ldc "\"id\":15}\n"
            aastore
        40: .line 101
            invokevirtual com.oracle.truffle.tools.chromeinspector.test.InspectorTester.receiveMessages:([Ljava/lang/String;)Ljava/lang/String;
            pop
        41: .line 107
            aload 2 /* remoteObjectsHandler */
            bipush 6
            invokestatic com.oracle.truffle.tools.chromeinspector.test.TestMemoryLeaks.assertRemoteObjectsMapsSize:(Lcom/oracle/truffle/tools/chromeinspector/RemoteObjectsHandler;I)V
        42: .line 109
            aload 1 /* tester */
            ldc "{\"id\":20,\"method\":\"Debugger.resume\"}"
            invokevirtual com.oracle.truffle.tools.chromeinspector.test.InspectorTester.sendMessage:(Ljava/lang/String;)V
        43: .line 110
            aload 1 /* tester */
            ldc "{\"result\":{},\"id\":20}\n{\"method\":\"Debugger.resumed\"}\n"
            invokevirtual com.oracle.truffle.tools.chromeinspector.test.InspectorTester.compareReceivedMessages:(Ljava/lang/String;)Z
            invokestatic org.junit.Assert.assertTrue:(Z)V
        44: .line 115
            aload 1 /* tester */
            iconst_2
            anewarray java.lang.String
            dup
            iconst_0
        45: .line 116
            ldc "{\"method\":\"Debugger.paused\""
            aastore
            dup
            iconst_1
        46: .line 117
            new java.lang.StringBuilder
            dup
            ldc "\"url\":\""
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 4 /* slTestURI */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc "\"}]}}\n"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            aastore
        47: .line 115
            invokevirtual com.oracle.truffle.tools.chromeinspector.test.InspectorTester.receiveMessages:([Ljava/lang/String;)Ljava/lang/String;
            pop
        48: .line 118
            aload 1 /* tester */
            ldc "{\"id\":25,\"method\":\"Runtime.getProperties\",\"params\":{\"objectId\":\"16\"}}"
            invokevirtual com.oracle.truffle.tools.chromeinspector.test.InspectorTester.sendMessage:(Ljava/lang/String;)V
        49: .line 119
            aload 1 /* tester */
        50: .line 120
            ldc "{\"result\":{\"result\":[],\"internalProperties\":[]},\"id\":25}\n"
        51: .line 119
            invokevirtual com.oracle.truffle.tools.chromeinspector.test.InspectorTester.compareReceivedMessages:(Ljava/lang/String;)Z
            invokestatic org.junit.Assert.assertTrue:(Z)V
        52: .line 121
            aload 2 /* remoteObjectsHandler */
            iconst_4
            invokestatic com.oracle.truffle.tools.chromeinspector.test.TestMemoryLeaks.assertRemoteObjectsMapsSize:(Lcom/oracle/truffle/tools/chromeinspector/RemoteObjectsHandler;I)V
        53: .line 124
            aload 1 /* tester */
            ldc "{\"id\":30,\"method\":\"Debugger.resume\"}"
            invokevirtual com.oracle.truffle.tools.chromeinspector.test.InspectorTester.sendMessage:(Ljava/lang/String;)V
        54: .line 125
            aload 1 /* tester */
            ldc "{\"result\":{},\"id\":30}\n{\"method\":\"Debugger.resumed\"}\n"
            invokevirtual com.oracle.truffle.tools.chromeinspector.test.InspectorTester.compareReceivedMessages:(Ljava/lang/String;)Z
            invokestatic org.junit.Assert.assertTrue:(Z)V
        55: .line 128
            aload 1 /* tester */
            invokevirtual com.oracle.truffle.tools.chromeinspector.test.InspectorTester.finishNoGC:()V
        56: .line 129
            aload 2 /* remoteObjectsHandler */
            invokestatic com.oracle.truffle.tools.chromeinspector.test.TestMemoryLeaks.assertEmptyRemoteObjectsMaps:(Lcom/oracle/truffle/tools/chromeinspector/RemoteObjectsHandler;)V
        57: .line 130
            aconst_null
            astore 2 /* remoteObjectsHandler */
        58: .line 131
            aload 1 /* tester */
            invokevirtual com.oracle.truffle.tools.chromeinspector.test.InspectorTester.finish:()V
        59: .line 132
            return
        end local 4 // java.lang.String slTestURI
        end local 3 // org.graalvm.polyglot.Source source
        end local 2 // com.oracle.truffle.tools.chromeinspector.RemoteObjectsHandler remoteObjectsHandler
        end local 1 // com.oracle.truffle.tools.chromeinspector.test.InspectorTester tester
        end local 0 // com.oracle.truffle.tools.chromeinspector.test.TestMemoryLeaks this
      LocalVariableTable:
        Start  End  Slot                  Name  Signature
            0   60     0                  this  Lcom/oracle/truffle/tools/chromeinspector/test/TestMemoryLeaks;
            1   60     1                tester  Lcom/oracle/truffle/tools/chromeinspector/test/InspectorTester;
            2   60     2  remoteObjectsHandler  Lcom/oracle/truffle/tools/chromeinspector/RemoteObjectsHandler;
            8   60     3                source  Lorg/graalvm/polyglot/Source;
            9   60     4             slTestURI  Ljava/lang/String;
    Exceptions:
      throws java.lang.Exception
    RuntimeVisibleAnnotations: 
      org.junit.Test()

  private static void assertEmptyRemoteObjectsMaps(com.oracle.truffle.tools.chromeinspector.RemoteObjectsHandler);
    descriptor: (Lcom/oracle/truffle/tools/chromeinspector/RemoteObjectsHandler;)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=5, locals=6, args_size=1
        start local 0 // com.oracle.truffle.tools.chromeinspector.RemoteObjectsHandler remoteObjectsHandler
         0: .line 135
            getstatic com.oracle.truffle.tools.chromeinspector.test.TestMemoryLeaks.REMOTE_OBJECTS_MAP_NAMES:[Ljava/lang/String;
            dup
            astore 4
            arraylength
            istore 3
            iconst_0
            istore 2
            goto 5
      StackMap locals: com.oracle.truffle.tools.chromeinspector.RemoteObjectsHandler top int int java.lang.String[]
      StackMap stack:
         1: aload 4
            iload 2
            aaload
            astore 1 /* mapName */
        start local 1 // java.lang.String mapName
         2: .line 136
            aload 0 /* remoteObjectsHandler */
            aload 1 /* mapName */
            invokestatic com.oracle.truffle.api.test.ReflectionUtils.getField:(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
            checkcast java.util.Map
            astore 5 /* map */
        start local 5 // java.util.Map map
         3: .line 137
            new java.lang.StringBuilder
            dup
            ldc "Map "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 1 /* mapName */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            lconst_0
            aload 5 /* map */
            invokeinterface java.util.Map.size:()I
            i2l
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/String;JJ)V
        end local 5 // java.util.Map map
        end local 1 // java.lang.String mapName
         4: .line 135
            iinc 2 1
      StackMap locals:
      StackMap stack:
         5: iload 2
            iload 3
            if_icmplt 1
         6: .line 139
            return
        end local 0 // com.oracle.truffle.tools.chromeinspector.RemoteObjectsHandler remoteObjectsHandler
      LocalVariableTable:
        Start  End  Slot                  Name  Signature
            0    7     0  remoteObjectsHandler  Lcom/oracle/truffle/tools/chromeinspector/RemoteObjectsHandler;
            2    4     1               mapName  Ljava/lang/String;
            3    4     5                   map  Ljava/util/Map<**>;
    MethodParameters:
                      Name  Flags
      remoteObjectsHandler  

  private static void assertRemoteObjectsMapsSize(com.oracle.truffle.tools.chromeinspector.RemoteObjectsHandler, int);
    descriptor: (Lcom/oracle/truffle/tools/chromeinspector/RemoteObjectsHandler;I)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=5, locals=5, args_size=2
        start local 0 // com.oracle.truffle.tools.chromeinspector.RemoteObjectsHandler remoteObjectsHandler
        start local 1 // int size
         0: .line 142
            iconst_0
            istore 2 /* i */
        start local 2 // int i
         1: goto 6
         2: .line 143
      StackMap locals: int
      StackMap stack:
            getstatic com.oracle.truffle.tools.chromeinspector.test.TestMemoryLeaks.REMOTE_OBJECTS_MAP_NAMES:[Ljava/lang/String;
            iload 2 /* i */
            aaload
            astore 3 /* mapName */
        start local 3 // java.lang.String mapName
         3: .line 144
            aload 0 /* remoteObjectsHandler */
            aload 3 /* mapName */
            invokestatic com.oracle.truffle.api.test.ReflectionUtils.getField:(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
            checkcast java.util.Map
            astore 4 /* map */
        start local 4 // java.util.Map map
         4: .line 145
            new java.lang.StringBuilder
            dup
            ldc "Map "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 3 /* mapName */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            iload 1 /* size */
            i2l
            aload 4 /* map */
            invokeinterface java.util.Map.size:()I
            i2l
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/String;JJ)V
        end local 4 // java.util.Map map
        end local 3 // java.lang.String mapName
         5: .line 142
            iinc 2 /* i */ 1
      StackMap locals:
      StackMap stack:
         6: iload 2 /* i */
            iconst_1
            if_icmplt 2
        end local 2 // int i
         7: .line 147
            return
        end local 1 // int size
        end local 0 // com.oracle.truffle.tools.chromeinspector.RemoteObjectsHandler remoteObjectsHandler
      LocalVariableTable:
        Start  End  Slot                  Name  Signature
            0    8     0  remoteObjectsHandler  Lcom/oracle/truffle/tools/chromeinspector/RemoteObjectsHandler;
            0    8     1                  size  I
            1    7     2                     i  I
            3    5     3               mapName  Ljava/lang/String;
            4    5     4                   map  Ljava/util/Map<**>;
    MethodParameters:
                      Name  Flags
      remoteObjectsHandler  
      size                  
}
SourceFile: "TestMemoryLeaks.java"
InnerClasses:
  public Builder = org.graalvm.polyglot.Source$Builder of org.graalvm.polyglot.Source