diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/jvm/clojure/lang/Reflector.java | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/src/jvm/clojure/lang/Reflector.java b/src/jvm/clojure/lang/Reflector.java index 100fc226..ad27a9d9 100644 --- a/src/jvm/clojure/lang/Reflector.java +++ b/src/jvm/clojure/lang/Reflector.java @@ -291,13 +291,22 @@ static public List getMethods(Class c, int arity, String name, boolean getStatic ArrayList methods = new ArrayList(); for(int i = 0; i < allmethods.length; i++) { - final Method method = allmethods[i]; - if(name.equals(method.getName()) - && Modifier.isStatic(method.getModifiers()) == getStatics - && method.getParameterTypes().length == arity - && !method.isSynthetic()) + try { - methods.add(method); + Method method = allmethods[i]; + if(name.equals(method.getName()) + && Modifier.isStatic(allmethods[i].getModifiers()) == getStatics + && allmethods[i].getParameterTypes().length == arity + && (!Modifier.isVolatile(allmethods[i].getModifiers()) + || c.getMethod(allmethods[i].getName(), allmethods[i].getParameterTypes()) + .equals(allmethods[i]))) + { + methods.add(allmethods[i]); + } + } + catch(NoSuchMethodException e) + { + throw new RuntimeException(e); } } if(!getStatics && c.isInterface()) |