diff --git a/fs b/fs index f4e36fe2..6c150a1b 160000 --- a/fs +++ b/fs @@ -1 +1 @@ -Subproject commit f4e36fe231fc7041c3d2dc65df5d3608f1648a24 +Subproject commit 6c150a1b48cac48151f13223b1cf5f889e8e9ef9 diff --git a/src/babashka/impl/classes.clj b/src/babashka/impl/classes.clj index ec825a6b..a911d215 100644 --- a/src/babashka/impl/classes.clj +++ b/src/babashka/impl/classes.clj @@ -319,9 +319,7 @@ (def class-map (gen-class-map)) -(defn generate-reflection-file - "Generate reflection.json file" - [& args] +(defn reflection-file-entries [] (let [entries (vec (for [c (sort (:all classes)) :let [class-name (str c)]] {:name class-name @@ -344,24 +342,42 @@ :let [class-name (str c)]] (assoc v :name class-name)) all-entries (concat entries constructors methods fields custom-entries)] + all-entries)) + +(defn generate-reflection-file + "Generate reflection.json file" + [& args] + (let [all-entries (reflection-file-entries)] (spit (or (first args) "reflection.json") (json/generate-string all-entries {:pretty true})))) +(defn public-declared-method? [c m] + (and (= c (.getDeclaringClass m)) + (not (.getAnnotation m Deprecated)))) + +(defn public-declared-method-names [c] + (->> (.getMethods c) + (keep (fn [m] + (when (public-declared-method? c m) + {:class c + :name (.getName m)}))) + (distinct) + (sort-by :name) + (vec))) + +(defn all-methods [] + (->> (reflection-file-entries) + (map :name) + (map #(Class/forName %)) + (mapcat public-declared-method-names))) + (comment - - (defn public-declared-method? [c m] - (and (= c (.getDeclaringClass m)) - (not (.getAnnotation m Deprecated)))) - - (defn public-declared-method-names [c] - (->> (.getMethods c) - (keep (fn [m] - (when (public-declared-method? c m) - {:name (.getName m)}))) - (distinct) - (sort-by :name) - (vec))) - (public-declared-method-names java.net.URL) - (public-declared-method-names java.util.Properties)) + (public-declared-method-names java.util.Properties) + + (->> (reflection-file-entries) + (map :name) + (map #(Class/forName %))) + + )