Skip to content

Commit 010864f

Browse files
puredangerstuarthalloway
authored andcommitted
CLJ-1868 Avoid compiler NPE when checking class return type
Signed-off-by: Stuart Halloway <stu@cognitect.com>
1 parent 77819a5 commit 010864f

File tree

2 files changed

+10
-3
lines changed

2 files changed

+10
-3
lines changed

src/clj/clojure/core.clj

+4-3
Original file line numberDiff line numberDiff line change
@@ -244,9 +244,10 @@
244244
(if (instance? clojure.lang.Symbol tag)
245245
(if (clojure.lang.Util/equiv (.indexOf (.getName tag) ".") -1)
246246
(if (clojure.lang.Util/equals nil (clojure.lang.Compiler$HostExpr/maybeSpecialTag tag))
247-
(let [t (.getName (clojure.lang.Compiler$HostExpr/maybeClass tag false))
248-
resolvedtag (clojure.lang.Symbol/intern t)]
249-
(with-meta argvec (assoc m :tag resolvedtag)))
247+
(let [c (clojure.lang.Compiler$HostExpr/maybeClass tag false)]
248+
(if c
249+
(with-meta argvec (assoc m :tag (clojure.lang.Symbol/intern (.getName c))))
250+
argvec))
250251
argvec)
251252
argvec)
252253
argvec)))]

test/clojure/test_clojure/compilation.clj

+6
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,12 @@
145145
(is (= 'java.lang.String (-> arglists first meta :tag)))
146146
(is (= 'java.lang.Integer (-> arglists second meta :tag)))))
147147

148+
(deftest CLJ-1232-return-type-not-imported
149+
(is (thrown-with-msg? Compiler$CompilerException #"Unable to resolve classname: Closeable"
150+
(eval '(defn a ^Closeable []))))
151+
(is (thrown-with-msg? Compiler$CompilerException #"Unable to resolve classname: Closeable"
152+
(eval '(defn a (^Closeable []))))))
153+
148154
(defn ^String hinting-conflict ^Integer [])
149155

150156
(deftest calls-use-arg-vector-hint

0 commit comments

Comments
 (0)