File tree 1 file changed +15
-5
lines changed
1 file changed +15
-5
lines changed Original file line number Diff line number Diff line change 9
9
; ; Java-specific parts of clojure.reflect
10
10
(in-ns 'clojure.reflect)
11
11
12
- (require '[clojure.set :as set]
12
+ (require '[clojure.datafy :refer (datafy )]
13
+ '[clojure.set :as set]
13
14
'[clojure.string :as str])
14
15
(import '[clojure.asm ClassReader ClassVisitor Type Opcodes]
15
16
'[java.lang.reflect Modifier]
34
35
" Given a typeref, create a legal Clojure symbol version of the
35
36
type's name."
36
37
[t]
37
- (-> (typename t)
38
- (str/replace " []" " <>" )
39
- (symbol )))
38
+ (cond->
39
+ (-> (typename t)
40
+ (str/replace " []" " <>" )
41
+ (symbol ))
42
+ (class? t) (with-meta {'clojure.core.protocols/datafy
43
+ (fn [_] (datafy t))})))
40
44
41
45
(defn- resource-name
42
46
" Given a typeref, return implied resource name. Used by Reflectors
@@ -163,10 +167,16 @@ the kinds of objects to which they can apply."}
163
167
field->map
164
168
(.getDeclaredFields cls))))
165
169
170
+ (defn- typeref->class
171
+ [typeref classloader]
172
+ (if (class? typeref)
173
+ typeref
174
+ (clojure.lang.RT/classForName (typename typeref) false classloader)))
175
+
166
176
(deftype JavaReflector [classloader]
167
177
Reflector
168
178
(do-reflect [_ typeref]
169
- (let [cls (clojure.lang.RT/classForName ( typename typeref) false classloader)]
179
+ (let [cls (typeref->class typeref classloader)]
170
180
{:bases (not-empty (set (map typesym (bases cls))))
171
181
:flags (parse-flags (.getModifiers cls) :class )
172
182
:members (set/union (declared-fields cls)
You can’t perform that action at this time.
0 commit comments