|
101 | 101 | 'char Character/TYPE
|
102 | 102 | 'chars (Class/forName "[C")})
|
103 | 103 |
|
104 |
| -(defn- maybe-array-descriptor [x] |
105 |
| - (if-let [dim (and (symbol? x) |
106 |
| - (namespace x) |
107 |
| - (clojure.lang.Util/isPosDigit (name x)) |
108 |
| - (-> x name (.charAt 0) int (- (int \0))))] |
109 |
| - (let [cn (namespace x) |
110 |
| - ^Iterable dim-descr (repeat dim "[")] |
111 |
| - (if-let [^Class pc (clojure.lang.Compiler/primClass (symbol cn))] |
112 |
| - (str (String/join "" dim-descr) (-> pc Type/getType Type/.getDescriptor)) |
113 |
| - (str (String/join "" dim-descr) "L" |
114 |
| - (if (some #{\.} cn) cn (str "java.lang." cn)) |
115 |
| - ";"))) |
116 |
| - (str x))) |
| 104 | +(defn- array-class? [x] |
| 105 | + (and (symbol? x) |
| 106 | + (namespace x) |
| 107 | + (clojure.lang.Util/isPosDigit (name x)))) |
| 108 | + |
| 109 | +(defn- resolve-array-class [x] |
| 110 | + (clojure.lang.RT/classForName |
| 111 | + (let [dim (-> x name (.charAt 0) int (- (int \0))) |
| 112 | + cn (namespace x) |
| 113 | + ^Iterable dim-descr (repeat dim "[")] |
| 114 | + (if-let [^Class pc (clojure.lang.Compiler/primClass (symbol cn))] |
| 115 | + (str (String/join "" dim-descr) (-> pc Type/getType Type/.getDescriptor)) |
| 116 | + (str (String/join "" dim-descr) "L" |
| 117 | + (if (some #{\.} cn) cn (str "java.lang." cn)) |
| 118 | + ";"))))) |
117 | 119 |
|
118 | 120 | (defn- ^Class the-class [x]
|
119 | 121 | (cond
|
120 |
| - (class? x) x |
121 |
| - (contains? prim->class x) (prim->class x) |
122 |
| - :else (let [strx (maybe-array-descriptor x)] |
123 |
| - (clojure.lang.RT/classForName |
124 |
| - (if (some #{\. \[} strx) |
125 |
| - strx |
126 |
| - (str "java.lang." strx)))))) |
| 122 | + (class? x) x |
| 123 | + (symbol? x) (cond (contains? prim->class x) (prim->class x) |
| 124 | + (array-class? x) (resolve-array-class x) |
| 125 | + :else (let [strx (str x)] |
| 126 | + (clojure.lang.RT/classForName |
| 127 | + (if (some #{\. \[} strx) |
| 128 | + strx |
| 129 | + (str "java.lang." strx))))) |
| 130 | + :else (clojure.lang.RT/classForName x))) |
127 | 131 |
|
128 | 132 | ;; someday this can be made codepoint aware
|
129 | 133 | (defn- valid-java-method-name
|
|
0 commit comments