I think I have found a solution for a bug JDK-8071693.

The problem is the Introspector does scan only in super classes and does not 
know about default methods.

I just added condition method.isDefault() and manual testing proves my idea 
does work. I did NOT run junit tests.

Can you please review this patch in attachment?

LK

Bug: https://bugs.openjdk.java.net/browse/JDK-8071693
--- jdk/src/share/classes/java/beans/Introspector.java	2014-03-04 03:57:57.000000000 +0100
+++ Introspector.java	2016-06-29 19:39:28.309976038 +0200
@@ -1294,21 +1294,19 @@
                 result = clz.getMethods();
                 for (int i = 0; i < result.length; i++) {
                     Method method = result[i];
-                    if (!method.getDeclaringClass().equals(clz)) {
-                        result[i] = null; // ignore methods declared elsewhere
-                    }
-                    else {
+                    if (method.getDeclaringClass().equals(clz) || method.isDefault()) {
                         try {
                             method = MethodFinder.findAccessibleMethod(method);
-                            Class<?> type = method.getDeclaringClass();
+                            final Class<?> type = method.getDeclaringClass();
                             result[i] = type.equals(clz) || type.isInterface()
                                     ? method
                                     : null; // ignore methods from superclasses
-                        }
-                        catch (NoSuchMethodException exception) {
+                        } catch (NoSuchMethodException exception) {
                             // commented out because of 6976577
                             // result[i] = null; // ignore inaccessible methods
                         }
+                    } else {
+                      result[i] = null; // ignore methods declared elsewhere
                     }
                 }
                 declaredMethodCache.put(clz, result);

Reply via email to