summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStuart Halloway <stu@thinkrelevance.com>2010-04-23 10:01:31 -0400
committerStuart Halloway <stu@thinkrelevance.com>2010-04-24 14:41:45 -0400
commit1f70ed92bebe8a1e75c2fc2aeb30ba3745d87df0 (patch)
tree86e73e5e6a55e2e5b5392eabff51ea839bcc1432
parentc73a4bad6297251ab5545affd6baf79d2390f8c6 (diff)
munge package names in definterface, #306
Signed-off-by: Stuart Halloway <stu@thinkrelevance.com>
-rw-r--r--src/clj/clojure/core_deftype.clj7
-rw-r--r--src/clj/clojure/core_deftype.clj.rej21
-rw-r--r--test/clojure/test_clojure/genclass.clj2
-rw-r--r--test/clojure/test_clojure/genclass/examples.clj4
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