File tree Expand file tree Collapse file tree 5 files changed +55
-11
lines changed Expand file tree Collapse file tree 5 files changed +55
-11
lines changed Original file line number Diff line number Diff line change @@ -14,42 +14,39 @@ defaults: &defaults
14
14
env_defaults : &env_defaults
15
15
LEIN_ROOT : " true" # we intended to run lein as root
16
16
17
- jdk8_env_defaults : &jdk8_env_defaults
17
+ jdk_env_defaults : &jdk_env_defaults
18
18
JVM_OPTS : -Xmx3200m -Dclojure.main.report=stderr
19
19
20
- newer_jdk_env_defaults : &newer_jdk_env_defaults
21
- JVM_OPTS : -Xmx3200m --illegal-access=deny -Dclojure.main.report=stderr
22
-
23
- # Runners for OpenJDK 8 and 11
20
+ # Runners for each major OpenJDK
24
21
25
22
executors :
26
23
openjdk8 :
27
24
docker :
28
25
- image : circleci/clojure:openjdk-8-lein-2.9.1
29
26
environment :
30
27
<< : *env_defaults
31
- << : *jdk8_env_defaults
28
+ << : *jdk_env_defaults
32
29
<< : *defaults
33
30
openjdk11 :
34
31
docker :
35
32
- image : circleci/clojure:openjdk-11-lein-2.9.1
36
33
environment :
37
34
<< : *env_defaults
38
- << : *newer_jdk_env_defaults
35
+ << : *jdk_env_defaults
39
36
<< : *defaults
40
37
openjdk16 :
41
38
docker :
42
39
- image : circleci/clojure:openjdk-16-lein-2.9.5-buster
43
40
environment :
44
41
<< : *env_defaults
45
- << : *newer_jdk_env_defaults
42
+ << : *jdk_env_defaults
46
43
<< : *defaults
47
44
openjdk17 :
48
45
docker :
49
46
- image : circleci/clojure:openjdk-17-lein-2.9.5-buster
50
47
environment :
51
48
<< : *env_defaults
52
- << : *newer_jdk_env_defaults
49
+ << : *jdk_env_defaults
53
50
<< : *defaults
54
51
55
52
# Runs a given set of steps, with some standard pre- and post-
Original file line number Diff line number Diff line change 5
5
### Bugs fixed
6
6
7
7
* ` orchard.inspect ` : don't render ` Datafy ` sections identical to the data they refer to, for nil-valued maps.
8
+ * ` orchard.inspect ` : access private fields again.
9
+ * This feature was accidentally dropped in the previous release.
8
10
9
11
## 0.17.0 (2023-10-24)
10
12
Original file line number Diff line number Diff line change 626
626
(try
627
627
(.get f obj)
628
628
(catch Exception _
629
- ::access-denied )))
629
+ (try
630
+ (.setAccessible f true )
631
+ (.get f obj)
632
+ (catch Exception _
633
+ ::access-denied )))))
630
634
631
635
(defmethod inspect :default [inspector obj]
632
636
(let [class-chain (loop [c (class obj), res ()]
Original file line number Diff line number Diff line change
1
+ package orchard .java ;
2
+
3
+ public class PrivateFieldClass {
4
+
5
+ public PrivateFieldClass (int age ){
6
+ this .age = age ;
7
+ }
8
+
9
+ private final int age ;
10
+
11
+ }
Original file line number Diff line number Diff line change 14
14
[orchard.misc :refer [datafy? java-api-version tap?]]
15
15
[orchard.misc :as misc])
16
16
(:import
17
- (java.io File)))
17
+ (java.io File)
18
+ (orchard.java PrivateFieldClass)))
18
19
19
20
; ; for `match?`
20
21
(require 'matcher-combinators.test)
1036
1037
(is (nil? (datafy-section rendered))))
1037
1038
(let [rendered (-> {:foo :bar :nilable nil } inspect render)]
1038
1039
(is (nil? (datafy-section rendered))))))
1040
+
1041
+ (deftest private-field-access-test
1042
+ (testing " Inspection of private fields is attempted (may fail depending on the JDK and the module of the given class)"
1043
+ (if (< java-api-version 16 )
1044
+ (do
1045
+ (is (nil? (->> 2 inspect render (section " Private static fields" ))))
1046
+ (is (match? (matchers/embeds [(list :value " serialVersionUID" number?)])
1047
+ (->> 2 inspect render (section " Static fields" )))))
1048
+
1049
+ (let [rendered (->> 2 inspect render (section " Private static fields" ))]
1050
+ (is (match? (list " --- Private static fields:"
1051
+ '(:newline )
1052
+ " "
1053
+ (list :value " serialVersionUID" number?)
1054
+ " = "
1055
+ (list :value " <non-inspectable value>" number?)
1056
+ '(:newline ))
1057
+ rendered))))
1058
+
1059
+ (let [rendered (->> (PrivateFieldClass. 42 ) inspect render (section " Instance fields" ))]
1060
+ (is (match? (list " --- Instance fields:"
1061
+ '(:newline )
1062
+ " "
1063
+ (list :value " age" number?)
1064
+ " = "
1065
+ (list :value " 42" number?)
1066
+ '(:newline ))
1067
+ rendered)
1068
+ " Fully inspects private fields for a class that is module-accessible" ))))
You can’t perform that action at this time.
0 commit comments