class com.sun.tools.javac.code.Types$ImplementationCache
  minor version: 0
  major version: 59
  flags: flags: (0x0020) ACC_SUPER
  this_class: com.sun.tools.javac.code.Types$ImplementationCache
  super_class: java.lang.Object
{
  private java.util.WeakHashMap<com.sun.tools.javac.code.Symbol$MethodSymbol, java.lang.ref.SoftReference<java.util.Map<com.sun.tools.javac.code.Symbol$TypeSymbol, com.sun.tools.javac.code.Types$ImplementationCache$Entry>>> _map;
    descriptor: Ljava/util/WeakHashMap;
    flags: (0x0002) ACC_PRIVATE
    Signature: Ljava/util/WeakHashMap<Lcom/sun/tools/javac/code/Symbol$MethodSymbol;Ljava/lang/ref/SoftReference<Ljava/util/Map<Lcom/sun/tools/javac/code/Symbol$TypeSymbol;Lcom/sun/tools/javac/code/Types$ImplementationCache$Entry;>;>;>;

  final com.sun.tools.javac.code.Types this$0;
    descriptor: Lcom/sun/tools/javac/code/Types;
    flags: (0x1010) ACC_FINAL, ACC_SYNTHETIC

  void <init>(com.sun.tools.javac.code.Types);
    descriptor: (Lcom/sun/tools/javac/code/Types;)V
    flags: (0x0000) 
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // com.sun.tools.javac.code.Types$ImplementationCache this
         0: .line 2878
            aload 0 /* this */
            aload 1
            putfield com.sun.tools.javac.code.Types$ImplementationCache.this$0:Lcom/sun/tools/javac/code/Types;
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 2880
            aload 0 /* this */
            new java.util.WeakHashMap
            dup
            invokespecial java.util.WeakHashMap.<init>:()V
            putfield com.sun.tools.javac.code.Types$ImplementationCache._map:Ljava/util/WeakHashMap;
         2: .line 2878
            return
        end local 0 // com.sun.tools.javac.code.Types$ImplementationCache this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lcom/sun/tools/javac/code/Types$ImplementationCache;
    MethodParameters:
        Name  Flags
      this$0  final

  com.sun.tools.javac.code.Symbol$MethodSymbol get(com.sun.tools.javac.code.Symbol$MethodSymbol, com.sun.tools.javac.code.Symbol$TypeSymbol, boolean, com.sun.tools.javac.util.Filter<com.sun.tools.javac.code.Symbol>);
    descriptor: (Lcom/sun/tools/javac/code/Symbol$MethodSymbol;Lcom/sun/tools/javac/code/Symbol$TypeSymbol;ZLcom/sun/tools/javac/util/Filter;)Lcom/sun/tools/javac/code/Symbol$MethodSymbol;
    flags: (0x0000) 
    Code:
      stack=9, locals=10, args_size=5
        start local 0 // com.sun.tools.javac.code.Types$ImplementationCache this
        start local 1 // com.sun.tools.javac.code.Symbol$MethodSymbol ms
        start local 2 // com.sun.tools.javac.code.Symbol$TypeSymbol origin
        start local 3 // boolean checkResult
        start local 4 // com.sun.tools.javac.util.Filter implFilter
         0: .line 2906
            aload 0 /* this */
            getfield com.sun.tools.javac.code.Types$ImplementationCache._map:Ljava/util/WeakHashMap;
            aload 1 /* ms */
            invokevirtual java.util.WeakHashMap.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.lang.ref.SoftReference
            astore 5 /* ref_cache */
        start local 5 // java.lang.ref.SoftReference ref_cache
         1: .line 2907
            aload 5 /* ref_cache */
            ifnull 2
            aload 5 /* ref_cache */
            invokevirtual java.lang.ref.SoftReference.get:()Ljava/lang/Object;
            checkcast java.util.Map
            goto 3
      StackMap locals: java.lang.ref.SoftReference
      StackMap stack:
         2: aconst_null
      StackMap locals:
      StackMap stack: java.util.Map
         3: astore 6 /* cache */
        start local 6 // java.util.Map cache
         4: .line 2908
            aload 6 /* cache */
            ifnonnull 7
         5: .line 2909
            new java.util.HashMap
            dup
            invokespecial java.util.HashMap.<init>:()V
            astore 6 /* cache */
         6: .line 2910
            aload 0 /* this */
            getfield com.sun.tools.javac.code.Types$ImplementationCache._map:Ljava/util/WeakHashMap;
            aload 1 /* ms */
            new java.lang.ref.SoftReference
            dup
            aload 6 /* cache */
            invokespecial java.lang.ref.SoftReference.<init>:(Ljava/lang/Object;)V
            invokevirtual java.util.WeakHashMap.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         7: .line 2912
      StackMap locals: java.util.Map
      StackMap stack:
            aload 6 /* cache */
            aload 2 /* origin */
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast com.sun.tools.javac.code.Types$ImplementationCache$Entry
            astore 7 /* e */
        start local 7 // com.sun.tools.javac.code.Types$ImplementationCache$Entry e
         8: .line 2913
            aload 0 /* this */
            getfield com.sun.tools.javac.code.Types$ImplementationCache.this$0:Lcom/sun/tools/javac/code/Types;
            aload 2 /* origin */
            getfield com.sun.tools.javac.code.Symbol$TypeSymbol.type:Lcom/sun/tools/javac/code/Type;
            iconst_1
            invokevirtual com.sun.tools.javac.code.Types.membersClosure:(Lcom/sun/tools/javac/code/Type;Z)Lcom/sun/tools/javac/code/Scope$CompoundScope;
            astore 8 /* members */
        start local 8 // com.sun.tools.javac.code.Scope$CompoundScope members
         9: .line 2914
            aload 7 /* e */
            ifnull 11
        10: .line 2915
            aload 7 /* e */
            aload 4 /* implFilter */
            iload 3 /* checkResult */
            aload 8 /* members */
            invokevirtual com.sun.tools.javac.code.Scope$CompoundScope.getMark:()I
            invokevirtual com.sun.tools.javac.code.Types$ImplementationCache$Entry.matches:(Lcom/sun/tools/javac/util/Filter;ZI)Z
            ifne 14
        11: .line 2916
      StackMap locals: com.sun.tools.javac.code.Types$ImplementationCache$Entry com.sun.tools.javac.code.Scope$CompoundScope
      StackMap stack:
            aload 0 /* this */
            aload 1 /* ms */
            aload 2 /* origin */
            iload 3 /* checkResult */
            aload 4 /* implFilter */
            invokevirtual com.sun.tools.javac.code.Types$ImplementationCache.implementationInternal:(Lcom/sun/tools/javac/code/Symbol$MethodSymbol;Lcom/sun/tools/javac/code/Symbol$TypeSymbol;ZLcom/sun/tools/javac/util/Filter;)Lcom/sun/tools/javac/code/Symbol$MethodSymbol;
            astore 9 /* impl */
        start local 9 // com.sun.tools.javac.code.Symbol$MethodSymbol impl
        12: .line 2917
            aload 6 /* cache */
            aload 2 /* origin */
            new com.sun.tools.javac.code.Types$ImplementationCache$Entry
            dup
            aload 0 /* this */
            aload 9 /* impl */
            aload 4 /* implFilter */
            iload 3 /* checkResult */
            aload 8 /* members */
            invokevirtual com.sun.tools.javac.code.Scope$CompoundScope.getMark:()I
            invokespecial com.sun.tools.javac.code.Types$ImplementationCache$Entry.<init>:(Lcom/sun/tools/javac/code/Types$ImplementationCache;Lcom/sun/tools/javac/code/Symbol$MethodSymbol;Lcom/sun/tools/javac/util/Filter;ZI)V
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        13: .line 2918
            aload 9 /* impl */
            areturn
        end local 9 // com.sun.tools.javac.code.Symbol$MethodSymbol impl
        14: .line 2921
      StackMap locals:
      StackMap stack:
            aload 7 /* e */
            getfield com.sun.tools.javac.code.Types$ImplementationCache$Entry.cachedImpl:Lcom/sun/tools/javac/code/Symbol$MethodSymbol;
            areturn
        end local 8 // com.sun.tools.javac.code.Scope$CompoundScope members
        end local 7 // com.sun.tools.javac.code.Types$ImplementationCache$Entry e
        end local 6 // java.util.Map cache
        end local 5 // java.lang.ref.SoftReference ref_cache
        end local 4 // com.sun.tools.javac.util.Filter implFilter
        end local 3 // boolean checkResult
        end local 2 // com.sun.tools.javac.code.Symbol$TypeSymbol origin
        end local 1 // com.sun.tools.javac.code.Symbol$MethodSymbol ms
        end local 0 // com.sun.tools.javac.code.Types$ImplementationCache this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   15     0         this  Lcom/sun/tools/javac/code/Types$ImplementationCache;
            0   15     1           ms  Lcom/sun/tools/javac/code/Symbol$MethodSymbol;
            0   15     2       origin  Lcom/sun/tools/javac/code/Symbol$TypeSymbol;
            0   15     3  checkResult  Z
            0   15     4   implFilter  Lcom/sun/tools/javac/util/Filter<Lcom/sun/tools/javac/code/Symbol;>;
            1   15     5    ref_cache  Ljava/lang/ref/SoftReference<Ljava/util/Map<Lcom/sun/tools/javac/code/Symbol$TypeSymbol;Lcom/sun/tools/javac/code/Types$ImplementationCache$Entry;>;>;
            4   15     6        cache  Ljava/util/Map<Lcom/sun/tools/javac/code/Symbol$TypeSymbol;Lcom/sun/tools/javac/code/Types$ImplementationCache$Entry;>;
            8   15     7            e  Lcom/sun/tools/javac/code/Types$ImplementationCache$Entry;
            9   15     8      members  Lcom/sun/tools/javac/code/Scope$CompoundScope;
           12   14     9         impl  Lcom/sun/tools/javac/code/Symbol$MethodSymbol;
    Signature: (Lcom/sun/tools/javac/code/Symbol$MethodSymbol;Lcom/sun/tools/javac/code/Symbol$TypeSymbol;ZLcom/sun/tools/javac/util/Filter<Lcom/sun/tools/javac/code/Symbol;>;)Lcom/sun/tools/javac/code/Symbol$MethodSymbol;
    MethodParameters:
             Name  Flags
      ms           
      origin       
      checkResult  
      implFilter   

  private com.sun.tools.javac.code.Symbol$MethodSymbol implementationInternal(com.sun.tools.javac.code.Symbol$MethodSymbol, com.sun.tools.javac.code.Symbol$TypeSymbol, boolean, com.sun.tools.javac.util.Filter<com.sun.tools.javac.code.Symbol>);
    descriptor: (Lcom/sun/tools/javac/code/Symbol$MethodSymbol;Lcom/sun/tools/javac/code/Symbol$TypeSymbol;ZLcom/sun/tools/javac/util/Filter;)Lcom/sun/tools/javac/code/Symbol$MethodSymbol;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=10, args_size=5
        start local 0 // com.sun.tools.javac.code.Types$ImplementationCache this
        start local 1 // com.sun.tools.javac.code.Symbol$MethodSymbol ms
        start local 2 // com.sun.tools.javac.code.Symbol$TypeSymbol origin
        start local 3 // boolean checkResult
        start local 4 // com.sun.tools.javac.util.Filter implFilter
         0: .line 2926
            aload 2 /* origin */
            getfield com.sun.tools.javac.code.Symbol$TypeSymbol.type:Lcom/sun/tools/javac/code/Type;
            astore 5 /* t */
        start local 5 // com.sun.tools.javac.code.Type t
         1: goto 15
         2: .line 2927
      StackMap locals: com.sun.tools.javac.code.Type
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.tools.javac.code.Types$ImplementationCache.this$0:Lcom/sun/tools/javac/code/Types;
            aload 5 /* t */
            iconst_0
            invokevirtual com.sun.tools.javac.code.Types.skipTypeVars:(Lcom/sun/tools/javac/code/Type;Z)Lcom/sun/tools/javac/code/Type;
            astore 5 /* t */
         3: .line 2928
            aload 5 /* t */
            getfield com.sun.tools.javac.code.Type.tsym:Lcom/sun/tools/javac/code/Symbol$TypeSymbol;
            astore 6 /* c */
        start local 6 // com.sun.tools.javac.code.Symbol$TypeSymbol c
         4: .line 2929
            aconst_null
            astore 7 /* bestSoFar */
        start local 7 // com.sun.tools.javac.code.Symbol bestSoFar
         5: .line 2930
            aload 6 /* c */
            invokevirtual com.sun.tools.javac.code.Symbol$TypeSymbol.members:()Lcom/sun/tools/javac/code/Scope$WriteableScope;
            aload 1 /* ms */
            getfield com.sun.tools.javac.code.Symbol$MethodSymbol.name:Lcom/sun/tools/javac/util/Name;
            aload 4 /* implFilter */
            invokevirtual com.sun.tools.javac.code.Scope$WriteableScope.getSymbolsByName:(Lcom/sun/tools/javac/util/Name;Lcom/sun/tools/javac/util/Filter;)Ljava/lang/Iterable;
            invokeinterface java.lang.Iterable.iterator:()Ljava/util/Iterator;
            astore 9
            goto 11
      StackMap locals: com.sun.tools.javac.code.Types$ImplementationCache com.sun.tools.javac.code.Symbol$MethodSymbol com.sun.tools.javac.code.Symbol$TypeSymbol int com.sun.tools.javac.util.Filter com.sun.tools.javac.code.Type com.sun.tools.javac.code.Symbol$TypeSymbol com.sun.tools.javac.code.Symbol top java.util.Iterator
      StackMap stack:
         6: aload 9
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast com.sun.tools.javac.code.Symbol
            astore 8 /* sym */
        start local 8 // com.sun.tools.javac.code.Symbol sym
         7: .line 2931
            aload 8 /* sym */
            ifnull 11
            aload 8 /* sym */
            aload 1 /* ms */
            aload 2 /* origin */
            aload 0 /* this */
            getfield com.sun.tools.javac.code.Types$ImplementationCache.this$0:Lcom/sun/tools/javac/code/Types;
            iload 3 /* checkResult */
            invokevirtual com.sun.tools.javac.code.Symbol.overrides:(Lcom/sun/tools/javac/code/Symbol;Lcom/sun/tools/javac/code/Symbol$TypeSymbol;Lcom/sun/tools/javac/code/Types;Z)Z
            ifeq 11
         8: .line 2932
            aload 8 /* sym */
            astore 7 /* bestSoFar */
         9: .line 2933
            aload 8 /* sym */
            invokevirtual com.sun.tools.javac.code.Symbol.flags:()J
            ldc 1024
            land
            lconst_0
            lcmp
            ifne 11
        10: .line 2935
            goto 12
        end local 8 // com.sun.tools.javac.code.Symbol sym
        11: .line 2930
      StackMap locals:
      StackMap stack:
            aload 9
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 6
        12: .line 2939
      StackMap locals: com.sun.tools.javac.code.Types$ImplementationCache com.sun.tools.javac.code.Symbol$MethodSymbol com.sun.tools.javac.code.Symbol$TypeSymbol int com.sun.tools.javac.util.Filter com.sun.tools.javac.code.Type com.sun.tools.javac.code.Symbol$TypeSymbol com.sun.tools.javac.code.Symbol
      StackMap stack:
            aload 7 /* bestSoFar */
            ifnull 14
        13: .line 2941
            aload 7 /* bestSoFar */
            checkcast com.sun.tools.javac.code.Symbol$MethodSymbol
            areturn
        end local 7 // com.sun.tools.javac.code.Symbol bestSoFar
        end local 6 // com.sun.tools.javac.code.Symbol$TypeSymbol c
        14: .line 2926
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.tools.javac.code.Types$ImplementationCache.this$0:Lcom/sun/tools/javac/code/Types;
            aload 5 /* t */
            invokevirtual com.sun.tools.javac.code.Types.supertype:(Lcom/sun/tools/javac/code/Type;)Lcom/sun/tools/javac/code/Type;
            astore 5 /* t */
      StackMap locals:
      StackMap stack:
        15: aload 5 /* t */
            getstatic com.sun.tools.javac.code.TypeTag.CLASS:Lcom/sun/tools/javac/code/TypeTag;
            invokevirtual com.sun.tools.javac.code.Type.hasTag:(Lcom/sun/tools/javac/code/TypeTag;)Z
            ifne 2
            aload 5 /* t */
            getstatic com.sun.tools.javac.code.TypeTag.TYPEVAR:Lcom/sun/tools/javac/code/TypeTag;
            invokevirtual com.sun.tools.javac.code.Type.hasTag:(Lcom/sun/tools/javac/code/TypeTag;)Z
            ifne 2
        end local 5 // com.sun.tools.javac.code.Type t
        16: .line 2944
            aconst_null
            areturn
        end local 4 // com.sun.tools.javac.util.Filter implFilter
        end local 3 // boolean checkResult
        end local 2 // com.sun.tools.javac.code.Symbol$TypeSymbol origin
        end local 1 // com.sun.tools.javac.code.Symbol$MethodSymbol ms
        end local 0 // com.sun.tools.javac.code.Types$ImplementationCache this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   17     0         this  Lcom/sun/tools/javac/code/Types$ImplementationCache;
            0   17     1           ms  Lcom/sun/tools/javac/code/Symbol$MethodSymbol;
            0   17     2       origin  Lcom/sun/tools/javac/code/Symbol$TypeSymbol;
            0   17     3  checkResult  Z
            0   17     4   implFilter  Lcom/sun/tools/javac/util/Filter<Lcom/sun/tools/javac/code/Symbol;>;
            1   16     5            t  Lcom/sun/tools/javac/code/Type;
            4   14     6            c  Lcom/sun/tools/javac/code/Symbol$TypeSymbol;
            5   14     7    bestSoFar  Lcom/sun/tools/javac/code/Symbol;
            7   11     8          sym  Lcom/sun/tools/javac/code/Symbol;
    Signature: (Lcom/sun/tools/javac/code/Symbol$MethodSymbol;Lcom/sun/tools/javac/code/Symbol$TypeSymbol;ZLcom/sun/tools/javac/util/Filter<Lcom/sun/tools/javac/code/Symbol;>;)Lcom/sun/tools/javac/code/Symbol$MethodSymbol;
    MethodParameters:
             Name  Flags
      ms           
      origin       
      checkResult  
      implFilter   
}
SourceFile: "Types.java"
NestHost: com.sun.tools.javac.code.Types
InnerClasses:
  public CompoundScope = com.sun.tools.javac.code.Scope$CompoundScope of com.sun.tools.javac.code.Scope
  public abstract WriteableScope = com.sun.tools.javac.code.Scope$WriteableScope of com.sun.tools.javac.code.Scope
  public MethodSymbol = com.sun.tools.javac.code.Symbol$MethodSymbol of com.sun.tools.javac.code.Symbol
  public abstract TypeSymbol = com.sun.tools.javac.code.Symbol$TypeSymbol of com.sun.tools.javac.code.Symbol
  ImplementationCache = com.sun.tools.javac.code.Types$ImplementationCache of com.sun.tools.javac.code.Types
  Entry = com.sun.tools.javac.code.Types$ImplementationCache$Entry of com.sun.tools.javac.code.Types$ImplementationCache