diff options
-rw-r--r-- | src/clj/clojure/core_proxy.clj | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/src/clj/clojure/core_proxy.clj b/src/clj/clojure/core_proxy.clj index 93e3e0ba..7653deab 100644 --- a/src/clj/clojure/core_proxy.clj +++ b/src/clj/clojure/core_proxy.clj @@ -34,10 +34,13 @@ (defn proxy-name {:tag String} [#^Class super interfaces] - (apply str "clojure.proxy." - (.getName super) - (interleave (repeat "$") - (sort (map #(.getSimpleName #^Class %) interfaces))))) + (let [inames (into (sorted-set) (map #(.getName #^Class %) interfaces))] + (apply str (.replace (str *ns*) \- \_) ".proxy" + (interleave (repeat "$") + (concat + [(.getName super)] + (map #(subs % (inc (.lastIndexOf #^String % "."))) inames) + [(Integer/toHexString (hash inames))]))))) (defn- generate-proxy [#^Class super interfaces] (let [cv (new ClassWriter (. ClassWriter COMPUTE_MAXS)) |