1919import static java .util .stream .Collectors .toUnmodifiableList ;
2020
2121import io .github .ascopes .jct .compilers .JctCompilation ;
22- import io .github .ascopes .jct .diagnostics .TraceDiagnostic ;
2322import io .github .ascopes .jct .repr .DiagnosticListRepresentation ;
24- import java .util .List ;
25- import java .util .Set ;
26- import java .util .function .Predicate ;
27- import java .util .stream .Collectors ;
28- import java .util .stream .Stream ;
23+ import java .util .Collection ;
2924import javax .annotation .Nullable ;
3025import javax .tools .Diagnostic .Kind ;
3126import javax .tools .JavaFileManager .Location ;
4136 * @since 0.0.1
4237 */
4338@ API (since = "0.0.1" , status = Status .STABLE )
44- @ SuppressWarnings ("UnusedReturnValue" )
45- public final class JctCompilationAssert extends AbstractAssert <JctCompilationAssert , JctCompilation > {
46-
47- private static final Set <Kind > WARNING_DIAGNOSTIC_KINDS = Stream
48- .of (Kind .WARNING , Kind .MANDATORY_WARNING )
49- .collect (Collectors .toUnmodifiableSet ());
50-
51- private static final Set <Kind > ERROR_DIAGNOSTIC_KINDS = Stream
52- .of (Kind .ERROR )
53- .collect (Collectors .toUnmodifiableSet ());
54-
55- private static final Set <Kind > WARNING_AND_ERROR_DIAGNOSTIC_KINDS = Stream
56- .of (WARNING_DIAGNOSTIC_KINDS , ERROR_DIAGNOSTIC_KINDS )
57- .flatMap (Set ::stream )
58- .collect (Collectors .toUnmodifiableSet ());
39+ public final class JctCompilationAssert extends
40+ AbstractAssert <JctCompilationAssert , JctCompilation > {
5941
6042 /**
6143 * Initialize this compilation assertion.
@@ -79,17 +61,11 @@ public JctCompilationAssert isSuccessful() {
7961 // If we have error diagnostics, add them to the error message to provide helpful debugging
8062 // information. If we are treating warnings as errors, then we want to include those in this
8163 // as well.
82- Predicate <TraceDiagnostic <?>> isErrorDiagnostic = actual .isFailOnWarnings ()
83- ? diag -> WARNING_AND_ERROR_DIAGNOSTIC_KINDS .contains (diag .getKind ())
84- : diag -> ERROR_DIAGNOSTIC_KINDS .contains (diag .getKind ());
85-
86- var diagnostics = actual
87- .getDiagnostics ()
88- .stream ()
89- .filter (isErrorDiagnostic )
90- .collect (toUnmodifiableList ());
64+ var diagnosticKinds = actual .isFailOnWarnings ()
65+ ? DiagnosticKindAssert .WARNING_AND_ERROR_DIAGNOSTIC_KINDS
66+ : DiagnosticKindAssert .ERROR_DIAGNOSTIC_KINDS ;
9167
92- failWithDiagnostics (diagnostics , "Expected a successful compilation, but it failed." );
68+ failWithDiagnostics (diagnosticKinds , "Expected a successful compilation, but it failed." );
9369 }
9470
9571 return myself ;
@@ -122,13 +98,12 @@ public JctCompilationAssert isFailure() {
12298 isNotNull ();
12399
124100 if (actual .isSuccessful ()) {
125- var warnings = actual
126- .getDiagnostics ()
127- .stream ()
128- .filter (kind -> WARNING_DIAGNOSTIC_KINDS .contains (kind .getKind ()))
129- .collect (toUnmodifiableList ());
130-
131- failWithDiagnostics (warnings , "Expected compilation to fail, but it succeeded." );
101+ // If we have any warnings, we should show them in the error message as it might be useful
102+ // to the user.
103+ failWithDiagnostics (
104+ DiagnosticKindAssert .WARNING_DIAGNOSTIC_KINDS ,
105+ "Expected compilation to fail, but it succeeded."
106+ );
132107 }
133108
134109 return myself ;
@@ -314,10 +289,16 @@ public ModuleContainerGroupAssert modulePath() {
314289 }
315290
316291 private void failWithDiagnostics (
317- List <? extends TraceDiagnostic <?>> diagnostics ,
292+ Collection <? extends Kind > kindsToDisplay ,
318293 String message ,
319294 Object ... args
320295 ) {
296+ var diagnostics = actual
297+ .getDiagnostics ()
298+ .stream ()
299+ .filter (diagnostic -> kindsToDisplay .contains (diagnostic .getKind ()))
300+ .collect (toUnmodifiableList ());
301+
321302 if (diagnostics .isEmpty ()) {
322303 failWithMessage (message , args );
323304 } else {
0 commit comments