summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSorin Basca <sorinbasca@google.com>2023-04-17 17:27:40 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2023-04-17 17:27:40 +0000
commit57e70fb82e81559eb5d03c39f6c4ceaaaeb362f3 (patch)
tree55a440f74bc9b9deebb9e2cdc24c08457e69bd4d
parente8dd41ab4b60b5120822cdb7eca10db4f1318e79 (diff)
parent9307fddd661d9f1316f340fc4b597038c801a44b (diff)
downloaddoclava-57e70fb82e81559eb5d03c39f6c4ceaaaeb362f3.tar.gz
Merge "Improve representation of parameterized supertypes and interfaces" am: 36c2ebed08 am: 88ee302305 am: 9307fddd66
Original change: https://android-review.googlesource.com/c/platform/external/doclava/+/2523837 Change-Id: I1479e7680cf793e29d8bfd4256845826a67b348b 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