org_aspectj_ajde_core_tests_CompilerMessagesTest_java
org.aspectj.weaver.TypeFactory
public static UnresolvedType createTypeFromSignature(String signature) {
        char firstChar = signature.charAt(0);
        if (firstChar == 'P') {
            int startOfParams = signature.indexOf(60);
            if (startOfParams == -1) {
                String signatureErasure = "L" + signature.substring(1);
                return new UnresolvedType(signature, signatureErasure, UnresolvedType.NONE);
            }
            int endOfParams = TypeFactory.locateMatchingEndAngleBracket(signature, startOfParams);
            StringBuilder erasureSig = new StringBuilder(signature);
            erasureSig.setCharAt(0, 'L');
            while (startOfParams != -1) {
                erasureSig.delete(startOfParams, endOfParams + 1);
                startOfParams = TypeFactory.locateFirstBracket(erasureSig);
                if (startOfParams == -1) continue;
                endOfParams = TypeFactory.locateMatchingEndAngleBracket(erasureSig, startOfParams);
            }
            String signatureErasure = erasureSig.toString();
            String lastType = null;
            int nestedTypePosition = signature.indexOf("$", endOfParams);
            lastType = nestedTypePosition != -1 ? signature.substring(nestedTypePosition + 1) : new String(signature);
            startOfParams = lastType.indexOf("<");
            UnresolvedType[] typeParams = UnresolvedType.NONE;
            if (startOfParams != -1) {
                endOfParams = TypeFactory.locateMatchingEndAngleBracket(lastType, startOfParams);
                typeParams = TypeFactory.createTypeParams(lastType.substring(startOfParams + 1, endOfParams));
            }
            StringBuilder s = new StringBuilder();
            int firstAngleBracket = signature.indexOf(60);
            s.append("P").append(signature.substring(1, firstAngleBracket));
            s.append('<');
            for (UnresolvedType typeParameter : typeParams) {
                s.append(typeParameter.getSignature());
            }
            s.append(">;");
            signature = s.toString();
            return new UnresolvedType(signature, signatureErasure, typeParams);
        }
        if ((firstChar == '?' || firstChar == '*') && signature.length() == 1) {
            return WildcardedUnresolvedType.QUESTIONMARK;
        }
        if (firstChar == '+') {
            UnresolvedType upperBound = TypeFactory.convertSigToType(signature.substring(1));
            WildcardedUnresolvedType wildcardedUT = new WildcardedUnresolvedType(signature, upperBound, null);
            return wildcardedUT;
        }
        if (firstChar == '-') {
            UnresolvedType lowerBound = TypeFactory.convertSigToType(signature.substring(1));
            WildcardedUnresolvedType wildcardedUT = new WildcardedUnresolvedType(signature, null, lowerBound);
            return wildcardedUT;
        }
        if (firstChar == 'T') {
            String typeVariableName = signature.substring(1);
            if (typeVariableName.endsWith(";")) {
                typeVariableName = typeVariableName.substring(0, typeVariableName.length() - 1);
            }
            return new UnresolvedTypeVariableReferenceType(new TypeVariable(typeVariableName));
        }
        if (firstChar == '[') {
            int dims = 0;
            while (signature.charAt(dims) == '[') {
                ++dims;
            }
            UnresolvedType componentType = TypeFactory.createTypeFromSignature(signature.substring(dims));
            return new UnresolvedType(signature, signature.substring(0, dims) + componentType.getErasureSignature());
        }
        if (signature.length() == 1) {
            switch (firstChar) {
                case 'V': {
                    return UnresolvedType.VOID;
                }
                case 'Z': {
                    return UnresolvedType.BOOLEAN;
                }
                case 'B': {
                    return UnresolvedType.BYTE;
                }
                case 'C': {
                    return UnresolvedType.CHAR;
                }
                case 'D': {
                    return UnresolvedType.DOUBLE;
                }
                case 'F': {
                    return UnresolvedType.FLOAT;
                }
                case 'I': {
                    return UnresolvedType.INT;
                }
                case 'J': {
                    return UnresolvedType.LONG;
                }
                case 'S': {
                    return UnresolvedType.SHORT;
                }
            }
        } else {
            if (firstChar == '@') {
                return ResolvedType.MISSING;
            }
            if (firstChar == 'L') {
                int leftAngleBracket = signature.indexOf(60);
                if (leftAngleBracket == -1) {
                    return new UnresolvedType(signature);
                }
                int endOfParams = TypeFactory.locateMatchingEndAngleBracket(signature, leftAngleBracket);
                StringBuilder erasureSig = new StringBuilder(signature);
                erasureSig.setCharAt(0, 'L');
                while (leftAngleBracket != -1) {
                    erasureSig.delete(leftAngleBracket, endOfParams + 1);
                    leftAngleBracket = TypeFactory.locateFirstBracket(erasureSig);
                    if (leftAngleBracket == -1) continue;
                    endOfParams = TypeFactory.locateMatchingEndAngleBracket(erasureSig, leftAngleBracket);
                }
                String signatureErasure = erasureSig.toString();
                String lastType = null;
                int nestedTypePosition = signature.indexOf("$", endOfParams);
                lastType = nestedTypePosition != -1 ? signature.substring(nestedTypePosition + 1) : new String(signature);
                leftAngleBracket = lastType.indexOf("<");
                UnresolvedType[] typeParams = UnresolvedType.NONE;
                if (leftAngleBracket != -1) {
                    endOfParams = TypeFactory.locateMatchingEndAngleBracket(lastType, leftAngleBracket);
                    typeParams = TypeFactory.createTypeParams(lastType.substring(leftAngleBracket + 1, endOfParams));
                }
                StringBuilder s = new StringBuilder();
                int firstAngleBracket = signature.indexOf(60);
                s.append("P").append(signature.substring(1, firstAngleBracket));
                s.append('<');
                for (UnresolvedType typeParameter : typeParams) {
                    s.append(typeParameter.getSignature());
                }
                s.append(">;");
                signature = s.toString();
                return new UnresolvedType(signature, signatureErasure, typeParams);
            }
        }
        return new UnresolvedType(signature);
    }
 -> java.lang.String.charAt(int): char -> java.lang.String.indexOf(int): int -> java.lang.CharSequence.length(): int -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.StringBuilder.setCharAt(int,char): void -> java.lang.StringBuilder.delete(int,int): java.lang.StringBuilder -> java.lang.StringBuilder.length(): int -> java.lang.StringBuilder.charAt(int): char -> java.lang.StringBuilder.charAt(int): char -> java.lang.StringBuilder.charAt(int): char -> java.lang.StringBuilder.charAt(int): char -> java.lang.StringBuilder.charAt(int): char -> java.lang.StringBuilder.charAt(int): char -> java.lang.StringBuilder.charAt(int): char -> java.lang.StringBuilder.charAt(int): char -> java.lang.StringBuilder.charAt(int): char -> java.lang.StringBuilder.charAt(int): char -> java.lang.StringBuilder.charAt(int): char -> java.lang.StringBuilder.charAt(int): char -> java.lang.StringBuilder.charAt(int): char -> java.lang.StringBuilder.charAt(int): char -> java.lang.StringBuilder.charAt(int): char -> java.lang.StringBuilder.charAt(int): char -> java.lang.StringBuilder.charAt(int): char -> java.lang.StringBuilder.charAt(int): char -> java.lang.StringBuilder.charAt(int): char -> java.lang.StringBuilder.charAt(int): char -> java.lang.StringBuilder.charAt(int): char -> java.lang.StringBuilder.charAt(int): char -> java.lang.StringBuilder.toString(): java.lang.String -> java.lang.String.indexOf(java.lang.String,int): int -> java.lang.String.indexOf(java.lang.String): int -> java.lang.CharSequence.length(): int -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.String.substring(int,int): java.lang.String -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.substring(int,int): java.lang.String -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.indexOf(int): int -> java.util.List.add(java.lang.Object): boolean -> java.lang.String.substring(int): java.lang.String -> java.lang.String.length(): int -> java.util.List.size(): int -> java.util.List.toArray(java.lang.Object[]): java.lang.Object[] -> java.lang.String.indexOf(int): int -> java.lang.StringBuilder.append(java.lang.String): java.lang.StringBuilder -> java.lang.String.substring(int,int): java.lang.String -> java.lang.StringBuilder.append(java.lang.String): java.lang.StringBuilder -> java.lang.StringBuilder.append(char): java.lang.StringBuilder -> java.lang.StringBuilder.append(java.lang.String): java.lang.StringBuilder -> java.lang.StringBuilder.append(java.lang.String): java.lang.StringBuilder -> java.lang.StringBuilder.toString(): java.lang.String
 [CALL] -> java.lang.String.charAt(int): char -> java.lang.String.indexOf(int): int [CALL] -> java.lang.CharSequence.length(): int -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char [EXIT] -> java.lang.StringBuilder.setCharAt(int,char): void -> java.lang.StringBuilder.delete(int,int): java.lang.StringBuilder [CALL] -> java.lang.StringBuilder.length(): int -> java.lang.StringBuilder.charAt(int): char -> java.lang.StringBuilder.charAt(int): char -> java.lang.StringBuilder.charAt(int): char -> java.lang.StringBuilder.charAt(int): char -> java.lang.StringBuilder.charAt(int): char -> java.lang.StringBuilder.charAt(int): char -> java.lang.StringBuilder.charAt(int): char -> java.lang.StringBuilder.charAt(int): char -> java.lang.StringBuilder.charAt(int): char -> java.lang.StringBuilder.charAt(int): char -> java.lang.StringBuilder.charAt(int): char -> java.lang.StringBuilder.charAt(int): char -> java.lang.StringBuilder.charAt(int): char -> java.lang.StringBuilder.charAt(int): char -> java.lang.StringBuilder.charAt(int): char -> java.lang.StringBuilder.charAt(int): char -> java.lang.StringBuilder.charAt(int): char -> java.lang.StringBuilder.charAt(int): char -> java.lang.StringBuilder.charAt(int): char -> java.lang.StringBuilder.charAt(int): char -> java.lang.StringBuilder.charAt(int): char -> java.lang.StringBuilder.charAt(int): char [EXIT] -> java.lang.StringBuilder.toString(): java.lang.String -> java.lang.String.indexOf(java.lang.String,int): int -> java.lang.String.indexOf(java.lang.String): int [CALL] -> java.lang.CharSequence.length(): int -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char -> java.lang.CharSequence.charAt(int): char [EXIT] -> java.lang.String.substring(int,int): java.lang.String [CALL] -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.substring(int,int): java.lang.String [CALL] -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.indexOf(int): int [CALL] [EXIT] [EXIT] -> java.util.List.add(java.lang.Object): boolean -> java.lang.String.substring(int): java.lang.String -> java.lang.String.length(): int -> java.util.List.size(): int -> java.util.List.toArray(java.lang.Object[]): java.lang.Object[] [EXIT] -> java.lang.String.indexOf(int): int -> java.lang.StringBuilder.append(java.lang.String): java.lang.StringBuilder -> java.lang.String.substring(int,int): java.lang.String -> java.lang.StringBuilder.append(java.lang.String): java.lang.StringBuilder -> java.lang.StringBuilder.append(char): java.lang.StringBuilder [CALL] [EXIT] -> java.lang.StringBuilder.append(java.lang.String): java.lang.StringBuilder -> java.lang.StringBuilder.append(java.lang.String): java.lang.StringBuilder -> java.lang.StringBuilder.toString(): java.lang.String [CALL] [EXIT] [EXIT]