public class jdk.internal.module.ModuleHashesBuilder
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: jdk.internal.module.ModuleHashesBuilder
  super_class: java.lang.Object
{
  private final java.lang.module.Configuration configuration;
    descriptor: Ljava/lang/module/Configuration;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final java.util.Set<java.lang.String> hashModuleCandidates;
    descriptor: Ljava/util/Set;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/Set<Ljava/lang/String;>;

  public void <init>(java.lang.module.Configuration, java.util.Set<java.lang.String>);
    descriptor: (Ljava/lang/module/Configuration;Ljava/util/Set;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=3, args_size=3
        start local 0 // jdk.internal.module.ModuleHashesBuilder this
        start local 1 // java.lang.module.Configuration config
        start local 2 // java.util.Set modules
         0: .line 58
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 59
            aload 0 /* this */
            aload 1 /* config */
            putfield jdk.internal.module.ModuleHashesBuilder.configuration:Ljava/lang/module/Configuration;
         2: .line 60
            aload 0 /* this */
            aload 2 /* modules */
            putfield jdk.internal.module.ModuleHashesBuilder.hashModuleCandidates:Ljava/util/Set;
         3: .line 61
            return
        end local 2 // java.util.Set modules
        end local 1 // java.lang.module.Configuration config
        end local 0 // jdk.internal.module.ModuleHashesBuilder this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    4     0     this  Ljdk/internal/module/ModuleHashesBuilder;
            0    4     1   config  Ljava/lang/module/Configuration;
            0    4     2  modules  Ljava/util/Set<Ljava/lang/String;>;
    Signature: (Ljava/lang/module/Configuration;Ljava/util/Set<Ljava/lang/String;>;)V
    MethodParameters:
         Name  Flags
      config   
      modules  

  public java.util.Map<java.lang.String, jdk.internal.module.ModuleHashes> computeHashes(java.util.Set<java.lang.String>);
    descriptor: (Ljava/util/Set;)Ljava/util/Map;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=9, args_size=2
        start local 0 // jdk.internal.module.ModuleHashesBuilder this
        start local 1 // java.util.Set roots
         0: .line 76
            new jdk.internal.module.ModuleHashesBuilder$Graph$Builder
            dup
            invokespecial jdk.internal.module.ModuleHashesBuilder$Graph$Builder.<init>:()V
            astore 2 /* builder */
        start local 2 // jdk.internal.module.ModuleHashesBuilder$Graph$Builder builder
         1: .line 77
            new java.util.ArrayDeque
            dup
            aload 0 /* this */
            getfield jdk.internal.module.ModuleHashesBuilder.configuration:Ljava/lang/module/Configuration;
            invokevirtual java.lang.module.Configuration.modules:()Ljava/util/Set;
            invokespecial java.util.ArrayDeque.<init>:(Ljava/util/Collection;)V
            astore 3 /* todo */
        start local 3 // java.util.Deque todo
         2: .line 78
            new java.util.HashSet
            dup
            invokespecial java.util.HashSet.<init>:()V
            astore 4 /* visited */
        start local 4 // java.util.Set visited
         3: .line 80
            goto 12
        start local 5 // java.lang.module.ResolvedModule rm
         4: .line 81
      StackMap locals: jdk.internal.module.ModuleHashesBuilder java.util.Set jdk.internal.module.ModuleHashesBuilder$Graph$Builder java.util.Deque java.util.Set java.lang.module.ResolvedModule
      StackMap stack:
            aload 4 /* visited */
            aload 5 /* rm */
            invokeinterface java.util.Set.add:(Ljava/lang/Object;)Z
            ifeq 12
         5: .line 82
            aload 2 /* builder */
            aload 5 /* rm */
            invokevirtual java.lang.module.ResolvedModule.name:()Ljava/lang/String;
            invokevirtual jdk.internal.module.ModuleHashesBuilder$Graph$Builder.addNode:(Ljava/lang/Object;)V
         6: .line 83
            aload 5 /* rm */
            invokevirtual java.lang.module.ResolvedModule.reads:()Ljava/util/Set;
            invokeinterface java.util.Set.iterator:()Ljava/util/Iterator;
            astore 7
            goto 11
      StackMap locals: jdk.internal.module.ModuleHashesBuilder java.util.Set jdk.internal.module.ModuleHashesBuilder$Graph$Builder java.util.Deque java.util.Set java.lang.module.ResolvedModule top java.util.Iterator
      StackMap stack:
         7: aload 7
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.lang.module.ResolvedModule
            astore 6 /* dm */
        start local 6 // java.lang.module.ResolvedModule dm
         8: .line 84
            aload 4 /* visited */
            aload 6 /* dm */
            invokeinterface java.util.Set.contains:(Ljava/lang/Object;)Z
            ifne 10
         9: .line 85
            aload 3 /* todo */
            aload 6 /* dm */
            invokeinterface java.util.Deque.push:(Ljava/lang/Object;)V
        10: .line 87
      StackMap locals: jdk.internal.module.ModuleHashesBuilder java.util.Set jdk.internal.module.ModuleHashesBuilder$Graph$Builder java.util.Deque java.util.Set java.lang.module.ResolvedModule java.lang.module.ResolvedModule java.util.Iterator
      StackMap stack:
            aload 2 /* builder */
            aload 5 /* rm */
            invokevirtual java.lang.module.ResolvedModule.name:()Ljava/lang/String;
            aload 6 /* dm */
            invokevirtual java.lang.module.ResolvedModule.name:()Ljava/lang/String;
            invokevirtual jdk.internal.module.ModuleHashesBuilder$Graph$Builder.addEdge:(Ljava/lang/Object;Ljava/lang/Object;)V
        end local 6 // java.lang.module.ResolvedModule dm
        11: .line 83
      StackMap locals: jdk.internal.module.ModuleHashesBuilder java.util.Set jdk.internal.module.ModuleHashesBuilder$Graph$Builder java.util.Deque java.util.Set java.lang.module.ResolvedModule top java.util.Iterator
      StackMap stack:
            aload 7
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 7
        end local 5 // java.lang.module.ResolvedModule rm
        12: .line 80
      StackMap locals: jdk.internal.module.ModuleHashesBuilder java.util.Set jdk.internal.module.ModuleHashesBuilder$Graph$Builder java.util.Deque java.util.Set
      StackMap stack:
            aload 3 /* todo */
            invokeinterface java.util.Deque.poll:()Ljava/lang/Object;
            checkcast java.lang.module.ResolvedModule
            dup
            astore 5 /* rm */
        start local 5 // java.lang.module.ResolvedModule rm
        13: ifnonnull 4
        14: .line 94
            aload 2 /* builder */
            invokevirtual jdk.internal.module.ModuleHashesBuilder$Graph$Builder.build:()Ljdk/internal/module/ModuleHashesBuilder$Graph;
            invokevirtual jdk.internal.module.ModuleHashesBuilder$Graph.transpose:()Ljdk/internal/module/ModuleHashesBuilder$Graph;
            astore 6 /* transposedGraph */
        start local 6 // jdk.internal.module.ModuleHashesBuilder$Graph transposedGraph
        15: .line 99
            new java.util.HashSet
            dup
            invokespecial java.util.HashSet.<init>:()V
            astore 7 /* mods */
        start local 7 // java.util.Set mods
        16: .line 100
            new java.util.TreeMap
            dup
            invokespecial java.util.TreeMap.<init>:()V
            astore 8 /* hashes */
        start local 8 // java.util.Map hashes
        17: .line 101
            aload 2 /* builder */
            invokevirtual jdk.internal.module.ModuleHashesBuilder$Graph$Builder.build:()Ljdk/internal/module/ModuleHashesBuilder$Graph;
        18: .line 102
            invokevirtual jdk.internal.module.ModuleHashesBuilder$Graph.orderedNodes:()Ljava/util/stream/Stream;
        19: .line 103
            aload 1 /* roots */
            aload 7 /* mods */
            invokedynamic test(Ljava/util/Set;Ljava/util/Set;)Ljava/util/function/Predicate;
              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;)Z
                  jdk/internal/module/ModuleHashesBuilder.lambda$0(Ljava/util/Set;Ljava/util/Set;Ljava/lang/String;)Z (6)
                  (Ljava/lang/String;)Z
            invokeinterface java.util.stream.Stream.filter:(Ljava/util/function/Predicate;)Ljava/util/stream/Stream;
        20: .line 104
            aload 0 /* this */
            aload 6 /* transposedGraph */
            aload 7 /* mods */
            aload 8 /* hashes */
            invokedynamic accept(Ljdk/internal/module/ModuleHashesBuilder;Ljdk/internal/module/ModuleHashesBuilder$Graph;Ljava/util/Set;Ljava/util/Map;)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/internal/module/ModuleHashesBuilder.lambda$1(Ljdk/internal/module/ModuleHashesBuilder$Graph;Ljava/util/Set;Ljava/util/Map;Ljava/lang/String;)V (7)
                  (Ljava/lang/String;)V
            invokeinterface java.util.stream.Stream.forEach:(Ljava/util/function/Consumer;)V
        21: .line 123
            aload 8 /* hashes */
            areturn
        end local 8 // java.util.Map hashes
        end local 7 // java.util.Set mods
        end local 6 // jdk.internal.module.ModuleHashesBuilder$Graph transposedGraph
        end local 5 // java.lang.module.ResolvedModule rm
        end local 4 // java.util.Set visited
        end local 3 // java.util.Deque todo
        end local 2 // jdk.internal.module.ModuleHashesBuilder$Graph$Builder builder
        end local 1 // java.util.Set roots
        end local 0 // jdk.internal.module.ModuleHashesBuilder this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0   22     0             this  Ljdk/internal/module/ModuleHashesBuilder;
            0   22     1            roots  Ljava/util/Set<Ljava/lang/String;>;
            1   22     2          builder  Ljdk/internal/module/ModuleHashesBuilder$Graph$Builder<Ljava/lang/String;>;
            2   22     3             todo  Ljava/util/Deque<Ljava/lang/module/ResolvedModule;>;
            3   22     4          visited  Ljava/util/Set<Ljava/lang/module/ResolvedModule;>;
            4   12     5               rm  Ljava/lang/module/ResolvedModule;
           13   22     5               rm  Ljava/lang/module/ResolvedModule;
            8   11     6               dm  Ljava/lang/module/ResolvedModule;
           15   22     6  transposedGraph  Ljdk/internal/module/ModuleHashesBuilder$Graph<Ljava/lang/String;>;
           16   22     7             mods  Ljava/util/Set<Ljava/lang/String;>;
           17   22     8           hashes  Ljava/util/Map<Ljava/lang/String;Ljdk/internal/module/ModuleHashes;>;
    Signature: (Ljava/util/Set<Ljava/lang/String;>;)Ljava/util/Map<Ljava/lang/String;Ljdk/internal/module/ModuleHashes;>;
    MethodParameters:
       Name  Flags
      roots  

  private static boolean lambda$0(java.util.Set, java.util.Set, java.lang.String);
    descriptor: (Ljava/util/Set;Ljava/util/Set;Ljava/lang/String;)Z
    flags: (0x100a) ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC
    Code:
      stack=2, locals=3, args_size=3
        start local 2 // java.lang.String mn
         0: .line 103
            aload 0
            aload 2 /* mn */
            invokeinterface java.util.Set.contains:(Ljava/lang/Object;)Z
            ifeq 1
            aload 1
            aload 2 /* mn */
            invokeinterface java.util.Set.contains:(Ljava/lang/Object;)Z
            ifne 1
            iconst_1
            goto 2
      StackMap locals:
      StackMap stack:
         1: iconst_0
      StackMap locals:
      StackMap stack: int
         2: ireturn
        end local 2 // java.lang.String mn
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     2    mn  Ljava/lang/String;

  private void lambda$1(jdk.internal.module.ModuleHashesBuilder$Graph, java.util.Set, java.util.Map, java.lang.String);
    descriptor: (Ljdk/internal/module/ModuleHashesBuilder$Graph;Ljava/util/Set;Ljava/util/Map;Ljava/lang/String;)V
    flags: (0x1002) ACC_PRIVATE, ACC_SYNTHETIC
    Code:
      stack=4, locals=7, args_size=5
        start local 0 // jdk.internal.module.ModuleHashesBuilder this
        start local 4 // java.lang.String mn
         0: .line 107
            aload 1
            aload 4 /* mn */
            invokevirtual jdk.internal.module.ModuleHashesBuilder$Graph.dfs:(Ljava/lang/Object;)Ljava/util/Set;
         1: .line 108
            invokeinterface java.util.Set.stream:()Ljava/util/stream/Stream;
         2: .line 109
            aload 0 /* this */
            aload 4 /* mn */
            invokedynamic test(Ljdk/internal/module/ModuleHashesBuilder;Ljava/lang/String;)Ljava/util/function/Predicate;
              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;)Z
                  jdk/internal/module/ModuleHashesBuilder.lambda$2(Ljava/lang/String;Ljava/lang/String;)Z (7)
                  (Ljava/lang/String;)Z
            invokeinterface java.util.stream.Stream.filter:(Ljava/util/function/Predicate;)Ljava/util/stream/Stream;
         3: .line 110
            invokestatic java.util.stream.Collectors.toSet:()Ljava/util/stream/Collector;
            invokeinterface java.util.stream.Stream.collect:(Ljava/util/stream/Collector;)Ljava/lang/Object;
            checkcast java.util.Set
         4: .line 107
            astore 5 /* ns */
        start local 5 // java.util.Set ns
         5: .line 111
            aload 2
            aload 4 /* mn */
            invokeinterface java.util.Set.add:(Ljava/lang/Object;)Z
            pop
         6: .line 112
            aload 2
            aload 5 /* ns */
            invokeinterface java.util.Set.addAll:(Ljava/util/Collection;)Z
            pop
         7: .line 114
            aload 5 /* ns */
            invokeinterface java.util.Set.isEmpty:()Z
            ifne 14
         8: .line 115
            aload 5 /* ns */
            invokeinterface java.util.Set.stream:()Ljava/util/stream/Stream;
         9: .line 116
            aload 0 /* this */
            invokedynamic apply(Ljdk/internal/module/ModuleHashesBuilder;)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/internal/module/ModuleHashesBuilder.lambda$3(Ljava/lang/String;)Ljava/lang/module/ResolvedModule; (7)
                  (Ljava/lang/String;)Ljava/lang/module/ResolvedModule;
            invokeinterface java.util.stream.Stream.map:(Ljava/util/function/Function;)Ljava/util/stream/Stream;
        10: .line 118
            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;
                  java/lang/module/ResolvedModule.reference()Ljava/lang/module/ModuleReference; (5)
                  (Ljava/lang/module/ResolvedModule;)Ljava/lang/module/ModuleReference;
            invokeinterface java.util.stream.Stream.map:(Ljava/util/function/Function;)Ljava/util/stream/Stream;
        11: .line 119
            invokestatic java.util.stream.Collectors.toSet:()Ljava/util/stream/Collector;
            invokeinterface java.util.stream.Stream.collect:(Ljava/util/stream/Collector;)Ljava/lang/Object;
            checkcast java.util.Set
        12: .line 115
            astore 6 /* mrefs */
        start local 6 // java.util.Set mrefs
        13: .line 120
            aload 3
            aload 4 /* mn */
            aload 6 /* mrefs */
            ldc "SHA-256"
            invokestatic jdk.internal.module.ModuleHashes.generate:(Ljava/util/Set;Ljava/lang/String;)Ljdk/internal/module/ModuleHashes;
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        end local 6 // java.util.Set mrefs
        end local 5 // java.util.Set ns
        14: .line 122
      StackMap locals:
      StackMap stack:
            return
        end local 4 // java.lang.String mn
        end local 0 // jdk.internal.module.ModuleHashesBuilder this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0   15     0   this  Ljdk/internal/module/ModuleHashesBuilder;
            0   15     4     mn  Ljava/lang/String;
            5   14     5     ns  Ljava/util/Set<Ljava/lang/String;>;
           13   14     6  mrefs  Ljava/util/Set<Ljava/lang/module/ModuleReference;>;

  private boolean lambda$2(java.lang.String, java.lang.String);
    descriptor: (Ljava/lang/String;Ljava/lang/String;)Z
    flags: (0x1002) ACC_PRIVATE, ACC_SYNTHETIC
    Code:
      stack=2, locals=3, args_size=3
        start local 0 // jdk.internal.module.ModuleHashesBuilder this
        start local 2 // java.lang.String n
         0: .line 109
            aload 2 /* n */
            aload 1
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 1
            aload 0 /* this */
            getfield jdk.internal.module.ModuleHashesBuilder.hashModuleCandidates:Ljava/util/Set;
            aload 2 /* n */
            invokeinterface java.util.Set.contains:(Ljava/lang/Object;)Z
            ifeq 1
            iconst_1
            goto 2
      StackMap locals:
      StackMap stack:
         1: iconst_0
      StackMap locals:
      StackMap stack: int
         2: ireturn
        end local 2 // java.lang.String n
        end local 0 // jdk.internal.module.ModuleHashesBuilder this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Ljdk/internal/module/ModuleHashesBuilder;
            0    3     2     n  Ljava/lang/String;

  private java.lang.module.ResolvedModule lambda$3(java.lang.String);
    descriptor: (Ljava/lang/String;)Ljava/lang/module/ResolvedModule;
    flags: (0x1002) ACC_PRIVATE, ACC_SYNTHETIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // jdk.internal.module.ModuleHashesBuilder this
        start local 1 // java.lang.String name
         0: .line 116
            aload 0 /* this */
            getfield jdk.internal.module.ModuleHashesBuilder.configuration:Ljava/lang/module/Configuration;
            aload 1 /* name */
            invokevirtual java.lang.module.Configuration.findModule:(Ljava/lang/String;)Ljava/util/Optional;
         1: .line 117
            invokedynamic get()Ljava/util/function/Supplier;
              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;
                  java/lang/InternalError.<init>()V (8)
                  ()Ljava/lang/InternalError;
            invokevirtual java.util.Optional.orElseThrow:(Ljava/util/function/Supplier;)Ljava/lang/Object;
            checkcast java.lang.module.ResolvedModule
            areturn
        end local 1 // java.lang.String name
        end local 0 // jdk.internal.module.ModuleHashesBuilder this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Ljdk/internal/module/ModuleHashesBuilder;
            0    2     1  name  Ljava/lang/String;
}
SourceFile: "ModuleHashesBuilder.java"
NestMembers:
  jdk.internal.module.ModuleHashesBuilder$Graph  jdk.internal.module.ModuleHashesBuilder$Graph$Builder  jdk.internal.module.ModuleHashesBuilder$TopoSorter
InnerClasses:
  public final Lookup = java.lang.invoke.MethodHandles$Lookup of java.lang.invoke.MethodHandles
  Graph = jdk.internal.module.ModuleHashesBuilder$Graph of jdk.internal.module.ModuleHashesBuilder
  Builder = jdk.internal.module.ModuleHashesBuilder$Graph$Builder of jdk.internal.module.ModuleHashesBuilder$Graph
  private TopoSorter = jdk.internal.module.ModuleHashesBuilder$TopoSorter of jdk.internal.module.ModuleHashesBuilder