--- old/jdk/src/share/classes/java/beans/Introspector.java 2013-11-06 20:52:45.400111400 +0400 +++ new/jdk/src/share/classes/java/beans/Introspector.java 2013-11-06 20:52:44.879081600 +0400 @@ -684,8 +684,7 @@ ipd = (IndexedPropertyDescriptor)pd; if (ipd.getIndexedWriteMethod() != null) { if (igpd != null) { - if (igpd.getIndexedPropertyType() - == ipd.getIndexedPropertyType()) { + if (isAssignable(igpd.getIndexedPropertyType(), ipd.getIndexedPropertyType())) { if (ispd != null) { ispd = new IndexedPropertyDescriptor(ispd, ipd); } else { @@ -703,7 +702,7 @@ } else { if (pd.getWriteMethod() != null) { if (gpd != null) { - if (gpd.getPropertyType() == pd.getPropertyType()) { + if (isAssignable(gpd.getPropertyType(), pd.getPropertyType())) { if (spd != null) { spd = new PropertyDescriptor(spd, pd); } else { @@ -806,6 +805,10 @@ } } + private static boolean isAssignable(Class current, Class candidate) { + return current == null ? candidate == null : current.isAssignableFrom(candidate); + } + /** * Adds the property descriptor to the indexedproperty descriptor only if the * types are the same.