From 5cd2b189cd3ef92f9a0ffc0594e6d09217058f11 Mon Sep 17 00:00:00 2001 From: Eugene Zhuravlev Date: Thu, 5 Jul 2012 12:32:38 +0200 Subject: [PATCH] external build: support -proceedOnError option for Eclipse compiler --- .../intellij/compiler/impl/CompileDriver.java | 2 +- .../jps/incremental/CompileContext.java | 9 +++++++++ .../jps/incremental/java/JavaBuilder.java | 17 +++++++++++++---- 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/java/compiler/impl/src/com/intellij/compiler/impl/CompileDriver.java b/java/compiler/impl/src/com/intellij/compiler/impl/CompileDriver.java index 54ff62601367..c2dd7454d3e0 100644 --- a/java/compiler/impl/src/com/intellij/compiler/impl/CompileDriver.java +++ b/java/compiler/impl/src/com/intellij/compiler/impl/CompileDriver.java @@ -650,7 +650,7 @@ public class CompileDriver { new CompilerTask(myProject, compileInBackground, contentName, ApplicationManager.getApplication().isUnitTestMode()); StatusBar.Info.set("", myProject, "Compiler"); - if (useOutOfProcessBuild() && BuildManager.getInstance().rescanRequired(myProject)) { + if (useExtProcessBuild && BuildManager.getInstance().rescanRequired(myProject)) { // ensure the project model seen by build process is up-to-date myProject.save(); } diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/CompileContext.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/CompileContext.java index a044f91a5510..196ebbb5a881 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/CompileContext.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/CompileContext.java @@ -50,6 +50,7 @@ public class CompileContext extends UserDataHolderBase implements MessageHandler private float myDone = -1.0f; private EventDispatcher myListeners = EventDispatcher.create(BuildListener.class); private Map myAnnotationProcessingProfileMap; + private boolean myIsProceedOnErrors = false; public CompileContext(CompileScope scope, ProjectDescriptor pd, boolean isMake, @@ -82,6 +83,14 @@ public class CompileContext extends UserDataHolderBase implements MessageHandler return myProjectPaths; } + public boolean isProceedOnErrors() { + return myIsProceedOnErrors; + } + + public void setProceedOnErrors(boolean isProceedOnErrors) { + myIsProceedOnErrors = isProceedOnErrors; + } + public boolean isMake() { return myIsMake; } diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilder.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilder.java index 807a16612f15..3346cb92cead 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilder.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilder.java @@ -38,8 +38,7 @@ import org.jetbrains.jps.incremental.storage.BuildDataManager; import org.jetbrains.jps.incremental.storage.SourceToFormMapping; import org.jetbrains.jps.javac.*; -import javax.tools.Diagnostic; -import javax.tools.JavaFileObject; +import javax.tools.*; import java.io.*; import java.net.MalformedURLException; import java.net.ServerSocket; @@ -344,7 +343,7 @@ public class JavaBuilder extends ModuleLevelBuilder { if (!compiledOk && diagnosticSink.getErrorCount() == 0) { diagnosticSink.report(new PlainMessageDiagnostic(Diagnostic.Kind.ERROR, "Compilation failed: internal java compiler error")); } - if (diagnosticSink.getErrorCount() > 0) { + if (!context.isProceedOnErrors() && diagnosticSink.getErrorCount() > 0) { if (!compiledOk) { diagnosticSink.report(new PlainMessageDiagnostic(Diagnostic.Kind.OTHER, "Errors occurred while compiling module '" + chunkName + "'")); } @@ -771,7 +770,8 @@ public class JavaBuilder extends ModuleLevelBuilder { //options.add("-verbose"); final Project project = context.getProject(); final CompilerConfiguration compilerConfig = project.getCompilerConfiguration(); - final Map opts = useEclipseCompiler(context)? compilerConfig.getEclipseOptions() : compilerConfig.getJavacOptions(); + final boolean useEclipseCompiler = useEclipseCompiler(context); + final Map opts = useEclipseCompiler ? compilerConfig.getEclipseOptions() : compilerConfig.getJavacOptions(); final boolean debugInfo = !"false".equals(opts.get("DEBUGGING_INFO")); final boolean nowarn = "true".equals(opts.get("GENERATE_NO_WARNINGS")); final boolean deprecation = !"false".equals(opts.get("DEPRECATION")); @@ -808,6 +808,15 @@ public class JavaBuilder extends ModuleLevelBuilder { } } + if (useEclipseCompiler) { + for (String option : options) { + if (option.startsWith("-proceedOnError")) { + context.setProceedOnErrors(true); + break; + } + } + } + JAVAC_OPTIONS.set(context, options); JAVAC_VM_OPTIONS.set(context, vmOptions); }