org_aspectj_ajde_core_tests_ResourceCopyTest_java
org.aspectj.weaver.TypeFactory
private static UnresolvedType[] createTypeParams(String typeParameterSpecification) {
        String remainingToProcess = typeParameterSpecification;
        ArrayList<UnresolvedType> types = new ArrayList<UnresolvedType>();
        while (remainingToProcess.length() != 0) {
            int endOfSig = 0;
            int anglies = 0;
            boolean hadAnglies = false;
            boolean sigFound = false;
            block8: for (endOfSig = 0; endOfSig < remainingToProcess.length() && !sigFound; ++endOfSig) {
                char thisChar = remainingToProcess.charAt(endOfSig);
                switch (thisChar) {
                    case '<': {
                        ++anglies;
                        hadAnglies = true;
                        continue block8;
                    }
                    case '>': {
                        --anglies;
                        continue block8;
                    }
                    case '*': {
                        if (anglies != 0) continue block8;
                        int nextCharPos = endOfSig + 1;
                        if (nextCharPos >= remainingToProcess.length()) {
                            sigFound = true;
                            continue block8;
                        }
                        char nextChar = remainingToProcess.charAt(nextCharPos);
                        if (nextChar == '+' || nextChar == '-') continue block8;
                        sigFound = true;
                        continue block8;
                    }
                    case '[': {
                        if (anglies != 0) continue block8;
                        int nextChar = endOfSig + 1;
                        while (remainingToProcess.charAt(nextChar) == '[') {
                            ++nextChar;
                        }
                        if ("BCDFIJSZ".indexOf(remainingToProcess.charAt(nextChar)) == -1) continue block8;
                        sigFound = true;
                        endOfSig = nextChar;
                        continue block8;
                    }
                    case ';': {
                        if (anglies != 0) continue block8;
                        sigFound = true;
                    }
                }
            }
            String forProcessing = remainingToProcess.substring(0, endOfSig);
            if (hadAnglies && forProcessing.charAt(0) == 'L') {
                forProcessing = "P" + forProcessing.substring(1);
            }
            types.add(TypeFactory.createTypeFromSignature(forProcessing));
            remainingToProcess = remainingToProcess.substring(endOfSig);
        }
        UnresolvedType[] typeParams = new UnresolvedType[types.size()];
        types.toArray(typeParams);
        return typeParams;
    }
 -> 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.substring(int,int): java.lang.String -> java.lang.String.charAt(int): char -> java.lang.String.substring(int): java.lang.String -> java.lang.String.endsWith(java.lang.String): boolean -> java.lang.String.length(): int -> java.lang.String.substring(int,int): java.lang.String -> java.lang.StringBuilder.append(java.lang.String): 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 -> java.util.List.add(java.lang.Object): boolean -> java.lang.String.substring(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.substring(int,int): java.lang.String -> java.lang.String.charAt(int): char -> java.lang.String.substring(int): java.lang.String -> java.lang.String.endsWith(java.lang.String): boolean -> java.lang.String.length(): int -> java.lang.String.substring(int,int): java.lang.String -> java.lang.StringBuilder.append(java.lang.String): 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 -> 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[]
 [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.substring(int,int): java.lang.String [CALL] -> java.lang.String.charAt(int): char -> java.lang.String.substring(int): java.lang.String -> java.lang.String.endsWith(java.lang.String): boolean -> java.lang.String.length(): int -> java.lang.String.substring(int,int): java.lang.String [CALL] [EXIT] [CALL] -> java.lang.StringBuilder.append(java.lang.String): 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] [CALL] [EXIT] [CALL] [EXIT] [EXIT] [EXIT] -> java.util.List.add(java.lang.Object): boolean -> java.lang.String.substring(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.substring(int,int): java.lang.String [CALL] -> java.lang.String.charAt(int): char -> java.lang.String.substring(int): java.lang.String -> java.lang.String.endsWith(java.lang.String): boolean -> java.lang.String.length(): int -> java.lang.String.substring(int,int): java.lang.String [CALL] [EXIT] [CALL] -> java.lang.StringBuilder.append(java.lang.String): 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] [CALL] [EXIT] [CALL] [EXIT] [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]