summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSorin Basca <sorinbasca@google.com>2023-04-17 16:55:25 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2023-04-17 16:55:25 +0000
commit9307fddd661d9f1316f340fc4b597038c801a44b (patch)
tree14aa574545228618d5e76f021ef8eefa62c96ed4
parentd92bc18a2193845052785215bed46a7d382a4d2c (diff)
parent88ee302305cdfdd55f67cf52ac026eadf5d17579 (diff)
downloaddoclava-9307fddd661d9f1316f340fc4b597038c801a44b.tar.gz
Merge "Improve representation of parameterized supertypes and interfaces" am: 36c2ebed08 am: 88ee302305
Original change: https://android-review.googlesource.com/c/platform/external/doclava/+/2523837 Change-Id: Ic324c458c11b649829662e16649eb0b7887a1aa1 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--doclet_adapter/src/main/java/com/google/doclava/javadoc/ClassDocImpl.java25
-rw-r--r--doclet_adapter/src/main/java/com/google/doclava/javadoc/ErrorTypeImpl.java12
2 files changed, 21 insertions, 16 deletions
diff --git a/doclet_adapter/src/main/java/com/google/doclava/javadoc/ClassDocImpl.java b/doclet_adapter/src/main/java/com/google/doclava/javadoc/ClassDocImpl.java
index 8bd6d5e..0b6ec3e 100644
--- a/doclet_adapter/src/main/java/com/google/doclava/javadoc/ClassDocImpl.java
+++ b/doclet_adapter/src/main/java/com/google/doclava/javadoc/ClassDocImpl.java
@@ -255,12 +255,7 @@ class ClassDocImpl extends ProgramElementDocImpl<TypeElement> implements ClassDo
if (superclassMirror.getKind() == TypeKind.NONE) {
return null;
}
- Type t = TypeImpl.create(superclassMirror, context);
- if (t instanceof ClassDoc cls) {
- return cls;
- } else {
- return null;
- }
+ return TypeImpl.create(superclassMirror, context).asClassDoc();
}
@Override
@@ -273,14 +268,7 @@ class ClassDocImpl extends ProgramElementDocImpl<TypeElement> implements ClassDo
if (superclassMirror.getKind() == TypeKind.NONE) {
return null;
}
- Type t = TypeImpl.create(superclassMirror, context);
- if (t instanceof ClassDoc cls) {
- return cls;
- } else if (t instanceof ParameterizedType pt) {
- return pt;
- } else {
- return null;
- }
+ return TypeImpl.create(superclassMirror, context);
}
@Override
@@ -313,7 +301,14 @@ class ClassDocImpl extends ProgramElementDocImpl<TypeElement> implements ClassDo
@Override
@Used(implemented = true)
public Type[] interfaceTypes() {
- return interfaces();
+ if (interfaceTypes == null) {
+ interfaceTypes = typeElement.getInterfaces()
+ .stream()
+ .filter(typeMirror -> !typeMirror.getKind().equals(TypeKind.NONE))
+ .map(typeMirror -> TypeImpl.create(typeMirror, context))
+ .toArray(Type[]::new);
+ }
+ return interfaceTypes;
}
@Override
diff --git a/doclet_adapter/src/main/java/com/google/doclava/javadoc/ErrorTypeImpl.java b/doclet_adapter/src/main/java/com/google/doclava/javadoc/ErrorTypeImpl.java
index 4ab82a6..e7faa7f 100644
--- a/doclet_adapter/src/main/java/com/google/doclava/javadoc/ErrorTypeImpl.java
+++ b/doclet_adapter/src/main/java/com/google/doclava/javadoc/ErrorTypeImpl.java
@@ -49,8 +49,18 @@ class ErrorTypeImpl extends ClassDocImpl {
static ErrorTypeImpl create(javax.lang.model.type.ErrorType errorType,
Context context) {
var typeEl = (TypeElement) errorType.asElement();
- return (ErrorTypeImpl) context.caches.classes.computeIfAbsent(typeEl,
+ var typeImpl = context.caches.classes.computeIfAbsent(typeEl,
el -> new ErrorTypeImpl(el, errorType, context));
+
+ // On rare occasions it can happen that the errorType had already been cached as a
+ // ClassDocImpl instead of ErrorTypeImpl. In that case recreate the ErrorTypeImpl and store
+ // it in the cache.
+ if (!(typeImpl instanceof ErrorTypeImpl)) {
+ typeImpl = new ErrorTypeImpl(typeEl, errorType, context);
+ context.caches.classes.put(typeEl, typeImpl);
+ }
+
+ return (ErrorTypeImpl)typeImpl;
}
@Override