diff options
author | Rich Hickey <richhickey@gmail.com> | 2007-12-18 12:55:15 +0000 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2007-12-18 12:55:15 +0000 |
commit | 0f234b3967cea2450ec86b6e21f17642e12ea939 (patch) | |
tree | fff7099b3e77933ee6058d7907ee5951858cb3e1 /src/jvm/clojure/lang/ProxyHandler.java | |
parent | 742bf71003d62c9d41881aa7c59740993a749243 (diff) |
Made implementing void-returning methods optional
Diffstat (limited to 'src/jvm/clojure/lang/ProxyHandler.java')
-rw-r--r-- | src/jvm/clojure/lang/ProxyHandler.java | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/src/jvm/clojure/lang/ProxyHandler.java b/src/jvm/clojure/lang/ProxyHandler.java index 883b19a9..2e67d5b4 100644 --- a/src/jvm/clojure/lang/ProxyHandler.java +++ b/src/jvm/clojure/lang/ProxyHandler.java @@ -25,11 +25,15 @@ public ProxyHandler(IPersistentMap fns){ } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable{ + Class rt = method.getReturnType(); IFn fn = (IFn) fns.valAt(method.getName()); if(fn == null) + { + if(rt == Void.TYPE) + return null; throw new UnsupportedOperationException(); + } Object ret = fn.applyTo(ArraySeq.create(args)); - Class rt = method.getReturnType(); if(rt == Void.TYPE) return null; else if(rt.isPrimitive()) @@ -37,19 +41,19 @@ public Object invoke(Object proxy, Method method, Object[] args) throws Throwabl if(rt == Character.TYPE) return ret; else if(rt == Integer.TYPE) - return ((Number)ret).intValue(); + return ((Number) ret).intValue(); else if(rt == Long.TYPE) - return ((Number)ret).longValue(); + return ((Number) ret).longValue(); else if(rt == Float.TYPE) - return ((Number)ret).floatValue(); + return ((Number) ret).floatValue(); else if(rt == Double.TYPE) - return ((Number)ret).doubleValue(); - else if(rt == Boolean.TYPE) - return ret == null?Boolean.FALSE:Boolean.TRUE; + return ((Number) ret).doubleValue(); + else if(rt == Boolean.TYPE) + return ret == null ? Boolean.FALSE : Boolean.TRUE; else if(rt == Byte.TYPE) - return (byte)((Number)ret).intValue(); + return (byte) ((Number) ret).intValue(); else if(rt == Short.TYPE) - return (short)((Number)ret).intValue(); + return (short) ((Number) ret).intValue(); } return ret; } |