diff options
author | Sorin Basca <sorinbasca@google.com> | 2023-04-17 18:02:46 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2023-04-17 18:02:46 +0000 |
commit | 983f0c9cd8672ecdbd8ae4007345b7548d6a6c0e (patch) | |
tree | 55a440f74bc9b9deebb9e2cdc24c08457e69bd4d | |
parent | 222ae2dce8447e13c7ddfe4a925a44af2371c616 (diff) | |
parent | 57e70fb82e81559eb5d03c39f6c4ceaaaeb362f3 (diff) | |
download | doclava-983f0c9cd8672ecdbd8ae4007345b7548d6a6c0e.tar.gz |
Merge "Improve representation of parameterized supertypes and interfaces" am: 36c2ebed08 am: 88ee302305 am: 9307fddd66 am: 57e70fb82e
Original change: https://android-review.googlesource.com/c/platform/external/doclava/+/2523837
Change-Id: I6ff59babfa61751ce600d2fceeb18e63b5aba079
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.java | 25 | ||||
-rw-r--r-- | doclet_adapter/src/main/java/com/google/doclava/javadoc/ErrorTypeImpl.java | 12 |
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 |