in log4j-docgen/src/main/java/org/apache/logging/log4j/docgen/processor/AbstractAsciiDocTreeVisitor.java [242:281]
private static String getReferenceSignature(final ReferenceTree referenceTree, final AsciiDocData data) {
// If it is of type `{@link #foo}`
final String referenceSignature = referenceTree.getSignature();
if (referenceSignature.startsWith("#")) {
return data.qualifiedClassName + referenceSignature;
}
// Determine class and method parts of the reference signature
final int methodSplitterIndex = referenceSignature.indexOf('#');
final String classSignature;
final String methodSignature;
if (methodSplitterIndex > 0) {
classSignature = referenceSignature.substring(0, methodSplitterIndex);
methodSignature = referenceSignature.substring(methodSplitterIndex).replaceAll(" +", "");
} else {
classSignature = referenceSignature;
methodSignature = "";
}
// If it is an imported class
@Nullable final String importedClassFqcn = data.imports.get(classSignature);
if (importedClassFqcn != null) {
return importedClassFqcn + methodSignature;
}
// If it is a `java.lang` class
try {
final String qualifiedClassName = "java.lang." + classSignature;
Class.forName(qualifiedClassName);
return qualifiedClassName + methodSignature;
} catch (final ClassNotFoundException ignored) {
// Do nothing
}
// Otherwise it is a package-local class
final String packageName = data.qualifiedClassName.substring(0, data.qualifiedClassName.lastIndexOf('.'));
final boolean alreadyQualified = classSignature.startsWith(packageName);
return alreadyQualified ? referenceSignature : packageName + '.' + classSignature + methodSignature;
}