Skip to content

Commit 1b578f4

Browse files
mensindagnodet
authored andcommitted
Parse and forward JavaC 'Note:' level messages
Theses messages can be generated by annotation processors using `printMessage(Diagnostic.Kind.NOTE, "...")`.
1 parent 7c0d27d commit 1b578f4

File tree

6 files changed

+90
-34
lines changed

6 files changed

+90
-34
lines changed

plexus-compiler-test/src/main/java/org/codehaus/plexus/compiler/AbstractCompilerTest.java

+57-21
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import org.apache.maven.artifact.versioning.VersionRange;
4444
import org.apache.maven.settings.Settings;
4545
import org.apache.maven.settings.io.xpp3.SettingsXpp3Reader;
46+
import org.codehaus.plexus.compiler.CompilerMessage.Kind;
4647
import org.codehaus.plexus.testing.PlexusTest;
4748
import org.codehaus.plexus.util.FileUtils;
4849
import org.codehaus.plexus.util.ReaderFactory;
@@ -144,25 +145,24 @@ public void testCompilingSources() throws Exception {
144145

145146
int numCompilerErrors = compilerErrorCount(messages);
146147

147-
int numCompilerWarnings = messages.size() - numCompilerErrors;
148+
int numCompilerWarnings = compilerWarningCount(messages);
148149

149-
int expectedErrors = expectedErrors();
150+
int numCompilerNotes = compilerNoteCount(messages);
150151

152+
int expectedErrors = expectedErrors();
151153
if (expectedErrors != numCompilerErrors) {
152154
System.out.println(numCompilerErrors + " error(s) found:");
153155
List<String> errors = new ArrayList<>();
154-
for (CompilerMessage error : messages) {
155-
if (!error.isError()) {
156+
for (CompilerMessage msg : messages) {
157+
if (msg.getKind() != Kind.ERROR) {
156158
continue;
157159
}
158-
159160
System.out.println("----");
160-
System.out.println(error.getFile());
161-
System.out.println(error.getMessage());
161+
System.out.println(msg.getFile());
162+
System.out.println(msg.getMessage());
162163
System.out.println("----");
163-
errors.add(error.getMessage());
164+
errors.add(msg.getMessage());
164165
}
165-
166166
assertThat(
167167
"Wrong number of compilation errors (" + numCompilerErrors + "/" + expectedErrors //
168168
+ ") : " + displayLines(errors),
@@ -174,18 +174,16 @@ public void testCompilingSources() throws Exception {
174174
if (expectedWarnings != numCompilerWarnings) {
175175
List<String> warnings = new ArrayList<>();
176176
System.out.println(numCompilerWarnings + " warning(s) found:");
177-
for (CompilerMessage error : messages) {
178-
if (error.isError()) {
177+
for (CompilerMessage msg : messages) {
178+
if (msg.getKind() != Kind.WARNING && msg.getKind() != Kind.MANDATORY_WARNING) {
179179
continue;
180180
}
181-
182181
System.out.println("----");
183-
System.out.println(error.getFile());
184-
System.out.println(error.getMessage());
182+
System.out.println(msg.getFile());
183+
System.out.println(msg.getMessage());
185184
System.out.println("----");
186-
warnings.add(error.getMessage());
185+
warnings.add(msg.getMessage());
187186
}
188-
189187
assertThat(
190188
"Wrong number ("
191189
+ numCompilerWarnings + "/" + expectedWarnings + ") of compilation warnings: "
@@ -194,6 +192,28 @@ public void testCompilingSources() throws Exception {
194192
is(expectedWarnings));
195193
}
196194

195+
int expectedNotes = expectedNotes();
196+
if (expectedNotes != numCompilerNotes) {
197+
List<String> notes = new ArrayList<>();
198+
System.out.println(numCompilerWarnings + " notes(s) found:");
199+
for (CompilerMessage msg : messages) {
200+
if (msg.getKind() != Kind.NOTE) {
201+
continue;
202+
}
203+
System.out.println("----");
204+
System.out.println(msg.getFile());
205+
System.out.println(msg.getMessage());
206+
System.out.println("----");
207+
notes.add(msg.getMessage());
208+
}
209+
assertThat(
210+
"Wrong number ("
211+
+ numCompilerNotes + "/" + expectedNotes + ") of compilation notes: "
212+
+ displayLines(notes),
213+
numCompilerNotes,
214+
is(expectedNotes));
215+
}
216+
197217
assertThat(
198218
files, containsInAnyOrder(normalizePaths(expectedOutputFiles()).toArray(new String[0])));
199219
}
@@ -269,14 +289,26 @@ private List<String> normalizePaths(Collection<String> relativePaths) {
269289
.collect(Collectors.toList());
270290
}
271291

272-
protected int compilerErrorCount(List<CompilerMessage> messages) {
273-
int count = 0;
292+
private int compilerErrorCount(List<CompilerMessage> messages) {
293+
return countKind(messages, Kind.ERROR);
294+
}
295+
296+
private int compilerWarningCount(List<CompilerMessage> messages) {
297+
return messages.size() - (compilerErrorCount(messages) + compilerNoteCount(messages));
298+
}
299+
300+
private int compilerNoteCount(List<CompilerMessage> messages) {
301+
return countKind(messages, Kind.NOTE);
302+
}
274303

304+
private int countKind(List<CompilerMessage> messages, Kind kind) {
305+
int c = 0;
275306
for (CompilerMessage message : messages) {
276-
count += message.isError() ? 1 : 0;
307+
if (message.getKind() == kind) {
308+
c++;
309+
}
277310
}
278-
279-
return count;
311+
return c;
280312
}
281313

282314
protected int expectedErrors() {
@@ -287,6 +319,10 @@ protected int expectedWarnings() {
287319
return 0;
288320
}
289321

322+
protected int expectedNotes() {
323+
return 0;
324+
}
325+
290326
protected Collection<String> expectedOutputFiles() {
291327
return Collections.emptyList();
292328
}

plexus-compilers/plexus-compiler-javac-errorprone/src/test/java/org/codehaus/plexus/compiler/javac/JavacErrorProneCompilerTest.java

+13-3
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,11 @@ protected int expectedWarnings() {
1717
String javaVersion = getJavaVersion();
1818
if (javaVersion.startsWith("1.8")) {
1919
return 1;
20-
} else if (javaVersion.contains("18") || javaVersion.contains("19") || javaVersion.contains("20")) {
20+
} else if (javaVersion.contains("18")
21+
|| javaVersion.contains("19")
22+
|| javaVersion.contains("20")
23+
|| javaVersion.contains("21")) {
2124
return 5;
22-
} else if (javaVersion.contains("21")) {
23-
return 6;
2425
}
2526
return 2;
2627
}
@@ -30,6 +31,15 @@ protected int expectedErrors() {
3031
return 1;
3132
}
3233

34+
@Override
35+
protected int expectedNotes() {
36+
String javaVersion = getJavaVersion();
37+
if (javaVersion.contains("21")) {
38+
return 1;
39+
}
40+
return 0;
41+
}
42+
3343
@Override
3444
public String getSourceVersion() {
3545
return "1.8";

plexus-compilers/plexus-compiler-javac/src/main/java/org/codehaus/plexus/compiler/javac/JavacCompiler.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -697,7 +697,7 @@ static List<CompilerMessage> parseModernStream(int exitCode, BufferedReader inpu
697697
} else if ((buffer.length() == 0) && line.startsWith("warning: ")) {
698698
errors.add(new CompilerMessage(line, CompilerMessage.Kind.WARNING));
699699
} else if ((buffer.length() == 0) && isNote(line)) {
700-
// skip, JDK 1.5 telling us deprecated APIs are used but -Xlint:deprecation isn't set
700+
errors.add(new CompilerMessage(line, CompilerMessage.Kind.NOTE));
701701
} else if ((buffer.length() == 0) && isMisc(line)) {
702702
// verbose output was set
703703
errors.add(new CompilerMessage(line, CompilerMessage.Kind.OTHER));

plexus-compilers/plexus-compiler-javac/src/test/java/org/codehaus/plexus/compiler/javac/AbstractJavacCompilerTest.java

+9
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,15 @@ protected int expectedWarnings() {
110110
return 2;
111111
}
112112

113+
@Override
114+
protected int expectedNotes() {
115+
String javaVersion = getJavaVersion();
116+
if (javaVersion.contains("21")) {
117+
return 7;
118+
}
119+
return 0;
120+
}
121+
113122
@Override
114123
public String getTargetVersion() {
115124
String javaVersion = getJavaVersion();

plexus-compilers/plexus-compiler-javac/src/test/java/org/codehaus/plexus/compiler/javac/ErrorMessageParserTest.java

+10
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,16 @@ public void testErrorMessage() {
116116
assertThat(compilerError.getEndLine(), is(7));
117117
}
118118

119+
@Test
120+
public void testNoteMessage() throws IOException {
121+
String error = "Note: My fancy annotation processor info" + EOL;
122+
List<CompilerMessage> messages =
123+
JavacCompiler.parseModernStream(0, new BufferedReader(new StringReader(error)));
124+
assertThat(messages.size(), is(1));
125+
assertThat(messages.get(0).isError(), is(false));
126+
assertThat(messages.get(0).getMessage(), is("My fancy annotation processor info"));
127+
}
128+
119129
@Test
120130
public void testUnknownSymbolError() {
121131
String error = "./org/codehaus/foo/UnknownSymbol.java:7: cannot find symbol" + EOL + "symbol : method foo()"

plexus-compilers/plexus-compiler-javac/src/test/java/org/codehaus/plexus/compiler/javac/JavaxToolsCompilerTest.java

-9
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,4 @@
2424
public class JavaxToolsCompilerTest extends AbstractJavacCompilerTest {
2525
// no op default is to javax.tools if available
2626

27-
@Override
28-
protected int expectedWarnings() {
29-
String javaVersion = getJavaVersion();
30-
if (javaVersion.contains("21")) {
31-
return 8;
32-
} else {
33-
return super.expectedWarnings();
34-
}
35-
}
3627
}

0 commit comments

Comments
 (0)