File tree Expand file tree Collapse file tree 3 files changed +16
-6
lines changed Expand file tree Collapse file tree 3 files changed +16
-6
lines changed Original file line number Diff line number Diff line change 22
33## master (unreleased)
44
5+ * Guard against OOMs in ` orchard.java/member-info ` .
6+
57## 0.9.1 (2022-01-17)
68
79### Bugs fixed
Original file line number Diff line number Diff line change 268268 implemention. If the member is an instance member, `this` is prepended to its
269269 arglists."
270270 [class member]
271- (let [c (->> (class-info class)
272- (iterate (comp class-info :super ))
273- (take-while identity)
274- (filter #(get-in % [:members member]))
275- (first ))]
271+ (let [c
272+ ; ; NOTE: the following code uses `loop` to avoid retaining more objects in memory than necessary.
273+ ; ; `class-info` calls can be expensive given the JavaDoc parsing they can perform.
274+ (loop [next-class class]
275+ (let [{:keys [super] :as c-i} (class-info next-class)
276+ v (get-in c-i [:members member])]
277+ (cond
278+ v c-i
279+ (not super) nil
280+ :else (recur super))))]
276281 (when-let [m (get-in c [:members member])]
277282 (let [m* (first (sort-by :line (vals m)))
278283 static? (or (:static (:modifiers m*)) (= class member))
Original file line number Diff line number Diff line change 22 (:require
33 [clojure.java.io :as io]
44 [clojure.java.javadoc :as javadoc]
5+ [clojure.string :as string]
56 [clojure.test :refer [are deftest is testing]]
67 [orchard.java :refer [cache class-info class-info* javadoc-url jdk-tools member-info resolve-class resolve-javadoc-path resolve-member resolve-symbol resolve-type source-info]]
78 [orchard.misc :as misc]
130131 (testing " implemented on immediate superclass"
131132 (is (not= 'java.lang.Object (:class m6))))
132133 (testing " implemented on ancestor superclass"
133- (is (not= 'java.lang.Object (:class m7))))))))
134+ (is (not= 'java.lang.Object (:class m7)))
135+ (is (-> m6 :doc (string/starts-with? " Called by the garbage collector on an object when garbage collection " ))
136+ " Contains doc that is clearly defined in Object (the superclass)" ))))))
134137
135138(deftest arglists-test
136139 (let [+this (comp #{'this} first)]
You can’t perform that action at this time.
0 commit comments