On Thu, 8 May 2025 15:07:15 GMT, Chen Liang <li...@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.

I think this simplification works just fine.

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

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

Reply via email to