doclava17: Implement find class
Bug: 260694901
Test: ./gradlew e2eTestAOSP
Test: ./gradlew doclava17:test
Change-Id: Ia90c9d0fef23e075cbeb7bcf24ac6c9237240fef
diff --git a/doclava17/src/main/java/com/google/doclava/javadoc/ClassDocImpl.java b/doclava17/src/main/java/com/google/doclava/javadoc/ClassDocImpl.java
index f45ebc4..406a1cf 100644
--- a/doclava17/src/main/java/com/google/doclava/javadoc/ClassDocImpl.java
+++ b/doclava17/src/main/java/com/google/doclava/javadoc/ClassDocImpl.java
@@ -25,6 +25,7 @@
package com.google.doclava.javadoc;
+import com.google.doclava.Converter;
import com.google.doclava.annotation.Unused;
import com.google.doclava.annotation.Used;
import com.sun.javadoc.AnnotatedType;
@@ -486,13 +487,57 @@
.toArray(ClassDoc[]::new);
}
+ /**
+ * Note that this implementation does not search in sources!
+ *
+ * <p>
+ *
+ * {@inheritDoc}
+ *
+ * @implNote Does not search in sources.
+ */
@Override
@Used(implemented = true)
public ClassDoc findClass(String className) {
+ ClassDoc result = searchClass(className);
+ if (result != null) {
+ return result;
+ }
+
+ ClassDoc enclosing = containingClass();
+ while (enclosing != null && enclosing.containingClass() != null) {
+ enclosing = enclosing.containingClass();
+ }
+ if (enclosing == null) {
+ return null;
+ }
+ return ((ClassDocImpl) enclosing).searchClass(className);
+ }
+
+ private ClassDoc searchClass(String className) {
TypeElement cls = context.environment.getElementUtils().getTypeElement(className);
if (cls != null) {
return ClassDocImpl.create(cls, context);
}
+
+ for (ClassDoc nested : innerClasses()) {
+ if (nested.name().equals(className) || nested.name().endsWith("." + className)) {
+ return nested;
+ } else {
+ ClassDoc inNested = ((ClassDocImpl) nested).searchClass(className);
+ if (inNested != null) {
+ return inNested;
+ }
+ }
+ }
+
+ ClassDoc inPackage = containingPackage().findClass(className);
+ if (inPackage != null) {
+ return inPackage;
+ }
+
+ //
+
return null;
}