summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSorin Basca <sorinbasca@google.com>2023-04-17 15:51:30 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2023-04-17 15:51:30 +0000
commit36c2ebed082ad38bb7473416adc0c9b4090ef7b3 (patch)
tree14aa574545228618d5e76f021ef8eefa62c96ed4
parent34a3c520d896e97fbfa0c458f4c6f860f5080f7d (diff)
parent2ac9699ef0050cc4da894f07eb2e34f1ac043b81 (diff)
downloaddoclava-36c2ebed082ad38bb7473416adc0c9b4090ef7b3.tar.gz
Merge "Improve representation of parameterized supertypes and interfaces"
-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