File tree Expand file tree Collapse file tree 6 files changed +23
-6
lines changed Expand file tree Collapse file tree 6 files changed +23
-6
lines changed Original file line number Diff line number Diff line change @@ -54,7 +54,7 @@ commands:
54
54
files :
55
55
description : Files to consider when creating the cache key
56
56
type : string
57
- default : " deps.edn project.clj"
57
+ default : " deps.edn project.clj download-jdk-sources.sh "
58
58
cache_version :
59
59
type : string
60
60
description : " Key used to identify unique cache"
Original file line number Diff line number Diff line change @@ -9,5 +9,6 @@ wget "$URL" -O full-src.zip
9
9
unzip -q full-src.zip
10
10
cp -r jdk* /src/java.base/share/classes java.base
11
11
cp -r jdk* /src/java.desktop/share/classes java.desktop
12
- zip -qr $DEST java.base java.desktop
13
- rm -rf java.base java.desktop jdk* full-src.zip
12
+ cp -r jdk* /src/java.sql/share/classes java.sql
13
+ zip -qr $DEST java.base java.desktop java.sql
14
+ rm -rf java.base java.desktop java.sql jdk* full-src.zip
Original file line number Diff line number Diff line change 3
3
## master (unreleased)
4
4
5
5
- [ #353 ] ( https://github.com/clojure-emacs/orchard/pull/353 ) : Stacktrace: flag Clojure functions as duplicate.
6
+ - [ #355 ] ( https://github.com/clojure-emacs/orchard/pull/355 ) : Java: resolve source files for non-base JDK classes.
6
7
7
8
## 0.36.0 (2025-06-29)
8
9
Original file line number Diff line number Diff line change 16
16
[class-or-sym]
17
17
(module-name-macro class-or-sym))
18
18
19
+ (defmacro ^:private contains-in-boot-modules-macro [class]
20
+ ; ; On JDK8, always return nil.
21
+ (when (>= misc/java-api-version 11 )
22
+ `(let [^Class klass# ~class]
23
+ (when-some [module# (some-> klass# .getModule)]
24
+ (.contains (.modules (java.lang.ModuleLayer/boot )) module#)))))
25
+
26
+ (defn is-in-boot-module?
27
+ " Return true if the class belongs to a module that is among boot modules."
28
+ [class]
29
+ (contains-in-boot-modules-macro class))
30
+
19
31
(defmacro get-field-value-macro [field obj]
20
32
(if (>= misc/java-api-version 11 )
21
33
`(try (if (or (.canAccess ~field ~obj)
Original file line number Diff line number Diff line change 89
89
(defn- locate-source-url-in-jdk-sources
90
90
" Try to find the source file for `klass` in sources included with JDK."
91
91
^URL [^Class klass]
92
- ; ; Heuristic: JDK classes have `nil` classloader.
93
- (when (and @jdk-sources (nil? (.getClassLoader klass)))
92
+ ; ; JDK classes belong to a boot module on JDK11+, and source parsing doesn't
93
+ ; ; work for JDK8 anyway.
94
+ (when (and @jdk-sources (compat/is-in-boot-module? klass))
94
95
(let [source-file (class->sourcefile-path klass)]
95
96
(-> (combine-archive-url @jdk-sources source-file)
96
97
verify-url-readable))))
97
98
98
99
#_(locate-source-url-in-jdk-sources Thread)
100
+ #_(locate-source-url-in-jdk-sources java.sql.Connection)
99
101
100
102
(defn- parse-jar-path-from-url [^URL url]
101
103
(when-let [[_ path] (some->> url .getFile (re-matches #"file:(.+\. jar)!.*" ))]
Original file line number Diff line number Diff line change 7
7
(when util/jdk-sources-present?
8
8
(deftest class->source-file-url-test
9
9
(is (src-files/class->source-file-url mx.cider.orchard.LruMap)) ; ; classpath
10
- (is (src-files/class->source-file-url Thread)) ; ; JDK
10
+ (is (src-files/class->source-file-url Thread)) ; ; JDK
11
+ (is (src-files/class->source-file-url java.sql.Connection)) ; ; JDK other module
11
12
(is (src-files/class->source-file-url clojure.lang.PersistentVector)) ; ; Clojure
12
13
(is (nil? (src-files/class->source-file-url clojure.core.Eduction))))) ; ; record
13
14
You can’t perform that action at this time.
0 commit comments