diff --git a/deps.edn b/deps.edn index e9ee0a4..ac3792e 100644 --- a/deps.edn +++ b/deps.edn @@ -1,5 +1,6 @@ {:paths ["src"] :deps {org.clojure/clojure {:mvn/version "1.12.0" :mvn/scope "provided"} + org.clojure/tools.namespace {:mvn/version "1.5.0"} org.ow2.asm/asm {:mvn/version "9.7"}} :aliases diff --git a/src/virgil/compile.clj b/src/virgil/compile.clj index 48da47e..f52ecde 100644 --- a/src/virgil/compile.clj +++ b/src/virgil/compile.clj @@ -2,6 +2,7 @@ (:require [clojure.java.io :as io] [virgil.watch :as watch] + [clojure.tools.namespace.repl :refer (refresh-all)] [virgil.decompile :as decompile] [virgil.util :refer [print-diagnostics]] [clojure.string :as str]) @@ -154,6 +155,10 @@ (println "\nCompiling" (count name->source)"Java source files in" directories "...") (binding [*print-compiled-classes* verbose?] (compile-java options collector name->source)) + ;; We need to create a thread binding for *ns* so that + ;; refresh-all can use in-ns. + (binding [*ns* *ns*] + (refresh-all)) (when-let [diags (seq (.getDiagnostics collector))] (print-diagnostics diags) diags)))) diff --git a/test/virgil_test.clj b/test/virgil_test.clj index a36e67e..6073981 100644 --- a/test/virgil_test.clj +++ b/test/virgil_test.clj @@ -12,8 +12,6 @@ (println "Running on Clojure" (clojure-version)) (when v (is (clojure.string/starts-with? (clojure-version) v))))) -(def ^:dynamic *dir*) - (defn mk-tmp [] (.toFile (Files/createTempDirectory "virgil" (into-array FileAttribute [])))) @@ -22,8 +20,8 @@ c (Class/forName "virgil.B" false cl)] (eval `(. (new ~c) magicNumber)))) -(defn cp [file class] - (let [dest (io/file *dir* "virgil")] +(defn cp [dir file class] + (let [dest (io/file dir "virgil")] (.mkdir dest) (io/copy (io/file "test" (str file ".java")) (io/file dest (str class ".java"))))) @@ -37,11 +35,13 @@ (wait) (when-not (f) (recur (dec i)))))) -(defn recompile [] - (virgil/compile-java [(str *dir*)])) +(defn recompile [dir] + (virgil/compile-java [(str dir)])) (deftest manual-compile-test - (binding [*dir* (mk-tmp)] + (let [dir (mk-tmp) + recompile #(recompile dir) + cp #(cp dir %1 %2)] (cp "A" 'A) (cp "B" 'B) (recompile) @@ -83,15 +83,15 @@ (is (= 42 (magic-number))))) (deftest warnings-shouldnt-throw-test - (binding [*dir* (mk-tmp)] - (cp "ClassWithWarning" 'ClassWithWarning) - (is (nil? (recompile)))) + (let [dir (mk-tmp)] + (cp dir "ClassWithWarning" 'ClassWithWarning) + (is (nil? (recompile dir)))) - (binding [*dir* (mk-tmp)] - (cp "ClassWithError" 'ClassWithError) - (is (thrown? clojure.lang.ExceptionInfo (recompile))))) + (let [dir (mk-tmp)] + (cp dir "ClassWithError" 'ClassWithError) + (is (thrown? clojure.lang.ExceptionInfo (recompile dir))))) (deftest errors-shouldnt-break-watch-and-recompile-test - (binding [*dir* (mk-tmp)] - (cp "ClassWithError" 'ClassWithError) - (is (nil? (virgil/watch-and-recompile [(str *dir*)]))))) + (let [dir (mk-tmp)] + (cp dir "ClassWithError" 'ClassWithError) + (is (nil? (virgil/watch-and-recompile [(str dir)])))))