From 5bf5c8f8beeddbf2687d6d289761950d50b0e007 Mon Sep 17 00:00:00 2001 From: Eugene Zhuravlev Date: Thu, 2 Feb 2012 21:50:42 +0100 Subject: [PATCH] fail build if javac return code is 'false' --- .../jps/incremental/IncProjectBuilder.java | 11 ++++++----- .../jps/incremental/ProjectBuildException.java | 13 +++++++++++++ .../jetbrains/jps/incremental/java/JavaBuilder.java | 10 +++++++--- 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/IncProjectBuilder.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/IncProjectBuilder.java index 7ddfdc33a493..1c09deb3c4a4 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/IncProjectBuilder.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/IncProjectBuilder.java @@ -30,7 +30,7 @@ import java.util.concurrent.ExecutionException; public class IncProjectBuilder { private static final Logger LOG = Logger.getInstance("#org.jetbrains.jps.incremental.IncProjectBuilder"); - public static final String JPS_SERVER_NAME = "JPS BUILD"; + public static final String COMPILE_SERVER_NAME = "COMPILE SERVER"; private static final String CANCELED_MESSAGE = "The build has been canceled"; private final ProjectDescriptor myProjectDescriptor; @@ -75,7 +75,7 @@ public class IncProjectBuilder { catch (ProjectBuildException e) { if (e.getCause() instanceof PersistentEnumerator.CorruptedException) { // force rebuild - myMessageDispatcher.processMessage(new CompilerMessage(JPS_SERVER_NAME, BuildMessage.Kind.INFO, + myMessageDispatcher.processMessage(new CompilerMessage(COMPILE_SERVER_NAME, BuildMessage.Kind.INFO, "Internal caches are corrupted or have outdated format, forcing project rebuild: " + e.getMessage())); flushContext(context); @@ -90,10 +90,11 @@ public class IncProjectBuilder { catch (ProjectBuildException e) { final Throwable cause = e.getCause(); if (cause == null) { - myMessageDispatcher.processMessage(new ProgressMessage(e.getMessage())); + final BuildMessage msg = e.isError()? new CompilerMessage("", BuildMessage.Kind.ERROR, e.getMessage()) : new ProgressMessage(e.getMessage()); + myMessageDispatcher.processMessage(msg); } else { - myMessageDispatcher.processMessage(new CompilerMessage(JPS_SERVER_NAME, cause)); + myMessageDispatcher.processMessage(new CompilerMessage(COMPILE_SERVER_NAME, cause)); } } finally { @@ -241,7 +242,7 @@ public class IncProjectBuilder { } } else { - context.processMessage(new CompilerMessage(JPS_SERVER_NAME, BuildMessage.Kind.WARNING, "Output path " + + context.processMessage(new CompilerMessage(COMPILE_SERVER_NAME, BuildMessage.Kind.WARNING, "Output path " + outputRoot.getPath() + " intersects with a source root. The output cannot be cleaned.")); } diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/ProjectBuildException.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/ProjectBuildException.java index 7a18163aca91..8e8f3a03c4be 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/ProjectBuildException.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/ProjectBuildException.java @@ -5,20 +5,33 @@ package org.jetbrains.jps.incremental; * Date: 9/20/11 */ public class ProjectBuildException extends Exception{ + private final boolean myIsError; public ProjectBuildException() { + myIsError = false; } public ProjectBuildException(String message) { + this(message, false); + } + + public ProjectBuildException(String message, boolean isError) { super(message); + myIsError = isError; } public ProjectBuildException(String message, Throwable cause) { super(message, cause); + myIsError = true; } public ProjectBuildException(Throwable cause) { super(cause); + myIsError = true; + } + + public boolean isError() { + return myIsError; } @Override 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 152a5fca45e1..4acf4cde61de 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 @@ -282,11 +282,12 @@ public class JavaBuilder extends ModuleLevelBuilder { } if (!compiledOk && diagnosticSink.getErrorCount() == 0) { - throw new ProjectBuildException("Compilation failed: internal java compiler error"); + throw new ProjectBuildException("Compilation failed: internal java compiler error", true); } if (diagnosticSink.getErrorCount() > 0) { throw new ProjectBuildException( - "Compilation failed: errors: " + diagnosticSink.getErrorCount() + "; warnings: " + diagnosticSink.getWarningCount()); + "Compilation failed: errors: " + diagnosticSink.getErrorCount() + "; warnings: " + diagnosticSink.getWarningCount() + ); } } } @@ -719,7 +720,7 @@ public class JavaBuilder extends ModuleLevelBuilder { } public void outputLineAvailable(String line) { - if (line != null) { + if (!StringUtil.isEmpty(line)) { //System.err.println(line); if (line.startsWith("[") && line.endsWith("]")) { final String message = line.substring(1, line.length() - 1); @@ -735,6 +736,9 @@ public class JavaBuilder extends ModuleLevelBuilder { else if (line.contains("java.lang.OutOfMemoryError")) { myContext.processMessage(new CompilerMessage(BUILDER_NAME, BuildMessage.Kind.ERROR, "OutOfMemoryError: insufficient memory")); } + else { + myContext.processMessage(new CompilerMessage(BUILDER_NAME, BuildMessage.Kind.INFO, line)); + } } }