aboutsummaryrefslogtreecommitdiff
path: root/src/Java/gtPlusPlus/core
diff options
context:
space:
mode:
Diffstat (limited to 'src/Java/gtPlusPlus/core')
-rw-r--r--src/Java/gtPlusPlus/core/util/reflect/ReflectionUtils.java24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/Java/gtPlusPlus/core/util/reflect/ReflectionUtils.java b/src/Java/gtPlusPlus/core/util/reflect/ReflectionUtils.java
index 039cddb6d6..dee9d76a4c 100644
--- a/src/Java/gtPlusPlus/core/util/reflect/ReflectionUtils.java
+++ b/src/Java/gtPlusPlus/core/util/reflect/ReflectionUtils.java
@@ -311,6 +311,30 @@ public class ReflectionUtils {
}
return m;
}
+
+ public static Method getMethodRecursively(final Class<?> clazz, final String fieldName) throws NoSuchMethodException {
+ try {
+ Method k = clazz.getDeclaredMethod(fieldName);
+ makeMethodAccessible(k);
+ return k;
+ } catch (final NoSuchMethodException e) {
+ final Class<?> superClass = clazz.getSuperclass();
+ if (superClass == null) {
+ throw e;
+ }
+ return getMethod(superClass, fieldName);
+ }
+ }
+
+ public static void makeMethodAccessible(final Method field) {
+ if (!Modifier.isPublic(field.getModifiers()) ||
+ !Modifier.isPublic(field.getDeclaringClass().getModifiers()))
+ {
+ field.setAccessible(true);
+ }
+ }
+
+
public static Class<?> getNonPublicClass(final String className) {
Class<?> c = null;