Skip to content

Commit 06097b1

Browse files
CLJ-2432 lazy require reflect in datafy, add requiring-resolve
1 parent 0d7773b commit 06097b1

File tree

2 files changed

+14
-4
lines changed

2 files changed

+14
-4
lines changed

src/clj/clojure/core.clj

+11
Original file line numberDiff line numberDiff line change
@@ -6070,6 +6070,17 @@
60706070
[& args]
60716071
(apply load-libs :require args))
60726072

6073+
(defn requiring-resolve
6074+
"Resolves namespace-qualified sym per 'resolve'. If initial resolve
6075+
fails, attempts to require sym's namespace and retries."
6076+
{:added "1.10"}
6077+
[sym]
6078+
(if (qualified-symbol? sym)
6079+
(or (resolve sym)
6080+
(do (-> sym namespace symbol require)
6081+
(resolve sym)))
6082+
(throw (IllegalArgumentException. (str "Not a qualified symbol: " sym)))))
6083+
60736084
(defn use
60746085
"Like 'require, but also refers to each lib's namespace using
60756086
clojure.core/refer. Use :use in the ns macro in preference to calling

src/clj/clojure/datafy.clj

+3-4
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@
88

99
(ns clojure.datafy
1010
^{:doc "Functions to turn objects into data. Alpha, subject to change"}
11-
(:require [clojure.core.protocols :as p]
12-
[clojure.reflect :as refl]))
11+
(:require [clojure.core.protocols :as p]))
1312

1413
(set! *warn-on-reflection* true)
1514

@@ -59,5 +58,5 @@
5958

6059
java.lang.Class
6160
(datafy [c]
62-
(let [{:keys [members] :as ret} (refl/reflect c)]
63-
(assoc ret :name (-> c .getName symbol) :members (->> members (group-by :name) sortmap)))))
61+
(let [{:keys [members] :as ret} ((requiring-resolve 'clojure.reflect/reflect) c)]
62+
(assoc ret :name (-> c .getName symbol) :members (->> members (group-by :name) sortmap)))))

0 commit comments

Comments
 (0)