com_baeldung_boot_client_DetailsServiceClientIntegrationTest_java
org.springframework.asm.ClassReader
private int readElementValue(AnnotationVisitor annotationVisitor, int elementValueOffset, String elementName, char[] charBuffer) {
        int currentOffset = elementValueOffset;
        if (annotationVisitor == null) {
            switch (this.classFileBuffer[currentOffset] & 0xFF) {
                case 101: {
                    return currentOffset + 5;
                }
                case 64: {
                    return this.readElementValues(null, currentOffset + 3, true, charBuffer);
                }
                case 91: {
                    return this.readElementValues(null, currentOffset + 1, false, charBuffer);
                }
            }
            return currentOffset + 3;
        }
        block5 : switch (this.classFileBuffer[currentOffset++] & 0xFF) {
            case 66: {
                annotationVisitor.visit(elementName, (byte)this.readInt(this.cpInfoOffsets[this.readUnsignedShort(currentOffset)]));
                currentOffset += 2;
                break;
            }
            case 67: {
                annotationVisitor.visit(elementName, Character.valueOf((char)this.readInt(this.cpInfoOffsets[this.readUnsignedShort(currentOffset)])));
                currentOffset += 2;
                break;
            }
            case 68: 
            case 70: 
            case 73: 
            case 74: {
                annotationVisitor.visit(elementName, this.readConst(this.readUnsignedShort(currentOffset), charBuffer));
                currentOffset += 2;
                break;
            }
            case 83: {
                annotationVisitor.visit(elementName, (short)this.readInt(this.cpInfoOffsets[this.readUnsignedShort(currentOffset)]));
                currentOffset += 2;
                break;
            }
            case 90: {
                annotationVisitor.visit(elementName, this.readInt(this.cpInfoOffsets[this.readUnsignedShort(currentOffset)]) == 0 ? Boolean.FALSE : Boolean.TRUE);
                currentOffset += 2;
                break;
            }
            case 115: {
                annotationVisitor.visit(elementName, this.readUTF8(currentOffset, charBuffer));
                currentOffset += 2;
                break;
            }
            case 101: {
                annotationVisitor.visitEnum(elementName, this.readUTF8(currentOffset, charBuffer), this.readUTF8(currentOffset + 2, charBuffer));
                currentOffset += 4;
                break;
            }
            case 99: {
                annotationVisitor.visit(elementName, Type.getType(this.readUTF8(currentOffset, charBuffer)));
                currentOffset += 2;
                break;
            }
            case 64: {
                currentOffset = this.readElementValues(annotationVisitor.visitAnnotation(elementName, this.readUTF8(currentOffset, charBuffer)), currentOffset + 2, true, charBuffer);
                break;
            }
            case 91: {
                int numValues = this.readUnsignedShort(currentOffset);
                currentOffset += 2;
                if (numValues == 0) {
                    return this.readElementValues(annotationVisitor.visitArray(elementName), currentOffset - 2, false, charBuffer);
                }
                switch (this.classFileBuffer[currentOffset] & 0xFF) {
                    case 66: {
                        byte[] byteValues = new byte[numValues];
                        for (int i = 0; i < numValues; ++i) {
                            byteValues[i] = (byte)this.readInt(this.cpInfoOffsets[this.readUnsignedShort(currentOffset + 1)]);
                            currentOffset += 3;
                        }
                        annotationVisitor.visit(elementName, byteValues);
                        break block5;
                    }
                    case 90: {
                        boolean[] booleanValues = new boolean[numValues];
                        for (int i = 0; i < numValues; ++i) {
                            booleanValues[i] = this.readInt(this.cpInfoOffsets[this.readUnsignedShort(currentOffset + 1)]) != 0;
                            currentOffset += 3;
                        }
                        annotationVisitor.visit(elementName, booleanValues);
                        break block5;
                    }
                    case 83: {
                        short[] shortValues = new short[numValues];
                        for (int i = 0; i < numValues; ++i) {
                            shortValues[i] = (short)this.readInt(this.cpInfoOffsets[this.readUnsignedShort(currentOffset + 1)]);
                            currentOffset += 3;
                        }
                        annotationVisitor.visit(elementName, shortValues);
                        break block5;
                    }
                    case 67: {
                        char[] charValues = new char[numValues];
                        for (int i = 0; i < numValues; ++i) {
                            charValues[i] = (char)this.readInt(this.cpInfoOffsets[this.readUnsignedShort(currentOffset + 1)]);
                            currentOffset += 3;
                        }
                        annotationVisitor.visit(elementName, charValues);
                        break block5;
                    }
                    case 73: {
                        int[] intValues = new int[numValues];
                        for (int i = 0; i < numValues; ++i) {
                            intValues[i] = this.readInt(this.cpInfoOffsets[this.readUnsignedShort(currentOffset + 1)]);
                            currentOffset += 3;
                        }
                        annotationVisitor.visit(elementName, intValues);
                        break block5;
                    }
                    case 74: {
                        long[] longValues = new long[numValues];
                        for (int i = 0; i < numValues; ++i) {
                            longValues[i] = this.readLong(this.cpInfoOffsets[this.readUnsignedShort(currentOffset + 1)]);
                            currentOffset += 3;
                        }
                        annotationVisitor.visit(elementName, longValues);
                        break block5;
                    }
                    case 70: {
                        float[] floatValues = new float[numValues];
                        for (int i = 0; i < numValues; ++i) {
                            floatValues[i] = Float.intBitsToFloat(this.readInt(this.cpInfoOffsets[this.readUnsignedShort(currentOffset + 1)]));
                            currentOffset += 3;
                        }
                        annotationVisitor.visit(elementName, floatValues);
                        break block5;
                    }
                    case 68: {
                        double[] doubleValues = new double[numValues];
                        for (int i = 0; i < numValues; ++i) {
                            doubleValues[i] = Double.longBitsToDouble(this.readLong(this.cpInfoOffsets[this.readUnsignedShort(currentOffset + 1)]));
                            currentOffset += 3;
                        }
                        annotationVisitor.visit(elementName, doubleValues);
                        break block5;
                    }
                }
                currentOffset = this.readElementValues(annotationVisitor.visitArray(elementName), currentOffset - 2, false, charBuffer);
                break;
            }
            default: {
                throw new IllegalArgumentException();
            }
        }
        return currentOffset;
    }
 -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.substring(int,int): java.lang.String -> java.lang.String.replace(char,char): java.lang.String -> java.util.List.add(java.lang.Object): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.substring(int,int): java.lang.String -> java.lang.String.replace(char,char): java.lang.String -> java.util.List.add(java.lang.Object): boolean -> java.util.List.isEmpty(): boolean -> java.util.List.get(int): java.lang.Object -> java.lang.Object.getClass(): java.lang.Class -> java.util.List.size(): int -> java.lang.reflect.Array.newInstance(java.lang.Class,int): java.lang.Object -> java.util.List.toArray(java.lang.Object[]): java.lang.Object[] -> java.util.function.Consumer.accept(java.lang.Object): void -> java.util.Map.put(java.lang.Object,java.lang.Object): java.lang.Object
 [CALL] [CALL] [EXIT] [CALL] [CALL] [CALL] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [CALL] [CALL] [EXIT] [CALL] [CALL] [CALL] [EXIT] [CALL] [CALL] [EXIT] [CALL] [EXIT] [EXIT] [EXIT] [CALL] -> java.lang.String.length(): int [CALL] -> java.lang.String.charAt(int): char [CALL] [EXIT] [EXIT] [EXIT] [CALL] [CALL] -> java.lang.String.substring(int,int): java.lang.String -> java.lang.String.replace(char,char): java.lang.String [EXIT] -> java.util.List.add(java.lang.Object): boolean [EXIT] [EXIT] [CALL] [CALL] [CALL] [EXIT] [CALL] [CALL] [EXIT] [CALL] [EXIT] [EXIT] [EXIT] [CALL] -> java.lang.String.length(): int [CALL] -> java.lang.String.charAt(int): char [CALL] [EXIT] [EXIT] [EXIT] [CALL] [CALL] -> java.lang.String.substring(int,int): java.lang.String -> java.lang.String.replace(char,char): java.lang.String [EXIT] -> java.util.List.add(java.lang.Object): boolean [EXIT] [EXIT] [CALL] [CALL] -> java.util.List.isEmpty(): boolean -> java.util.List.get(int): java.lang.Object -> java.lang.Object.getClass(): java.lang.Class [EXIT] -> java.util.List.size(): int -> java.lang.reflect.Array.newInstance(java.lang.Class,int): java.lang.Object -> java.util.List.toArray(java.lang.Object[]): java.lang.Object[] -> java.util.function.Consumer.accept(java.lang.Object): void [CALL] -> java.util.Map.put(java.lang.Object,java.lang.Object): java.lang.Object [EXIT] [EXIT] [EXIT] [EXIT]