public class org.hibernate.boot.registry.selector.internal.StrategySelectorImpl implements org.hibernate.boot.registry.selector.spi.StrategySelector
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.hibernate.boot.registry.selector.internal.StrategySelectorImpl
  super_class: java.lang.Object
{
  private static final org.jboss.logging.Logger log;
    descriptor: Lorg/jboss/logging/Logger;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

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

  private final org.hibernate.boot.registry.classloading.spi.ClassLoaderService classLoaderService;
    descriptor: Lorg/hibernate/boot/registry/classloading/spi/ClassLoaderService;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 43
            ldc Lorg/hibernate/boot/registry/selector/internal/StrategySelectorImpl;
            invokestatic org.jboss.logging.Logger.getLogger:(Ljava/lang/Class;)Lorg/jboss/logging/Logger;
            putstatic org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.log:Lorg/jboss/logging/Logger;
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public void <init>(org.hibernate.boot.registry.classloading.spi.ClassLoaderService);
    descriptor: (Lorg/hibernate/boot/registry/classloading/spi/ClassLoaderService;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // org.hibernate.boot.registry.selector.internal.StrategySelectorImpl this
        start local 1 // org.hibernate.boot.registry.classloading.spi.ClassLoaderService classLoaderService
         0: .line 55
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 45
            aload 0 /* this */
         2: .line 46
            new java.util.concurrent.ConcurrentHashMap
            dup
            invokespecial java.util.concurrent.ConcurrentHashMap.<init>:()V
            putfield org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.namedStrategyImplementorByStrategyMap:Ljava/util/Map;
         3: .line 56
            aload 0 /* this */
            aload 1 /* classLoaderService */
            putfield org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.classLoaderService:Lorg/hibernate/boot/registry/classloading/spi/ClassLoaderService;
         4: .line 57
            return
        end local 1 // org.hibernate.boot.registry.classloading.spi.ClassLoaderService classLoaderService
        end local 0 // org.hibernate.boot.registry.selector.internal.StrategySelectorImpl this
      LocalVariableTable:
        Start  End  Slot                Name  Signature
            0    5     0                this  Lorg/hibernate/boot/registry/selector/internal/StrategySelectorImpl;
            0    5     1  classLoaderService  Lorg/hibernate/boot/registry/classloading/spi/ClassLoaderService;
    MethodParameters:
                    Name  Flags
      classLoaderService  

  public <T> void registerStrategyImplementor(java.lang.Class<T>, java.lang.String, java.lang.Class<? extends T>);
    descriptor: (Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Class;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=6, args_size=4
        start local 0 // org.hibernate.boot.registry.selector.internal.StrategySelectorImpl this
        start local 1 // java.lang.Class strategy
        start local 2 // java.lang.String name
        start local 3 // java.lang.Class implementation
         0: .line 61
            aload 0 /* this */
            getfield org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.namedStrategyImplementorByStrategyMap:Ljava/util/Map;
            aload 1 /* strategy */
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.util.Map
            astore 4 /* namedStrategyImplementorMap */
        start local 4 // java.util.Map namedStrategyImplementorMap
         1: .line 62
            aload 4 /* namedStrategyImplementorMap */
            ifnonnull 4
         2: .line 63
            new java.util.concurrent.ConcurrentHashMap
            dup
            invokespecial java.util.concurrent.ConcurrentHashMap.<init>:()V
            astore 4 /* namedStrategyImplementorMap */
         3: .line 64
            aload 0 /* this */
            getfield org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.namedStrategyImplementorByStrategyMap:Ljava/util/Map;
            aload 1 /* strategy */
            aload 4 /* namedStrategyImplementorMap */
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         4: .line 67
      StackMap locals: java.util.Map
      StackMap stack:
            aload 4 /* namedStrategyImplementorMap */
            aload 2 /* name */
            aload 3 /* implementation */
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.lang.Class
            astore 5 /* old */
        start local 5 // java.lang.Class old
         5: .line 68
            aload 5 /* old */
            ifnonnull 14
         6: .line 69
            getstatic org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.log:Lorg/jboss/logging/Logger;
         7: .line 71
            ldc "Registering named strategy selector [%s] : [%s] -> [%s]"
            iconst_3
            anewarray java.lang.Object
            dup
            iconst_0
         8: .line 72
            aload 1 /* strategy */
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
            aastore
            dup
            iconst_1
         9: .line 73
            aload 2 /* name */
            aastore
            dup
            iconst_2
        10: .line 74
            aload 3 /* implementation */
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
            aastore
        11: .line 70
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
        12: .line 69
            invokevirtual org.jboss.logging.Logger.trace:(Ljava/lang/Object;)V
        13: .line 77
            goto 22
        14: .line 79
      StackMap locals: java.lang.Class
      StackMap stack:
            getstatic org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.log:Lorg/jboss/logging/Logger;
        15: .line 81
            ldc "Registering named strategy selector [%s] : [%s] -> [%s] (replacing [%s])"
            iconst_4
            anewarray java.lang.Object
            dup
            iconst_0
        16: .line 82
            aload 1 /* strategy */
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
            aastore
            dup
            iconst_1
        17: .line 83
            aload 2 /* name */
            aastore
            dup
            iconst_2
        18: .line 84
            aload 3 /* implementation */
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
            aastore
            dup
            iconst_3
        19: .line 85
            aload 5 /* old */
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
            aastore
        20: .line 80
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
        21: .line 79
            invokevirtual org.jboss.logging.Logger.debug:(Ljava/lang/Object;)V
        22: .line 89
      StackMap locals:
      StackMap stack:
            return
        end local 5 // java.lang.Class old
        end local 4 // java.util.Map namedStrategyImplementorMap
        end local 3 // java.lang.Class implementation
        end local 2 // java.lang.String name
        end local 1 // java.lang.Class strategy
        end local 0 // org.hibernate.boot.registry.selector.internal.StrategySelectorImpl this
      LocalVariableTable:
        Start  End  Slot                         Name  Signature
            0   23     0                         this  Lorg/hibernate/boot/registry/selector/internal/StrategySelectorImpl;
            0   23     1                     strategy  Ljava/lang/Class<TT;>;
            0   23     2                         name  Ljava/lang/String;
            0   23     3               implementation  Ljava/lang/Class<+TT;>;
            1   23     4  namedStrategyImplementorMap  Ljava/util/Map<Ljava/lang/String;Ljava/lang/Class;>;
            5   23     5                          old  Ljava/lang/Class;
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/Class<TT;>;Ljava/lang/String;Ljava/lang/Class<+TT;>;)V
    MethodParameters:
                Name  Flags
      strategy        
      name            
      implementation  

  public <T> void unRegisterStrategyImplementor(java.lang.Class<T>, java.lang.Class<? extends T>);
    descriptor: (Ljava/lang/Class;Ljava/lang/Class;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=6, args_size=3
        start local 0 // org.hibernate.boot.registry.selector.internal.StrategySelectorImpl this
        start local 1 // java.lang.Class strategy
        start local 2 // java.lang.Class implementation
         0: .line 93
            aload 0 /* this */
            getfield org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.namedStrategyImplementorByStrategyMap:Ljava/util/Map;
            aload 1 /* strategy */
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.util.Map
            astore 3 /* namedStrategyImplementorMap */
        start local 3 // java.util.Map namedStrategyImplementorMap
         1: .line 94
            aload 3 /* namedStrategyImplementorMap */
            ifnonnull 4
         2: .line 95
            getstatic org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.log:Lorg/jboss/logging/Logger;
            ldc "Named strategy map did not exist on call to un-register"
            invokevirtual org.jboss.logging.Logger.debug:(Ljava/lang/Object;)V
         3: .line 96
            return
         4: .line 99
      StackMap locals: java.util.Map
      StackMap stack:
            aload 3 /* namedStrategyImplementorMap */
            invokeinterface java.util.Map.values:()Ljava/util/Collection;
            invokeinterface java.util.Collection.iterator:()Ljava/util/Iterator;
            astore 4 /* itr */
        start local 4 // java.util.Iterator itr
         5: .line 100
            goto 9
         6: .line 101
      StackMap locals: java.util.Iterator
      StackMap stack:
            aload 4 /* itr */
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.lang.Class
            astore 5 /* registered */
        start local 5 // java.lang.Class registered
         7: .line 102
            aload 5 /* registered */
            aload 2 /* implementation */
            invokevirtual java.lang.Object.equals:(Ljava/lang/Object;)Z
            ifeq 9
         8: .line 103
            aload 4 /* itr */
            invokeinterface java.util.Iterator.remove:()V
        end local 5 // java.lang.Class registered
         9: .line 100
      StackMap locals:
      StackMap stack:
            aload 4 /* itr */
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 6
        10: .line 108
            aload 3 /* namedStrategyImplementorMap */
            invokeinterface java.util.Map.isEmpty:()Z
            ifeq 12
        11: .line 109
            aload 0 /* this */
            getfield org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.namedStrategyImplementorByStrategyMap:Ljava/util/Map;
            aload 1 /* strategy */
            invokeinterface java.util.Map.remove:(Ljava/lang/Object;)Ljava/lang/Object;
            pop
        12: .line 111
      StackMap locals:
      StackMap stack:
            return
        end local 4 // java.util.Iterator itr
        end local 3 // java.util.Map namedStrategyImplementorMap
        end local 2 // java.lang.Class implementation
        end local 1 // java.lang.Class strategy
        end local 0 // org.hibernate.boot.registry.selector.internal.StrategySelectorImpl this
      LocalVariableTable:
        Start  End  Slot                         Name  Signature
            0   13     0                         this  Lorg/hibernate/boot/registry/selector/internal/StrategySelectorImpl;
            0   13     1                     strategy  Ljava/lang/Class<TT;>;
            0   13     2               implementation  Ljava/lang/Class<+TT;>;
            1   13     3  namedStrategyImplementorMap  Ljava/util/Map<Ljava/lang/String;Ljava/lang/Class;>;
            5   13     4                          itr  Ljava/util/Iterator;
            7    9     5                   registered  Ljava/lang/Class;
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/Class<TT;>;Ljava/lang/Class<+TT;>;)V
    MethodParameters:
                Name  Flags
      strategy        
      implementation  

  public <T> java.lang.Class<? extends T> selectStrategyImplementor(java.lang.Class<T>, java.lang.String);
    descriptor: (Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Class;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=5, args_size=3
        start local 0 // org.hibernate.boot.registry.selector.internal.StrategySelectorImpl this
        start local 1 // java.lang.Class strategy
        start local 2 // java.lang.String name
         0: .line 116
            aload 0 /* this */
            getfield org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.namedStrategyImplementorByStrategyMap:Ljava/util/Map;
            aload 1 /* strategy */
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.util.Map
            astore 3 /* namedStrategyImplementorMap */
        start local 3 // java.util.Map namedStrategyImplementorMap
         1: .line 117
            aload 3 /* namedStrategyImplementorMap */
            ifnull 5
         2: .line 118
            aload 3 /* namedStrategyImplementorMap */
            aload 2 /* name */
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.lang.Class
            astore 4 /* registered */
        start local 4 // java.lang.Class registered
         3: .line 119
            aload 4 /* registered */
            ifnull 5
         4: .line 120
            aload 4 /* registered */
            areturn
        end local 4 // java.lang.Class registered
         5: .line 125
      StackMap locals: java.util.Map
      StackMap stack:
            aload 0 /* this */
            getfield org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.classLoaderService:Lorg/hibernate/boot/registry/classloading/spi/ClassLoaderService;
            aload 2 /* name */
            invokeinterface org.hibernate.boot.registry.classloading.spi.ClassLoaderService.classForName:(Ljava/lang/String;)Ljava/lang/Class;
         6: areturn
         7: .line 127
      StackMap locals:
      StackMap stack: org.hibernate.boot.registry.classloading.spi.ClassLoadingException
            pop
         8: .line 128
            new org.hibernate.boot.registry.selector.spi.StrategySelectionException
            dup
         9: .line 129
            new java.lang.StringBuilder
            dup
            ldc "Unable to resolve name ["
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 2 /* name */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc "] as strategy ["
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 1 /* strategy */
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc "]"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        10: .line 128
            invokespecial org.hibernate.boot.registry.selector.spi.StrategySelectionException.<init>:(Ljava/lang/String;)V
            athrow
        end local 3 // java.util.Map namedStrategyImplementorMap
        end local 2 // java.lang.String name
        end local 1 // java.lang.Class strategy
        end local 0 // org.hibernate.boot.registry.selector.internal.StrategySelectorImpl this
      LocalVariableTable:
        Start  End  Slot                         Name  Signature
            0   11     0                         this  Lorg/hibernate/boot/registry/selector/internal/StrategySelectorImpl;
            0   11     1                     strategy  Ljava/lang/Class<TT;>;
            0   11     2                         name  Ljava/lang/String;
            1   11     3  namedStrategyImplementorMap  Ljava/util/Map<Ljava/lang/String;Ljava/lang/Class;>;
            3    5     4                   registered  Ljava/lang/Class;
      Exception table:
        from    to  target  type
           5     6       7  Class org.hibernate.boot.registry.classloading.spi.ClassLoadingException
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/Class<TT;>;Ljava/lang/String;)Ljava/lang/Class<+TT;>;
    MethodParameters:
          Name  Flags
      strategy  
      name      

  public <T> T resolveStrategy(java.lang.Class<T>, );
    descriptor: (Ljava/lang/Class;Ljava/lang/Object;)Ljava/lang/Object;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=3, args_size=3
        start local 0 // org.hibernate.boot.registry.selector.internal.StrategySelectorImpl this
        start local 1 // java.lang.Class strategy
        start local 2 // java.lang.Object strategyReference
         0: .line 136
            aload 0 /* this */
            aload 1 /* strategy */
            aload 2 /* strategyReference */
            aconst_null
            invokevirtual org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.resolveDefaultableStrategy:(Ljava/lang/Class;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            areturn
        end local 2 // java.lang.Object strategyReference
        end local 1 // java.lang.Class strategy
        end local 0 // org.hibernate.boot.registry.selector.internal.StrategySelectorImpl this
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0    1     0               this  Lorg/hibernate/boot/registry/selector/internal/StrategySelectorImpl;
            0    1     1           strategy  Ljava/lang/Class<TT;>;
            0    1     2  strategyReference  Ljava/lang/Object;
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/Class<TT;>;Ljava/lang/Object;)TT;
    MethodParameters:
                   Name  Flags
      strategy           
      strategyReference  

  public <T> T resolveDefaultableStrategy(java.lang.Class<T>, , );
    descriptor: (Ljava/lang/Class;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=7, locals=6, args_size=4
        start local 0 // org.hibernate.boot.registry.selector.internal.StrategySelectorImpl this
        start local 1 // java.lang.Class strategy
        start local 2 // java.lang.Object strategyReference
        start local 3 // java.lang.Object defaultValue
         0: .line 142
            aload 2 /* strategyReference */
            ifnonnull 2
         1: .line 143
            aload 3 /* defaultValue */
            areturn
         2: .line 146
      StackMap locals:
      StackMap stack:
            aload 1 /* strategy */
            aload 2 /* strategyReference */
            invokevirtual java.lang.Class.isInstance:(Ljava/lang/Object;)Z
            ifeq 4
         3: .line 147
            aload 1 /* strategy */
            aload 2 /* strategyReference */
            invokevirtual java.lang.Class.cast:(Ljava/lang/Object;)Ljava/lang/Object;
            areturn
         4: .line 151
      StackMap locals:
      StackMap stack:
            ldc Ljava/lang/Class;
            aload 2 /* strategyReference */
            invokevirtual java.lang.Class.isInstance:(Ljava/lang/Object;)Z
            ifeq 7
         5: .line 152
            aload 2 /* strategyReference */
            checkcast java.lang.Class
            astore 4 /* implementationClass */
        start local 4 // java.lang.Class implementationClass
         6: .line 153
            goto 8
        end local 4 // java.lang.Class implementationClass
         7: .line 155
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* strategy */
            aload 2 /* strategyReference */
            invokevirtual java.lang.Object.toString:()Ljava/lang/String;
            invokevirtual org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.selectStrategyImplementor:(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Class;
            astore 4 /* implementationClass */
        start local 4 // java.lang.Class implementationClass
         8: .line 159
      StackMap locals: java.lang.Class
      StackMap stack:
            aload 4 /* implementationClass */
            invokevirtual java.lang.Class.newInstance:()Ljava/lang/Object;
         9: areturn
        10: .line 161
      StackMap locals:
      StackMap stack: java.lang.Exception
            astore 5 /* e */
        start local 5 // java.lang.Exception e
        11: .line 162
            new org.hibernate.boot.registry.selector.spi.StrategySelectionException
            dup
        12: .line 163
            ldc "Could not instantiate named strategy class [%s]"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 4 /* implementationClass */
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
            aastore
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
        13: .line 164
            aload 5 /* e */
        14: .line 162
            invokespecial org.hibernate.boot.registry.selector.spi.StrategySelectionException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 5 // java.lang.Exception e
        end local 4 // java.lang.Class implementationClass
        end local 3 // java.lang.Object defaultValue
        end local 2 // java.lang.Object strategyReference
        end local 1 // java.lang.Class strategy
        end local 0 // org.hibernate.boot.registry.selector.internal.StrategySelectorImpl this
      LocalVariableTable:
        Start  End  Slot                 Name  Signature
            0   15     0                 this  Lorg/hibernate/boot/registry/selector/internal/StrategySelectorImpl;
            0   15     1             strategy  Ljava/lang/Class<TT;>;
            0   15     2    strategyReference  Ljava/lang/Object;
            0   15     3         defaultValue  TT;
            6    7     4  implementationClass  Ljava/lang/Class<+TT;>;
            8   15     4  implementationClass  Ljava/lang/Class<+TT;>;
           11   15     5                    e  Ljava/lang/Exception;
      Exception table:
        from    to  target  type
           8     9      10  Class java.lang.Exception
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/Class<TT;>;Ljava/lang/Object;TT;)TT;
    MethodParameters:
                   Name  Flags
      strategy           
      strategyReference  
      defaultValue       
}
SourceFile: "StrategySelectorImpl.java"