public class com.sun.tools.javac.comp.TreeHasher extends com.sun.tools.javac.tree.TreeScanner
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: com.sun.tools.javac.comp.TreeHasher
  super_class: com.sun.tools.javac.tree.TreeScanner
{
  private final java.util.Map<com.sun.tools.javac.code.Symbol, java.lang.Integer> symbolHashes;
    descriptor: Ljava/util/Map;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/Map<Lcom/sun/tools/javac/code/Symbol;Ljava/lang/Integer;>;

  private int result;
    descriptor: I
    flags: (0x0002) ACC_PRIVATE

  public void <init>(java.util.Map<com.sun.tools.javac.code.Symbol, java.lang.Integer>);
    descriptor: (Ljava/util/Map;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // com.sun.tools.javac.comp.TreeHasher this
        start local 1 // java.util.Map symbolHashes
         0: .line 48
            aload 0 /* this */
            invokespecial com.sun.tools.javac.tree.TreeScanner.<init>:()V
         1: .line 46
            aload 0 /* this */
            bipush 17
            putfield com.sun.tools.javac.comp.TreeHasher.result:I
         2: .line 49
            aload 0 /* this */
            aload 1 /* symbolHashes */
            invokestatic java.util.Objects.requireNonNull:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.util.Map
            putfield com.sun.tools.javac.comp.TreeHasher.symbolHashes:Ljava/util/Map;
         3: .line 50
            return
        end local 1 // java.util.Map symbolHashes
        end local 0 // com.sun.tools.javac.comp.TreeHasher this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    4     0          this  Lcom/sun/tools/javac/comp/TreeHasher;
            0    4     1  symbolHashes  Ljava/util/Map<Lcom/sun/tools/javac/code/Symbol;Ljava/lang/Integer;>;
    Signature: (Ljava/util/Map<Lcom/sun/tools/javac/code/Symbol;Ljava/lang/Integer;>;)V
    MethodParameters:
              Name  Flags
      symbolHashes  

  public static int hash(com.sun.tools.javac.tree.JCTree, java.util.Collection<? extends com.sun.tools.javac.code.Symbol>);
    descriptor: (Lcom/sun/tools/javac/tree/JCTree;Ljava/util/Collection;)I
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=4, args_size=2
        start local 0 // com.sun.tools.javac.tree.JCTree tree
        start local 1 // java.util.Collection symbols
         0: .line 53
            aload 0 /* tree */
            ifnonnull 2
         1: .line 54
            iconst_0
            ireturn
         2: .line 56
      StackMap locals:
      StackMap stack:
            new java.util.HashMap
            dup
            invokespecial java.util.HashMap.<init>:()V
            astore 2 /* symbolHashes */
        start local 2 // java.util.Map symbolHashes
         3: .line 57
            aload 1 /* symbols */
            aload 2 /* symbolHashes */
            invokedynamic accept(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
                  com/sun/tools/javac/comp/TreeHasher.lambda$0(Ljava/util/Map;Lcom/sun/tools/javac/code/Symbol;)V (6)
                  (Lcom/sun/tools/javac/code/Symbol;)V
            invokeinterface java.util.Collection.forEach:(Ljava/util/function/Consumer;)V
         4: .line 58
            new com.sun.tools.javac.comp.TreeHasher
            dup
            aload 2 /* symbolHashes */
            invokespecial com.sun.tools.javac.comp.TreeHasher.<init>:(Ljava/util/Map;)V
            astore 3 /* hasher */
        start local 3 // com.sun.tools.javac.comp.TreeHasher hasher
         5: .line 59
            aload 0 /* tree */
            aload 3 /* hasher */
            invokevirtual com.sun.tools.javac.tree.JCTree.accept:(Lcom/sun/tools/javac/tree/JCTree$Visitor;)V
         6: .line 60
            aload 3 /* hasher */
            getfield com.sun.tools.javac.comp.TreeHasher.result:I
            ireturn
        end local 3 // com.sun.tools.javac.comp.TreeHasher hasher
        end local 2 // java.util.Map symbolHashes
        end local 1 // java.util.Collection symbols
        end local 0 // com.sun.tools.javac.tree.JCTree tree
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    7     0          tree  Lcom/sun/tools/javac/tree/JCTree;
            0    7     1       symbols  Ljava/util/Collection<+Lcom/sun/tools/javac/code/Symbol;>;
            3    7     2  symbolHashes  Ljava/util/Map<Lcom/sun/tools/javac/code/Symbol;Ljava/lang/Integer;>;
            5    7     3        hasher  Lcom/sun/tools/javac/comp/TreeHasher;
    Signature: (Lcom/sun/tools/javac/tree/JCTree;Ljava/util/Collection<+Lcom/sun/tools/javac/code/Symbol;>;)I
    MethodParameters:
         Name  Flags
      tree     
      symbols  

  private void hash(java.lang.Object);
    descriptor: (Ljava/lang/Object;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // com.sun.tools.javac.comp.TreeHasher this
        start local 1 // java.lang.Object object
         0: .line 64
            aload 0 /* this */
            bipush 31
            aload 0 /* this */
            getfield com.sun.tools.javac.comp.TreeHasher.result:I
            imul
            aload 1 /* object */
            invokestatic java.util.Objects.hashCode:(Ljava/lang/Object;)I
            iadd
            putfield com.sun.tools.javac.comp.TreeHasher.result:I
         1: .line 65
            return
        end local 1 // java.lang.Object object
        end local 0 // com.sun.tools.javac.comp.TreeHasher this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    2     0    this  Lcom/sun/tools/javac/comp/TreeHasher;
            0    2     1  object  Ljava/lang/Object;
    MethodParameters:
        Name  Flags
      object  

  public void scan(com.sun.tools.javac.tree.JCTree);
    descriptor: (Lcom/sun/tools/javac/tree/JCTree;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=3, args_size=2
        start local 0 // com.sun.tools.javac.comp.TreeHasher this
        start local 1 // com.sun.tools.javac.tree.JCTree tree
         0: .line 69
            aload 1 /* tree */
            ifnonnull 2
         1: .line 70
            return
         2: .line 72
      StackMap locals:
      StackMap stack:
            aload 1 /* tree */
            invokestatic com.sun.tools.javac.tree.TreeInfo.skipParens:(Lcom/sun/tools/javac/tree/JCTree;)Lcom/sun/tools/javac/tree/JCTree;
            astore 1 /* tree */
         3: .line 73
            aload 1 /* tree */
            getfield com.sun.tools.javac.tree.JCTree.type:Lcom/sun/tools/javac/code/Type;
            ifnull 8
         4: .line 74
            aload 1 /* tree */
            getfield com.sun.tools.javac.tree.JCTree.type:Lcom/sun/tools/javac/code/Type;
            invokevirtual com.sun.tools.javac.code.Type.constValue:()Ljava/lang/Object;
            astore 2 /* value */
        start local 2 // java.lang.Object value
         5: .line 75
            aload 2 /* value */
            ifnull 8
         6: .line 76
            aload 0 /* this */
            aload 2 /* value */
            invokevirtual com.sun.tools.javac.comp.TreeHasher.hash:(Ljava/lang/Object;)V
         7: .line 77
            return
        end local 2 // java.lang.Object value
         8: .line 80
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* tree */
            invokevirtual com.sun.tools.javac.tree.JCTree.getTag:()Lcom/sun/tools/javac/tree/JCTree$Tag;
            invokevirtual com.sun.tools.javac.comp.TreeHasher.hash:(Ljava/lang/Object;)V
         9: .line 81
            aload 1 /* tree */
            aload 0 /* this */
            invokevirtual com.sun.tools.javac.tree.JCTree.accept:(Lcom/sun/tools/javac/tree/JCTree$Visitor;)V
        10: .line 82
            return
        end local 1 // com.sun.tools.javac.tree.JCTree tree
        end local 0 // com.sun.tools.javac.comp.TreeHasher this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0   11     0   this  Lcom/sun/tools/javac/comp/TreeHasher;
            0   11     1   tree  Lcom/sun/tools/javac/tree/JCTree;
            5    8     2  value  Ljava/lang/Object;
    MethodParameters:
      Name  Flags
      tree  

  public void visitLiteral(com.sun.tools.javac.tree.JCTree$JCLiteral);
    descriptor: (Lcom/sun/tools/javac/tree/JCTree$JCLiteral;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // com.sun.tools.javac.comp.TreeHasher this
        start local 1 // com.sun.tools.javac.tree.JCTree$JCLiteral tree
         0: .line 86
            aload 0 /* this */
            aload 1 /* tree */
            getfield com.sun.tools.javac.tree.JCTree$JCLiteral.value:Ljava/lang/Object;
            invokevirtual com.sun.tools.javac.comp.TreeHasher.hash:(Ljava/lang/Object;)V
         1: .line 87
            aload 0 /* this */
            aload 1 /* tree */
            invokespecial com.sun.tools.javac.tree.TreeScanner.visitLiteral:(Lcom/sun/tools/javac/tree/JCTree$JCLiteral;)V
         2: .line 88
            return
        end local 1 // com.sun.tools.javac.tree.JCTree$JCLiteral tree
        end local 0 // com.sun.tools.javac.comp.TreeHasher this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lcom/sun/tools/javac/comp/TreeHasher;
            0    3     1  tree  Lcom/sun/tools/javac/tree/JCTree$JCLiteral;
    MethodParameters:
      Name  Flags
      tree  

  public void visitIdent(com.sun.tools.javac.tree.JCTree$JCIdent);
    descriptor: (Lcom/sun/tools/javac/tree/JCTree$JCIdent;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=4, args_size=2
        start local 0 // com.sun.tools.javac.comp.TreeHasher this
        start local 1 // com.sun.tools.javac.tree.JCTree$JCIdent tree
         0: .line 92
            aload 1 /* tree */
            getfield com.sun.tools.javac.tree.JCTree$JCIdent.sym:Lcom/sun/tools/javac/code/Symbol;
            astore 2 /* sym */
        start local 2 // com.sun.tools.javac.code.Symbol sym
         1: .line 93
            aload 2 /* sym */
            ifnull 6
         2: .line 94
            aload 0 /* this */
            getfield com.sun.tools.javac.comp.TreeHasher.symbolHashes:Ljava/util/Map;
            aload 2 /* sym */
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.lang.Integer
            astore 3 /* hash */
        start local 3 // java.lang.Integer hash
         3: .line 95
            aload 3 /* hash */
            ifnull 6
         4: .line 96
            aload 0 /* this */
            aload 3 /* hash */
            invokevirtual com.sun.tools.javac.comp.TreeHasher.hash:(Ljava/lang/Object;)V
         5: .line 97
            return
        end local 3 // java.lang.Integer hash
         6: .line 100
      StackMap locals: com.sun.tools.javac.code.Symbol
      StackMap stack:
            aload 0 /* this */
            aload 2 /* sym */
            invokevirtual com.sun.tools.javac.comp.TreeHasher.hash:(Ljava/lang/Object;)V
         7: .line 101
            return
        end local 2 // com.sun.tools.javac.code.Symbol sym
        end local 1 // com.sun.tools.javac.tree.JCTree$JCIdent tree
        end local 0 // com.sun.tools.javac.comp.TreeHasher this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    8     0  this  Lcom/sun/tools/javac/comp/TreeHasher;
            0    8     1  tree  Lcom/sun/tools/javac/tree/JCTree$JCIdent;
            1    8     2   sym  Lcom/sun/tools/javac/code/Symbol;
            3    6     3  hash  Ljava/lang/Integer;
    MethodParameters:
      Name  Flags
      tree  

  public void visitSelect(com.sun.tools.javac.tree.JCTree$JCFieldAccess);
    descriptor: (Lcom/sun/tools/javac/tree/JCTree$JCFieldAccess;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // com.sun.tools.javac.comp.TreeHasher this
        start local 1 // com.sun.tools.javac.tree.JCTree$JCFieldAccess tree
         0: .line 105
            aload 0 /* this */
            aload 1 /* tree */
            getfield com.sun.tools.javac.tree.JCTree$JCFieldAccess.sym:Lcom/sun/tools/javac/code/Symbol;
            invokevirtual com.sun.tools.javac.comp.TreeHasher.hash:(Ljava/lang/Object;)V
         1: .line 106
            aload 0 /* this */
            aload 1 /* tree */
            invokespecial com.sun.tools.javac.tree.TreeScanner.visitSelect:(Lcom/sun/tools/javac/tree/JCTree$JCFieldAccess;)V
         2: .line 107
            return
        end local 1 // com.sun.tools.javac.tree.JCTree$JCFieldAccess tree
        end local 0 // com.sun.tools.javac.comp.TreeHasher this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lcom/sun/tools/javac/comp/TreeHasher;
            0    3     1  tree  Lcom/sun/tools/javac/tree/JCTree$JCFieldAccess;
    MethodParameters:
      Name  Flags
      tree  

  public void visitVarDef(com.sun.tools.javac.tree.JCTree$JCVariableDecl);
    descriptor: (Lcom/sun/tools/javac/tree/JCTree$JCVariableDecl;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // com.sun.tools.javac.comp.TreeHasher this
        start local 1 // com.sun.tools.javac.tree.JCTree$JCVariableDecl tree
         0: .line 111
            aload 0 /* this */
            getfield com.sun.tools.javac.comp.TreeHasher.symbolHashes:Ljava/util/Map;
            aload 1 /* tree */
            getfield com.sun.tools.javac.tree.JCTree$JCVariableDecl.sym:Lcom/sun/tools/javac/code/Symbol$VarSymbol;
            aload 0 /* this */
            invokedynamic apply(Lcom/sun/tools/javac/comp/TreeHasher;)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/sun/tools/javac/comp/TreeHasher.lambda$1(Lcom/sun/tools/javac/code/Symbol;)Ljava/lang/Integer; (7)
                  (Lcom/sun/tools/javac/code/Symbol;)Ljava/lang/Integer;
            invokeinterface java.util.Map.computeIfAbsent:(Ljava/lang/Object;Ljava/util/function/Function;)Ljava/lang/Object;
            pop
         1: .line 112
            aload 0 /* this */
            aload 1 /* tree */
            invokespecial com.sun.tools.javac.tree.TreeScanner.visitVarDef:(Lcom/sun/tools/javac/tree/JCTree$JCVariableDecl;)V
         2: .line 113
            return
        end local 1 // com.sun.tools.javac.tree.JCTree$JCVariableDecl tree
        end local 0 // com.sun.tools.javac.comp.TreeHasher this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lcom/sun/tools/javac/comp/TreeHasher;
            0    3     1  tree  Lcom/sun/tools/javac/tree/JCTree$JCVariableDecl;
    MethodParameters:
      Name  Flags
      tree  

  private static void lambda$0(java.util.Map, com.sun.tools.javac.code.Symbol);
    descriptor: (Ljava/util/Map;Lcom/sun/tools/javac/code/Symbol;)V
    flags: (0x100a) ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC
    Code:
      stack=3, locals=2, args_size=2
        start local 1 // com.sun.tools.javac.code.Symbol s
         0: .line 57
            aload 0
            aload 1 /* s */
            aload 0
            invokeinterface java.util.Map.size:()I
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            return
        end local 1 // com.sun.tools.javac.code.Symbol s
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     1     s  Lcom/sun/tools/javac/code/Symbol;

  private java.lang.Integer lambda$1(com.sun.tools.javac.code.Symbol);
    descriptor: (Lcom/sun/tools/javac/code/Symbol;)Ljava/lang/Integer;
    flags: (0x1002) ACC_PRIVATE, ACC_SYNTHETIC
    Code:
      stack=1, locals=2, args_size=2
        start local 0 // com.sun.tools.javac.comp.TreeHasher this
        start local 1 // com.sun.tools.javac.code.Symbol k
         0: .line 111
            aload 0 /* this */
            getfield com.sun.tools.javac.comp.TreeHasher.symbolHashes:Ljava/util/Map;
            invokeinterface java.util.Map.size:()I
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            areturn
        end local 1 // com.sun.tools.javac.code.Symbol k
        end local 0 // com.sun.tools.javac.comp.TreeHasher this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/sun/tools/javac/comp/TreeHasher;
            0    1     1     k  Lcom/sun/tools/javac/code/Symbol;
}
SourceFile: "TreeHasher.java"
InnerClasses:
  public JCFieldAccess = com.sun.tools.javac.tree.JCTree$JCFieldAccess of com.sun.tools.javac.tree.JCTree
  public JCIdent = com.sun.tools.javac.tree.JCTree$JCIdent of com.sun.tools.javac.tree.JCTree
  public JCLiteral = com.sun.tools.javac.tree.JCTree$JCLiteral of com.sun.tools.javac.tree.JCTree
  public JCVariableDecl = com.sun.tools.javac.tree.JCTree$JCVariableDecl of com.sun.tools.javac.tree.JCTree
  public final Tag = com.sun.tools.javac.tree.JCTree$Tag of com.sun.tools.javac.tree.JCTree
  public abstract Visitor = com.sun.tools.javac.tree.JCTree$Visitor of com.sun.tools.javac.tree.JCTree
  public final Lookup = java.lang.invoke.MethodHandles$Lookup of java.lang.invoke.MethodHandles