public abstract class org.springframework.jdbc.core.namedparam.NamedParameterUtils
  minor version: 0
  major version: 59
  flags: flags: (0x0421) ACC_PUBLIC, ACC_SUPER, ACC_ABSTRACT
  this_class: org.springframework.jdbc.core.namedparam.NamedParameterUtils
  super_class: java.lang.Object
{
  private static final java.lang.String[] START_SKIP;
    descriptor: [Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final java.lang.String[] STOP_SKIP;
    descriptor: [Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final java.lang.String PARAMETER_SEPARATORS;
    descriptor: Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: "\"':&,;()|=+-*%/\\<>^"

  private static final boolean[] separatorIndex;
    descriptor: [Z
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=4, locals=4, args_size=0
         0: .line 46
            iconst_4
            anewarray java.lang.String
            dup
            iconst_0
            ldc "'"
            aastore
            dup
            iconst_1
            ldc "\""
            aastore
            dup
            iconst_2
            ldc "--"
            aastore
            dup
            iconst_3
            ldc "/*"
            aastore
            putstatic org.springframework.jdbc.core.namedparam.NamedParameterUtils.START_SKIP:[Ljava/lang/String;
         1: .line 51
            iconst_4
            anewarray java.lang.String
            dup
            iconst_0
            ldc "'"
            aastore
            dup
            iconst_1
            ldc "\""
            aastore
            dup
            iconst_2
            ldc "\n"
            aastore
            dup
            iconst_3
            ldc "*/"
            aastore
            putstatic org.springframework.jdbc.core.namedparam.NamedParameterUtils.STOP_SKIP:[Ljava/lang/String;
         2: .line 63
            sipush 128
            newarray 4
            putstatic org.springframework.jdbc.core.namedparam.NamedParameterUtils.separatorIndex:[Z
         3: .line 66
            ldc "\"':&,;()|=+-*%/\\<>^"
            invokevirtual java.lang.String.toCharArray:()[C
            dup
            astore 3
            arraylength
            istore 2
            iconst_0
            istore 1
            goto 7
      StackMap locals: top int int char[]
      StackMap stack:
         4: aload 3
            iload 1
            caload
            istore 0 /* c */
        start local 0 // char c
         5: .line 67
            getstatic org.springframework.jdbc.core.namedparam.NamedParameterUtils.separatorIndex:[Z
            iload 0 /* c */
            iconst_1
            bastore
        end local 0 // char c
         6: .line 66
            iinc 1 1
      StackMap locals:
      StackMap stack:
         7: iload 1
            iload 2
            if_icmplt 4
         8: .line 69
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            5    6     0     c  C

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

  public static org.springframework.jdbc.core.namedparam.ParsedSql parseSqlStatement(java.lang.String);
    descriptor: (Ljava/lang/String;)Lorg/springframework/jdbc/core/namedparam/ParsedSql;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=6, locals=14, args_size=1
        start local 0 // java.lang.String sql
         0: .line 83
            aload 0 /* sql */
            ldc "SQL must not be null"
            invokestatic org.springframework.util.Assert.notNull:(Ljava/lang/Object;Ljava/lang/String;)V
         1: .line 85
            new java.util.HashSet
            dup
            invokespecial java.util.HashSet.<init>:()V
            astore 1 /* namedParameters */
        start local 1 // java.util.Set namedParameters
         2: .line 86
            new java.lang.StringBuilder
            dup
            aload 0 /* sql */
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            astore 2 /* sqlToUse */
        start local 2 // java.lang.StringBuilder sqlToUse
         3: .line 87
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            astore 3 /* parameterList */
        start local 3 // java.util.List parameterList
         4: .line 89
            aload 0 /* sql */
            invokevirtual java.lang.String.toCharArray:()[C
            astore 4 /* statement */
        start local 4 // char[] statement
         5: .line 90
            iconst_0
            istore 5 /* namedParameterCount */
        start local 5 // int namedParameterCount
         6: .line 91
            iconst_0
            istore 6 /* unnamedParameterCount */
        start local 6 // int unnamedParameterCount
         7: .line 92
            iconst_0
            istore 7 /* totalParameterCount */
        start local 7 // int totalParameterCount
         8: .line 94
            iconst_0
            istore 8 /* escapes */
        start local 8 // int escapes
         9: .line 95
            iconst_0
            istore 9 /* i */
        start local 9 // int i
        10: .line 96
            goto 70
        11: .line 97
      StackMap locals: java.lang.String java.util.Set java.lang.StringBuilder java.util.List char[] int int int int int
      StackMap stack:
            iload 9 /* i */
            istore 10 /* skipToPosition */
        start local 10 // int skipToPosition
        12: .line 98
            goto 17
        13: .line 99
      StackMap locals: int
      StackMap stack:
            aload 4 /* statement */
            iload 9 /* i */
            invokestatic org.springframework.jdbc.core.namedparam.NamedParameterUtils.skipCommentsAndQuotes:([CI)I
            istore 10 /* skipToPosition */
        14: .line 100
            iload 9 /* i */
            iload 10 /* skipToPosition */
            if_icmpne 16
        15: .line 101
            goto 18
        16: .line 104
      StackMap locals:
      StackMap stack:
            iload 10 /* skipToPosition */
            istore 9 /* i */
        17: .line 98
      StackMap locals:
      StackMap stack:
            iload 9 /* i */
            aload 4 /* statement */
            arraylength
            if_icmplt 13
        18: .line 107
      StackMap locals:
      StackMap stack:
            iload 9 /* i */
            aload 4 /* statement */
            arraylength
            if_icmplt 20
        19: .line 108
            goto 71
        20: .line 110
      StackMap locals:
      StackMap stack:
            aload 4 /* statement */
            iload 9 /* i */
            caload
            istore 11 /* c */
        start local 11 // char c
        21: .line 111
            iload 11 /* c */
            bipush 58
            if_icmpeq 22
            iload 11 /* c */
            bipush 38
            if_icmpne 55
        22: .line 112
      StackMap locals: int
      StackMap stack:
            iload 9 /* i */
            iconst_1
            iadd
            istore 12 /* j */
        start local 12 // int j
        23: .line 113
            iload 11 /* c */
            bipush 58
            if_icmpne 26
            iload 12 /* j */
            aload 4 /* statement */
            arraylength
            if_icmpge 26
            aload 4 /* statement */
            iload 12 /* j */
            caload
            bipush 58
            if_icmpne 26
        24: .line 115
            iinc 9 /* i */ 2
        25: .line 116
            goto 70
        26: .line 118
      StackMap locals: int
      StackMap stack:
            aconst_null
            astore 13 /* parameter */
        start local 13 // java.lang.String parameter
        27: .line 119
            iload 11 /* c */
            bipush 58
            if_icmpne 47
            iload 12 /* j */
            aload 4 /* statement */
            arraylength
            if_icmpge 47
            aload 4 /* statement */
            iload 12 /* j */
            caload
            bipush 123
            if_icmpne 47
        28: .line 121
            goto 38
        29: .line 122
      StackMap locals: java.lang.String
      StackMap stack:
            iinc 12 /* j */ 1
        30: .line 123
            iload 12 /* j */
            aload 4 /* statement */
            arraylength
            if_icmplt 34
        31: .line 124
            new org.springframework.dao.InvalidDataAccessApiUsageException
            dup
            new java.lang.StringBuilder
            dup
            ldc "Non-terminated named parameter declaration at position "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
        32: .line 125
            iload 9 /* i */
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            ldc " in statement: "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 0 /* sql */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        33: .line 124
            invokespecial org.springframework.dao.InvalidDataAccessApiUsageException.<init>:(Ljava/lang/String;)V
            athrow
        34: .line 127
      StackMap locals:
      StackMap stack:
            aload 4 /* statement */
            iload 12 /* j */
            caload
            bipush 58
            if_icmpeq 35
            aload 4 /* statement */
            iload 12 /* j */
            caload
            bipush 123
            if_icmpne 38
        35: .line 128
      StackMap locals:
      StackMap stack:
            new org.springframework.dao.InvalidDataAccessApiUsageException
            dup
            new java.lang.StringBuilder
            dup
            ldc "Parameter name contains invalid character '"
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
        36: .line 129
            aload 4 /* statement */
            iload 12 /* j */
            caload
            invokevirtual java.lang.StringBuilder.append:(C)Ljava/lang/StringBuilder;
            ldc "' at position "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            iload 9 /* i */
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            ldc " in statement: "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 0 /* sql */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        37: .line 128
            invokespecial org.springframework.dao.InvalidDataAccessApiUsageException.<init>:(Ljava/lang/String;)V
            athrow
        38: .line 121
      StackMap locals:
      StackMap stack:
            aload 4 /* statement */
            iload 12 /* j */
            caload
            bipush 125
            if_icmpne 29
        39: .line 132
            iload 12 /* j */
            iload 9 /* i */
            isub
            iconst_2
            if_icmple 44
        40: .line 133
            aload 0 /* sql */
            iload 9 /* i */
            iconst_2
            iadd
            iload 12 /* j */
            invokevirtual java.lang.String.substring:(II)Ljava/lang/String;
            astore 13 /* parameter */
        41: .line 134
            aload 1 /* namedParameters */
            iload 5 /* namedParameterCount */
            aload 13 /* parameter */
            invokestatic org.springframework.jdbc.core.namedparam.NamedParameterUtils.addNewNamedParameter:(Ljava/util/Set;ILjava/lang/String;)I
            istore 5 /* namedParameterCount */
        42: .line 136
            aload 3 /* parameterList */
            iload 7 /* totalParameterCount */
            iload 8 /* escapes */
            iload 9 /* i */
            iload 12 /* j */
            iconst_1
            iadd
            aload 13 /* parameter */
        43: .line 135
            invokestatic org.springframework.jdbc.core.namedparam.NamedParameterUtils.addNamedParameter:(Ljava/util/List;IIIILjava/lang/String;)I
            istore 7 /* totalParameterCount */
        44: .line 138
      StackMap locals:
      StackMap stack:
            iinc 12 /* j */ 1
        45: .line 139
            goto 53
        46: .line 142
      StackMap locals:
      StackMap stack:
            iinc 12 /* j */ 1
        47: .line 141
      StackMap locals:
      StackMap stack:
            iload 12 /* j */
            aload 4 /* statement */
            arraylength
            if_icmpge 48
            aload 4 /* statement */
            iload 12 /* j */
            caload
            invokestatic org.springframework.jdbc.core.namedparam.NamedParameterUtils.isParameterSeparator:(C)Z
            ifeq 46
        48: .line 144
      StackMap locals:
      StackMap stack:
            iload 12 /* j */
            iload 9 /* i */
            isub
            iconst_1
            if_icmple 53
        49: .line 145
            aload 0 /* sql */
            iload 9 /* i */
            iconst_1
            iadd
            iload 12 /* j */
            invokevirtual java.lang.String.substring:(II)Ljava/lang/String;
            astore 13 /* parameter */
        50: .line 146
            aload 1 /* namedParameters */
            iload 5 /* namedParameterCount */
            aload 13 /* parameter */
            invokestatic org.springframework.jdbc.core.namedparam.NamedParameterUtils.addNewNamedParameter:(Ljava/util/Set;ILjava/lang/String;)I
            istore 5 /* namedParameterCount */
        51: .line 148
            aload 3 /* parameterList */
            iload 7 /* totalParameterCount */
            iload 8 /* escapes */
            iload 9 /* i */
            iload 12 /* j */
            aload 13 /* parameter */
        52: .line 147
            invokestatic org.springframework.jdbc.core.namedparam.NamedParameterUtils.addNamedParameter:(Ljava/util/List;IIIILjava/lang/String;)I
            istore 7 /* totalParameterCount */
        53: .line 151
      StackMap locals:
      StackMap stack:
            iload 12 /* j */
            iconst_1
            isub
            istore 9 /* i */
        end local 13 // java.lang.String parameter
        end local 12 // int j
        54: .line 152
            goto 69
        55: .line 154
      StackMap locals:
      StackMap stack:
            iload 11 /* c */
            bipush 92
            if_icmpne 62
        56: .line 155
            iload 9 /* i */
            iconst_1
            iadd
            istore 12 /* j */
        start local 12 // int j
        57: .line 156
            iload 12 /* j */
            aload 4 /* statement */
            arraylength
            if_icmpge 62
            aload 4 /* statement */
            iload 12 /* j */
            caload
            bipush 58
            if_icmpne 62
        58: .line 158
            aload 2 /* sqlToUse */
            iload 9 /* i */
            iload 8 /* escapes */
            isub
            invokevirtual java.lang.StringBuilder.deleteCharAt:(I)Ljava/lang/StringBuilder;
            pop
        59: .line 159
            iinc 8 /* escapes */ 1
        60: .line 160
            iinc 9 /* i */ 2
        61: .line 161
            goto 70
        end local 12 // int j
        62: .line 164
      StackMap locals:
      StackMap stack:
            iload 11 /* c */
            bipush 63
            if_icmpne 69
        63: .line 165
            iload 9 /* i */
            iconst_1
            iadd
            istore 12 /* j */
        start local 12 // int j
        64: .line 166
            iload 12 /* j */
            aload 4 /* statement */
            arraylength
            if_icmpge 67
            aload 4 /* statement */
            iload 12 /* j */
            caload
            bipush 63
            if_icmpeq 65
            aload 4 /* statement */
            iload 12 /* j */
            caload
            bipush 124
            if_icmpeq 65
            aload 4 /* statement */
            iload 12 /* j */
            caload
            bipush 38
            if_icmpne 67
        65: .line 168
      StackMap locals: int
      StackMap stack:
            iinc 9 /* i */ 2
        66: .line 169
            goto 70
        67: .line 171
      StackMap locals:
      StackMap stack:
            iinc 6 /* unnamedParameterCount */ 1
        68: .line 172
            iinc 7 /* totalParameterCount */ 1
        end local 12 // int j
        69: .line 175
      StackMap locals:
      StackMap stack:
            iinc 9 /* i */ 1
        end local 11 // char c
        end local 10 // int skipToPosition
        70: .line 96
      StackMap locals:
      StackMap stack:
            iload 9 /* i */
            aload 4 /* statement */
            arraylength
            if_icmplt 11
        71: .line 177
      StackMap locals:
      StackMap stack:
            new org.springframework.jdbc.core.namedparam.ParsedSql
            dup
            aload 2 /* sqlToUse */
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial org.springframework.jdbc.core.namedparam.ParsedSql.<init>:(Ljava/lang/String;)V
            astore 10 /* parsedSql */
        start local 10 // org.springframework.jdbc.core.namedparam.ParsedSql parsedSql
        72: .line 178
            aload 3 /* parameterList */
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 12
            goto 75
      StackMap locals: java.lang.String java.util.Set java.lang.StringBuilder java.util.List char[] int int int int int org.springframework.jdbc.core.namedparam.ParsedSql top java.util.Iterator
      StackMap stack:
        73: aload 12
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast org.springframework.jdbc.core.namedparam.NamedParameterUtils$ParameterHolder
            astore 11 /* ph */
        start local 11 // org.springframework.jdbc.core.namedparam.NamedParameterUtils$ParameterHolder ph
        74: .line 179
            aload 10 /* parsedSql */
            aload 11 /* ph */
            invokevirtual org.springframework.jdbc.core.namedparam.NamedParameterUtils$ParameterHolder.getParameterName:()Ljava/lang/String;
            aload 11 /* ph */
            invokevirtual org.springframework.jdbc.core.namedparam.NamedParameterUtils$ParameterHolder.getStartIndex:()I
            aload 11 /* ph */
            invokevirtual org.springframework.jdbc.core.namedparam.NamedParameterUtils$ParameterHolder.getEndIndex:()I
            invokevirtual org.springframework.jdbc.core.namedparam.ParsedSql.addNamedParameter:(Ljava/lang/String;II)V
        end local 11 // org.springframework.jdbc.core.namedparam.NamedParameterUtils$ParameterHolder ph
        75: .line 178
      StackMap locals:
      StackMap stack:
            aload 12
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 73
        76: .line 181
            aload 10 /* parsedSql */
            iload 5 /* namedParameterCount */
            invokevirtual org.springframework.jdbc.core.namedparam.ParsedSql.setNamedParameterCount:(I)V
        77: .line 182
            aload 10 /* parsedSql */
            iload 6 /* unnamedParameterCount */
            invokevirtual org.springframework.jdbc.core.namedparam.ParsedSql.setUnnamedParameterCount:(I)V
        78: .line 183
            aload 10 /* parsedSql */
            iload 7 /* totalParameterCount */
            invokevirtual org.springframework.jdbc.core.namedparam.ParsedSql.setTotalParameterCount:(I)V
        79: .line 184
            aload 10 /* parsedSql */
            areturn
        end local 10 // org.springframework.jdbc.core.namedparam.ParsedSql parsedSql
        end local 9 // int i
        end local 8 // int escapes
        end local 7 // int totalParameterCount
        end local 6 // int unnamedParameterCount
        end local 5 // int namedParameterCount
        end local 4 // char[] statement
        end local 3 // java.util.List parameterList
        end local 2 // java.lang.StringBuilder sqlToUse
        end local 1 // java.util.Set namedParameters
        end local 0 // java.lang.String sql
      LocalVariableTable:
        Start  End  Slot                   Name  Signature
            0   80     0                    sql  Ljava/lang/String;
            2   80     1        namedParameters  Ljava/util/Set<Ljava/lang/String;>;
            3   80     2               sqlToUse  Ljava/lang/StringBuilder;
            4   80     3          parameterList  Ljava/util/List<Lorg/springframework/jdbc/core/namedparam/NamedParameterUtils$ParameterHolder;>;
            5   80     4              statement  [C
            6   80     5    namedParameterCount  I
            7   80     6  unnamedParameterCount  I
            8   80     7    totalParameterCount  I
            9   80     8                escapes  I
           10   80     9                      i  I
           12   70    10         skipToPosition  I
           21   70    11                      c  C
           23   54    12                      j  I
           27   54    13              parameter  Ljava/lang/String;
           57   62    12                      j  I
           64   69    12                      j  I
           72   80    10              parsedSql  Lorg/springframework/jdbc/core/namedparam/ParsedSql;
           74   75    11                     ph  Lorg/springframework/jdbc/core/namedparam/NamedParameterUtils$ParameterHolder;
    MethodParameters:
      Name  Flags
      sql   final

  private static int addNamedParameter(java.util.List<org.springframework.jdbc.core.namedparam.NamedParameterUtils$ParameterHolder>, int, int, int, int, java.lang.String);
    descriptor: (Ljava/util/List;IIIILjava/lang/String;)I
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=7, locals=6, args_size=6
        start local 0 // java.util.List parameterList
        start local 1 // int totalParameterCount
        start local 2 // int escapes
        start local 3 // int i
        start local 4 // int j
        start local 5 // java.lang.String parameter
         0: .line 190
            aload 0 /* parameterList */
            new org.springframework.jdbc.core.namedparam.NamedParameterUtils$ParameterHolder
            dup
            aload 5 /* parameter */
            iload 3 /* i */
            iload 2 /* escapes */
            isub
            iload 4 /* j */
            iload 2 /* escapes */
            isub
            invokespecial org.springframework.jdbc.core.namedparam.NamedParameterUtils$ParameterHolder.<init>:(Ljava/lang/String;II)V
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
         1: .line 191
            iinc 1 /* totalParameterCount */ 1
         2: .line 192
            iload 1 /* totalParameterCount */
            ireturn
        end local 5 // java.lang.String parameter
        end local 4 // int j
        end local 3 // int i
        end local 2 // int escapes
        end local 1 // int totalParameterCount
        end local 0 // java.util.List parameterList
      LocalVariableTable:
        Start  End  Slot                 Name  Signature
            0    3     0        parameterList  Ljava/util/List<Lorg/springframework/jdbc/core/namedparam/NamedParameterUtils$ParameterHolder;>;
            0    3     1  totalParameterCount  I
            0    3     2              escapes  I
            0    3     3                    i  I
            0    3     4                    j  I
            0    3     5            parameter  Ljava/lang/String;
    Signature: (Ljava/util/List<Lorg/springframework/jdbc/core/namedparam/NamedParameterUtils$ParameterHolder;>;IIIILjava/lang/String;)I
    MethodParameters:
                     Name  Flags
      parameterList        
      totalParameterCount  
      escapes              
      i                    
      j                    
      parameter            

  private static int addNewNamedParameter(java.util.Set<java.lang.String>, int, java.lang.String);
    descriptor: (Ljava/util/Set;ILjava/lang/String;)I
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=3, args_size=3
        start local 0 // java.util.Set namedParameters
        start local 1 // int namedParameterCount
        start local 2 // java.lang.String parameter
         0: .line 196
            aload 0 /* namedParameters */
            aload 2 /* parameter */
            invokeinterface java.util.Set.contains:(Ljava/lang/Object;)Z
            ifne 3
         1: .line 197
            aload 0 /* namedParameters */
            aload 2 /* parameter */
            invokeinterface java.util.Set.add:(Ljava/lang/Object;)Z
            pop
         2: .line 198
            iinc 1 /* namedParameterCount */ 1
         3: .line 200
      StackMap locals:
      StackMap stack:
            iload 1 /* namedParameterCount */
            ireturn
        end local 2 // java.lang.String parameter
        end local 1 // int namedParameterCount
        end local 0 // java.util.Set namedParameters
      LocalVariableTable:
        Start  End  Slot                 Name  Signature
            0    4     0      namedParameters  Ljava/util/Set<Ljava/lang/String;>;
            0    4     1  namedParameterCount  I
            0    4     2            parameter  Ljava/lang/String;
    Signature: (Ljava/util/Set<Ljava/lang/String;>;ILjava/lang/String;)I
    MethodParameters:
                     Name  Flags
      namedParameters      
      namedParameterCount  
      parameter            

  private static int skipCommentsAndQuotes(char[], int);
    descriptor: ([CI)I
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=9, args_size=2
        start local 0 // char[] statement
        start local 1 // int position
         0: .line 210
            iconst_0
            istore 2 /* i */
        start local 2 // int i
         1: goto 34
         2: .line 211
      StackMap locals: int
      StackMap stack:
            aload 0 /* statement */
            iload 1 /* position */
            caload
            getstatic org.springframework.jdbc.core.namedparam.NamedParameterUtils.START_SKIP:[Ljava/lang/String;
            iload 2 /* i */
            aaload
            iconst_0
            invokevirtual java.lang.String.charAt:(I)C
            if_icmpne 33
         3: .line 212
            iconst_1
            istore 3 /* match */
        start local 3 // boolean match
         4: .line 213
            iconst_1
            istore 4 /* j */
        start local 4 // int j
         5: goto 10
         6: .line 214
      StackMap locals: int int
      StackMap stack:
            aload 0 /* statement */
            iload 1 /* position */
            iload 4 /* j */
            iadd
            caload
            getstatic org.springframework.jdbc.core.namedparam.NamedParameterUtils.START_SKIP:[Ljava/lang/String;
            iload 2 /* i */
            aaload
            iload 4 /* j */
            invokevirtual java.lang.String.charAt:(I)C
            if_icmpeq 9
         7: .line 215
            iconst_0
            istore 3 /* match */
         8: .line 216
            goto 11
         9: .line 213
      StackMap locals:
      StackMap stack:
            iinc 4 /* j */ 1
      StackMap locals:
      StackMap stack:
        10: iload 4 /* j */
            getstatic org.springframework.jdbc.core.namedparam.NamedParameterUtils.START_SKIP:[Ljava/lang/String;
            iload 2 /* i */
            aaload
            invokevirtual java.lang.String.length:()I
            if_icmplt 6
        end local 4 // int j
        11: .line 219
      StackMap locals:
      StackMap stack:
            iload 3 /* match */
            ifeq 33
        12: .line 220
            getstatic org.springframework.jdbc.core.namedparam.NamedParameterUtils.START_SKIP:[Ljava/lang/String;
            iload 2 /* i */
            aaload
            invokevirtual java.lang.String.length:()I
            istore 4 /* offset */
        start local 4 // int offset
        13: .line 221
            iload 1 /* position */
            iload 4 /* offset */
            iadd
            istore 5 /* m */
        start local 5 // int m
        14: goto 31
        15: .line 222
      StackMap locals: int int
      StackMap stack:
            aload 0 /* statement */
            iload 5 /* m */
            caload
            getstatic org.springframework.jdbc.core.namedparam.NamedParameterUtils.STOP_SKIP:[Ljava/lang/String;
            iload 2 /* i */
            aaload
            iconst_0
            invokevirtual java.lang.String.charAt:(I)C
            if_icmpne 30
        16: .line 223
            iconst_1
            istore 6 /* endMatch */
        start local 6 // boolean endMatch
        17: .line 224
            iload 5 /* m */
            istore 7 /* endPos */
        start local 7 // int endPos
        18: .line 225
            iconst_1
            istore 8 /* n */
        start local 8 // int n
        19: goto 27
        20: .line 226
      StackMap locals: int int int
      StackMap stack:
            iload 5 /* m */
            iload 8 /* n */
            iadd
            aload 0 /* statement */
            arraylength
            if_icmplt 22
        21: .line 228
            aload 0 /* statement */
            arraylength
            ireturn
        22: .line 230
      StackMap locals:
      StackMap stack:
            aload 0 /* statement */
            iload 5 /* m */
            iload 8 /* n */
            iadd
            caload
            getstatic org.springframework.jdbc.core.namedparam.NamedParameterUtils.STOP_SKIP:[Ljava/lang/String;
            iload 2 /* i */
            aaload
            iload 8 /* n */
            invokevirtual java.lang.String.charAt:(I)C
            if_icmpeq 25
        23: .line 231
            iconst_0
            istore 6 /* endMatch */
        24: .line 232
            goto 28
        25: .line 234
      StackMap locals:
      StackMap stack:
            iload 5 /* m */
            iload 8 /* n */
            iadd
            istore 7 /* endPos */
        26: .line 225
            iinc 8 /* n */ 1
      StackMap locals:
      StackMap stack:
        27: iload 8 /* n */
            getstatic org.springframework.jdbc.core.namedparam.NamedParameterUtils.STOP_SKIP:[Ljava/lang/String;
            iload 2 /* i */
            aaload
            invokevirtual java.lang.String.length:()I
            if_icmplt 20
        end local 8 // int n
        28: .line 236
      StackMap locals:
      StackMap stack:
            iload 6 /* endMatch */
            ifeq 30
        29: .line 238
            iload 7 /* endPos */
            iconst_1
            iadd
            ireturn
        end local 7 // int endPos
        end local 6 // boolean endMatch
        30: .line 221
      StackMap locals:
      StackMap stack:
            iinc 5 /* m */ 1
      StackMap locals:
      StackMap stack:
        31: iload 5 /* m */
            aload 0 /* statement */
            arraylength
            if_icmplt 15
        end local 5 // int m
        32: .line 243
            aload 0 /* statement */
            arraylength
            ireturn
        end local 4 // int offset
        end local 3 // boolean match
        33: .line 210
      StackMap locals:
      StackMap stack:
            iinc 2 /* i */ 1
      StackMap locals:
      StackMap stack:
        34: iload 2 /* i */
            getstatic org.springframework.jdbc.core.namedparam.NamedParameterUtils.START_SKIP:[Ljava/lang/String;
            arraylength
            if_icmplt 2
        end local 2 // int i
        35: .line 247
            iload 1 /* position */
            ireturn
        end local 1 // int position
        end local 0 // char[] statement
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   36     0  statement  [C
            0   36     1   position  I
            1   35     2          i  I
            4   33     3      match  Z
            5   11     4          j  I
           13   33     4     offset  I
           14   32     5          m  I
           17   30     6   endMatch  Z
           18   30     7     endPos  I
           19   28     8          n  I
    MethodParameters:
           Name  Flags
      statement  
      position   

  public static java.lang.String substituteNamedParameters(org.springframework.jdbc.core.namedparam.ParsedSql, org.springframework.jdbc.core.namedparam.SqlParameterSource);
    descriptor: (Lorg/springframework/jdbc/core/namedparam/ParsedSql;Lorg/springframework/jdbc/core/namedparam/SqlParameterSource;)Ljava/lang/String;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=17, args_size=2
        start local 0 // org.springframework.jdbc.core.namedparam.ParsedSql parsedSql
        start local 1 // org.springframework.jdbc.core.namedparam.SqlParameterSource paramSource
         0: .line 268
            aload 0 /* parsedSql */
            invokevirtual org.springframework.jdbc.core.namedparam.ParsedSql.getOriginalSql:()Ljava/lang/String;
            astore 2 /* originalSql */
        start local 2 // java.lang.String originalSql
         1: .line 269
            aload 0 /* parsedSql */
            invokevirtual org.springframework.jdbc.core.namedparam.ParsedSql.getParameterNames:()Ljava/util/List;
            astore 3 /* paramNames */
        start local 3 // java.util.List paramNames
         2: .line 270
            aload 3 /* paramNames */
            invokeinterface java.util.List.isEmpty:()Z
            ifeq 4
         3: .line 271
            aload 2 /* originalSql */
            areturn
         4: .line 273
      StackMap locals: java.lang.String java.util.List
      StackMap stack:
            new java.lang.StringBuilder
            dup
            aload 2 /* originalSql */
            invokevirtual java.lang.String.length:()I
            invokespecial java.lang.StringBuilder.<init>:(I)V
            astore 4 /* actualSql */
        start local 4 // java.lang.StringBuilder actualSql
         5: .line 274
            iconst_0
            istore 5 /* lastIndex */
        start local 5 // int lastIndex
         6: .line 275
            iconst_0
            istore 6 /* i */
        start local 6 // int i
         7: goto 45
         8: .line 276
      StackMap locals: java.lang.StringBuilder int int
      StackMap stack:
            aload 3 /* paramNames */
            iload 6 /* i */
            invokeinterface java.util.List.get:(I)Ljava/lang/Object;
            checkcast java.lang.String
            astore 7 /* paramName */
        start local 7 // java.lang.String paramName
         9: .line 277
            aload 0 /* parsedSql */
            iload 6 /* i */
            invokevirtual org.springframework.jdbc.core.namedparam.ParsedSql.getParameterIndexes:(I)[I
            astore 8 /* indexes */
        start local 8 // int[] indexes
        10: .line 278
            aload 8 /* indexes */
            iconst_0
            iaload
            istore 9 /* startIndex */
        start local 9 // int startIndex
        11: .line 279
            aload 8 /* indexes */
            iconst_1
            iaload
            istore 10 /* endIndex */
        start local 10 // int endIndex
        12: .line 280
            aload 4 /* actualSql */
            aload 2 /* originalSql */
            iload 5 /* lastIndex */
            iload 9 /* startIndex */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/CharSequence;II)Ljava/lang/StringBuilder;
            pop
        13: .line 281
            aload 1 /* paramSource */
            ifnull 42
            aload 1 /* paramSource */
            aload 7 /* paramName */
            invokeinterface org.springframework.jdbc.core.namedparam.SqlParameterSource.hasValue:(Ljava/lang/String;)Z
            ifeq 42
        14: .line 282
            aload 1 /* paramSource */
            aload 7 /* paramName */
            invokeinterface org.springframework.jdbc.core.namedparam.SqlParameterSource.getValue:(Ljava/lang/String;)Ljava/lang/Object;
            astore 11 /* value */
        start local 11 // java.lang.Object value
        15: .line 283
            aload 11 /* value */
            instanceof org.springframework.jdbc.core.SqlParameterValue
            ifeq 17
        16: .line 284
            aload 11 /* value */
            checkcast org.springframework.jdbc.core.SqlParameterValue
            invokevirtual org.springframework.jdbc.core.SqlParameterValue.getValue:()Ljava/lang/Object;
            astore 11 /* value */
        17: .line 286
      StackMap locals: org.springframework.jdbc.core.namedparam.ParsedSql org.springframework.jdbc.core.namedparam.SqlParameterSource java.lang.String java.util.List java.lang.StringBuilder int int java.lang.String int[] int int java.lang.Object
      StackMap stack:
            aload 11 /* value */
            instanceof java.lang.Iterable
            ifeq 40
        18: .line 287
            aload 11 /* value */
            checkcast java.lang.Iterable
            invokeinterface java.lang.Iterable.iterator:()Ljava/util/Iterator;
            astore 12 /* entryIter */
        start local 12 // java.util.Iterator entryIter
        19: .line 288
            iconst_0
            istore 13 /* k */
        start local 13 // int k
        20: .line 289
            goto 38
        21: .line 290
      StackMap locals: java.util.Iterator int
      StackMap stack:
            iload 13 /* k */
            ifle 23
        22: .line 291
            aload 4 /* actualSql */
            ldc ", "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            pop
        23: .line 293
      StackMap locals:
      StackMap stack:
            iinc 13 /* k */ 1
        24: .line 294
            aload 12 /* entryIter */
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            astore 14 /* entryItem */
        start local 14 // java.lang.Object entryItem
        25: .line 295
            aload 14 /* entryItem */
            instanceof java.lang.Object[]
            ifeq 37
        26: .line 296
            aload 14 /* entryItem */
            checkcast java.lang.Object[]
            astore 15 /* expressionList */
        start local 15 // java.lang.Object[] expressionList
        27: .line 297
            aload 4 /* actualSql */
            bipush 40
            invokevirtual java.lang.StringBuilder.append:(C)Ljava/lang/StringBuilder;
            pop
        28: .line 298
            iconst_0
            istore 16 /* m */
        start local 16 // int m
        29: goto 34
        30: .line 299
      StackMap locals: java.lang.Object java.lang.Object[] int
      StackMap stack:
            iload 16 /* m */
            ifle 32
        31: .line 300
            aload 4 /* actualSql */
            ldc ", "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            pop
        32: .line 302
      StackMap locals:
      StackMap stack:
            aload 4 /* actualSql */
            bipush 63
            invokevirtual java.lang.StringBuilder.append:(C)Ljava/lang/StringBuilder;
            pop
        33: .line 298
            iinc 16 /* m */ 1
      StackMap locals:
      StackMap stack:
        34: iload 16 /* m */
            aload 15 /* expressionList */
            arraylength
            if_icmplt 30
        end local 16 // int m
        35: .line 304
            aload 4 /* actualSql */
            bipush 41
            invokevirtual java.lang.StringBuilder.append:(C)Ljava/lang/StringBuilder;
            pop
        end local 15 // java.lang.Object[] expressionList
        36: .line 305
            goto 38
        37: .line 307
      StackMap locals:
      StackMap stack:
            aload 4 /* actualSql */
            bipush 63
            invokevirtual java.lang.StringBuilder.append:(C)Ljava/lang/StringBuilder;
            pop
        end local 14 // java.lang.Object entryItem
        38: .line 289
      StackMap locals:
      StackMap stack:
            aload 12 /* entryIter */
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 21
        end local 13 // int k
        end local 12 // java.util.Iterator entryIter
        39: .line 310
            goto 43
        40: .line 312
      StackMap locals:
      StackMap stack:
            aload 4 /* actualSql */
            bipush 63
            invokevirtual java.lang.StringBuilder.append:(C)Ljava/lang/StringBuilder;
            pop
        end local 11 // java.lang.Object value
        41: .line 314
            goto 43
        42: .line 316
      StackMap locals:
      StackMap stack:
            aload 4 /* actualSql */
            bipush 63
            invokevirtual java.lang.StringBuilder.append:(C)Ljava/lang/StringBuilder;
            pop
        43: .line 318
      StackMap locals:
      StackMap stack:
            iload 10 /* endIndex */
            istore 5 /* lastIndex */
        end local 10 // int endIndex
        end local 9 // int startIndex
        end local 8 // int[] indexes
        end local 7 // java.lang.String paramName
        44: .line 275
            iinc 6 /* i */ 1
      StackMap locals: org.springframework.jdbc.core.namedparam.ParsedSql org.springframework.jdbc.core.namedparam.SqlParameterSource java.lang.String java.util.List java.lang.StringBuilder int int
      StackMap stack:
        45: iload 6 /* i */
            aload 3 /* paramNames */
            invokeinterface java.util.List.size:()I
            if_icmplt 8
        end local 6 // int i
        46: .line 320
            aload 4 /* actualSql */
            aload 2 /* originalSql */
            iload 5 /* lastIndex */
            aload 2 /* originalSql */
            invokevirtual java.lang.String.length:()I
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/CharSequence;II)Ljava/lang/StringBuilder;
            pop
        47: .line 321
            aload 4 /* actualSql */
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            areturn
        end local 5 // int lastIndex
        end local 4 // java.lang.StringBuilder actualSql
        end local 3 // java.util.List paramNames
        end local 2 // java.lang.String originalSql
        end local 1 // org.springframework.jdbc.core.namedparam.SqlParameterSource paramSource
        end local 0 // org.springframework.jdbc.core.namedparam.ParsedSql parsedSql
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0   48     0       parsedSql  Lorg/springframework/jdbc/core/namedparam/ParsedSql;
            0   48     1     paramSource  Lorg/springframework/jdbc/core/namedparam/SqlParameterSource;
            1   48     2     originalSql  Ljava/lang/String;
            2   48     3      paramNames  Ljava/util/List<Ljava/lang/String;>;
            5   48     4       actualSql  Ljava/lang/StringBuilder;
            6   48     5       lastIndex  I
            7   46     6               i  I
            9   44     7       paramName  Ljava/lang/String;
           10   44     8         indexes  [I
           11   44     9      startIndex  I
           12   44    10        endIndex  I
           15   41    11           value  Ljava/lang/Object;
           19   39    12       entryIter  Ljava/util/Iterator<*>;
           20   39    13               k  I
           25   38    14       entryItem  Ljava/lang/Object;
           27   36    15  expressionList  [Ljava/lang/Object;
           29   35    16               m  I
    RuntimeVisibleParameterAnnotations: 
      0:
      1:
        org.springframework.lang.Nullable()
    MethodParameters:
             Name  Flags
      parsedSql    
      paramSource  

  public static [] buildValueArray(org.springframework.jdbc.core.namedparam.ParsedSql, org.springframework.jdbc.core.namedparam.SqlParameterSource, java.util.List<org.springframework.jdbc.core.SqlParameter>);
    descriptor: (Lorg/springframework/jdbc/core/namedparam/ParsedSql;Lorg/springframework/jdbc/core/namedparam/SqlParameterSource;Ljava/util/List;)[Ljava/lang/Object;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=7, locals=8, args_size=3
        start local 0 // org.springframework.jdbc.core.namedparam.ParsedSql parsedSql
        start local 1 // org.springframework.jdbc.core.namedparam.SqlParameterSource paramSource
        start local 2 // java.util.List declaredParams
         0: .line 336
            aload 0 /* parsedSql */
            invokevirtual org.springframework.jdbc.core.namedparam.ParsedSql.getTotalParameterCount:()I
            anewarray java.lang.Object
            astore 3 /* paramArray */
        start local 3 // java.lang.Object[] paramArray
         1: .line 337
            aload 0 /* parsedSql */
            invokevirtual org.springframework.jdbc.core.namedparam.ParsedSql.getNamedParameterCount:()I
            ifle 9
            aload 0 /* parsedSql */
            invokevirtual org.springframework.jdbc.core.namedparam.ParsedSql.getUnnamedParameterCount:()I
            ifle 9
         2: .line 338
            new org.springframework.dao.InvalidDataAccessApiUsageException
            dup
         3: .line 339
            new java.lang.StringBuilder
            dup
            ldc "Not allowed to mix named and traditional ? placeholders. You have "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
         4: .line 340
            aload 0 /* parsedSql */
            invokevirtual org.springframework.jdbc.core.namedparam.ParsedSql.getNamedParameterCount:()I
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            ldc " named parameter(s) and "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
         5: .line 341
            aload 0 /* parsedSql */
            invokevirtual org.springframework.jdbc.core.namedparam.ParsedSql.getUnnamedParameterCount:()I
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            ldc " traditional placeholder(s) in statement: "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
         6: .line 342
            aload 0 /* parsedSql */
            invokevirtual org.springframework.jdbc.core.namedparam.ParsedSql.getOriginalSql:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
         7: .line 339
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
         8: .line 338
            invokespecial org.springframework.dao.InvalidDataAccessApiUsageException.<init>:(Ljava/lang/String;)V
            athrow
         9: .line 344
      StackMap locals: java.lang.Object[]
      StackMap stack:
            aload 0 /* parsedSql */
            invokevirtual org.springframework.jdbc.core.namedparam.ParsedSql.getParameterNames:()Ljava/util/List;
            astore 4 /* paramNames */
        start local 4 // java.util.List paramNames
        10: .line 345
            iconst_0
            istore 5 /* i */
        start local 5 // int i
        11: goto 23
        12: .line 346
      StackMap locals: java.util.List int
      StackMap stack:
            aload 4 /* paramNames */
            iload 5 /* i */
            invokeinterface java.util.List.get:(I)Ljava/lang/Object;
            checkcast java.lang.String
            astore 6 /* paramName */
        start local 6 // java.lang.String paramName
        13: .line 348
            aload 2 /* declaredParams */
            aload 6 /* paramName */
            iload 5 /* i */
            invokestatic org.springframework.jdbc.core.namedparam.NamedParameterUtils.findParameter:(Ljava/util/List;Ljava/lang/String;I)Lorg/springframework/jdbc/core/SqlParameter;
            astore 7 /* param */
        start local 7 // org.springframework.jdbc.core.SqlParameter param
        14: .line 349
            aload 3 /* paramArray */
            iload 5 /* i */
            aload 7 /* param */
            ifnull 15
            new org.springframework.jdbc.core.SqlParameterValue
            dup
            aload 7 /* param */
            aload 1 /* paramSource */
            aload 6 /* paramName */
            invokeinterface org.springframework.jdbc.core.namedparam.SqlParameterSource.getValue:(Ljava/lang/String;)Ljava/lang/Object;
            invokespecial org.springframework.jdbc.core.SqlParameterValue.<init>:(Lorg/springframework/jdbc/core/SqlParameter;Ljava/lang/Object;)V
            goto 16
        15: .line 350
      StackMap locals: org.springframework.jdbc.core.namedparam.ParsedSql org.springframework.jdbc.core.namedparam.SqlParameterSource java.util.List java.lang.Object[] java.util.List int java.lang.String org.springframework.jdbc.core.SqlParameter
      StackMap stack: java.lang.Object[] int
            aload 1 /* paramSource */
            aload 6 /* paramName */
            invokestatic org.springframework.jdbc.core.namedparam.SqlParameterSourceUtils.getTypedValue:(Lorg/springframework/jdbc/core/namedparam/SqlParameterSource;Ljava/lang/String;)Ljava/lang/Object;
        16: .line 349
      StackMap locals: org.springframework.jdbc.core.namedparam.ParsedSql org.springframework.jdbc.core.namedparam.SqlParameterSource java.util.List java.lang.Object[] java.util.List int java.lang.String org.springframework.jdbc.core.SqlParameter
      StackMap stack: java.lang.Object[] int java.lang.Object
            aastore
        end local 7 // org.springframework.jdbc.core.SqlParameter param
        17: .line 351
            goto 22
        18: .line 352
      StackMap locals: org.springframework.jdbc.core.namedparam.ParsedSql org.springframework.jdbc.core.namedparam.SqlParameterSource java.util.List java.lang.Object[] java.util.List int java.lang.String
      StackMap stack: java.lang.IllegalArgumentException
            astore 7 /* ex */
        start local 7 // java.lang.IllegalArgumentException ex
        19: .line 353
            new org.springframework.dao.InvalidDataAccessApiUsageException
            dup
        20: .line 354
            new java.lang.StringBuilder
            dup
            ldc "No value supplied for the SQL parameter '"
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 6 /* paramName */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc "': "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 7 /* ex */
            invokevirtual java.lang.IllegalArgumentException.getMessage:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        21: .line 353
            invokespecial org.springframework.dao.InvalidDataAccessApiUsageException.<init>:(Ljava/lang/String;)V
            athrow
        end local 7 // java.lang.IllegalArgumentException ex
        end local 6 // java.lang.String paramName
        22: .line 345
      StackMap locals:
      StackMap stack:
            iinc 5 /* i */ 1
      StackMap locals:
      StackMap stack:
        23: iload 5 /* i */
            aload 4 /* paramNames */
            invokeinterface java.util.List.size:()I
            if_icmplt 12
        end local 5 // int i
        24: .line 357
            aload 3 /* paramArray */
            areturn
        end local 4 // java.util.List paramNames
        end local 3 // java.lang.Object[] paramArray
        end local 2 // java.util.List declaredParams
        end local 1 // org.springframework.jdbc.core.namedparam.SqlParameterSource paramSource
        end local 0 // org.springframework.jdbc.core.namedparam.ParsedSql parsedSql
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0   25     0       parsedSql  Lorg/springframework/jdbc/core/namedparam/ParsedSql;
            0   25     1     paramSource  Lorg/springframework/jdbc/core/namedparam/SqlParameterSource;
            0   25     2  declaredParams  Ljava/util/List<Lorg/springframework/jdbc/core/SqlParameter;>;
            1   25     3      paramArray  [Ljava/lang/Object;
           10   25     4      paramNames  Ljava/util/List<Ljava/lang/String;>;
           11   24     5               i  I
           13   22     6       paramName  Ljava/lang/String;
           14   17     7           param  Lorg/springframework/jdbc/core/SqlParameter;
           19   22     7              ex  Ljava/lang/IllegalArgumentException;
      Exception table:
        from    to  target  type
          13    17      18  Class java.lang.IllegalArgumentException
    Signature: (Lorg/springframework/jdbc/core/namedparam/ParsedSql;Lorg/springframework/jdbc/core/namedparam/SqlParameterSource;Ljava/util/List<Lorg/springframework/jdbc/core/SqlParameter;>;)[Ljava/lang/Object;
    RuntimeVisibleParameterAnnotations: 
      0:
      1:
      2:
        org.springframework.lang.Nullable()
    MethodParameters:
                Name  Flags
      parsedSql       
      paramSource     
      declaredParams  

  private static org.springframework.jdbc.core.SqlParameter findParameter(java.util.List<org.springframework.jdbc.core.SqlParameter>, java.lang.String, int);
    descriptor: (Ljava/util/List;Ljava/lang/String;I)Lorg/springframework/jdbc/core/SqlParameter;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=5, args_size=3
        start local 0 // java.util.List declaredParams
        start local 1 // java.lang.String paramName
        start local 2 // int paramIndex
         0: .line 371
            aload 0 /* declaredParams */
            ifnull 10
         1: .line 373
            aload 0 /* declaredParams */
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 4
            goto 5
      StackMap locals: java.util.List java.lang.String int top java.util.Iterator
      StackMap stack:
         2: aload 4
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast org.springframework.jdbc.core.SqlParameter
            astore 3 /* declaredParam */
        start local 3 // org.springframework.jdbc.core.SqlParameter declaredParam
         3: .line 374
            aload 1 /* paramName */
            aload 3 /* declaredParam */
            invokevirtual org.springframework.jdbc.core.SqlParameter.getName:()Ljava/lang/String;
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 5
         4: .line 375
            aload 3 /* declaredParam */
            areturn
        end local 3 // org.springframework.jdbc.core.SqlParameter declaredParam
         5: .line 373
      StackMap locals:
      StackMap stack:
            aload 4
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 2
         6: .line 379
            iload 2 /* paramIndex */
            aload 0 /* declaredParams */
            invokeinterface java.util.List.size:()I
            if_icmpge 10
         7: .line 380
            aload 0 /* declaredParams */
            iload 2 /* paramIndex */
            invokeinterface java.util.List.get:(I)Ljava/lang/Object;
            checkcast org.springframework.jdbc.core.SqlParameter
            astore 3 /* declaredParam */
        start local 3 // org.springframework.jdbc.core.SqlParameter declaredParam
         8: .line 382
            aload 3 /* declaredParam */
            invokevirtual org.springframework.jdbc.core.SqlParameter.getName:()Ljava/lang/String;
            ifnonnull 10
         9: .line 383
            aload 3 /* declaredParam */
            areturn
        end local 3 // org.springframework.jdbc.core.SqlParameter declaredParam
        10: .line 387
      StackMap locals: java.util.List java.lang.String int
      StackMap stack:
            aconst_null
            areturn
        end local 2 // int paramIndex
        end local 1 // java.lang.String paramName
        end local 0 // java.util.List declaredParams
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0   11     0  declaredParams  Ljava/util/List<Lorg/springframework/jdbc/core/SqlParameter;>;
            0   11     1       paramName  Ljava/lang/String;
            0   11     2      paramIndex  I
            3    5     3   declaredParam  Lorg/springframework/jdbc/core/SqlParameter;
            8   10     3   declaredParam  Lorg/springframework/jdbc/core/SqlParameter;
    Signature: (Ljava/util/List<Lorg/springframework/jdbc/core/SqlParameter;>;Ljava/lang/String;I)Lorg/springframework/jdbc/core/SqlParameter;
    RuntimeVisibleAnnotations: 
      org.springframework.lang.Nullable()
    RuntimeVisibleParameterAnnotations: 
      0:
        org.springframework.lang.Nullable()
      1:
      2:
    MethodParameters:
                Name  Flags
      declaredParams  
      paramName       
      paramIndex      

  private static boolean isParameterSeparator(char);
    descriptor: (C)Z
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // char c
         0: .line 395
            iload 0 /* c */
            sipush 128
            if_icmpge 1
            getstatic org.springframework.jdbc.core.namedparam.NamedParameterUtils.separatorIndex:[Z
            iload 0 /* c */
            baload
            ifne 2
      StackMap locals:
      StackMap stack:
         1: iload 0 /* c */
            invokestatic java.lang.Character.isWhitespace:(C)Z
            ifne 2
            iconst_0
            ireturn
      StackMap locals:
      StackMap stack:
         2: iconst_1
            ireturn
        end local 0 // char c
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0     c  C
    MethodParameters:
      Name  Flags
      c     

  public static int[] buildSqlTypeArray(org.springframework.jdbc.core.namedparam.ParsedSql, org.springframework.jdbc.core.namedparam.SqlParameterSource);
    descriptor: (Lorg/springframework/jdbc/core/namedparam/ParsedSql;Lorg/springframework/jdbc/core/namedparam/SqlParameterSource;)[I
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=6, args_size=2
        start local 0 // org.springframework.jdbc.core.namedparam.ParsedSql parsedSql
        start local 1 // org.springframework.jdbc.core.namedparam.SqlParameterSource paramSource
         0: .line 407
            aload 0 /* parsedSql */
            invokevirtual org.springframework.jdbc.core.namedparam.ParsedSql.getTotalParameterCount:()I
            newarray 10
            astore 2 /* sqlTypes */
        start local 2 // int[] sqlTypes
         1: .line 408
            aload 0 /* parsedSql */
            invokevirtual org.springframework.jdbc.core.namedparam.ParsedSql.getParameterNames:()Ljava/util/List;
            astore 3 /* paramNames */
        start local 3 // java.util.List paramNames
         2: .line 409
            iconst_0
            istore 4 /* i */
        start local 4 // int i
         3: goto 7
         4: .line 410
      StackMap locals: int[] java.util.List int
      StackMap stack:
            aload 3 /* paramNames */
            iload 4 /* i */
            invokeinterface java.util.List.get:(I)Ljava/lang/Object;
            checkcast java.lang.String
            astore 5 /* paramName */
        start local 5 // java.lang.String paramName
         5: .line 411
            aload 2 /* sqlTypes */
            iload 4 /* i */
            aload 1 /* paramSource */
            aload 5 /* paramName */
            invokeinterface org.springframework.jdbc.core.namedparam.SqlParameterSource.getSqlType:(Ljava/lang/String;)I
            iastore
        end local 5 // java.lang.String paramName
         6: .line 409
            iinc 4 /* i */ 1
      StackMap locals:
      StackMap stack:
         7: iload 4 /* i */
            aload 3 /* paramNames */
            invokeinterface java.util.List.size:()I
            if_icmplt 4
        end local 4 // int i
         8: .line 413
            aload 2 /* sqlTypes */
            areturn
        end local 3 // java.util.List paramNames
        end local 2 // int[] sqlTypes
        end local 1 // org.springframework.jdbc.core.namedparam.SqlParameterSource paramSource
        end local 0 // org.springframework.jdbc.core.namedparam.ParsedSql parsedSql
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    9     0    parsedSql  Lorg/springframework/jdbc/core/namedparam/ParsedSql;
            0    9     1  paramSource  Lorg/springframework/jdbc/core/namedparam/SqlParameterSource;
            1    9     2     sqlTypes  [I
            2    9     3   paramNames  Ljava/util/List<Ljava/lang/String;>;
            3    8     4            i  I
            5    6     5    paramName  Ljava/lang/String;
    MethodParameters:
             Name  Flags
      parsedSql    
      paramSource  

  public static java.util.List<org.springframework.jdbc.core.SqlParameter> buildSqlParameterList(org.springframework.jdbc.core.namedparam.ParsedSql, org.springframework.jdbc.core.namedparam.SqlParameterSource);
    descriptor: (Lorg/springframework/jdbc/core/namedparam/ParsedSql;Lorg/springframework/jdbc/core/namedparam/SqlParameterSource;)Ljava/util/List;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=7, locals=6, args_size=2
        start local 0 // org.springframework.jdbc.core.namedparam.ParsedSql parsedSql
        start local 1 // org.springframework.jdbc.core.namedparam.SqlParameterSource paramSource
         0: .line 425
            aload 0 /* parsedSql */
            invokevirtual org.springframework.jdbc.core.namedparam.ParsedSql.getParameterNames:()Ljava/util/List;
            astore 2 /* paramNames */
        start local 2 // java.util.List paramNames
         1: .line 426
            new java.util.ArrayList
            dup
            aload 2 /* paramNames */
            invokeinterface java.util.List.size:()I
            invokespecial java.util.ArrayList.<init>:(I)V
            astore 3 /* params */
        start local 3 // java.util.List params
         2: .line 427
            aload 2 /* paramNames */
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 5
            goto 7
      StackMap locals: org.springframework.jdbc.core.namedparam.ParsedSql org.springframework.jdbc.core.namedparam.SqlParameterSource java.util.List java.util.List top java.util.Iterator
      StackMap stack:
         3: aload 5
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.lang.String
            astore 4 /* paramName */
        start local 4 // java.lang.String paramName
         4: .line 428
            aload 3 /* params */
            new org.springframework.jdbc.core.SqlParameter
            dup
         5: .line 429
            aload 4 /* paramName */
            aload 1 /* paramSource */
            aload 4 /* paramName */
            invokeinterface org.springframework.jdbc.core.namedparam.SqlParameterSource.getSqlType:(Ljava/lang/String;)I
            aload 1 /* paramSource */
            aload 4 /* paramName */
            invokeinterface org.springframework.jdbc.core.namedparam.SqlParameterSource.getTypeName:(Ljava/lang/String;)Ljava/lang/String;
            invokespecial org.springframework.jdbc.core.SqlParameter.<init>:(Ljava/lang/String;ILjava/lang/String;)V
         6: .line 428
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        end local 4 // java.lang.String paramName
         7: .line 427
      StackMap locals:
      StackMap stack:
            aload 5
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 3
         8: .line 431
            aload 3 /* params */
            areturn
        end local 3 // java.util.List params
        end local 2 // java.util.List paramNames
        end local 1 // org.springframework.jdbc.core.namedparam.SqlParameterSource paramSource
        end local 0 // org.springframework.jdbc.core.namedparam.ParsedSql parsedSql
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    9     0    parsedSql  Lorg/springframework/jdbc/core/namedparam/ParsedSql;
            0    9     1  paramSource  Lorg/springframework/jdbc/core/namedparam/SqlParameterSource;
            1    9     2   paramNames  Ljava/util/List<Ljava/lang/String;>;
            2    9     3       params  Ljava/util/List<Lorg/springframework/jdbc/core/SqlParameter;>;
            4    7     4    paramName  Ljava/lang/String;
    Signature: (Lorg/springframework/jdbc/core/namedparam/ParsedSql;Lorg/springframework/jdbc/core/namedparam/SqlParameterSource;)Ljava/util/List<Lorg/springframework/jdbc/core/SqlParameter;>;
    MethodParameters:
             Name  Flags
      parsedSql    
      paramSource  

  public static java.lang.String parseSqlStatementIntoString(java.lang.String);
    descriptor: (Ljava/lang/String;)Ljava/lang/String;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=2, args_size=1
        start local 0 // java.lang.String sql
         0: .line 449
            aload 0 /* sql */
            invokestatic org.springframework.jdbc.core.namedparam.NamedParameterUtils.parseSqlStatement:(Ljava/lang/String;)Lorg/springframework/jdbc/core/namedparam/ParsedSql;
            astore 1 /* parsedSql */
        start local 1 // org.springframework.jdbc.core.namedparam.ParsedSql parsedSql
         1: .line 450
            aload 1 /* parsedSql */
            aconst_null
            invokestatic org.springframework.jdbc.core.namedparam.NamedParameterUtils.substituteNamedParameters:(Lorg/springframework/jdbc/core/namedparam/ParsedSql;Lorg/springframework/jdbc/core/namedparam/SqlParameterSource;)Ljava/lang/String;
            areturn
        end local 1 // org.springframework.jdbc.core.namedparam.ParsedSql parsedSql
        end local 0 // java.lang.String sql
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    2     0        sql  Ljava/lang/String;
            1    2     1  parsedSql  Lorg/springframework/jdbc/core/namedparam/ParsedSql;
    MethodParameters:
      Name  Flags
      sql   

  public static java.lang.String substituteNamedParameters(java.lang.String, org.springframework.jdbc.core.namedparam.SqlParameterSource);
    descriptor: (Ljava/lang/String;Lorg/springframework/jdbc/core/namedparam/SqlParameterSource;)Ljava/lang/String;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=3, args_size=2
        start local 0 // java.lang.String sql
        start local 1 // org.springframework.jdbc.core.namedparam.SqlParameterSource paramSource
         0: .line 464
            aload 0 /* sql */
            invokestatic org.springframework.jdbc.core.namedparam.NamedParameterUtils.parseSqlStatement:(Ljava/lang/String;)Lorg/springframework/jdbc/core/namedparam/ParsedSql;
            astore 2 /* parsedSql */
        start local 2 // org.springframework.jdbc.core.namedparam.ParsedSql parsedSql
         1: .line 465
            aload 2 /* parsedSql */
            aload 1 /* paramSource */
            invokestatic org.springframework.jdbc.core.namedparam.NamedParameterUtils.substituteNamedParameters:(Lorg/springframework/jdbc/core/namedparam/ParsedSql;Lorg/springframework/jdbc/core/namedparam/SqlParameterSource;)Ljava/lang/String;
            areturn
        end local 2 // org.springframework.jdbc.core.namedparam.ParsedSql parsedSql
        end local 1 // org.springframework.jdbc.core.namedparam.SqlParameterSource paramSource
        end local 0 // java.lang.String sql
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    2     0          sql  Ljava/lang/String;
            0    2     1  paramSource  Lorg/springframework/jdbc/core/namedparam/SqlParameterSource;
            1    2     2    parsedSql  Lorg/springframework/jdbc/core/namedparam/ParsedSql;
    MethodParameters:
             Name  Flags
      sql          
      paramSource  

  public static [] buildValueArray(java.lang.String, java.util.Map<java.lang.String, ?>);
    descriptor: (Ljava/lang/String;Ljava/util/Map;)[Ljava/lang/Object;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=3, args_size=2
        start local 0 // java.lang.String sql
        start local 1 // java.util.Map paramMap
         0: .line 477
            aload 0 /* sql */
            invokestatic org.springframework.jdbc.core.namedparam.NamedParameterUtils.parseSqlStatement:(Ljava/lang/String;)Lorg/springframework/jdbc/core/namedparam/ParsedSql;
            astore 2 /* parsedSql */
        start local 2 // org.springframework.jdbc.core.namedparam.ParsedSql parsedSql
         1: .line 478
            aload 2 /* parsedSql */
            new org.springframework.jdbc.core.namedparam.MapSqlParameterSource
            dup
            aload 1 /* paramMap */
            invokespecial org.springframework.jdbc.core.namedparam.MapSqlParameterSource.<init>:(Ljava/util/Map;)V
            aconst_null
            invokestatic org.springframework.jdbc.core.namedparam.NamedParameterUtils.buildValueArray:(Lorg/springframework/jdbc/core/namedparam/ParsedSql;Lorg/springframework/jdbc/core/namedparam/SqlParameterSource;Ljava/util/List;)[Ljava/lang/Object;
            areturn
        end local 2 // org.springframework.jdbc.core.namedparam.ParsedSql parsedSql
        end local 1 // java.util.Map paramMap
        end local 0 // java.lang.String sql
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    2     0        sql  Ljava/lang/String;
            0    2     1   paramMap  Ljava/util/Map<Ljava/lang/String;*>;
            1    2     2  parsedSql  Lorg/springframework/jdbc/core/namedparam/ParsedSql;
    Signature: (Ljava/lang/String;Ljava/util/Map<Ljava/lang/String;*>;)[Ljava/lang/Object;
    MethodParameters:
          Name  Flags
      sql       
      paramMap  
}
SourceFile: "NamedParameterUtils.java"
NestMembers:
  org.springframework.jdbc.core.namedparam.NamedParameterUtils$ParameterHolder
InnerClasses:
  private ParameterHolder = org.springframework.jdbc.core.namedparam.NamedParameterUtils$ParameterHolder of org.springframework.jdbc.core.namedparam.NamedParameterUtils