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 2
2
3
3
## master (unreleased)
4
4
5
+ * Guard against OOMs in ` orchard.java/member-info ` .
6
+
5
7
## 0.9.1 (2022-01-17)
6
8
7
9
### Bugs fixed
Original file line number Diff line number Diff line change 268
268
implemention. If the member is an instance member, `this` is prepended to its
269
269
arglists."
270
270
[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))))]
276
281
(when-let [m (get-in c [:members member])]
277
282
(let [m* (first (sort-by :line (vals m)))
278
283
static? (or (:static (:modifiers m*)) (= class member))
Original file line number Diff line number Diff line change 2
2
(:require
3
3
[clojure.java.io :as io]
4
4
[clojure.java.javadoc :as javadoc]
5
+ [clojure.string :as string]
5
6
[clojure.test :refer [are deftest is testing]]
6
7
[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]]
7
8
[orchard.misc :as misc]
130
131
(testing " implemented on immediate superclass"
131
132
(is (not= 'java.lang.Object (:class m6))))
132
133
(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)" ))))))
134
137
135
138
(deftest arglists-test
136
139
(let [+this (comp #{'this} first)]
You can’t perform that action at this time.
0 commit comments