diff options
-rw-r--r-- | doclet_adapter/src/main/java/com/google/doclava/javadoc/TypeVariableImpl.java | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/doclet_adapter/src/main/java/com/google/doclava/javadoc/TypeVariableImpl.java b/doclet_adapter/src/main/java/com/google/doclava/javadoc/TypeVariableImpl.java index ccc8aab..5695ce5 100644 --- a/doclet_adapter/src/main/java/com/google/doclava/javadoc/TypeVariableImpl.java +++ b/doclet_adapter/src/main/java/com/google/doclava/javadoc/TypeVariableImpl.java @@ -33,11 +33,15 @@ import com.sun.javadoc.ProgramElementDoc; import com.sun.javadoc.Type; import com.sun.javadoc.TypeVariable; import java.util.Objects; +import java.util.stream.Stream; +import javax.lang.model.type.IntersectionType; import javax.lang.model.type.TypeMirror; +import javax.lang.model.util.SimpleTypeVisitor8; class TypeVariableImpl extends TypeImpl implements TypeVariable { private final javax.lang.model.type.TypeVariable typeVariable; + private Type[] bounds; protected TypeVariableImpl(javax.lang.model.type.TypeVariable typeVariable, Context context) { super(typeVariable, context); @@ -53,7 +57,19 @@ class TypeVariableImpl extends TypeImpl implements TypeVariable { @Override @Used(implemented = true) public Type[] bounds() { - return new Type[0]; + if (bounds == null) { + TypeMirror bound = typeVariable.getUpperBound(); + bounds = bound.accept(new SimpleTypeVisitor8<Stream<? extends TypeMirror>, Void>(Stream.of(bound)) { + @Override + public Stream<? extends TypeMirror> visitIntersection(IntersectionType t, Void o) { + return t.getBounds().stream(); + } + }, null) + .map(typeMirror -> TypeImpl.create(typeMirror, context)) + .filter(type -> !type.qualifiedTypeName().equals("java.lang.Object")) + .toArray(Type[]::new); + } + return bounds; } @Override |