From 9e004edefee90ad4a91e7240b391a6b5cb107913 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rahu=CE=BB=20D=C3=A9?= Date: Thu, 2 Mar 2023 14:10:58 +0000 Subject: [PATCH] Fix #1507: support calling getName on virtual thread --- CHANGELOG.md | 4 ++++ project.clj | 1 + src/babashka/impl/classes.clj | 2 ++ test/babashka/interop_test.clj | 16 ++++++++++++++++ 4 files changed, 23 insertions(+) create mode 100644 test/babashka/interop_test.clj diff --git a/CHANGELOG.md b/CHANGELOG.md index e39c4230..91854b2f 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 + +- [#1507](https://github.com/babashka/babashka/issues/1507): Expose methods on java.lang.VirtualThread ([@lispyclouds](https://github.com/lispyclouds)) + ## 1.2.174 (2023-03-01) - Use GraalVM 22.3.1 on JDK 19.0.2. This adds virtual thread support. See [demo](https://twitter.com/borkdude/status/1572222344684531717). diff --git a/project.clj b/project.clj index 495feb35..28d3110d 100644 --- a/project.clj +++ b/project.clj @@ -20,6 +20,7 @@ :windows (complement (some-fn :skip-windows :flaky)) :non-flaky (complement :flaky) :flaky :flaky} + :jvm-opts ["--enable-preview"] :dependencies [[org.clojure/clojure "1.11.1"] [borkdude/edamame "1.1.17"] [borkdude/graal.locking "0.0.2"] diff --git a/src/babashka/impl/classes.clj b/src/babashka/impl/classes.clj index f09b9e12..ce0dbd70 100644 --- a/src/babashka/impl/classes.clj +++ b/src/babashka/impl/classes.clj @@ -677,6 +677,8 @@ java.util.Iterator (instance? javax.crypto.SecretKey v) javax.crypto.SecretKey + (instance? java.lang.Thread v) + java.lang.Thread ;; keep commas for merge friendliness ,,,))) 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 new file mode 100644 index 00000000..ec42bc86 --- /dev/null +++ b/test/babashka/interop_test.clj @@ -0,0 +1,16 @@ +(ns babashka.interop-test + (:require + [babashka.test-utils :as test-utils] + [clojure.edn :as edn] + [clojure.test :as test :refer [deftest is testing]])) + +(defn bb [input & args] + (test-utils/normalize + (edn/read-string + {:readers *data-readers* + :eof nil} + (apply test-utils/bb (when (some? input) (str input)) (map str args))))) + +(deftest vthreads-test + (testing "can invoke methods on java.lang.VirtualThread" + (is (= "" (bb nil "(set-agent-send-off-executor! (java.util.concurrent.Executors/newVirtualThreadPerTaskExecutor)) @(future (.getName (Thread/currentThread)))")))))