1.1 --- a/src/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java Fri Jun 26 19:12:41 2009 -0700 1.2 +++ b/src/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java Fri Jun 26 19:47:12 2009 -0700 1.3 @@ -50,6 +50,7 @@ 1.4 import javax.tools.JavaFileObject; 1.5 import javax.tools.DiagnosticListener; 1.6 1.7 +import com.sun.source.util.AbstractTypeProcessor; 1.8 import com.sun.source.util.TaskEvent; 1.9 import com.sun.source.util.TaskListener; 1.10 import com.sun.tools.javac.api.JavacTaskImpl; 1.11 @@ -58,6 +59,7 @@ 1.12 import com.sun.tools.javac.file.JavacFileManager; 1.13 import com.sun.tools.javac.jvm.*; 1.14 import com.sun.tools.javac.main.JavaCompiler; 1.15 +import com.sun.tools.javac.main.JavaCompiler.CompileState; 1.16 import com.sun.tools.javac.model.JavacElements; 1.17 import com.sun.tools.javac.model.JavacTypes; 1.18 import com.sun.tools.javac.parser.*; 1.19 @@ -93,6 +95,7 @@ 1.20 private final boolean lint; 1.21 private final boolean procOnly; 1.22 private final boolean fatalErrors; 1.23 + private boolean foundTypeProcessors; 1.24 1.25 private final JavacFiler filer; 1.26 private final JavacMessager messager; 1.27 @@ -153,6 +156,7 @@ 1.28 options.get("-Xprint") != null; 1.29 fatalErrors = options.get("fatalEnterError") != null; 1.30 platformAnnotations = initPlatformAnnotations(); 1.31 + foundTypeProcessors = false; 1.32 1.33 // Initialize services before any processors are initialzied 1.34 // in case processors use them. 1.35 @@ -670,6 +674,7 @@ 1.36 } 1.37 1.38 if (matchedNames.size() > 0 || ps.contributed) { 1.39 + foundTypeProcessors = foundTypeProcessors || (ps.processor instanceof AbstractTypeProcessor); 1.40 boolean processingResult = callProcessor(ps.processor, typeElements, renv); 1.41 ps.contributed = true; 1.42 ps.removeSupportedOptions(unmatchedProcessorOptions); 1.43 @@ -916,7 +921,7 @@ 1.44 compiler.log.nerrors += messager.errorCount(); 1.45 if (compiler.errorCount() == 0) 1.46 compiler.log.nerrors++; 1.47 - } else if (procOnly) { 1.48 + } else if (procOnly && !foundTypeProcessors) { 1.49 compiler.todo.clear(); 1.50 } else { // Final compilation 1.51 compiler.close(false); 1.52 @@ -924,6 +929,8 @@ 1.53 this.context = currentContext; 1.54 updateProcessingState(currentContext, true); 1.55 compiler = JavaCompiler.instance(currentContext); 1.56 + if (procOnly && foundTypeProcessors) 1.57 + compiler.shouldStopPolicy = CompileState.FLOW; 1.58 1.59 if (true) { 1.60 compiler.enterTrees(cleanTrees(roots));