On Tue, 11 Feb 2025 17:36:56 GMT, Sergey Bylokhov <s...@openjdk.org> wrote:
> > > Is the next output expected()? > > > `public default void Test$A.setFoo(java.lang.Integer)` > > > > > > It looks OK, it was properly chosen by `PropertyInfo` logic, or am I wrong? > > If it's OK, I will add it to the test cases. > > Then why the property is based on the implemented interface? For classes the > method from the current class will be selected. `public default void > Test$A.setFoo(java.lang.Integer)` vs `public void > Test$DC.setFoo(java.lang.Number)` I'd like to clarify this case first. OK, we have the test: import java.beans.IntrospectionException; public class Test { public interface A { default void setFoo(Integer num) { System.out.println(Thread.currentThread().getStackTrace()[1]); } } public class D implements A { public void setFoo(Number num) { System.out.println(Thread.currentThread().getStackTrace()[1]); } } private void run() { var d = new D(); d.setFoo(null); } public static void main(String[] args) throws java.beans.IntrospectionException { test(D.class); System.out.println("--- run"); (new Test()).run(); } private static void test(Class beanClass) throws IntrospectionException { System.out.println("\nbeanClass = " + beanClass); var info = java.beans.Introspector.getBeanInfo(beanClass, Object.class); System.out.println(info.getBeanDescriptor()); System.out.println("--- properties"); for (var desc : info.getPropertyDescriptors()) { System.out.println(desc.getReadMethod()); System.out.println(desc.getWriteMethod()); } System.out.println("--- methods"); for (var desc : info.getMethodDescriptors()) { System.out.println(desc.getMethod()); } } } and the output is java.beans.BeanDescriptor[name=Test$D; beanClass=class Test$D] --- properties null public default void Test$A.setFoo(java.lang.Integer) --- methods public void Test$D.setFoo(java.lang.Number) public default void Test$A.setFoo(java.lang.Integer) --- run Test$A.setFoo(Test.java:7) `Test$A.setFoo()` was chosen for `d.setFoo(null)` call. And this conforms to what we see in `--- properties` chapter. Is this a correct behavior? ------------- PR Comment: https://git.openjdk.org/jdk/pull/23443#issuecomment-2652851052