public class org.springframework.beans.support.ArgumentConvertingMethodInvoker extends org.springframework.util.MethodInvoker
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.springframework.beans.support.ArgumentConvertingMethodInvoker
  super_class: org.springframework.util.MethodInvoker
{
  private org.springframework.beans.TypeConverter typeConverter;
    descriptor: Lorg/springframework/beans/TypeConverter;
    flags: (0x0002) ACC_PRIVATE
    RuntimeVisibleAnnotations: 
      org.springframework.lang.Nullable()

  private boolean useDefaultConverter;
    descriptor: Z
    flags: (0x0002) ACC_PRIVATE

  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // org.springframework.beans.support.ArgumentConvertingMethodInvoker this
         0: .line 42
            aload 0 /* this */
            invokespecial org.springframework.util.MethodInvoker.<init>:()V
         1: .line 47
            aload 0 /* this */
            iconst_1
            putfield org.springframework.beans.support.ArgumentConvertingMethodInvoker.useDefaultConverter:Z
         2: .line 42
            return
        end local 0 // org.springframework.beans.support.ArgumentConvertingMethodInvoker this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lorg/springframework/beans/support/ArgumentConvertingMethodInvoker;

  public void setTypeConverter(org.springframework.beans.TypeConverter);
    descriptor: (Lorg/springframework/beans/TypeConverter;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.springframework.beans.support.ArgumentConvertingMethodInvoker this
        start local 1 // org.springframework.beans.TypeConverter typeConverter
         0: .line 59
            aload 0 /* this */
            aload 1 /* typeConverter */
            putfield org.springframework.beans.support.ArgumentConvertingMethodInvoker.typeConverter:Lorg/springframework/beans/TypeConverter;
         1: .line 60
            aload 0 /* this */
            aload 1 /* typeConverter */
            ifnonnull 2
            iconst_1
            goto 3
      StackMap locals:
      StackMap stack: org.springframework.beans.support.ArgumentConvertingMethodInvoker
         2: iconst_0
      StackMap locals: org.springframework.beans.support.ArgumentConvertingMethodInvoker org.springframework.beans.TypeConverter
      StackMap stack: org.springframework.beans.support.ArgumentConvertingMethodInvoker int
         3: putfield org.springframework.beans.support.ArgumentConvertingMethodInvoker.useDefaultConverter:Z
         4: .line 61
            return
        end local 1 // org.springframework.beans.TypeConverter typeConverter
        end local 0 // org.springframework.beans.support.ArgumentConvertingMethodInvoker this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    5     0           this  Lorg/springframework/beans/support/ArgumentConvertingMethodInvoker;
            0    5     1  typeConverter  Lorg/springframework/beans/TypeConverter;
    RuntimeVisibleParameterAnnotations: 
      0:
        org.springframework.lang.Nullable()
    MethodParameters:
               Name  Flags
      typeConverter  

  public org.springframework.beans.TypeConverter getTypeConverter();
    descriptor: ()Lorg/springframework/beans/TypeConverter;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // org.springframework.beans.support.ArgumentConvertingMethodInvoker this
         0: .line 72
            aload 0 /* this */
            getfield org.springframework.beans.support.ArgumentConvertingMethodInvoker.typeConverter:Lorg/springframework/beans/TypeConverter;
            ifnonnull 2
            aload 0 /* this */
            getfield org.springframework.beans.support.ArgumentConvertingMethodInvoker.useDefaultConverter:Z
            ifeq 2
         1: .line 73
            aload 0 /* this */
            aload 0 /* this */
            invokevirtual org.springframework.beans.support.ArgumentConvertingMethodInvoker.getDefaultTypeConverter:()Lorg/springframework/beans/TypeConverter;
            putfield org.springframework.beans.support.ArgumentConvertingMethodInvoker.typeConverter:Lorg/springframework/beans/TypeConverter;
         2: .line 75
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.springframework.beans.support.ArgumentConvertingMethodInvoker.typeConverter:Lorg/springframework/beans/TypeConverter;
            areturn
        end local 0 // org.springframework.beans.support.ArgumentConvertingMethodInvoker this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lorg/springframework/beans/support/ArgumentConvertingMethodInvoker;
    RuntimeVisibleAnnotations: 
      org.springframework.lang.Nullable()

  protected org.springframework.beans.TypeConverter getDefaultTypeConverter();
    descriptor: ()Lorg/springframework/beans/TypeConverter;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // org.springframework.beans.support.ArgumentConvertingMethodInvoker this
         0: .line 86
            new org.springframework.beans.SimpleTypeConverter
            dup
            invokespecial org.springframework.beans.SimpleTypeConverter.<init>:()V
            areturn
        end local 0 // org.springframework.beans.support.ArgumentConvertingMethodInvoker this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/springframework/beans/support/ArgumentConvertingMethodInvoker;

  public void registerCustomEditor(java.lang.Class<?>, java.beans.PropertyEditor);
    descriptor: (Ljava/lang/Class;Ljava/beans/PropertyEditor;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=4, args_size=3
        start local 0 // org.springframework.beans.support.ArgumentConvertingMethodInvoker this
        start local 1 // java.lang.Class requiredType
        start local 2 // java.beans.PropertyEditor propertyEditor
         0: .line 100
            aload 0 /* this */
            invokevirtual org.springframework.beans.support.ArgumentConvertingMethodInvoker.getTypeConverter:()Lorg/springframework/beans/TypeConverter;
            astore 3 /* converter */
        start local 3 // org.springframework.beans.TypeConverter converter
         1: .line 101
            aload 3 /* converter */
            instanceof org.springframework.beans.PropertyEditorRegistry
            ifne 5
         2: .line 102
            new java.lang.IllegalStateException
            dup
         3: .line 103
            new java.lang.StringBuilder
            dup
            ldc "TypeConverter does not implement PropertyEditorRegistry interface: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 3 /* converter */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
         4: .line 102
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
         5: .line 105
      StackMap locals: org.springframework.beans.TypeConverter
      StackMap stack:
            aload 3 /* converter */
            checkcast org.springframework.beans.PropertyEditorRegistry
            aload 1 /* requiredType */
            aload 2 /* propertyEditor */
            invokeinterface org.springframework.beans.PropertyEditorRegistry.registerCustomEditor:(Ljava/lang/Class;Ljava/beans/PropertyEditor;)V
         6: .line 106
            return
        end local 3 // org.springframework.beans.TypeConverter converter
        end local 2 // java.beans.PropertyEditor propertyEditor
        end local 1 // java.lang.Class requiredType
        end local 0 // org.springframework.beans.support.ArgumentConvertingMethodInvoker this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    7     0            this  Lorg/springframework/beans/support/ArgumentConvertingMethodInvoker;
            0    7     1    requiredType  Ljava/lang/Class<*>;
            0    7     2  propertyEditor  Ljava/beans/PropertyEditor;
            1    7     3       converter  Lorg/springframework/beans/TypeConverter;
    Signature: (Ljava/lang/Class<*>;Ljava/beans/PropertyEditor;)V
    MethodParameters:
                Name  Flags
      requiredType    
      propertyEditor  

  protected java.lang.reflect.Method findMatchingMethod();
    descriptor: ()Ljava/lang/reflect/Method;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=5, locals=2, args_size=1
        start local 0 // org.springframework.beans.support.ArgumentConvertingMethodInvoker this
         0: .line 115
            aload 0 /* this */
            invokespecial org.springframework.util.MethodInvoker.findMatchingMethod:()Ljava/lang/reflect/Method;
            astore 1 /* matchingMethod */
        start local 1 // java.lang.reflect.Method matchingMethod
         1: .line 117
            aload 1 /* matchingMethod */
            ifnonnull 3
         2: .line 119
            aload 0 /* this */
            aload 0 /* this */
            invokevirtual org.springframework.beans.support.ArgumentConvertingMethodInvoker.getArguments:()[Ljava/lang/Object;
            invokevirtual org.springframework.beans.support.ArgumentConvertingMethodInvoker.doFindMatchingMethod:([Ljava/lang/Object;)Ljava/lang/reflect/Method;
            astore 1 /* matchingMethod */
         3: .line 121
      StackMap locals: java.lang.reflect.Method
      StackMap stack:
            aload 1 /* matchingMethod */
            ifnonnull 5
         4: .line 123
            aload 0 /* this */
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 0 /* this */
            invokevirtual org.springframework.beans.support.ArgumentConvertingMethodInvoker.getArguments:()[Ljava/lang/Object;
            aastore
            invokevirtual org.springframework.beans.support.ArgumentConvertingMethodInvoker.doFindMatchingMethod:([Ljava/lang/Object;)Ljava/lang/reflect/Method;
            astore 1 /* matchingMethod */
         5: .line 125
      StackMap locals:
      StackMap stack:
            aload 1 /* matchingMethod */
            areturn
        end local 1 // java.lang.reflect.Method matchingMethod
        end local 0 // org.springframework.beans.support.ArgumentConvertingMethodInvoker this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    6     0            this  Lorg/springframework/beans/support/ArgumentConvertingMethodInvoker;
            1    6     1  matchingMethod  Ljava/lang/reflect/Method;

  protected java.lang.reflect.Method doFindMatchingMethod(java.lang.Object[]);
    descriptor: ([Ljava/lang/Object;)Ljava/lang/reflect/Method;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=6, locals=18, args_size=2
        start local 0 // org.springframework.beans.support.ArgumentConvertingMethodInvoker this
        start local 1 // java.lang.Object[] arguments
         0: .line 136
            aload 0 /* this */
            invokevirtual org.springframework.beans.support.ArgumentConvertingMethodInvoker.getTypeConverter:()Lorg/springframework/beans/TypeConverter;
            astore 2 /* converter */
        start local 2 // org.springframework.beans.TypeConverter converter
         1: .line 137
            aload 2 /* converter */
            ifnull 38
         2: .line 138
            aload 0 /* this */
            invokevirtual org.springframework.beans.support.ArgumentConvertingMethodInvoker.getTargetMethod:()Ljava/lang/String;
            astore 3 /* targetMethod */
        start local 3 // java.lang.String targetMethod
         3: .line 139
            aconst_null
            astore 4 /* matchingMethod */
        start local 4 // java.lang.reflect.Method matchingMethod
         4: .line 140
            aload 1 /* arguments */
            arraylength
            istore 5 /* argCount */
        start local 5 // int argCount
         5: .line 141
            aload 0 /* this */
            invokevirtual org.springframework.beans.support.ArgumentConvertingMethodInvoker.getTargetClass:()Ljava/lang/Class;
            astore 6 /* targetClass */
        start local 6 // java.lang.Class targetClass
         6: .line 142
            aload 6 /* targetClass */
            ifnull 7
            iconst_1
            goto 8
      StackMap locals: org.springframework.beans.support.ArgumentConvertingMethodInvoker java.lang.Object[] org.springframework.beans.TypeConverter java.lang.String java.lang.reflect.Method int java.lang.Class
      StackMap stack:
         7: iconst_0
      StackMap locals:
      StackMap stack: int
         8: ldc "No target class set"
            invokestatic org.springframework.util.Assert.state:(ZLjava/lang/String;)V
         9: .line 143
            aload 6 /* targetClass */
            invokestatic org.springframework.util.ReflectionUtils.getAllDeclaredMethods:(Ljava/lang/Class;)[Ljava/lang/reflect/Method;
            astore 7 /* candidates */
        start local 7 // java.lang.reflect.Method[] candidates
        10: .line 144
            ldc 2147483647
            istore 8 /* minTypeDiffWeight */
        start local 8 // int minTypeDiffWeight
        11: .line 145
            aconst_null
            astore 9 /* argumentsToUse */
        start local 9 // java.lang.Object[] argumentsToUse
        12: .line 146
            aload 7 /* candidates */
            dup
            astore 13
            arraylength
            istore 12
            iconst_0
            istore 11
            goto 34
      StackMap locals: org.springframework.beans.support.ArgumentConvertingMethodInvoker java.lang.Object[] org.springframework.beans.TypeConverter java.lang.String java.lang.reflect.Method int java.lang.Class java.lang.reflect.Method[] int java.lang.Object[] top int int java.lang.reflect.Method[]
      StackMap stack:
        13: aload 13
            iload 11
            aaload
            astore 10 /* candidate */
        start local 10 // java.lang.reflect.Method candidate
        14: .line 147
            aload 10 /* candidate */
            invokevirtual java.lang.reflect.Method.getName:()Ljava/lang/String;
            aload 3 /* targetMethod */
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 33
        15: .line 149
            aload 10 /* candidate */
            invokevirtual java.lang.reflect.Method.getParameterTypes:()[Ljava/lang/Class;
            astore 14 /* paramTypes */
        start local 14 // java.lang.Class[] paramTypes
        16: .line 150
            aload 14 /* paramTypes */
            arraylength
            iload 5 /* argCount */
            if_icmpne 33
        17: .line 151
            iload 5 /* argCount */
            anewarray java.lang.Object
            astore 15 /* convertedArguments */
        start local 15 // java.lang.Object[] convertedArguments
        18: .line 152
            iconst_1
            istore 16 /* match */
        start local 16 // boolean match
        19: .line 153
            iconst_0
            istore 17 /* j */
        start local 17 // int j
        20: goto 26
        21: .line 156
      StackMap locals: org.springframework.beans.support.ArgumentConvertingMethodInvoker java.lang.Object[] org.springframework.beans.TypeConverter java.lang.String java.lang.reflect.Method int java.lang.Class java.lang.reflect.Method[] int java.lang.Object[] java.lang.reflect.Method int int java.lang.reflect.Method[] java.lang.Class[] java.lang.Object[] int int
      StackMap stack:
            aload 15 /* convertedArguments */
            iload 17 /* j */
            aload 2 /* converter */
            aload 1 /* arguments */
            iload 17 /* j */
            aaload
            aload 14 /* paramTypes */
            iload 17 /* j */
            aaload
            invokeinterface org.springframework.beans.TypeConverter.convertIfNecessary:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
            aastore
        22: .line 157
            goto 25
        23: .line 158
      StackMap locals:
      StackMap stack: org.springframework.beans.TypeMismatchException
            pop
        24: .line 160
            iconst_0
            istore 16 /* match */
        25: .line 153
      StackMap locals:
      StackMap stack:
            iinc 17 /* j */ 1
      StackMap locals:
      StackMap stack:
        26: iload 17 /* j */
            iload 5 /* argCount */
            if_icmpge 27
            iload 16 /* match */
            ifne 21
        end local 17 // int j
        27: .line 163
      StackMap locals:
      StackMap stack:
            iload 16 /* match */
            ifeq 33
        28: .line 164
            aload 14 /* paramTypes */
            aload 15 /* convertedArguments */
            invokestatic org.springframework.beans.support.ArgumentConvertingMethodInvoker.getTypeDifferenceWeight:([Ljava/lang/Class;[Ljava/lang/Object;)I
            istore 17 /* typeDiffWeight */
        start local 17 // int typeDiffWeight
        29: .line 165
            iload 17 /* typeDiffWeight */
            iload 8 /* minTypeDiffWeight */
            if_icmpge 33
        30: .line 166
            iload 17 /* typeDiffWeight */
            istore 8 /* minTypeDiffWeight */
        31: .line 167
            aload 10 /* candidate */
            astore 4 /* matchingMethod */
        32: .line 168
            aload 15 /* convertedArguments */
            astore 9 /* argumentsToUse */
        end local 17 // int typeDiffWeight
        end local 16 // boolean match
        end local 15 // java.lang.Object[] convertedArguments
        end local 14 // java.lang.Class[] paramTypes
        end local 10 // java.lang.reflect.Method candidate
        33: .line 146
      StackMap locals: org.springframework.beans.support.ArgumentConvertingMethodInvoker java.lang.Object[] org.springframework.beans.TypeConverter java.lang.String java.lang.reflect.Method int java.lang.Class java.lang.reflect.Method[] int java.lang.Object[] top int int java.lang.reflect.Method[]
      StackMap stack:
            iinc 11 1
      StackMap locals:
      StackMap stack:
        34: iload 11
            iload 12
            if_icmplt 13
        35: .line 174
            aload 4 /* matchingMethod */
            ifnull 38
        36: .line 175
            aload 0 /* this */
            aload 9 /* argumentsToUse */
            invokevirtual org.springframework.beans.support.ArgumentConvertingMethodInvoker.setArguments:([Ljava/lang/Object;)V
        37: .line 176
            aload 4 /* matchingMethod */
            areturn
        end local 9 // java.lang.Object[] argumentsToUse
        end local 8 // int minTypeDiffWeight
        end local 7 // java.lang.reflect.Method[] candidates
        end local 6 // java.lang.Class targetClass
        end local 5 // int argCount
        end local 4 // java.lang.reflect.Method matchingMethod
        end local 3 // java.lang.String targetMethod
        38: .line 179
      StackMap locals: org.springframework.beans.support.ArgumentConvertingMethodInvoker java.lang.Object[] org.springframework.beans.TypeConverter
      StackMap stack:
            aconst_null
            areturn
        end local 2 // org.springframework.beans.TypeConverter converter
        end local 1 // java.lang.Object[] arguments
        end local 0 // org.springframework.beans.support.ArgumentConvertingMethodInvoker this
      LocalVariableTable:
        Start  End  Slot                Name  Signature
            0   39     0                this  Lorg/springframework/beans/support/ArgumentConvertingMethodInvoker;
            0   39     1           arguments  [Ljava/lang/Object;
            1   39     2           converter  Lorg/springframework/beans/TypeConverter;
            3   38     3        targetMethod  Ljava/lang/String;
            4   38     4      matchingMethod  Ljava/lang/reflect/Method;
            5   38     5            argCount  I
            6   38     6         targetClass  Ljava/lang/Class<*>;
           10   38     7          candidates  [Ljava/lang/reflect/Method;
           11   38     8   minTypeDiffWeight  I
           12   38     9      argumentsToUse  [Ljava/lang/Object;
           14   33    10           candidate  Ljava/lang/reflect/Method;
           16   33    14          paramTypes  [Ljava/lang/Class;
           18   33    15  convertedArguments  [Ljava/lang/Object;
           19   33    16               match  Z
           20   27    17                   j  I
           29   33    17      typeDiffWeight  I
      Exception table:
        from    to  target  type
          21    22      23  Class org.springframework.beans.TypeMismatchException
    RuntimeVisibleAnnotations: 
      org.springframework.lang.Nullable()
    MethodParameters:
           Name  Flags
      arguments  
}
SourceFile: "ArgumentConvertingMethodInvoker.java"