mirror of
https://github.com/hibernate/hibernate-orm
synced 2025-02-17 08:35:13 +00:00
HHH-11554 - Enable super interfaces traversal for getter/setter methods.
This commit is contained in:
parent
fab264a8b2
commit
9ae391436a
@ -31,6 +31,7 @@
|
|||||||
*
|
*
|
||||||
* @author Gavin King
|
* @author Gavin King
|
||||||
* @author Steve Ebersole
|
* @author Steve Ebersole
|
||||||
|
* @author Chris Cranford
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public final class ReflectHelper {
|
public final class ReflectHelper {
|
||||||
@ -407,12 +408,7 @@ public static Method findGetterMethod(Class containerClass, String propertyName)
|
|||||||
|
|
||||||
// if no getter found yet, check all implemented interfaces
|
// if no getter found yet, check all implemented interfaces
|
||||||
if ( getter == null ) {
|
if ( getter == null ) {
|
||||||
for ( Class theInterface : containerClass.getInterfaces() ) {
|
getter = getGetterOrNull( containerClass.getInterfaces(), propertyName );
|
||||||
getter = getGetterOrNull( theInterface, propertyName );
|
|
||||||
if ( getter != null ) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( getter == null ) {
|
if ( getter == null ) {
|
||||||
@ -430,6 +426,19 @@ public static Method findGetterMethod(Class containerClass, String propertyName)
|
|||||||
return getter;
|
return getter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static Method getGetterOrNull(Class[] interfaces, String propertyName) {
|
||||||
|
Method getter = null;
|
||||||
|
for ( int i = 0; getter == null && i < interfaces.length; ++i ) {
|
||||||
|
final Class anInterface = interfaces[i];
|
||||||
|
getter = getGetterOrNull( anInterface, propertyName );
|
||||||
|
if ( getter == null ) {
|
||||||
|
// if no getter found yet, check all implemented interfaces of interface
|
||||||
|
getter = getGetterOrNull( anInterface.getInterfaces(), propertyName );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return getter;
|
||||||
|
}
|
||||||
|
|
||||||
private static Method getGetterOrNull(Class containerClass, String propertyName) {
|
private static Method getGetterOrNull(Class containerClass, String propertyName) {
|
||||||
for ( Method method : containerClass.getDeclaredMethods() ) {
|
for ( Method method : containerClass.getDeclaredMethods() ) {
|
||||||
// if the method has parameters, skip it
|
// if the method has parameters, skip it
|
||||||
@ -539,12 +548,13 @@ public static Method findSetterMethod(Class containerClass, String propertyName,
|
|||||||
|
|
||||||
// if no setter found yet, check all implemented interfaces
|
// if no setter found yet, check all implemented interfaces
|
||||||
if ( setter == null ) {
|
if ( setter == null ) {
|
||||||
for ( Class theInterface : containerClass.getInterfaces() ) {
|
setter = setterOrNull( containerClass.getInterfaces(), propertyName, propertyType );
|
||||||
setter = setterOrNull( theInterface, propertyName, propertyType );
|
// for ( Class theInterface : containerClass.getInterfaces() ) {
|
||||||
if ( setter != null ) {
|
// setter = setterOrNull( theInterface, propertyName, propertyType );
|
||||||
break;
|
// if ( setter != null ) {
|
||||||
}
|
// break;
|
||||||
}
|
// }
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( setter == null ) {
|
if ( setter == null ) {
|
||||||
@ -562,6 +572,19 @@ public static Method findSetterMethod(Class containerClass, String propertyName,
|
|||||||
return setter;
|
return setter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static Method setterOrNull(Class[] interfaces, String propertyName, Class propertyType) {
|
||||||
|
Method setter = null;
|
||||||
|
for ( int i = 0; setter == null && i < interfaces.length; ++i ) {
|
||||||
|
final Class anInterface = interfaces[i];
|
||||||
|
setter = setterOrNull( anInterface, propertyName, propertyType );
|
||||||
|
if ( setter == null ) {
|
||||||
|
// if no setter found yet, check all implemented interfaces of interface
|
||||||
|
setter = setterOrNull( anInterface.getInterfaces(), propertyName, propertyType );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return setter;
|
||||||
|
}
|
||||||
|
|
||||||
private static Method setterOrNull(Class theClass, String propertyName, Class propertyType) {
|
private static Method setterOrNull(Class theClass, String propertyName, Class propertyType) {
|
||||||
Method potentialSetter = null;
|
Method potentialSetter = null;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user