File tree 6 files changed +48
-7
lines changed
6 files changed +48
-7
lines changed Original file line number Diff line number Diff line change 2
2
(:require
3
3
[clojure.java.io :as io]
4
4
[virgil.watch :refer (watch-directory make-idle-callback)]
5
- [virgil.compile :refer (compile-all-java java-file?)]))
5
+ [virgil.compile :refer (compile-all-java java-file?)]
6
+ virgil.util))
6
7
7
8
(def watches (atom #{}))
8
9
9
10
(defn compile-java [directories & {:keys [options verbose]}]
10
- (compile-all-java directories options verbose))
11
+ (let [diags (compile-all-java directories options verbose)]
12
+ (when (virgil.util/compilation-errored? diags)
13
+ (throw (ex-info (format " Compilation failed: %d error(s)." (count diags))
14
+ {:diagnostics diags})))))
11
15
12
16
(defn watch-and-recompile [directories & {:keys [options verbose post-hook]}]
13
17
(let [recompile (fn []
Original file line number Diff line number Diff line change 151
151
(let [collector (DiagnosticCollector. )
152
152
options (ArrayList. (vec options))
153
153
name->source (generate-classname->source directories)]
154
- (println " Compiling " (count name->source)" Java source files in" directories " ..." )
154
+ (println " \n Compiling " (count name->source)" Java source files in" directories " ..." )
155
155
(binding [*print-compiled-classes* verbose?]
156
156
(compile-java options collector name->source))
157
157
(when-let [diags (seq (.getDiagnostics collector))]
158
158
(print-diagnostics diags)
159
- (throw (ex-info (format " Compilation failed: %d error(s)." (count diags))
160
- {:diagnostics diags}))))))
159
+ diags))))
Original file line number Diff line number Diff line change 20
20
(let [k (.getKind d)
21
21
log (infer-print-function k)]
22
22
(if (nil? (.getSource d))
23
- (println-err (format " %s: %s\n "
23
+ (println-err (format " %s: %s"
24
24
(.toString k)
25
25
(.getMessage d nil )))
26
- (println-err (format " %s: %s, line %d: %s\n "
26
+ (println-err (format " %s: %s, line %d: %s"
27
27
(.toString k)
28
28
(.. d getSource getName)
29
29
(.getLineNumber d)
30
30
(.getMessage d nil )))))))
31
+
32
+ (defn compilation-errored? [diagnostics]
33
+ (some #(= (.getKind ^Diagnostic %) Diagnostic$Kind/ERROR) diagnostics))
Original file line number Diff line number Diff line change
1
+ package virgil ;
2
+
3
+ import java .util .*;
4
+
5
+ public class ClassWithWarning {
6
+
7
+ public static void badReturn () {
8
+ return 1 + 2 ;
9
+ }
10
+ }
Original file line number Diff line number Diff line change
1
+ package virgil ;
2
+
3
+ import java .util .*;
4
+
5
+ public class ClassWithWarning {
6
+
7
+ public static void rawType () {
8
+ List list = new ArrayList ();
9
+ list .add ("Hello" );
10
+ }
11
+ }
Original file line number Diff line number Diff line change 81
81
(cp " B" 'B)
82
82
(wait-until-true #(= 42 (magic-number )))
83
83
(is (= 42 (magic-number )))))
84
+
85
+ (deftest warnings-shouldnt-throw-test
86
+ (binding [*dir* (mk-tmp )]
87
+ (cp " ClassWithWarning" 'ClassWithWarning)
88
+ (is (nil? (recompile ))))
89
+
90
+ (binding [*dir* (mk-tmp )]
91
+ (cp " ClassWithError" 'ClassWithError)
92
+ (is (thrown? clojure.lang.ExceptionInfo (recompile )))))
93
+
94
+ (deftest errors-shouldnt-break-watch-and-recompile-test
95
+ (binding [*dir* (mk-tmp )]
96
+ (cp " ClassWithError" 'ClassWithError)
97
+ (is (nil? (virgil/watch-and-recompile [(str *dir*)])))))
You can’t perform that action at this time.
0 commit comments