Skip to content

Commit 9ae3914

Browse files
Narosdreab8
authored andcommitted
HHH-11554 - Enable super interfaces traversal for getter/setter methods.
1 parent fab264a commit 9ae3914

File tree

1 file changed

+35
-12
lines changed

1 file changed

+35
-12
lines changed

hibernate-core/src/main/java/org/hibernate/internal/util/ReflectHelper.java

Lines changed: 35 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
*
3232
* @author Gavin King
3333
* @author Steve Ebersole
34+
* @author Chris Cranford
3435
*/
3536
@SuppressWarnings("unchecked")
3637
public final class ReflectHelper {
@@ -407,12 +408,7 @@ public static Method findGetterMethod(Class containerClass, String propertyName)
407408

408409
// if no getter found yet, check all implemented interfaces
409410
if ( getter == null ) {
410-
for ( Class theInterface : containerClass.getInterfaces() ) {
411-
getter = getGetterOrNull( theInterface, propertyName );
412-
if ( getter != null ) {
413-
break;
414-
}
415-
}
411+
getter = getGetterOrNull( containerClass.getInterfaces(), propertyName );
416412
}
417413

418414
if ( getter == null ) {
@@ -430,6 +426,19 @@ public static Method findGetterMethod(Class containerClass, String propertyName)
430426
return getter;
431427
}
432428

429+
private static Method getGetterOrNull(Class[] interfaces, String propertyName) {
430+
Method getter = null;
431+
for ( int i = 0; getter == null && i < interfaces.length; ++i ) {
432+
final Class anInterface = interfaces[i];
433+
getter = getGetterOrNull( anInterface, propertyName );
434+
if ( getter == null ) {
435+
// if no getter found yet, check all implemented interfaces of interface
436+
getter = getGetterOrNull( anInterface.getInterfaces(), propertyName );
437+
}
438+
}
439+
return getter;
440+
}
441+
433442
private static Method getGetterOrNull(Class containerClass, String propertyName) {
434443
for ( Method method : containerClass.getDeclaredMethods() ) {
435444
// if the method has parameters, skip it
@@ -539,12 +548,13 @@ public static Method findSetterMethod(Class containerClass, String propertyName,
539548

540549
// if no setter found yet, check all implemented interfaces
541550
if ( setter == null ) {
542-
for ( Class theInterface : containerClass.getInterfaces() ) {
543-
setter = setterOrNull( theInterface, propertyName, propertyType );
544-
if ( setter != null ) {
545-
break;
546-
}
547-
}
551+
setter = setterOrNull( containerClass.getInterfaces(), propertyName, propertyType );
552+
// for ( Class theInterface : containerClass.getInterfaces() ) {
553+
// setter = setterOrNull( theInterface, propertyName, propertyType );
554+
// if ( setter != null ) {
555+
// break;
556+
// }
557+
// }
548558
}
549559

550560
if ( setter == null ) {
@@ -562,6 +572,19 @@ public static Method findSetterMethod(Class containerClass, String propertyName,
562572
return setter;
563573
}
564574

575+
private static Method setterOrNull(Class[] interfaces, String propertyName, Class propertyType) {
576+
Method setter = null;
577+
for ( int i = 0; setter == null && i < interfaces.length; ++i ) {
578+
final Class anInterface = interfaces[i];
579+
setter = setterOrNull( anInterface, propertyName, propertyType );
580+
if ( setter == null ) {
581+
// if no setter found yet, check all implemented interfaces of interface
582+
setter = setterOrNull( anInterface.getInterfaces(), propertyName, propertyType );
583+
}
584+
}
585+
return setter;
586+
}
587+
565588
private static Method setterOrNull(Class theClass, String propertyName, Class propertyType) {
566589
Method potentialSetter = null;
567590

0 commit comments

Comments
 (0)