Skip to content

Commit b6db9f2

Browse files
committed
remove hard dependency on tools.logging
1 parent d5e6488 commit b6db9f2

File tree

5 files changed

+35
-8
lines changed

5 files changed

+35
-8
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1+
.calva/output-window
12
.classpath
23
.clj-kondo/.cache
34
.cpcache/
45
.lsp/.cache
6+
.nrepl-port
57
.portal
68
.project
79
.settings

CHANGELOG.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
## Change Log
22

3+
* Release 1.1.next in progress
4+
* IMPORTANT: `org.clojure/tools.logging` is no longer a dependency. If you currently to bind `*to-java-object-missing-setter*` to `:log` and you do not otherwise have a dependency on `org.clojure/tools.logging` you will need to that to your project's direct dependencies.
5+
36
* Release 1.0.95 on 2021-12-12
4-
* Update to latest tools.logging 1.2.1
7+
* Update `org.clojure/tools.logging` to `1.2.1`.
58

69
* Release 1.0.92 on 2021-10-16
710
* Support `to-java` for `java.util.Properties` and a hash map JDATA-22.

deps.edn

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1 @@
1-
{:paths ["src/main/clojure"]
2-
:deps
3-
{org.clojure/tools.logging {:mvn/version "1.2.1"}}}
1+
{:paths ["src/main/clojure"]}

pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
<groupId>org.clojure</groupId>
3636
<artifactId>tools.logging</artifactId>
3737
<version>1.2.1</version>
38+
<scope>test</scope>
3839
</dependency>
3940
</dependencies>
4041
</project>

src/main/clojure/clojure/java/data.clj

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,22 @@
1010
^{:author "Cosmin Stejerean, Sean Corfield",
1111
:doc "Support for recursively converting Java beans to Clojure and vice versa."}
1212
clojure.java.data
13-
(:require [clojure.string :as str]
14-
[clojure.tools.logging :as logger]))
13+
(:require [clojure.string :as str]))
1514

1615
(set! *warn-on-reflection* true)
1716

1817
(def ^:dynamic
1918
*to-java-object-missing-setter*
2019
"Specify the behavior of missing setters in to-java in the
21-
default object case, using one of :ignore, :log, :error"
20+
default object case, using one of :ignore, :log, :error
21+
22+
The default (:ignore) is to ignore missing setters.
23+
* :log uses clojure.tools.logging/info to log a message.
24+
* :error throws a NoSuchFieldException.
25+
26+
If you bind this to :log, you must have org.clojure/tools.logging
27+
as a dependency in your project. Otherwise, :log will behave like
28+
:error and throw a NoSuchFieldException."
2229
:ignore)
2330

2431
(defmulti to-java
@@ -203,12 +210,28 @@
203210
(.invoke (.getDeclaredMethod enum "valueOf" (into-array [String]))
204211
nil (into-array [value])))
205212

213+
(declare log-or-throw)
214+
(defmacro defn-log-or-throw []
215+
(try
216+
(require 'clojure.tools.logging)
217+
`(defn ~'log-or-throw [message#]
218+
(clojure.tools.logging/info message#))
219+
(catch Throwable _
220+
`(defn ~'log-or-throw [message#]
221+
(throw (new NoSuchFieldException message#))))))
222+
(defn-log-or-throw)
223+
206224
(defn- throw-log-or-ignore-missing-setter [key ^Class clazz]
207225
(let [message (str "Missing setter for " key " in " (.getCanonicalName clazz))]
208226
(cond (= *to-java-object-missing-setter* :error)
209227
(throw (new NoSuchFieldException message))
210228
(= *to-java-object-missing-setter* :log)
211-
(logger/info message))))
229+
(log-or-throw message))))
230+
231+
(comment
232+
(binding [*to-java-object-missing-setter* :log]
233+
(throw-log-or-ignore-missing-setter :foo String))
234+
)
212235

213236
;; feature testing macro, based on suggestion from Chas Emerick:
214237

0 commit comments

Comments
 (0)