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:
5454 files :
5555 description : Files to consider when creating the cache key
5656 type : string
57- default : " deps.edn project.clj"
57+ default : " deps.edn project.clj download-jdk-sources.sh "
5858 cache_version :
5959 type : string
6060 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
99unzip -q full-src.zip
1010cp -r jdk* /src/java.base/share/classes java.base
1111cp -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 33## master (unreleased)
44
55- [ #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.
67
78## 0.36.0 (2025-06-29)
89
Original file line number Diff line number Diff line change 1616 [class-or-sym]
1717 (module-name-macro class-or-sym))
1818
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+
1931(defmacro get-field-value-macro [field obj]
2032 (if (>= misc/java-api-version 11 )
2133 `(try (if (or (.canAccess ~field ~obj)
Original file line number Diff line number Diff line change 8989(defn- locate-source-url-in-jdk-sources
9090 " Try to find the source file for `klass` in sources included with JDK."
9191 ^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))
9495 (let [source-file (class->sourcefile-path klass)]
9596 (-> (combine-archive-url @jdk-sources source-file)
9697 verify-url-readable))))
9798
9899#_(locate-source-url-in-jdk-sources Thread)
100+ #_(locate-source-url-in-jdk-sources java.sql.Connection)
99101
100102(defn- parse-jar-path-from-url [^URL url]
101103 (when-let [[_ path] (some->> url .getFile (re-matches #"file:(.+\. jar)!.*" ))]
Original file line number Diff line number Diff line change 77(when util/jdk-sources-present?
88 (deftest class->source-file-url-test
99 (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
1112 (is (src-files/class->source-file-url clojure.lang.PersistentVector)) ; ; Clojure
1213 (is (nil? (src-files/class->source-file-url clojure.core.Eduction))))) ; ; record
1314
You can’t perform that action at this time.
0 commit comments