summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/clj/clojure/core_proxy.clj11
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))