On Thu, 8 May 2025 14:53:41 GMT, Nizar Benalla <nbena...@openjdk.org> wrote:

> Please review this patch to fix a bug where a method can be documented 
> multiple times 
> Consider these 4 classes
> 
>                     A       (interface)
>                    / \
>                   /   \
> (abstract class)  C     B   ( interface)
>                   \   /
>                    \ /
>                     D       (class)
> 
> 
> Where `A` declares `testA()`, `C` implements it `public final void testA()`, 
> `B` extends `A` but does *not* override it, `D` extends `C` and implements `B`
> 
> In the generated javadoc, `testA()` is documented twice.
> 
> ![Screenshot 2025-05-08 at 15 51 
> 19](https://github.com/user-attachments/assets/46538e61-1546-4128-8041-296d8491406f)
> 
> After the patch, `testA()` is only documented once:
> 
> ![Screenshot 2025-05-08 at 15 52 
> 16](https://github.com/user-attachments/assets/a6b86a21-7104-460c-8f3f-36cee5962eed)

src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/VisibleMemberTable.java
 line 691:

> 689:         if (inInterface) {
> 690:             List<ExecutableElement> list = 
> overriddenByTable.get(inheritedMethod);
> 691:             if (list != null) {

Can't we change this to `if (list != null && !list.isEmpty) return false;`?

Comments can be to update the overall block comment to indicate that there is 
no contention - when a method overrides multiple superinterfaces' methods, 
including when it is final from superclasses, the superclass method always 
prevails due to method resolution rules in Java. All interface methods have low 
resolution priority.

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/25123#discussion_r2079913557

Reply via email to