org_apache_struts2_session_StrutsJUnit4SessionTestCaseTest_java
freemarker.ext.beans.MemberSelectorListMemberAccessPolicy$MemberSelector
public static MemberSelectorListMemberAccessPolicy$MemberSelector parse(String memberSelectorString, ClassLoader classLoader) throws ClassNotFoundException, NoSuchMethodException, NoSuchFieldException {
        String cleanedStr;
        if (memberSelectorString.contains("<") || memberSelectorString.contains(">") || memberSelectorString.contains("...") || memberSelectorString.contains(";")) {
            throw new IllegalArgumentException("Malformed whitelist entry (shouldn't contain \"<\", \">\", \"...\", or \";\"): " + memberSelectorString);
        }
        int openParenIdx = (cleanedStr = memberSelectorString.trim().replaceAll("\\s*([\\.,\\(\\)\\[\\]])\\s*", "$1")).indexOf(40);
        boolean hasArgList = openParenIdx != -1;
        int postMemberNameIdx = hasArgList ? openParenIdx : cleanedStr.length();
        int postClassDotIdx = cleanedStr.lastIndexOf(46, postMemberNameIdx);
        if (postClassDotIdx == -1) {
            throw new IllegalArgumentException("Malformed whitelist entry (missing dot): " + memberSelectorString);
        }
        String upperBoundClassStr = cleanedStr.substring(0, postClassDotIdx);
        if (!MemberSelectorListMemberAccessPolicy.isWellFormedClassName(upperBoundClassStr)) {
            throw new IllegalArgumentException("Malformed whitelist entry (malformed upper bound class name): " + memberSelectorString);
        }
        Class<?> upperBoundClass = classLoader.loadClass(upperBoundClassStr);
        String memberName = cleanedStr.substring(postClassDotIdx + 1, postMemberNameIdx);
        if (!MemberSelectorListMemberAccessPolicy.isWellFormedJavaIdentifier(memberName)) {
            throw new IllegalArgumentException("Malformed whitelist entry (malformed member name): " + memberSelectorString);
        }
        if (hasArgList) {
            if (cleanedStr.charAt(cleanedStr.length() - 1) != ')') {
                throw new IllegalArgumentException("Malformed whitelist entry (should end with ')'): " + memberSelectorString);
            }
            String argsSpec = cleanedStr.substring(postMemberNameIdx + 1, cleanedStr.length() - 1);
            StringTokenizer tok = new StringTokenizer(argsSpec, ",");
            int argCount = tok.countTokens();
            Class[] argTypes = new Class[argCount];
            for (int i = 0; i < argCount; ++i) {
                Class<?> argClass;
                String argClassName = tok.nextToken();
                int arrayDimensions = 0;
                while (argClassName.endsWith("[]")) {
                    ++arrayDimensions;
                    argClassName = argClassName.substring(0, argClassName.length() - 2);
                }
                Class<?> primArgClass = ClassUtil.resolveIfPrimitiveTypeName(argClassName);
                if (primArgClass != null) {
                    argClass = primArgClass;
                } else {
                    if (!MemberSelectorListMemberAccessPolicy.isWellFormedClassName(argClassName)) {
                        throw new IllegalArgumentException("Malformed whitelist entry (malformed argument class name): " + memberSelectorString);
                    }
                    argClass = classLoader.loadClass(argClassName);
                }
                argTypes[i] = ClassUtil.getArrayClass(argClass, arrayDimensions);
            }
            return memberName.equals(upperBoundClass.getSimpleName()) ? new MemberSelectorListMemberAccessPolicy$MemberSelector(upperBoundClass, upperBoundClass.getConstructor(argTypes)) : new MemberSelectorListMemberAccessPolicy$MemberSelector(upperBoundClass, upperBoundClass.getMethod(memberName, argTypes));
        }
        return new MemberSelectorListMemberAccessPolicy$MemberSelector(upperBoundClass, upperBoundClass.getField(memberName));
    }
 -> java.lang.String.contains(java.lang.CharSequence): boolean -> java.lang.String.contains(java.lang.CharSequence): boolean -> java.lang.String.contains(java.lang.CharSequence): boolean -> java.lang.String.contains(java.lang.CharSequence): boolean -> java.lang.String.trim(): java.lang.String -> java.lang.String.replaceAll(java.lang.String,java.lang.String): java.lang.String -> java.lang.String.indexOf(int): int -> java.lang.String.lastIndexOf(int,int): int -> 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.Character.isJavaIdentifierStart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierStart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierStart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierStart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.ClassLoader.loadClass(java.lang.String): java.lang.Class -> java.lang.String.substring(int,int): java.lang.String -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierStart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> 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.util.StringTokenizer.countTokens(): int -> java.lang.Class.getSimpleName(): java.lang.String -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.Class.getMethod(java.lang.String,java.lang.Class[]): java.lang.reflect.Method
 [CALL] -> java.lang.String.contains(java.lang.CharSequence): boolean -> java.lang.String.contains(java.lang.CharSequence): boolean -> java.lang.String.contains(java.lang.CharSequence): boolean -> java.lang.String.contains(java.lang.CharSequence): boolean -> java.lang.String.trim(): java.lang.String -> java.lang.String.replaceAll(java.lang.String,java.lang.String): java.lang.String -> java.lang.String.indexOf(int): int -> java.lang.String.lastIndexOf(int,int): int -> java.lang.String.substring(int,int): java.lang.String [CALL] [CALL] -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierStart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierStart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierStart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierStart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int [EXIT] [EXIT] -> java.lang.ClassLoader.loadClass(java.lang.String): java.lang.Class -> java.lang.String.substring(int,int): java.lang.String [CALL] [CALL] -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierStart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isJavaIdentifierPart(char): boolean -> java.lang.String.length(): int [EXIT] [EXIT] -> 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.util.StringTokenizer.countTokens(): int -> java.lang.Class.getSimpleName(): java.lang.String -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.Class.getMethod(java.lang.String,java.lang.Class[]): java.lang.reflect.Method [CALL] [CALL] [EXIT] [CALL] [EXIT] [EXIT] [EXIT]