RFR: JDK-8302324: Inheritance tree does not show correct type parameters/arguments
    Pavel Rappo 
    prappo at openjdk.org
       
    Tue Feb 14 11:22:51 UTC 2023
    
    
  
On Mon, 13 Feb 2023 20:22:59 GMT, Hannes Wallnöfer <hannesw at openjdk.org> wrote:
> Please review a simple change to show the correct type parameters or arguments in the inheritance list in the class documentation header. The solution is simply to move the implementation of `Utils.getFirstVisibleSuperClass(...)` from the method with a `TypeElement` parameter to the one with a `TypeMirror` parameter, thereby preserving the type arguments.
> 
> I compared JDK API docs with and without this change, and the only change is that inheritance with generic superclasses is now rendered correctly. For instance, the inheritance list for `java.util.Properties` used to look like this:
> 
> 
> java.lang.Object
>     java.util.Dictionary<K,V>
>         java.util.Hashtable<Object,Object>
>             java.util.Properties
> 
> Now it is generated as follows:
> 
> java.lang.Object
>     java.util.Dictionary<Object,Object>
>         java.util.Hashtable<Object,Object>
>             java.util.Properties
This looks good. I've spotted a few places that warrant a deep cleanup, which accidentally I'm doing at the moment.
test/langtools/jdk/javadoc/doclet/testInheritance/TestInheritance.java line 65:
> 63:                      * @param <P> param P
> 64:                      */
> 65:                     public class B<O, P>  extends A<O, P> { private B() { } }
Suggestion:
                    public class B<O, P> extends A<O, P> { private B() { } }
test/langtools/jdk/javadoc/doclet/testInheritance/TestInheritance.java line 65:
> 63:                      * @param <P> param P
> 64:                      */
> 65:                     public class B<O, P>  extends A<O, P> { private B() { } }
The source is non-compilable due to constructors being private; is it done on purpose?
test/langtools/jdk/javadoc/doclet/testInheritance/TestInheritance.java line 73:
> 71:                      * @param <Q> param Q
> 72:                      */
> 73:                     public class C<Q>  extends B<String, Q>{ private C() { } }
Suggestion:
                    public class C<Q> extends B<String, Q> { private C() { } }
test/langtools/jdk/javadoc/doclet/testInheritance/TestInheritance.java line 82:
> 80:                      * @param <S> param S
> 81:                      */
> 82:                     public class D<R, S>  extends B<S, B>{ private D() { } }
Suggestion:
                    public class D<R, S> extends B<S, B> { private D() { } }
test/langtools/jdk/javadoc/doclet/testInheritance/TestInheritance.java line 82:
> 80:                      * @param <S> param S
> 81:                      */
> 82:                     public class D<R, S>  extends B<S, B>{ private D() { } }
While it's good for testing, recursive parametrization `B<B>` might not be what it seems. The second occurrence of B is a raw type.
-------------
Marked as reviewed by prappo (Reviewer).
PR: https://git.openjdk.org/jdk/pull/12544
    
    
More information about the javadoc-dev
mailing list