private List getParameterTypes()

in maven-plugin-tools-annotations/src/main/java/org/apache/maven/tools/plugin/extractor/annotations/converter/JavaClassConverterContext.java [403:454]


    private List<JavaType> getParameterTypes(String member) {
        List<JavaType> parameterTypes = new ArrayList<>();
        // TypeResolver.byClassName() always resolves types as non existing inner class
        TypeResolver typeResolver = TypeResolver.byClassName(
                declaringClass.getPackageName(),
                declaringClass.getJavaClassLibrary(),
                declaringClass.getSource().getImports());

        // method parameters are optionally enclosed by parentheses
        int indexOfOpeningParenthesis = member.indexOf('(');
        int indexOfClosingParenthesis = member.indexOf(')');
        final String signatureArguments;
        if (indexOfOpeningParenthesis >= 0
                && indexOfClosingParenthesis > 0
                && indexOfClosingParenthesis > indexOfOpeningParenthesis) {
            signatureArguments = member.substring(indexOfOpeningParenthesis + 1, indexOfClosingParenthesis);
        } else if (indexOfOpeningParenthesis == -1 && indexOfClosingParenthesis >= 0
                || indexOfOpeningParenthesis >= 0 && indexOfOpeningParenthesis == -1) {
            throw new IllegalArgumentException("Found opening without closing parentheses or vice versa in " + member);
        } else {
            // If any method or constructor is entered as a name with no parentheses, such as getValue,
            // and if there is no field with the same name, then the javadoc command still creates a
            // link to the method. If this method is overloaded, then the javadoc command links to the
            // first method its search encounters, which is unspecified
            // (Source: https://docs.oracle.com/javase/8/docs/technotes/tools/windows/javadoc.html#JSWOR654)
            return Collections.emptyList();
        }
        for (String parameter : signatureArguments.split(",")) {
            // strip off argument name, only type is relevant
            String canonicalParameter = parameter.trim();
            int spaceIndex = canonicalParameter.indexOf(' ');
            final String typeName;
            if (spaceIndex > 0) {
                typeName = canonicalParameter.substring(0, spaceIndex).trim();
            } else {
                typeName = canonicalParameter;
            }
            if (!typeName.isEmpty()) {
                String rawTypeName = getRawTypeName(typeName);
                // already check here for unresolvable types due to https://github.com/paul-hammant/qdox/issues/111
                if (typeResolver.resolveType(rawTypeName) == null) {
                    throw new IllegalArgumentException("Found unresolvable method argument type in " + member);
                }
                TypeDef typeDef = new TypeDef(getRawTypeName(typeName));
                int dimensions = getDimensions(typeName);
                JavaType javaType = TypeAssembler.createUnresolved(typeDef, dimensions, typeResolver);

                parameterTypes.add(javaType);
            }
        }
        return parameterTypes;
    }