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;
}