Skip to content

Commit db3466e

Browse files
committed
support type and parameter annotations in definterface
1 parent 29dcb68 commit db3466e

File tree

2 files changed

+14
-10
lines changed

2 files changed

+14
-10
lines changed

src/clj/clojure/core_deftype.clj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@
2020
[name & sigs]
2121
(let [tag (fn [x] (or (:tag (meta x)) Object))
2222
psig (fn [[name [& args]]]
23-
(vector name (vec (map tag args)) (tag name)))
24-
cname (symbol (str (namespace-munge *ns*) "." name))]
23+
(vector name (vec (map tag args)) (tag name) (map meta args)))
24+
cname (with-meta (symbol (str (namespace-munge *ns*) "." name)) (meta name))]
2525
`(do (gen-interface :name ~cname :methods ~(vec (map psig sigs)))
2626
(import ~cname))))
2727

src/clj/clojure/genclass.clj

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -622,14 +622,18 @@
622622
(when (seq extends)
623623
(into-array (map #(.getInternalName (asm-type %)) extends))))
624624
(add-annotations cv (meta name))
625-
(doseq [[mname pclasses rclass] methods]
626-
(. cv visitMethod (+ Opcodes/ACC_PUBLIC Opcodes/ACC_ABSTRACT)
627-
(str mname)
628-
(Type/getMethodDescriptor (asm-type rclass)
629-
(if pclasses
630-
(into-array Type (map asm-type pclasses))
631-
(make-array Type 0)))
632-
nil nil))
625+
(doseq [[mname pclasses rclass pmetas] methods]
626+
(let [mv (. cv visitMethod (+ Opcodes/ACC_PUBLIC Opcodes/ACC_ABSTRACT)
627+
(str mname)
628+
(Type/getMethodDescriptor (asm-type rclass)
629+
(if pclasses
630+
(into-array Type (map asm-type pclasses))
631+
(make-array Type 0)))
632+
nil nil)]
633+
(add-annotations mv (meta mname))
634+
(dotimes [i (count pmetas)]
635+
(add-annotations mv (nth pmetas i) i))
636+
(. mv visitEnd)))
633637
(. cv visitEnd)
634638
[iname (. cv toByteArray)]))
635639

0 commit comments

Comments
 (0)