summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/clj/clojure/genclass.clj15
1 files changed, 9 insertions, 6 deletions
diff --git a/src/clj/clojure/genclass.clj b/src/clj/clojure/genclass.clj
index 7648e762..8443788d 100644
--- a/src/clj/clojure/genclass.clj
+++ b/src/clj/clojure/genclass.clj
@@ -375,12 +375,15 @@
(. m (getName))
(. m (getDescriptor)))))))
;add methods matching interfaces', if no fn -> throw
- (doseq #^Class iface interfaces
- (doseq #^java.lang.reflect.Method meth (. iface (getMethods))
- (when-not (contains? mm (method-sig meth))
- (emit-forwarding-method (.getName meth) (.getParameterTypes meth) (.getReturnType meth) false
- (fn [gen m]
- (. gen (throwException ex-type (. m (getName)))))))))
+ (reduce (fn [mm meth]
+ (if (contains? mm (method-sig meth))
+ mm
+ (do
+ (emit-forwarding-method (.getName meth) (.getParameterTypes meth) (.getReturnType meth) false
+ (fn [gen m]
+ (. gen (throwException ex-type (. m (getName))))))
+ (assoc mm (method-sig meth) meth))))
+ mm (mapcat #(.getMethods %) interfaces))
;extra methods
(doseq [mname pclasses rclass :as msig] methods
(emit-forwarding-method (str mname) pclasses rclass (:static ^msig)