Add and expose babashka.classes/all-classes (#1362)

* Add and expose babashka.classes/all-classes

* Add test for babashka.classes/all-classes
This commit is contained in:
Eero Helenius 2022-09-13 11:54:30 +03:00 committed by GitHub
parent d0d36a2bc4
commit 4926aaf85f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 27 additions and 7 deletions

View file

@ -5,6 +5,7 @@
[babashka.impl.proxy :as proxy]
[cheshire.core :as json]
[clojure.core.async]
[sci.core :as sci]
[sci.impl.types :as t]))
(def base-custom-map
@ -744,18 +745,25 @@
(sort-by :name)
(vec)))
(defn all-methods []
(defn all-classes []
"Returns every java.lang.Class instance Babashka supports."
(->> (reflection-file-entries)
(map :name)
(map #(Class/forName %))
(mapcat public-declared-method-names)))
(map #(Class/forName %))))
(defn all-methods []
(mapcat public-declared-method-names (all-classes)))
(def cns (sci/create-ns 'babashka.classes nil))
(def classes-namespace
{:obj cns
'all-classes (sci/copy-var all-classes cns)})
(comment
(public-declared-method-names java.net.URL)
(public-declared-method-names java.util.Properties)
(->> (reflection-file-entries)
(map :name)
(map #(Class/forName %)))
(all-classes)
)

View file

@ -7,7 +7,7 @@
[babashka.fs :as fs]
[babashka.impl.bencode :refer [bencode-namespace]]
[babashka.impl.cheshire :refer [cheshire-core-namespace]]
[babashka.impl.classes :as classes]
[babashka.impl.classes :as classes :refer [classes-namespace]]
[babashka.impl.classpath :as cp :refer [classpath-namespace]]
[babashka.impl.cli :as cli]
[babashka.impl.clojure.core :as core :refer [core-extras]]
@ -379,6 +379,7 @@ Use bb run --help to show this help output.
'clojure.test t/clojure-test-namespace
'clojure.math math-namespace
'babashka.classpath classpath-namespace
'babashka.classes classes-namespace
'clojure.pprint pprint-namespace
'babashka.curl curl-namespace
'babashka.fs fs-namespace

View file

@ -0,0 +1,11 @@
(ns babashka.classes-test
(:require [babashka.test-utils :as tu]
[clojure.edn :as edn]
[clojure.test :as t :refer [deftest is testing]]))
(defn bb
[& args]
(edn/read-string (apply tu/bb nil (map pr-str args))))
(deftest all-classes-test
(is (true? (bb '(let [classes (babashka.classes/all-classes)] (and (seq classes) (every? class? classes)))))))