On Thu, 3 Apr 2025 09:21:38 GMT, Roman Marchenko <rmarche...@openjdk.org> wrote:

>> Fixed `com.sun.beans.introspect.MethodInfo#MethodOrder` to make 
>> `Introspector.addMethod()` working properly when filtering methods out.
>> 
>> Also, after PR discussion, added the approptiate test cases with 
>> corresponding fixes in MethodInfo.java and PropertyInfo.java.
>> 
>> ---------
>> `getMethodDescriptors()` returns descriptors of public methods of a class 
>> and its parent classes, including default and static methods defined in 
>> interfaces. The result doesn't include methods which were declared and not 
>> implemented, bridge methods, or methods which were overriden in subclasses.
>> 
>> When a subclass "overrides" a static method from a parent class 
>> `getMethodDescriptors()` behaves as follows:
>> 
>> - In case of a clash with a class method, the class version will take 
>> precedence rather than interface's one. 
>> - If the same method appears in multiple classes/interfaces within the same 
>> hierarchy, the version from the most specific sub-interface will be selected.
>> - If the method appears in classes/interfaces from different hierarchies, 
>> the result is undefined, either version can be returned.
>> 
>> `getPropertyDescriptors()` returns descriptors of methods which were 
>> identified as getters or setters. As there can be the only method 
>> getter/setter per property, the following rules are applied when choosing a 
>> getter/setter:
>> 
>> * Getters/setters for the same property defined (not necessarily overriden) 
>> in subclasses have higher precedence.
>> * If there are getters/setters for the same property defined in the same 
>> class and argument types are assignable one to another, the method with the 
>> Least Common Supertype has the lower priority. If argument types are not 
>> assignable, the result is undefined (any method will be chosen).
>> * Gettters/setters declared and not implemented are not considered.
>
> Roman Marchenko has updated the pull request incrementally with one 
> additional commit since the last revision:
> 
>   Fixing review comments

src/java.desktop/share/classes/java/beans/Introspector.java line 1060:

> 1058:                 MethodDescriptor composite = new MethodDescriptor(old, 
> md);
> 1059:                 methods.put(name, composite);
> 1060:             }

FYI, one of the JCK introspector tests fails because of this change. 
The test is quite complicated, so I am not able to provide a simple reproducer 
right away. But I'll post it later.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/23443#discussion_r2055074803

Reply via email to