Skip to content

Commit

Permalink
[info] Fix Javadoc URL inference for newer JDKs
Browse files Browse the repository at this point in the history
  • Loading branch information
alexander-yakushev authored and bbatsov committed Apr 23, 2024
1 parent f958564 commit bb22fb3
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 30 deletions.
27 changes: 11 additions & 16 deletions src/orchard/java.clj
Original file line number Diff line number Diff line change
Expand Up @@ -516,20 +516,16 @@
:class
type-info)))

(def javadoc-base-urls
"Copied from clojure.java.javadoc. These are the base urls for
javadocs from `clojure.java.javadoc/*core-java-api*`. It is here for
two reasons:
1. Add Java 13+ to this list
2. Backport newer data to older Clojure releases"
{8 "https://docs.oracle.com/javase/8/docs/api/"
9 "https://docs.oracle.com/javase/9/docs/api/"
10 "https://docs.oracle.com/javase/10/docs/api/"
11 "https://docs.oracle.com/en/java/javase/11/docs/api/"
12 "https://docs.oracle.com/en/java/javase/12/docs/api/"
13 "https://docs.oracle.com/en/java/javase/13/docs/api/"
14 "https://docs.oracle.com/en/java/javase/14/docs/api/"
15 "https://docs.oracle.com/en/java/javase/15/docs/api/"})
(defn javadoc-base-url
"Re-implementation of `clojure.java.javadoc/*core-java-api*` because it doesn't
contain newer JDK versions, especially in older Clojure."
[jdk-version]
(cond (<= jdk-version 10)
(format "https://docs.oracle.com/javase/%s/docs/api/" jdk-version)
(<= 11 jdk-version 22)
(format "https://docs.oracle.com/en/java/javase/%s/docs/api/" jdk-version)
:else ;; For newer JDK version, default to latest LTS.
(recur 21)))

(defn resolve-javadoc-path
"Resolve a relative javadoc path to a URL and return as a map. Prefer javadoc
Expand All @@ -545,8 +541,7 @@
;; Older Clojure versions don't have javadoc for newer JDKs.
;; We just backport them regardless of Clojure version.
(zipmap ["java." "javax." "org.ietf.jgss." "org.omg." "org.w3c.dom." "org.xml.sax"]
(repeat (or (javadoc-base-urls misc/java-api-version)
(javadoc-base-urls 11))))))
(repeat (javadoc-base-url misc/java-api-version)))))
path))

(defn- initialize-cache!* []
Expand Down
21 changes: 9 additions & 12 deletions src/orchard/misc.clj
Original file line number Diff line number Diff line change
Expand Up @@ -108,21 +108,18 @@
(apply f (filter identity xs))))

(defn parse-java-version
"Parse a Java version string according to JEP 223 and return the appropriate version."
"Parse a Java version string according to JEP 223 and return the appropriate
version."
[java-ver]
(try
;; the no-opt split is because a java version string can end with
;; an optional string consisting of a hyphen followed by other characters
(let [[no-opt _] (string/split java-ver #"-")
[major minor _] (string/split no-opt #"\.")
major (Integer/parseInt major)]
(if (> major 1)
major
(Integer/parseInt (or minor "7"))))
(catch Exception _ 7)))
(try (let [[major minor _] (string/split java-ver #"\.")
major (Integer/parseInt major)]
(if (> major 1)
major
(Integer/parseInt minor)))
(catch Exception _ 8)))

(def java-api-version
(parse-java-version (System/getProperty "java.version")))
(parse-java-version (System/getProperty "java.specification.version")))

;; TODO move back to analysis.cljs
(defn add-ns-macros
Expand Down
2 changes: 1 addition & 1 deletion test/orchard/java_test.clj
Original file line number Diff line number Diff line change
Expand Up @@ -355,7 +355,7 @@
(testing "Unrecognized java version doesn't blank out the javadocs"
(with-redefs [misc/java-api-version 12345
cache (LruMap. 100)]
(is (= "https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html"
(is (= "https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/String.html"
(get-url ['java.lang.String]))))))))

(deftest class-resolution-test
Expand Down
2 changes: 1 addition & 1 deletion test/orchard/misc_test.clj
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
(deftest parse-java-version-test
(is (= (misc/parse-java-version "1.8.0") 8))
(is (= (misc/parse-java-version "11") 11))
(is (= (misc/parse-java-version "14-ea") 14)))
(is (= (misc/parse-java-version "14") 14)))

(deftest macros-suffix-add-remove
(testing "add-ns-macros"
Expand Down

0 comments on commit bb22fb3

Please sign in to comment.