Skip to content

Commit aad99ac

Browse files
Throw if compilation failed (#39)
* Throw if compilation failed * Refactor compilation errors handling --------- Co-authored-by: Oleksandr Yakushev <[email protected]>
1 parent 3f54e14 commit aad99ac

File tree

2 files changed

+9
-6
lines changed

2 files changed

+9
-6
lines changed

src/virgil/compile.clj

+6-3
Original file line numberDiff line numberDiff line change
@@ -148,10 +148,13 @@
148148
(defn compile-all-java
149149
([directories] (compile-all-java directories nil false))
150150
([directories options verbose?]
151-
(let [diag (DiagnosticCollector.)
151+
(let [collector (DiagnosticCollector.)
152152
options (ArrayList. (vec options))
153153
name->source (generate-classname->source directories)]
154154
(println "Compiling" (count name->source)"Java source files in" directories "...")
155155
(binding [*print-compiled-classes* verbose?]
156-
(compile-java options diag name->source))
157-
(print-diagnostics diag))))
156+
(compile-java options collector name->source))
157+
(when-let [diags (seq (.getDiagnostics collector))]
158+
(print-diagnostics diags)
159+
(throw (ex-info (format "Compilation failed: %d error(s)." (count diags))
160+
{:diagnostics diags}))))))

src/virgil/util.clj

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
(ns virgil.util
22
"Utilities for cross-tooling."
3-
(:import (javax.tools DiagnosticCollector Diagnostic$Kind)))
3+
(:import (javax.tools Diagnostic Diagnostic$Kind)))
44

55
(defn println-err [& args]
66
(binding [*out* *err*]
@@ -15,8 +15,8 @@
1515
Diagnostic$Kind/MANDATORY_WARNING println-err
1616
println))
1717

18-
(defn print-diagnostics [^DiagnosticCollector diag-coll]
19-
(doseq [d (.getDiagnostics diag-coll)]
18+
(defn print-diagnostics [diagnostics]
19+
(doseq [^Diagnostic d diagnostics]
2020
(let [k (.getKind d)
2121
log (infer-print-function k)]
2222
(if (nil? (.getSource d))

0 commit comments

Comments
 (0)