private Optional resolveMember()

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


    private Optional<FullyQualifiedJavadocReference> resolveMember(
            JavaClass javaClass, Optional<String> member, Optional<String> label) {
        final Optional<MemberType> memberType;
        Optional<String> resolvedMember = member;
        if (member.isPresent()) {
            // member is either field...
            if (javaClass.getFieldByName(member.get()) == null) {
                // ...is method...
                List<JavaType> parameterTypes = getParameterTypes(member.get());
                String methodName = getMethodName(member.get());
                if (javaClass.getMethodBySignature(methodName, parameterTypes) == null) {
                    // ...or is constructor
                    if ((!methodName.equals(javaClass.getSimpleName()))
                            || (javaClass.getConstructor(parameterTypes) == null)) {
                        return Optional.empty();
                    } else {
                        memberType = Optional.of(MemberType.CONSTRUCTOR);
                    }
                } else {
                    memberType = Optional.of(MemberType.METHOD);
                }
                // reconstruct member with fully qualified names but leaving out the argument names
                StringBuilder memberBuilder = new StringBuilder(methodName);
                memberBuilder.append("(");
                memberBuilder.append(parameterTypes.stream()
                        .map(JavaType::getFullyQualifiedName)
                        .collect(Collectors.joining(",")));
                memberBuilder.append(")");
                resolvedMember = Optional.of(memberBuilder.toString());
            } else {
                memberType = Optional.of(MemberType.FIELD);
            }
        } else {
            memberType = Optional.empty();
        }
        String className = javaClass
                .getCanonicalName()
                .substring(javaClass.getPackageName().length() + 1);
        return Optional.of(new FullyQualifiedJavadocReference(
                javaClass.getPackageName(),
                Optional.of(className),
                resolvedMember,
                memberType,
                label,
                isExternal(javaClass)));
    }