diff options
author | Stuart Halloway <stu@thinkrelevance.com> | 2010-04-23 10:01:31 -0400 |
---|---|---|
committer | Stuart Halloway <stu@thinkrelevance.com> | 2010-04-24 14:41:45 -0400 |
commit | 1f70ed92bebe8a1e75c2fc2aeb30ba3745d87df0 (patch) | |
tree | 86e73e5e6a55e2e5b5392eabff51ea839bcc1432 | |
parent | c73a4bad6297251ab5545affd6baf79d2390f8c6 (diff) |
munge package names in definterface, #306
Signed-off-by: Stuart Halloway <stu@thinkrelevance.com>
-rw-r--r-- | src/clj/clojure/core_deftype.clj | 7 | ||||
-rw-r--r-- | src/clj/clojure/core_deftype.clj.rej | 21 | ||||
-rw-r--r-- | test/clojure/test_clojure/genclass.clj | 2 | ||||
-rw-r--r-- | test/clojure/test_clojure/genclass/examples.clj | 4 |
4 files changed, 30 insertions, 4 deletions
diff --git a/src/clj/clojure/core_deftype.clj b/src/clj/clojure/core_deftype.clj index f18b690f..f2923279 100644 --- a/src/clj/clojure/core_deftype.clj +++ b/src/clj/clojure/core_deftype.clj @@ -10,13 +10,18 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;; definterface ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +(defn namespace-munge + "Convert a Clojure namespace name to a legal Java package name." + [ns] + (.replace (str ns) \- \_)) + ;for now, built on gen-interface (defmacro definterface [name & sigs] (let [tag (fn [x] (or (:tag (meta x)) Object)) psig (fn [[name [& args]]] (vector name (vec (map tag args)) (tag name))) - cname (with-meta (symbol (str *ns* "." name)) (meta name))] + cname (symbol (str (namespace-munge *ns*) "." name))] `(do (gen-interface :name ~cname :methods ~(vec (map psig sigs))) (import ~cname)))) diff --git a/src/clj/clojure/core_deftype.clj.rej b/src/clj/clojure/core_deftype.clj.rej new file mode 100644 index 00000000..83fab7ee --- /dev/null +++ b/src/clj/clojure/core_deftype.clj.rej @@ -0,0 +1,21 @@ +diff a/src/clj/clojure/core_deftype.clj b/src/clj/clojure/core_deftype.clj (rejected hunks) +@@ -10,13 +10,18 @@ + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;; definterface ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ++(defn namespace-munge ++ "Convert a Clojure namespace name to a legal Java package name." ++ [ns] ++ (.replace (str ns) \- \_)) ++ + ;for now, built on gen-interface + (defmacro definterface + [name & sigs] + (let [tag (fn [x] (or (:tag (meta x)) Object)) + psig (fn [[name [& args]]] + (vector name (vec (map tag args)) (tag name))) +- cname (symbol (str *ns* "." name))] ++ cname (symbol (str (namespace-munge *ns*) "." name))] + `(do (gen-interface :name ~cname :methods ~(vec (map psig sigs))) + (import ~cname)))) + diff --git a/test/clojure/test_clojure/genclass.clj b/test/clojure/test_clojure/genclass.clj index f0d2b92b..e723572f 100644 --- a/test/clojure/test_clojure/genclass.clj +++ b/test/clojure/test_clojure/genclass.clj @@ -10,7 +10,7 @@ (ns clojure.test-clojure.genclass (:use clojure.test) - (:import clojure.test-clojure.genclass.examples.ExampleClass)) + (:import clojure.test_clojure.genclass.examples.ExampleClass)) ;; pull this up to a suite-wide helper if you find other tests need it! (defn get-field diff --git a/test/clojure/test_clojure/genclass/examples.clj b/test/clojure/test_clojure/genclass/examples.clj index 70ff8aa2..f2ffb29a 100644 --- a/test/clojure/test_clojure/genclass/examples.clj +++ b/test/clojure/test_clojure/genclass/examples.clj @@ -5,8 +5,8 @@ (foo [a b]) (foo [a #^int b])) -(gen-class :name clojure.test-clojure.genclass.examples.ExampleClass - :implements [clojure.test-clojure.genclass.examples.ExampleInterface]) +(gen-class :name clojure.test_clojure.genclass.examples.ExampleClass + :implements [clojure.test_clojure.genclass.examples.ExampleInterface]) ;; -foo-Object unimplemented to test missing fn case |