Skip to content

Commit 279b6fa

Browse files
committed
8073844: fatal annotation processing errors do not stop compilation
JavacProcessingEnvironment lets the should-stop policy decide when the compilation should stop. Reviewed-by: jjg
1 parent c58a8aa commit 279b6fa

File tree

5 files changed

+76
-6
lines changed

5 files changed

+76
-6
lines changed

langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1336,8 +1336,7 @@ public boolean doProcessing(List<JCCompilationUnit> roots,
13361336

13371337
errorStatus = errorStatus || (compiler.errorCount() > 0);
13381338

1339-
if (!errorStatus)
1340-
round.finalCompiler();
1339+
round.finalCompiler();
13411340

13421341
if (newSourceFiles.size() > 0)
13431342
roots = roots.appendList(compiler.parseFiles(newSourceFiles));
@@ -1350,10 +1349,8 @@ public boolean doProcessing(List<JCCompilationUnit> roots,
13501349
if (!taskListener.isEmpty())
13511350
taskListener.finished(new TaskEvent(TaskEvent.Kind.ANNOTATION_PROCESSING));
13521351

1353-
if (errorStatus) {
1354-
if (compiler.errorCount() == 0)
1355-
compiler.log.nerrors++;
1356-
return true;
1352+
if (errorStatus && compiler.errorCount() == 0) {
1353+
compiler.log.nerrors++;
13571354
}
13581355

13591356
compiler.enterTreesIfNeeded(roots);
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
/*
2+
* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
3+
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4+
*
5+
* This code is free software; you can redistribute it and/or modify it
6+
* under the terms of the GNU General Public License version 2 only, as
7+
* published by the Free Software Foundation.
8+
*
9+
* This code is distributed in the hope that it will be useful, but WITHOUT
10+
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11+
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12+
* version 2 for more details (a copy is included in the LICENSE file that
13+
* accompanied this code).
14+
*
15+
* You should have received a copy of the GNU General Public License version
16+
* 2 along with this work; if not, write to the Free Software Foundation,
17+
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18+
*
19+
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20+
* or visit www.oracle.com if you need additional information or have any
21+
* questions.
22+
*/
23+
24+
/*
25+
* @test
26+
* @bug 8073844
27+
* @summary If an error is produced by an annotation processor, the code should not be Attred, \
28+
* unless requested
29+
* @modules jdk.compiler
30+
* @compile StopAfterError.java
31+
* @compile/fail/ref=StopAfterError.out -XDrawDiagnostics -processor StopAfterError StopAfterErrorAux.java
32+
* @compile/fail/ref=StopAfterError.out -XDshould-stop.ifError=PROCESS -XDrawDiagnostics -processor StopAfterError StopAfterErrorAux.java
33+
* @compile/fail/ref=StopAfterErrorContinue.out -XDshould-stop.ifError=ATTR -XDrawDiagnostics -processor StopAfterError StopAfterErrorAux.java
34+
*/
35+
36+
import java.util.Set;
37+
38+
import javax.annotation.processing.AbstractProcessor;
39+
import javax.annotation.processing.RoundEnvironment;
40+
import javax.annotation.processing.SupportedAnnotationTypes;
41+
import javax.lang.model.SourceVersion;
42+
import javax.lang.model.element.TypeElement;
43+
import javax.tools.Diagnostic.Kind;
44+
45+
@SupportedAnnotationTypes("*")
46+
public class StopAfterError extends AbstractProcessor {
47+
48+
@Override
49+
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
50+
if (roundEnv.processingOver()) {
51+
processingEnv.getMessager().printMessage(Kind.ERROR, "Stop!");
52+
}
53+
return false;
54+
}
55+
56+
@Override
57+
public SourceVersion getSupportedSourceVersion() {
58+
return SourceVersion.latestSupported();
59+
}
60+
61+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
- compiler.err.proc.messager: Stop!
2+
1 error
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
/* /nodynamiccopyright/ */
2+
class StopAfterErrorAux {
3+
public void test() {
4+
should not; get here;
5+
}
6+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
- compiler.err.proc.messager: Stop!
2+
StopAfterErrorAux.java:4:9: compiler.err.cant.resolve.location: kindname.class, should, , , (compiler.misc.location: kindname.class, StopAfterErrorAux, null)
3+
StopAfterErrorAux.java:4:21: compiler.err.cant.resolve.location: kindname.class, get, , , (compiler.misc.location: kindname.class, StopAfterErrorAux, null)
4+
3 errors

0 commit comments

Comments
 (0)