diff options
-rw-r--r-- | src/jvm/clojure/lang/Reflector.java | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/jvm/clojure/lang/Reflector.java b/src/jvm/clojure/lang/Reflector.java index 3b95acd9..fb8e9b1b 100644 --- a/src/jvm/clojure/lang/Reflector.java +++ b/src/jvm/clojure/lang/Reflector.java @@ -72,6 +72,26 @@ private static Object invokeMatchingMethod(List methods, Object target, Object[] } } } + //still haven't found a public version, try superclasses + if(!Modifier.isPublic(m.getDeclaringClass().getModifiers())) + { + sc: + for(Class sc = c.getSuperclass();sc!=null;sc = sc.getSuperclass()) + { + if(Modifier.isPublic(sc.getModifiers())) + { + for(Method scm : sc.getDeclaredMethods()) + { + if(scm.getName().equals(m.getName()) + && Arrays.equals(m.getParameterTypes(),scm.getParameterTypes())) + { + m = scm; + break sc; + } + } + } + } + } } return prepRet(m.invoke(target, boxedArgs)); } |