public class org.springframework.util.MethodInvoker
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.springframework.util.MethodInvoker
  super_class: java.lang.Object
{
  protected java.lang.Class<?> targetClass;
    descriptor: Ljava/lang/Class;
    flags: (0x0004) ACC_PROTECTED
    Signature: Ljava/lang/Class<*>;
    RuntimeVisibleAnnotations: 
      org.springframework.lang.Nullable()

  private java.lang.Object targetObject;
    descriptor: Ljava/lang/Object;
    flags: (0x0002) ACC_PRIVATE
    RuntimeVisibleAnnotations: 
      org.springframework.lang.Nullable()

  private java.lang.String targetMethod;
    descriptor: Ljava/lang/String;
    flags: (0x0002) ACC_PRIVATE
    RuntimeVisibleAnnotations: 
      org.springframework.lang.Nullable()

  private java.lang.String staticMethod;
    descriptor: Ljava/lang/String;
    flags: (0x0002) ACC_PRIVATE
    RuntimeVisibleAnnotations: 
      org.springframework.lang.Nullable()

  private java.lang.Object[] arguments;
    descriptor: [Ljava/lang/Object;
    flags: (0x0002) ACC_PRIVATE
    RuntimeVisibleAnnotations: 
      org.springframework.lang.Nullable()

  private java.lang.reflect.Method methodObject;
    descriptor: Ljava/lang/reflect/Method;
    flags: (0x0002) ACC_PRIVATE
    RuntimeVisibleAnnotations: 
      org.springframework.lang.Nullable()

  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.springframework.util.MethodInvoker this
         0: .line 39
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
            return
        end local 0 // org.springframework.util.MethodInvoker this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/springframework/util/MethodInvoker;

  public void setTargetClass(java.lang.Class<?>);
    descriptor: (Ljava/lang/Class;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.springframework.util.MethodInvoker this
        start local 1 // java.lang.Class targetClass
         0: .line 69
            aload 0 /* this */
            aload 1 /* targetClass */
            putfield org.springframework.util.MethodInvoker.targetClass:Ljava/lang/Class;
         1: .line 70
            return
        end local 1 // java.lang.Class targetClass
        end local 0 // org.springframework.util.MethodInvoker this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    2     0         this  Lorg/springframework/util/MethodInvoker;
            0    2     1  targetClass  Ljava/lang/Class<*>;
    Signature: (Ljava/lang/Class<*>;)V
    RuntimeVisibleParameterAnnotations: 
      0:
        org.springframework.lang.Nullable()
    MethodParameters:
             Name  Flags
      targetClass  

  public java.lang.Class<?> getTargetClass();
    descriptor: ()Ljava/lang/Class;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.springframework.util.MethodInvoker this
         0: .line 77
            aload 0 /* this */
            getfield org.springframework.util.MethodInvoker.targetClass:Ljava/lang/Class;
            areturn
        end local 0 // org.springframework.util.MethodInvoker this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/springframework/util/MethodInvoker;
    Signature: ()Ljava/lang/Class<*>;
    RuntimeVisibleAnnotations: 
      org.springframework.lang.Nullable()

  public void setTargetObject(java.lang.Object);
    descriptor: (Ljava/lang/Object;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.springframework.util.MethodInvoker this
        start local 1 // java.lang.Object targetObject
         0: .line 88
            aload 0 /* this */
            aload 1 /* targetObject */
            putfield org.springframework.util.MethodInvoker.targetObject:Ljava/lang/Object;
         1: .line 89
            aload 1 /* targetObject */
            ifnull 3
         2: .line 90
            aload 0 /* this */
            aload 1 /* targetObject */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            putfield org.springframework.util.MethodInvoker.targetClass:Ljava/lang/Class;
         3: .line 92
      StackMap locals:
      StackMap stack:
            return
        end local 1 // java.lang.Object targetObject
        end local 0 // org.springframework.util.MethodInvoker this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    4     0          this  Lorg/springframework/util/MethodInvoker;
            0    4     1  targetObject  Ljava/lang/Object;
    RuntimeVisibleParameterAnnotations: 
      0:
        org.springframework.lang.Nullable()
    MethodParameters:
              Name  Flags
      targetObject  

  public java.lang.Object getTargetObject();
    descriptor: ()Ljava/lang/Object;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.springframework.util.MethodInvoker this
         0: .line 99
            aload 0 /* this */
            getfield org.springframework.util.MethodInvoker.targetObject:Ljava/lang/Object;
            areturn
        end local 0 // org.springframework.util.MethodInvoker this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/springframework/util/MethodInvoker;
    RuntimeVisibleAnnotations: 
      org.springframework.lang.Nullable()

  public void setTargetMethod(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.springframework.util.MethodInvoker this
        start local 1 // java.lang.String targetMethod
         0: .line 110
            aload 0 /* this */
            aload 1 /* targetMethod */
            putfield org.springframework.util.MethodInvoker.targetMethod:Ljava/lang/String;
         1: .line 111
            return
        end local 1 // java.lang.String targetMethod
        end local 0 // org.springframework.util.MethodInvoker this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    2     0          this  Lorg/springframework/util/MethodInvoker;
            0    2     1  targetMethod  Ljava/lang/String;
    RuntimeVisibleParameterAnnotations: 
      0:
        org.springframework.lang.Nullable()
    MethodParameters:
              Name  Flags
      targetMethod  

  public java.lang.String getTargetMethod();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.springframework.util.MethodInvoker this
         0: .line 118
            aload 0 /* this */
            getfield org.springframework.util.MethodInvoker.targetMethod:Ljava/lang/String;
            areturn
        end local 0 // org.springframework.util.MethodInvoker this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/springframework/util/MethodInvoker;
    RuntimeVisibleAnnotations: 
      org.springframework.lang.Nullable()

  public void setStaticMethod(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.springframework.util.MethodInvoker this
        start local 1 // java.lang.String staticMethod
         0: .line 129
            aload 0 /* this */
            aload 1 /* staticMethod */
            putfield org.springframework.util.MethodInvoker.staticMethod:Ljava/lang/String;
         1: .line 130
            return
        end local 1 // java.lang.String staticMethod
        end local 0 // org.springframework.util.MethodInvoker this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    2     0          this  Lorg/springframework/util/MethodInvoker;
            0    2     1  staticMethod  Ljava/lang/String;
    MethodParameters:
              Name  Flags
      staticMethod  

  public void setArguments(java.lang.Object[]);
    descriptor: ([Ljava/lang/Object;)V
    flags: (0x0081) ACC_PUBLIC, ACC_VARARGS
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.springframework.util.MethodInvoker this
        start local 1 // java.lang.Object[] arguments
         0: .line 137
            aload 0 /* this */
            aload 1 /* arguments */
            putfield org.springframework.util.MethodInvoker.arguments:[Ljava/lang/Object;
         1: .line 138
            return
        end local 1 // java.lang.Object[] arguments
        end local 0 // org.springframework.util.MethodInvoker this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    2     0       this  Lorg/springframework/util/MethodInvoker;
            0    2     1  arguments  [Ljava/lang/Object;
    MethodParameters:
           Name  Flags
      arguments  

  public java.lang.Object[] getArguments();
    descriptor: ()[Ljava/lang/Object;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.springframework.util.MethodInvoker this
         0: .line 144
            aload 0 /* this */
            getfield org.springframework.util.MethodInvoker.arguments:[Ljava/lang/Object;
            ifnull 1
            aload 0 /* this */
            getfield org.springframework.util.MethodInvoker.arguments:[Ljava/lang/Object;
            goto 2
      StackMap locals:
      StackMap stack:
         1: iconst_0
            anewarray java.lang.Object
      StackMap locals:
      StackMap stack: java.lang.Object[]
         2: areturn
        end local 0 // org.springframework.util.MethodInvoker this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lorg/springframework/util/MethodInvoker;

  public void prepare();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=6, args_size=1
        start local 0 // org.springframework.util.MethodInvoker this
         0: .line 155
            aload 0 /* this */
            getfield org.springframework.util.MethodInvoker.staticMethod:Ljava/lang/String;
            ifnull 10
         1: .line 156
            aload 0 /* this */
            getfield org.springframework.util.MethodInvoker.staticMethod:Ljava/lang/String;
            bipush 46
            invokevirtual java.lang.String.lastIndexOf:(I)I
            istore 1 /* lastDotIndex */
        start local 1 // int lastDotIndex
         2: .line 157
            iload 1 /* lastDotIndex */
            iconst_m1
            if_icmpeq 3
            iload 1 /* lastDotIndex */
            aload 0 /* this */
            getfield org.springframework.util.MethodInvoker.staticMethod:Ljava/lang/String;
            invokevirtual java.lang.String.length:()I
            if_icmpne 6
         3: .line 158
      StackMap locals: int
      StackMap stack:
            new java.lang.IllegalArgumentException
            dup
         4: .line 159
            ldc "staticMethod must be a fully qualified class plus method name: e.g. 'example.MyExampleClass.myExampleMethod'"
         5: .line 158
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
         6: .line 162
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.springframework.util.MethodInvoker.staticMethod:Ljava/lang/String;
            iconst_0
            iload 1 /* lastDotIndex */
            invokevirtual java.lang.String.substring:(II)Ljava/lang/String;
            astore 2 /* className */
        start local 2 // java.lang.String className
         7: .line 163
            aload 0 /* this */
            getfield org.springframework.util.MethodInvoker.staticMethod:Ljava/lang/String;
            iload 1 /* lastDotIndex */
            iconst_1
            iadd
            invokevirtual java.lang.String.substring:(I)Ljava/lang/String;
            astore 3 /* methodName */
        start local 3 // java.lang.String methodName
         8: .line 164
            aload 0 /* this */
            aload 0 /* this */
            aload 2 /* className */
            invokevirtual org.springframework.util.MethodInvoker.resolveClassName:(Ljava/lang/String;)Ljava/lang/Class;
            putfield org.springframework.util.MethodInvoker.targetClass:Ljava/lang/Class;
         9: .line 165
            aload 0 /* this */
            aload 3 /* methodName */
            putfield org.springframework.util.MethodInvoker.targetMethod:Ljava/lang/String;
        end local 3 // java.lang.String methodName
        end local 2 // java.lang.String className
        end local 1 // int lastDotIndex
        10: .line 168
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual org.springframework.util.MethodInvoker.getTargetClass:()Ljava/lang/Class;
            astore 1 /* targetClass */
        start local 1 // java.lang.Class targetClass
        11: .line 169
            aload 0 /* this */
            invokevirtual org.springframework.util.MethodInvoker.getTargetMethod:()Ljava/lang/String;
            astore 2 /* targetMethod */
        start local 2 // java.lang.String targetMethod
        12: .line 170
            aload 1 /* targetClass */
            ldc "Either 'targetClass' or 'targetObject' is required"
            invokestatic org.springframework.util.Assert.notNull:(Ljava/lang/Object;Ljava/lang/String;)V
        13: .line 171
            aload 2 /* targetMethod */
            ldc "Property 'targetMethod' is required"
            invokestatic org.springframework.util.Assert.notNull:(Ljava/lang/Object;Ljava/lang/String;)V
        14: .line 173
            aload 0 /* this */
            invokevirtual org.springframework.util.MethodInvoker.getArguments:()[Ljava/lang/Object;
            astore 3 /* arguments */
        start local 3 // java.lang.Object[] arguments
        15: .line 174
            aload 3 /* arguments */
            arraylength
            anewarray java.lang.Class
            astore 4 /* argTypes */
        start local 4 // java.lang.Class[] argTypes
        16: .line 175
            iconst_0
            istore 5 /* i */
        start local 5 // int i
        17: goto 22
        18: .line 176
      StackMap locals: org.springframework.util.MethodInvoker java.lang.Class java.lang.String java.lang.Object[] java.lang.Class[] int
      StackMap stack:
            aload 4 /* argTypes */
            iload 5 /* i */
            aload 3 /* arguments */
            iload 5 /* i */
            aaload
            ifnull 19
            aload 3 /* arguments */
            iload 5 /* i */
            aaload
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            goto 20
      StackMap locals: org.springframework.util.MethodInvoker java.lang.Class java.lang.String java.lang.Object[] java.lang.Class[] int
      StackMap stack: java.lang.Class[] int
        19: ldc Ljava/lang/Object;
      StackMap locals: org.springframework.util.MethodInvoker java.lang.Class java.lang.String java.lang.Object[] java.lang.Class[] int
      StackMap stack: java.lang.Class[] int java.lang.Class
        20: aastore
        21: .line 175
            iinc 5 /* i */ 1
      StackMap locals:
      StackMap stack:
        22: iload 5 /* i */
            aload 3 /* arguments */
            arraylength
            if_icmplt 18
        end local 5 // int i
        23: .line 181
            aload 0 /* this */
            aload 1 /* targetClass */
            aload 2 /* targetMethod */
            aload 4 /* argTypes */
            invokevirtual java.lang.Class.getMethod:(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;
            putfield org.springframework.util.MethodInvoker.methodObject:Ljava/lang/reflect/Method;
        24: .line 182
            goto 29
        25: .line 183
      StackMap locals: org.springframework.util.MethodInvoker java.lang.Class java.lang.String java.lang.Object[] java.lang.Class[]
      StackMap stack: java.lang.NoSuchMethodException
            astore 5 /* ex */
        start local 5 // java.lang.NoSuchMethodException ex
        26: .line 185
            aload 0 /* this */
            aload 0 /* this */
            invokevirtual org.springframework.util.MethodInvoker.findMatchingMethod:()Ljava/lang/reflect/Method;
            putfield org.springframework.util.MethodInvoker.methodObject:Ljava/lang/reflect/Method;
        27: .line 186
            aload 0 /* this */
            getfield org.springframework.util.MethodInvoker.methodObject:Ljava/lang/reflect/Method;
            ifnonnull 29
        28: .line 187
            aload 5 /* ex */
            athrow
        end local 5 // java.lang.NoSuchMethodException ex
        29: .line 190
      StackMap locals:
      StackMap stack:
            return
        end local 4 // java.lang.Class[] argTypes
        end local 3 // java.lang.Object[] arguments
        end local 2 // java.lang.String targetMethod
        end local 1 // java.lang.Class targetClass
        end local 0 // org.springframework.util.MethodInvoker this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   30     0          this  Lorg/springframework/util/MethodInvoker;
            2   10     1  lastDotIndex  I
            7   10     2     className  Ljava/lang/String;
            8   10     3    methodName  Ljava/lang/String;
           11   30     1   targetClass  Ljava/lang/Class<*>;
           12   30     2  targetMethod  Ljava/lang/String;
           15   30     3     arguments  [Ljava/lang/Object;
           16   30     4      argTypes  [Ljava/lang/Class;
           17   23     5             i  I
           26   29     5            ex  Ljava/lang/NoSuchMethodException;
      Exception table:
        from    to  target  type
          23    24      25  Class java.lang.NoSuchMethodException
    Exceptions:
      throws java.lang.ClassNotFoundException, java.lang.NoSuchMethodException

  protected java.lang.Class<?> resolveClassName(java.lang.String);
    descriptor: (Ljava/lang/String;)Ljava/lang/Class;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.springframework.util.MethodInvoker this
        start local 1 // java.lang.String className
         0: .line 201
            aload 1 /* className */
            invokestatic org.springframework.util.ClassUtils.getDefaultClassLoader:()Ljava/lang/ClassLoader;
            invokestatic org.springframework.util.ClassUtils.forName:(Ljava/lang/String;Ljava/lang/ClassLoader;)Ljava/lang/Class;
            areturn
        end local 1 // java.lang.String className
        end local 0 // org.springframework.util.MethodInvoker this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    1     0       this  Lorg/springframework/util/MethodInvoker;
            0    1     1  className  Ljava/lang/String;
    Exceptions:
      throws java.lang.ClassNotFoundException
    Signature: (Ljava/lang/String;)Ljava/lang/Class<*>;
    MethodParameters:
           Name  Flags
      className  

  protected java.lang.reflect.Method findMatchingMethod();
    descriptor: ()Ljava/lang/reflect/Method;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=2, locals=14, args_size=1
        start local 0 // org.springframework.util.MethodInvoker this
         0: .line 213
            aload 0 /* this */
            invokevirtual org.springframework.util.MethodInvoker.getTargetMethod:()Ljava/lang/String;
            astore 1 /* targetMethod */
        start local 1 // java.lang.String targetMethod
         1: .line 214
            aload 0 /* this */
            invokevirtual org.springframework.util.MethodInvoker.getArguments:()[Ljava/lang/Object;
            astore 2 /* arguments */
        start local 2 // java.lang.Object[] arguments
         2: .line 215
            aload 2 /* arguments */
            arraylength
            istore 3 /* argCount */
        start local 3 // int argCount
         3: .line 217
            aload 0 /* this */
            invokevirtual org.springframework.util.MethodInvoker.getTargetClass:()Ljava/lang/Class;
            astore 4 /* targetClass */
        start local 4 // java.lang.Class targetClass
         4: .line 218
            aload 4 /* targetClass */
            ifnull 5
            iconst_1
            goto 6
      StackMap locals: org.springframework.util.MethodInvoker java.lang.String java.lang.Object[] int java.lang.Class
      StackMap stack:
         5: iconst_0
      StackMap locals:
      StackMap stack: int
         6: ldc "No target class set"
            invokestatic org.springframework.util.Assert.state:(ZLjava/lang/String;)V
         7: .line 219
            aload 4 /* targetClass */
            invokestatic org.springframework.util.ReflectionUtils.getAllDeclaredMethods:(Ljava/lang/Class;)[Ljava/lang/reflect/Method;
            astore 5 /* candidates */
        start local 5 // java.lang.reflect.Method[] candidates
         8: .line 220
            ldc 2147483647
            istore 6 /* minTypeDiffWeight */
        start local 6 // int minTypeDiffWeight
         9: .line 221
            aconst_null
            astore 7 /* matchingMethod */
        start local 7 // java.lang.reflect.Method matchingMethod
        10: .line 223
            aload 5 /* candidates */
            dup
            astore 11
            arraylength
            istore 10
            iconst_0
            istore 9
            goto 20
      StackMap locals: org.springframework.util.MethodInvoker java.lang.String java.lang.Object[] int java.lang.Class java.lang.reflect.Method[] int java.lang.reflect.Method top int int java.lang.reflect.Method[]
      StackMap stack:
        11: aload 11
            iload 9
            aaload
            astore 8 /* candidate */
        start local 8 // java.lang.reflect.Method candidate
        12: .line 224
            aload 8 /* candidate */
            invokevirtual java.lang.reflect.Method.getName:()Ljava/lang/String;
            aload 1 /* targetMethod */
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 19
        13: .line 225
            aload 8 /* candidate */
            invokevirtual java.lang.reflect.Method.getParameterTypes:()[Ljava/lang/Class;
            astore 12 /* paramTypes */
        start local 12 // java.lang.Class[] paramTypes
        14: .line 226
            aload 12 /* paramTypes */
            arraylength
            iload 3 /* argCount */
            if_icmpne 19
        15: .line 227
            aload 12 /* paramTypes */
            aload 2 /* arguments */
            invokestatic org.springframework.util.MethodInvoker.getTypeDifferenceWeight:([Ljava/lang/Class;[Ljava/lang/Object;)I
            istore 13 /* typeDiffWeight */
        start local 13 // int typeDiffWeight
        16: .line 228
            iload 13 /* typeDiffWeight */
            iload 6 /* minTypeDiffWeight */
            if_icmpge 19
        17: .line 229
            iload 13 /* typeDiffWeight */
            istore 6 /* minTypeDiffWeight */
        18: .line 230
            aload 8 /* candidate */
            astore 7 /* matchingMethod */
        end local 13 // int typeDiffWeight
        end local 12 // java.lang.Class[] paramTypes
        end local 8 // java.lang.reflect.Method candidate
        19: .line 223
      StackMap locals:
      StackMap stack:
            iinc 9 1
      StackMap locals:
      StackMap stack:
        20: iload 9
            iload 10
            if_icmplt 11
        21: .line 236
            aload 7 /* matchingMethod */
            areturn
        end local 7 // java.lang.reflect.Method matchingMethod
        end local 6 // int minTypeDiffWeight
        end local 5 // java.lang.reflect.Method[] candidates
        end local 4 // java.lang.Class targetClass
        end local 3 // int argCount
        end local 2 // java.lang.Object[] arguments
        end local 1 // java.lang.String targetMethod
        end local 0 // org.springframework.util.MethodInvoker this
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0   22     0               this  Lorg/springframework/util/MethodInvoker;
            1   22     1       targetMethod  Ljava/lang/String;
            2   22     2          arguments  [Ljava/lang/Object;
            3   22     3           argCount  I
            4   22     4        targetClass  Ljava/lang/Class<*>;
            8   22     5         candidates  [Ljava/lang/reflect/Method;
            9   22     6  minTypeDiffWeight  I
           10   22     7     matchingMethod  Ljava/lang/reflect/Method;
           12   19     8          candidate  Ljava/lang/reflect/Method;
           14   19    12         paramTypes  [Ljava/lang/Class;
           16   19    13     typeDiffWeight  I
    RuntimeVisibleAnnotations: 
      org.springframework.lang.Nullable()

  public java.lang.reflect.Method getPreparedMethod();
    descriptor: ()Ljava/lang/reflect/Method;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // org.springframework.util.MethodInvoker this
         0: .line 248
            aload 0 /* this */
            getfield org.springframework.util.MethodInvoker.methodObject:Ljava/lang/reflect/Method;
            ifnonnull 2
         1: .line 249
            new java.lang.IllegalStateException
            dup
            ldc "prepare() must be called prior to invoke() on MethodInvoker"
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
         2: .line 251
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.springframework.util.MethodInvoker.methodObject:Ljava/lang/reflect/Method;
            areturn
        end local 0 // org.springframework.util.MethodInvoker this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lorg/springframework/util/MethodInvoker;
    Exceptions:
      throws java.lang.IllegalStateException

  public boolean isPrepared();
    descriptor: ()Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.springframework.util.MethodInvoker this
         0: .line 259
            aload 0 /* this */
            getfield org.springframework.util.MethodInvoker.methodObject:Ljava/lang/reflect/Method;
            ifnull 1
            iconst_1
            ireturn
      StackMap locals:
      StackMap stack:
         1: iconst_0
            ireturn
        end local 0 // org.springframework.util.MethodInvoker this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lorg/springframework/util/MethodInvoker;

  public java.lang.Object invoke();
    descriptor: ()Ljava/lang/Object;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=3, args_size=1
        start local 0 // org.springframework.util.MethodInvoker this
         0: .line 274
            aload 0 /* this */
            invokevirtual org.springframework.util.MethodInvoker.getTargetObject:()Ljava/lang/Object;
            astore 1 /* targetObject */
        start local 1 // java.lang.Object targetObject
         1: .line 275
            aload 0 /* this */
            invokevirtual org.springframework.util.MethodInvoker.getPreparedMethod:()Ljava/lang/reflect/Method;
            astore 2 /* preparedMethod */
        start local 2 // java.lang.reflect.Method preparedMethod
         2: .line 276
            aload 1 /* targetObject */
            ifnonnull 4
            aload 2 /* preparedMethod */
            invokevirtual java.lang.reflect.Method.getModifiers:()I
            invokestatic java.lang.reflect.Modifier.isStatic:(I)Z
            ifne 4
         3: .line 277
            new java.lang.IllegalArgumentException
            dup
            ldc "Target method must not be non-static without a target"
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
         4: .line 279
      StackMap locals: java.lang.Object java.lang.reflect.Method
      StackMap stack:
            aload 2 /* preparedMethod */
            invokestatic org.springframework.util.ReflectionUtils.makeAccessible:(Ljava/lang/reflect/Method;)V
         5: .line 280
            aload 2 /* preparedMethod */
            aload 1 /* targetObject */
            aload 0 /* this */
            invokevirtual org.springframework.util.MethodInvoker.getArguments:()[Ljava/lang/Object;
            invokevirtual java.lang.reflect.Method.invoke:(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
            areturn
        end local 2 // java.lang.reflect.Method preparedMethod
        end local 1 // java.lang.Object targetObject
        end local 0 // org.springframework.util.MethodInvoker this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    6     0            this  Lorg/springframework/util/MethodInvoker;
            1    6     1    targetObject  Ljava/lang/Object;
            2    6     2  preparedMethod  Ljava/lang/reflect/Method;
    Exceptions:
      throws java.lang.reflect.InvocationTargetException, java.lang.IllegalAccessException
    RuntimeVisibleAnnotations: 
      org.springframework.lang.Nullable()

  public static int getTypeDifferenceWeight(java.lang.Class<?>[], []);
    descriptor: ([Ljava/lang/Class;[Ljava/lang/Object;)I
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=6, args_size=2
        start local 0 // java.lang.Class[] paramTypes
        start local 1 // java.lang.Object[] args
         0: .line 305
            iconst_0
            istore 2 /* result */
        start local 2 // int result
         1: .line 306
            iconst_0
            istore 3 /* i */
        start local 3 // int i
         2: goto 22
         3: .line 307
      StackMap locals: int int
      StackMap stack:
            aload 0 /* paramTypes */
            iload 3 /* i */
            aaload
            aload 1 /* args */
            iload 3 /* i */
            aaload
            invokestatic org.springframework.util.ClassUtils.isAssignableValue:(Ljava/lang/Class;Ljava/lang/Object;)Z
            ifne 5
         4: .line 308
            ldc 2147483647
            ireturn
         5: .line 310
      StackMap locals:
      StackMap stack:
            aload 1 /* args */
            iload 3 /* i */
            aaload
            ifnull 21
         6: .line 311
            aload 0 /* paramTypes */
            iload 3 /* i */
            aaload
            astore 4 /* paramType */
        start local 4 // java.lang.Class paramType
         7: .line 312
            aload 1 /* args */
            iload 3 /* i */
            aaload
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            invokevirtual java.lang.Class.getSuperclass:()Ljava/lang/Class;
            astore 5 /* superClass */
        start local 5 // java.lang.Class superClass
         8: .line 313
            goto 18
         9: .line 314
      StackMap locals: java.lang.Class java.lang.Class
      StackMap stack:
            aload 4 /* paramType */
            aload 5 /* superClass */
            invokevirtual java.lang.Object.equals:(Ljava/lang/Object;)Z
            ifeq 13
        10: .line 315
            iinc 2 /* result */ 2
        11: .line 316
            aconst_null
            astore 5 /* superClass */
        12: .line 317
            goto 18
        13: .line 318
      StackMap locals:
      StackMap stack:
            aload 4 /* paramType */
            aload 5 /* superClass */
            invokestatic org.springframework.util.ClassUtils.isAssignable:(Ljava/lang/Class;Ljava/lang/Class;)Z
            ifeq 17
        14: .line 319
            iinc 2 /* result */ 2
        15: .line 320
            aload 5 /* superClass */
            invokevirtual java.lang.Class.getSuperclass:()Ljava/lang/Class;
            astore 5 /* superClass */
        16: .line 321
            goto 18
        17: .line 323
      StackMap locals:
      StackMap stack:
            aconst_null
            astore 5 /* superClass */
        18: .line 313
      StackMap locals:
      StackMap stack:
            aload 5 /* superClass */
            ifnonnull 9
        19: .line 326
            aload 4 /* paramType */
            invokevirtual java.lang.Class.isInterface:()Z
            ifeq 21
        20: .line 327
            iinc 2 /* result */ 1
        end local 5 // java.lang.Class superClass
        end local 4 // java.lang.Class paramType
        21: .line 306
      StackMap locals:
      StackMap stack:
            iinc 3 /* i */ 1
      StackMap locals:
      StackMap stack:
        22: iload 3 /* i */
            aload 0 /* paramTypes */
            arraylength
            if_icmplt 3
        end local 3 // int i
        23: .line 331
            iload 2 /* result */
            ireturn
        end local 2 // int result
        end local 1 // java.lang.Object[] args
        end local 0 // java.lang.Class[] paramTypes
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   24     0  paramTypes  [Ljava/lang/Class;
            0   24     1        args  [Ljava/lang/Object;
            1   24     2      result  I
            2   23     3           i  I
            7   21     4   paramType  Ljava/lang/Class<*>;
            8   21     5  superClass  Ljava/lang/Class<*>;
    Signature: ([Ljava/lang/Class<*>;[Ljava/lang/Object;)I
    MethodParameters:
            Name  Flags
      paramTypes  
      args        
}
SourceFile: "MethodInvoker.java"