diff options
author | Rich Hickey <richhickey@gmail.com> | 2008-04-15 23:14:20 +0000 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2008-04-15 23:14:20 +0000 |
commit | 9662e453029d853738614dc5eea2faa631ad6188 (patch) | |
tree | 34b6da63723a285867dea003c5c75ea7db875855 /src | |
parent | cdc20d4fea74cf5fbe381d8617f1370703d49f94 (diff) |
removed hard call to Class.getField in InstanceFieldExpr, add Object methods to Reflector.getMethods of interface class
Diffstat (limited to 'src')
-rw-r--r-- | src/jvm/clojure/lang/Compiler.java | 6 | ||||
-rw-r--r-- | src/jvm/clojure/lang/Reflector.java | 13 |
2 files changed, 15 insertions, 4 deletions
diff --git a/src/jvm/clojure/lang/Compiler.java b/src/jvm/clojure/lang/Compiler.java index 054e5479..2e9512ca 100644 --- a/src/jvm/clojure/lang/Compiler.java +++ b/src/jvm/clojure/lang/Compiler.java @@ -783,7 +783,7 @@ static class InstanceFieldExpr extends FieldExpr implements AssignableExpr{ public InstanceFieldExpr(int line, Expr target, String fieldName) throws Exception{ this.target = target; this.targetClass = target.hasJavaClass() ? target.getJavaClass() : null; - this.field = targetClass != null ? targetClass.getField(fieldName) : null; + this.field = targetClass != null ? Reflector.getField(targetClass,fieldName,false) : null; this.fieldName = fieldName; this.line = line; if(field == null && RT.booleanCast(RT.WARN_ON_REFLECTION.get())) @@ -820,12 +820,10 @@ static class InstanceFieldExpr extends FieldExpr implements AssignableExpr{ } public boolean hasJavaClass() throws Exception{ - return targetClass != null; + return field != null; } public Class getJavaClass() throws Exception{ - Class targetClass = target.getJavaClass(); - java.lang.reflect.Field field = targetClass.getField(fieldName); return field.getType(); } diff --git a/src/jvm/clojure/lang/Reflector.java b/src/jvm/clojure/lang/Reflector.java index 35d9ab6d..cec3e243 100644 --- a/src/jvm/clojure/lang/Reflector.java +++ b/src/jvm/clojure/lang/Reflector.java @@ -260,6 +260,19 @@ static public List getMethods(Class c, int arity, String name, boolean getStatic methods.add(allmethods[i]); } } + if(!getStatics && c.isInterface()) + { + allmethods = Object.class.getMethods(); + for(int i = 0; i < allmethods.length; i++) + { + if(name.equals(allmethods[i].getName()) + && Modifier.isStatic(allmethods[i].getModifiers()) == getStatics + && allmethods[i].getParameterTypes().length == arity) + { + methods.add(allmethods[i]); + } + } + } return methods; } |