final class jdk.tools.jlink.internal.plugins.StringSharingPlugin$CompactCPHelper
  minor version: 0
  major version: 59
  flags: flags: (0x0030) ACC_FINAL, ACC_SUPER
  this_class: jdk.tools.jlink.internal.plugins.StringSharingPlugin$CompactCPHelper
  super_class: java.lang.Object
{
  private void <init>();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // jdk.tools.jlink.internal.plugins.StringSharingPlugin$CompactCPHelper this
         0: .line 79
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
            return
        end local 0 // jdk.tools.jlink.internal.plugins.StringSharingPlugin$CompactCPHelper this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Ljdk/tools/jlink/internal/plugins/StringSharingPlugin$CompactCPHelper;

  public byte[] transform(jdk.tools.jlink.plugin.ResourcePoolEntry, jdk.tools.jlink.plugin.ResourcePoolBuilder, jdk.tools.jlink.internal.StringTable);
    descriptor: (Ljdk/tools/jlink/plugin/ResourcePoolEntry;Ljdk/tools/jlink/plugin/ResourcePoolBuilder;Ljdk/tools/jlink/internal/StringTable;)[B
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=9, args_size=4
        start local 0 // jdk.tools.jlink.internal.plugins.StringSharingPlugin$CompactCPHelper this
        start local 1 // jdk.tools.jlink.plugin.ResourcePoolEntry resource
        start local 2 // jdk.tools.jlink.plugin.ResourcePoolBuilder out
        start local 3 // jdk.tools.jlink.internal.StringTable strings
         0: .line 229
            aload 1 /* resource */
            invokeinterface jdk.tools.jlink.plugin.ResourcePoolEntry.contentBytes:()[B
            astore 4 /* content */
        start local 4 // byte[] content
         1: .line 231
            aconst_null
            astore 6
            aconst_null
            astore 7
         2: new java.io.ByteArrayInputStream
            dup
            aload 4 /* content */
            invokespecial java.io.ByteArrayInputStream.<init>:([B)V
            astore 8 /* stream */
        start local 8 // java.io.InputStream stream
         3: .line 232
            aload 8 /* stream */
            invokestatic com.sun.tools.classfile.ClassFile.read:(Ljava/io/InputStream;)Lcom/sun/tools/classfile/ClassFile;
            astore 5 /* cf */
        start local 5 // com.sun.tools.classfile.ClassFile cf
         4: .line 233
            aload 8 /* stream */
            ifnull 14
            aload 8 /* stream */
            invokevirtual java.io.InputStream.close:()V
            goto 14
        end local 5 // com.sun.tools.classfile.ClassFile cf
      StackMap locals: jdk.tools.jlink.internal.plugins.StringSharingPlugin$CompactCPHelper jdk.tools.jlink.plugin.ResourcePoolEntry jdk.tools.jlink.plugin.ResourcePoolBuilder jdk.tools.jlink.internal.StringTable byte[] top java.lang.Throwable java.lang.Throwable java.io.InputStream
      StackMap stack: java.lang.Throwable
         5: astore 6
            aload 8 /* stream */
            ifnull 6
            aload 8 /* stream */
            invokevirtual java.io.InputStream.close:()V
        end local 8 // java.io.InputStream stream
      StackMap locals:
      StackMap stack:
         6: aload 6
            athrow
      StackMap locals:
      StackMap stack: java.lang.Throwable
         7: astore 7
            aload 6
            ifnonnull 8
            aload 7
            astore 6
            goto 9
      StackMap locals:
      StackMap stack:
         8: aload 6
            aload 7
            if_acmpeq 9
            aload 6
            aload 7
            invokevirtual java.lang.Throwable.addSuppressed:(Ljava/lang/Throwable;)V
      StackMap locals:
      StackMap stack:
         9: aload 6
            athrow
      StackMap locals: jdk.tools.jlink.internal.plugins.StringSharingPlugin$CompactCPHelper jdk.tools.jlink.plugin.ResourcePoolEntry jdk.tools.jlink.plugin.ResourcePoolBuilder jdk.tools.jlink.internal.StringTable byte[]
      StackMap stack: com.sun.tools.classfile.ConstantPoolException
        10: astore 6 /* ex */
        start local 6 // com.sun.tools.classfile.ConstantPoolException ex
        11: .line 234
            new java.io.IOException
            dup
            new java.lang.StringBuilder
            dup
            ldc "Compressor EX "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 6 /* ex */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            ldc " for "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
        12: .line 235
            aload 1 /* resource */
            invokeinterface jdk.tools.jlink.plugin.ResourcePoolEntry.path:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc " content.length "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 4 /* content */
            arraylength
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            aload 6 /* ex */
        13: .line 234
            invokespecial java.io.IOException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 6 // com.sun.tools.classfile.ConstantPoolException ex
        start local 5 // com.sun.tools.classfile.ClassFile cf
        14: .line 237
      StackMap locals: com.sun.tools.classfile.ClassFile
      StackMap stack:
            new jdk.tools.jlink.internal.plugins.StringSharingPlugin$CompactCPHelper$DescriptorsScanner
            dup
            aload 5 /* cf */
            invokespecial jdk.tools.jlink.internal.plugins.StringSharingPlugin$CompactCPHelper$DescriptorsScanner.<init>:(Lcom/sun/tools/classfile/ClassFile;)V
            astore 6 /* scanner */
        start local 6 // jdk.tools.jlink.internal.plugins.StringSharingPlugin$CompactCPHelper$DescriptorsScanner scanner
        15: .line 238
            aload 0 /* this */
            aload 1 /* resource */
            aload 2 /* out */
            aload 3 /* strings */
            aload 6 /* scanner */
            invokevirtual jdk.tools.jlink.internal.plugins.StringSharingPlugin$CompactCPHelper$DescriptorsScanner.scan:()Ljava/util/Set;
            aload 4 /* content */
            invokevirtual jdk.tools.jlink.internal.plugins.StringSharingPlugin$CompactCPHelper.optimize:(Ljdk/tools/jlink/plugin/ResourcePoolEntry;Ljdk/tools/jlink/plugin/ResourcePoolBuilder;Ljdk/tools/jlink/internal/StringTable;Ljava/util/Set;[B)[B
            areturn
        end local 6 // jdk.tools.jlink.internal.plugins.StringSharingPlugin$CompactCPHelper$DescriptorsScanner scanner
        end local 5 // com.sun.tools.classfile.ClassFile cf
        end local 4 // byte[] content
        end local 3 // jdk.tools.jlink.internal.StringTable strings
        end local 2 // jdk.tools.jlink.plugin.ResourcePoolBuilder out
        end local 1 // jdk.tools.jlink.plugin.ResourcePoolEntry resource
        end local 0 // jdk.tools.jlink.internal.plugins.StringSharingPlugin$CompactCPHelper this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0   16     0      this  Ljdk/tools/jlink/internal/plugins/StringSharingPlugin$CompactCPHelper;
            0   16     1  resource  Ljdk/tools/jlink/plugin/ResourcePoolEntry;
            0   16     2       out  Ljdk/tools/jlink/plugin/ResourcePoolBuilder;
            0   16     3   strings  Ljdk/tools/jlink/internal/StringTable;
            1   16     4   content  [B
            4    5     5        cf  Lcom/sun/tools/classfile/ClassFile;
           14   16     5        cf  Lcom/sun/tools/classfile/ClassFile;
            3    6     8    stream  Ljava/io/InputStream;
           11   14     6        ex  Lcom/sun/tools/classfile/ConstantPoolException;
           15   16     6   scanner  Ljdk/tools/jlink/internal/plugins/StringSharingPlugin$CompactCPHelper$DescriptorsScanner;
      Exception table:
        from    to  target  type
           3     4       5  any
           2     7       7  any
           1    10      10  Class com.sun.tools.classfile.ConstantPoolException
    Exceptions:
      throws java.io.IOException, java.lang.Exception
    MethodParameters:
          Name  Flags
      resource  
      out       
      strings   

  private byte[] optimize(jdk.tools.jlink.plugin.ResourcePoolEntry, jdk.tools.jlink.plugin.ResourcePoolBuilder, jdk.tools.jlink.internal.StringTable, java.util.Set<java.lang.Integer>, );
    descriptor: (Ljdk/tools/jlink/plugin/ResourcePoolEntry;Ljdk/tools/jlink/plugin/ResourcePoolBuilder;Ljdk/tools/jlink/internal/StringTable;Ljava/util/Set;[B)[B
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=19, args_size=6
        start local 0 // jdk.tools.jlink.internal.plugins.StringSharingPlugin$CompactCPHelper this
        start local 1 // jdk.tools.jlink.plugin.ResourcePoolEntry resource
        start local 2 // jdk.tools.jlink.plugin.ResourcePoolBuilder resources
        start local 3 // jdk.tools.jlink.internal.StringTable strings
        start local 4 // java.util.Set descriptorIndexes
        start local 5 // byte[] content
         0: .line 245
            new java.io.DataInputStream
            dup
            new java.io.ByteArrayInputStream
            dup
            aload 5 /* content */
            invokespecial java.io.ByteArrayInputStream.<init>:([B)V
            invokespecial java.io.DataInputStream.<init>:(Ljava/io/InputStream;)V
            astore 6 /* stream */
        start local 6 // java.io.DataInputStream stream
         1: .line 246
            new java.io.ByteArrayOutputStream
            dup
            aload 5 /* content */
            arraylength
            invokespecial java.io.ByteArrayOutputStream.<init>:(I)V
            astore 7 /* outStream */
        start local 7 // java.io.ByteArrayOutputStream outStream
         2: .line 247
            new java.io.DataOutputStream
            dup
            aload 7 /* outStream */
            invokespecial java.io.DataOutputStream.<init>:(Ljava/io/OutputStream;)V
            astore 8 /* out */
        start local 8 // java.io.DataOutputStream out
         3: .line 248
            bipush 8
            newarray 8
            astore 9 /* header */
        start local 9 // byte[] header
         4: .line 249
            aload 6 /* stream */
            aload 9 /* header */
            invokevirtual java.io.DataInputStream.readFully:([B)V
         5: .line 250
            aload 8 /* out */
            aload 9 /* header */
            invokevirtual java.io.DataOutputStream.write:([B)V
         6: .line 251
            aload 6 /* stream */
            invokevirtual java.io.DataInputStream.readUnsignedShort:()I
            istore 10 /* count */
        start local 10 // int count
         7: .line 252
            aload 8 /* out */
            iload 10 /* count */
            invokevirtual java.io.DataOutputStream.writeShort:(I)V
         8: .line 253
            iconst_1
            istore 11 /* i */
        start local 11 // int i
         9: goto 36
        10: .line 254
      StackMap locals: jdk.tools.jlink.internal.plugins.StringSharingPlugin$CompactCPHelper jdk.tools.jlink.plugin.ResourcePoolEntry jdk.tools.jlink.plugin.ResourcePoolBuilder jdk.tools.jlink.internal.StringTable java.util.Set byte[] java.io.DataInputStream java.io.ByteArrayOutputStream java.io.DataOutputStream byte[] int int
      StackMap stack:
            aload 6 /* stream */
            invokevirtual java.io.DataInputStream.readUnsignedByte:()I
            istore 12 /* tag */
        start local 12 // int tag
        11: .line 256
            iload 12 /* tag */
            tableswitch { // 1 - 6
                    1: 12
                    2: 30
                    3: 30
                    4: 30
                    5: 29
                    6: 29
              default: 30
          }
        12: .line 258
      StackMap locals: int
      StackMap stack:
            aload 6 /* stream */
            invokevirtual java.io.DataInputStream.readUTF:()Ljava/lang/String;
            astore 14 /* original */
        start local 14 // java.lang.String original
        13: .line 260
            aload 4 /* descriptorIndexes */
            iload 11 /* i */
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            invokeinterface java.util.Set.contains:(Ljava/lang/Object;)Z
            ifeq 27
        14: .line 262
            aload 14 /* original */
            invokestatic jdk.internal.jimage.decompressor.SignatureParser.parseSignatureDescriptor:(Ljava/lang/String;)Ljdk/internal/jimage/decompressor/SignatureParser$ParseResult;
        15: .line 261
            astore 15 /* parseResult */
        start local 15 // jdk.internal.jimage.decompressor.SignatureParser$ParseResult parseResult
        16: .line 264
            aload 15 /* parseResult */
            getfield jdk.internal.jimage.decompressor.SignatureParser$ParseResult.types:Ljava/util/List;
            invokeinterface java.util.List.stream:()Ljava/util/stream/Stream;
            aload 3 /* strings */
            invokedynamic apply(Ljdk/tools/jlink/internal/StringTable;)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;
                  jdk/tools/jlink/internal/plugins/StringSharingPlugin$CompactCPHelper.lambda$0(Ljdk/tools/jlink/internal/StringTable;Ljava/lang/String;)Ljava/lang/Integer; (6)
                  (Ljava/lang/String;)Ljava/lang/Integer;
            invokeinterface java.util.stream.Stream.map:(Ljava/util/function/Function;)Ljava/util/stream/Stream;
        17: .line 266
            invokeinterface java.util.stream.Stream.toList:()Ljava/util/List;
        18: .line 263
            astore 16 /* indexes */
        start local 16 // java.util.List indexes
        19: .line 267
            aload 16 /* indexes */
            invokeinterface java.util.List.isEmpty:()Z
            ifne 27
        20: .line 268
            aload 8 /* out */
            bipush 25
            invokevirtual java.io.DataOutputStream.write:(I)V
        21: .line 269
            aload 3 /* strings */
            aload 15 /* parseResult */
            getfield jdk.internal.jimage.decompressor.SignatureParser$ParseResult.formatted:Ljava/lang/String;
            invokeinterface jdk.tools.jlink.internal.StringTable.addString:(Ljava/lang/String;)I
            istore 17 /* sigIndex */
        start local 17 // int sigIndex
        22: .line 271
            iload 17 /* sigIndex */
            invokestatic jdk.internal.jimage.decompressor.CompressIndexes.compress:(I)[B
        23: .line 270
            astore 18 /* compressed */
        start local 18 // byte[] compressed
        24: .line 272
            aload 8 /* out */
            aload 18 /* compressed */
            iconst_0
            aload 18 /* compressed */
            arraylength
            invokevirtual java.io.DataOutputStream.write:([BII)V
        25: .line 274
            aload 0 /* this */
            aload 8 /* out */
            aload 16 /* indexes */
            invokevirtual jdk.tools.jlink.internal.plugins.StringSharingPlugin$CompactCPHelper.writeDescriptorReference:(Ljava/io/DataOutputStream;Ljava/util/List;)V
        26: .line 275
            goto 35
        end local 18 // byte[] compressed
        end local 17 // int sigIndex
        end local 16 // java.util.List indexes
        end local 15 // jdk.internal.jimage.decompressor.SignatureParser$ParseResult parseResult
        27: .line 279
      StackMap locals: jdk.tools.jlink.internal.plugins.StringSharingPlugin$CompactCPHelper jdk.tools.jlink.plugin.ResourcePoolEntry jdk.tools.jlink.plugin.ResourcePoolBuilder jdk.tools.jlink.internal.StringTable java.util.Set byte[] java.io.DataInputStream java.io.ByteArrayOutputStream java.io.DataOutputStream byte[] int int int top java.lang.String
      StackMap stack:
            aload 0 /* this */
            aload 8 /* out */
            aload 3 /* strings */
            aload 14 /* original */
            invokeinterface jdk.tools.jlink.internal.StringTable.addString:(Ljava/lang/String;)I
            invokevirtual jdk.tools.jlink.internal.plugins.StringSharingPlugin$CompactCPHelper.writeUTF8Reference:(Ljava/io/DataOutputStream;I)V
        28: .line 281
            goto 35
        end local 14 // java.lang.String original
        29: .line 286
      StackMap locals: jdk.tools.jlink.internal.plugins.StringSharingPlugin$CompactCPHelper jdk.tools.jlink.plugin.ResourcePoolEntry jdk.tools.jlink.plugin.ResourcePoolBuilder jdk.tools.jlink.internal.StringTable java.util.Set byte[] java.io.DataInputStream java.io.ByteArrayOutputStream java.io.DataOutputStream byte[] int int int
      StackMap stack:
            iinc 11 /* i */ 1
        30: .line 289
      StackMap locals:
      StackMap stack:
            aload 8 /* out */
            iload 12 /* tag */
            invokevirtual java.io.DataOutputStream.write:(I)V
        31: .line 290
            getstatic jdk.tools.jlink.internal.plugins.StringSharingPlugin.SIZES:[I
            iload 12 /* tag */
            iaload
            istore 14 /* size */
        start local 14 // int size
        32: .line 291
            iload 14 /* size */
            newarray 8
            astore 13 /* arr */
        start local 13 // byte[] arr
        33: .line 292
            aload 6 /* stream */
            aload 13 /* arr */
            invokevirtual java.io.DataInputStream.readFully:([B)V
        34: .line 293
            aload 8 /* out */
            aload 13 /* arr */
            invokevirtual java.io.DataOutputStream.write:([B)V
        end local 14 // int size
        end local 13 // byte[] arr
        end local 12 // int tag
        35: .line 253
      StackMap locals:
      StackMap stack:
            iinc 11 /* i */ 1
      StackMap locals:
      StackMap stack:
        36: iload 11 /* i */
            iload 10 /* count */
            if_icmplt 10
        end local 11 // int i
        37: .line 297
            aload 8 /* out */
            aload 5 /* content */
            aload 5 /* content */
            arraylength
            aload 6 /* stream */
            invokevirtual java.io.DataInputStream.available:()I
            isub
        38: .line 298
            aload 6 /* stream */
            invokevirtual java.io.DataInputStream.available:()I
        39: .line 297
            invokevirtual java.io.DataOutputStream.write:([BII)V
        40: .line 299
            aload 8 /* out */
            invokevirtual java.io.DataOutputStream.flush:()V
        41: .line 301
            aload 7 /* outStream */
            invokevirtual java.io.ByteArrayOutputStream.toByteArray:()[B
            areturn
        end local 10 // int count
        end local 9 // byte[] header
        end local 8 // java.io.DataOutputStream out
        end local 7 // java.io.ByteArrayOutputStream outStream
        end local 6 // java.io.DataInputStream stream
        end local 5 // byte[] content
        end local 4 // java.util.Set descriptorIndexes
        end local 3 // jdk.tools.jlink.internal.StringTable strings
        end local 2 // jdk.tools.jlink.plugin.ResourcePoolBuilder resources
        end local 1 // jdk.tools.jlink.plugin.ResourcePoolEntry resource
        end local 0 // jdk.tools.jlink.internal.plugins.StringSharingPlugin$CompactCPHelper this
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0   42     0               this  Ljdk/tools/jlink/internal/plugins/StringSharingPlugin$CompactCPHelper;
            0   42     1           resource  Ljdk/tools/jlink/plugin/ResourcePoolEntry;
            0   42     2          resources  Ljdk/tools/jlink/plugin/ResourcePoolBuilder;
            0   42     3            strings  Ljdk/tools/jlink/internal/StringTable;
            0   42     4  descriptorIndexes  Ljava/util/Set<Ljava/lang/Integer;>;
            0   42     5            content  [B
            1   42     6             stream  Ljava/io/DataInputStream;
            2   42     7          outStream  Ljava/io/ByteArrayOutputStream;
            3   42     8                out  Ljava/io/DataOutputStream;
            4   42     9             header  [B
            7   42    10              count  I
            9   37    11                  i  I
           11   35    12                tag  I
           33   35    13                arr  [B
           13   29    14           original  Ljava/lang/String;
           16   27    15        parseResult  Ljdk/internal/jimage/decompressor/SignatureParser$ParseResult;
           19   27    16            indexes  Ljava/util/List<Ljava/lang/Integer;>;
           22   27    17           sigIndex  I
           24   27    18         compressed  [B
           32   35    14               size  I
    Exceptions:
      throws java.lang.Exception
    Signature: (Ljdk/tools/jlink/plugin/ResourcePoolEntry;Ljdk/tools/jlink/plugin/ResourcePoolBuilder;Ljdk/tools/jlink/internal/StringTable;Ljava/util/Set<Ljava/lang/Integer;>;[B)[B
    MethodParameters:
                   Name  Flags
      resource           
      resources          
      strings            
      descriptorIndexes  
      content            

  private void writeDescriptorReference(java.io.DataOutputStream, java.util.List<java.lang.Integer>);
    descriptor: (Ljava/io/DataOutputStream;Ljava/util/List;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=8, args_size=3
        start local 0 // jdk.tools.jlink.internal.plugins.StringSharingPlugin$CompactCPHelper this
        start local 1 // java.io.DataOutputStream out
        start local 2 // java.util.List indexes
         0: .line 306
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            astore 3 /* buffers */
        start local 3 // java.util.List buffers
         1: .line 307
            iconst_0
            istore 4 /* l */
        start local 4 // int l
         2: .line 308
            aload 2 /* indexes */
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 6
            goto 7
      StackMap locals: jdk.tools.jlink.internal.plugins.StringSharingPlugin$CompactCPHelper java.io.DataOutputStream java.util.List java.util.List int top java.util.Iterator
      StackMap stack:
         3: aload 6
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.lang.Integer
            astore 5 /* index */
        start local 5 // java.lang.Integer index
         4: .line 309
            aload 5 /* index */
            invokevirtual java.lang.Integer.intValue:()I
            invokestatic jdk.internal.jimage.decompressor.CompressIndexes.compress:(I)[B
            astore 7 /* buffer */
        start local 7 // byte[] buffer
         5: .line 310
            iload 4 /* l */
            aload 7 /* buffer */
            arraylength
            iadd
            istore 4 /* l */
         6: .line 311
            aload 3 /* buffers */
            aload 7 /* buffer */
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        end local 7 // byte[] buffer
        end local 5 // java.lang.Integer index
         7: .line 308
      StackMap locals:
      StackMap stack:
            aload 6
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 3
         8: .line 313
            iload 4 /* l */
            invokestatic java.nio.ByteBuffer.allocate:(I)Ljava/nio/ByteBuffer;
            astore 5 /* bb */
        start local 5 // java.nio.ByteBuffer bb
         9: .line 314
            aload 3 /* buffers */
            invokeinterface java.util.List.stream:()Ljava/util/stream/Stream;
            aload 5 /* bb */
            invokedynamic accept(Ljava/nio/ByteBuffer;)Ljava/util/function/Consumer;
              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;)V
                  jdk/tools/jlink/internal/plugins/StringSharingPlugin$CompactCPHelper.lambda$1(Ljava/nio/ByteBuffer;[B)V (6)
                  ([B)V
            invokeinterface java.util.stream.Stream.forEach:(Ljava/util/function/Consumer;)V
        10: .line 317
            aload 5 /* bb */
            invokevirtual java.nio.ByteBuffer.array:()[B
            astore 6 /* compressed_indices */
        start local 6 // byte[] compressed_indices
        11: .line 319
            aload 6 /* compressed_indices */
            arraylength
            invokestatic jdk.internal.jimage.decompressor.CompressIndexes.compress:(I)[B
        12: .line 318
            astore 7 /* compressed_size */
        start local 7 // byte[] compressed_size
        13: .line 320
            aload 1 /* out */
            aload 7 /* compressed_size */
            iconst_0
            aload 7 /* compressed_size */
            arraylength
            invokevirtual java.io.DataOutputStream.write:([BII)V
        14: .line 321
            aload 1 /* out */
            aload 6 /* compressed_indices */
            iconst_0
            aload 6 /* compressed_indices */
            arraylength
            invokevirtual java.io.DataOutputStream.write:([BII)V
        15: .line 322
            return
        end local 7 // byte[] compressed_size
        end local 6 // byte[] compressed_indices
        end local 5 // java.nio.ByteBuffer bb
        end local 4 // int l
        end local 3 // java.util.List buffers
        end local 2 // java.util.List indexes
        end local 1 // java.io.DataOutputStream out
        end local 0 // jdk.tools.jlink.internal.plugins.StringSharingPlugin$CompactCPHelper this
      LocalVariableTable:
        Start  End  Slot                Name  Signature
            0   16     0                this  Ljdk/tools/jlink/internal/plugins/StringSharingPlugin$CompactCPHelper;
            0   16     1                 out  Ljava/io/DataOutputStream;
            0   16     2             indexes  Ljava/util/List<Ljava/lang/Integer;>;
            1   16     3             buffers  Ljava/util/List<[B>;
            2   16     4                   l  I
            4    7     5               index  Ljava/lang/Integer;
            5    7     7              buffer  [B
            9   16     5                  bb  Ljava/nio/ByteBuffer;
           11   16     6  compressed_indices  [B
           13   16     7     compressed_size  [B
    Exceptions:
      throws java.io.IOException
    Signature: (Ljava/io/DataOutputStream;Ljava/util/List<Ljava/lang/Integer;>;)V
    MethodParameters:
         Name  Flags
      out      
      indexes  

  private void writeUTF8Reference(java.io.DataOutputStream, int);
    descriptor: (Ljava/io/DataOutputStream;I)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=4, args_size=3
        start local 0 // jdk.tools.jlink.internal.plugins.StringSharingPlugin$CompactCPHelper this
        start local 1 // java.io.DataOutputStream out
        start local 2 // int index
         0: .line 326
            aload 1 /* out */
            bipush 23
            invokevirtual java.io.DataOutputStream.write:(I)V
         1: .line 327
            iload 2 /* index */
            invokestatic jdk.internal.jimage.decompressor.CompressIndexes.compress:(I)[B
            astore 3 /* compressed */
        start local 3 // byte[] compressed
         2: .line 328
            aload 1 /* out */
            aload 3 /* compressed */
            iconst_0
            aload 3 /* compressed */
            arraylength
            invokevirtual java.io.DataOutputStream.write:([BII)V
         3: .line 329
            return
        end local 3 // byte[] compressed
        end local 2 // int index
        end local 1 // java.io.DataOutputStream out
        end local 0 // jdk.tools.jlink.internal.plugins.StringSharingPlugin$CompactCPHelper this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    4     0        this  Ljdk/tools/jlink/internal/plugins/StringSharingPlugin$CompactCPHelper;
            0    4     1         out  Ljava/io/DataOutputStream;
            0    4     2       index  I
            2    4     3  compressed  [B
    Exceptions:
      throws java.io.IOException
    MethodParameters:
       Name  Flags
      out    
      index  

  private static java.lang.Integer lambda$0(jdk.tools.jlink.internal.StringTable, java.lang.String);
    descriptor: (Ljdk/tools/jlink/internal/StringTable;Ljava/lang/String;)Ljava/lang/Integer;
    flags: (0x100a) ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC
    Code:
      stack=2, locals=2, args_size=2
        start local 1 // java.lang.String type
         0: .line 265
            aload 0
            aload 1 /* type */
            invokeinterface jdk.tools.jlink.internal.StringTable.addString:(Ljava/lang/String;)I
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            areturn
        end local 1 // java.lang.String type
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     1  type  Ljava/lang/String;

  private static void lambda$1(java.nio.ByteBuffer, byte[]);
    descriptor: (Ljava/nio/ByteBuffer;[B)V
    flags: (0x100a) ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC
    Code:
      stack=2, locals=2, args_size=2
        start local 1 // byte[] buf
         0: .line 315
            aload 0
            aload 1 /* buf */
            invokevirtual java.nio.ByteBuffer.put:([B)Ljava/nio/ByteBuffer;
            pop
         1: .line 316
            return
        end local 1 // byte[] buf
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     1   buf  [B
}
SourceFile: "StringSharingPlugin.java"
NestHost: jdk.tools.jlink.internal.plugins.StringSharingPlugin
InnerClasses:
  public final Lookup = java.lang.invoke.MethodHandles$Lookup of java.lang.invoke.MethodHandles
  public ParseResult = jdk.internal.jimage.decompressor.SignatureParser$ParseResult of jdk.internal.jimage.decompressor.SignatureParser
  private final CompactCPHelper = jdk.tools.jlink.internal.plugins.StringSharingPlugin$CompactCPHelper of jdk.tools.jlink.internal.plugins.StringSharingPlugin
  private final DescriptorsScanner = jdk.tools.jlink.internal.plugins.StringSharingPlugin$CompactCPHelper$DescriptorsScanner of jdk.tools.jlink.internal.plugins.StringSharingPlugin$CompactCPHelper