From 5b7678f309febfb6581566c902e077c679c76116 Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Sat, 19 Apr 2025 12:12:56 +0200 Subject: [PATCH] Fix virtual thread builder interop (#1810) --- CHANGELOG.md | 4 ++++ src/babashka/impl/classes.clj | 4 +++- test/babashka/interop_test.clj | 5 ++++- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 29c6f6e9..62c1c627 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ A preview of the next release can be installed from [Babashka](https://github.com/babashka/babashka): Native, fast starting Clojure interpreter for scripting +## Unreleased + +- Fix virtual `ThreadBuilder` interop + ## 1.12.199 (2025-04-18) - [#1806](https://github.com/babashka/babashka/issues/1806): Add `cheshire.factory` namespace ([@lread](https://github.com/lread)) diff --git a/src/babashka/impl/classes.clj b/src/babashka/impl/classes.clj index 6b081ee1..4789e11f 100644 --- a/src/babashka/impl/classes.clj +++ b/src/babashka/impl/classes.clj @@ -340,6 +340,7 @@ java.lang.Throwable java.lang.ThreadLocal java.lang.Thread$UncaughtExceptionHandler + java.lang.Thread$Builder java.lang.UnsupportedOperationException java.lang.ref.WeakReference java.lang.ref.ReferenceQueue @@ -808,7 +809,8 @@ (instance? org.jsoup.nodes.Element v) org.jsoup.nodes.Element ;; keep commas for merge friendliness - )] + (instance? java.lang.Thread$Builder v) + java.lang.Thread$Builder)] ;; (prn :res res) res))) m (assoc m (list 'quote 'clojure.lang.Var) 'sci.lang.Var) diff --git a/test/babashka/interop_test.clj b/test/babashka/interop_test.clj index de43acb6..570da854 100644 --- a/test/babashka/interop_test.clj +++ b/test/babashka/interop_test.clj @@ -18,7 +18,10 @@ (bb nil (pr-str '(do (def t (Thread. (fn []))) (def vt (Thread/startVirtualThread (fn []))) - [(.isVirtual t) (.isVirtual vt)])))))) + [(.isVirtual t) (.isVirtual vt)]))))) + (is (bb nil (pr-str '(instance? + java.util.concurrent.Executor + (java.util.concurrent.Executors/newThreadPerTaskExecutor (-> (Thread/ofVirtual) (.name "fusebox-thread-" 1) (.factory)))))))) (deftest domain-sockets-test (is (= :success (bb nil (slurp "test-resources/domain_sockets.bb")))))