mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
build scripts: print stacktrace if build failed with an exception (e.g. internal error in compiler)
Ant don't print stacktrace of BuildException by default in org.apache.tools.ant.Main#startAnt so we need to print it manually (inspired by https://github.com/JetBrains/intellij-community/pull/819). Also it makes sense to show stacktrace as additional error details when running under TeamCity.
This commit is contained in:
+2
-1
@@ -37,6 +37,7 @@ import com.intellij.openapi.util.text.StringUtil
|
||||
import com.intellij.util.Processor
|
||||
import com.intellij.util.containers.MultiMap
|
||||
import groovy.transform.CompileStatic
|
||||
import org.apache.tools.ant.BuildException
|
||||
import org.jetbrains.annotations.NonNls
|
||||
import org.jetbrains.annotations.NotNull
|
||||
import org.jetbrains.annotations.Nullable
|
||||
@@ -194,7 +195,7 @@ class JpsCompilationRunner {
|
||||
Standalone.runBuild(loader, compilationData.dataStorageRoot, messageHandler, scopes, false)
|
||||
}
|
||||
catch (Throwable e) {
|
||||
context.messages.error("Compilation failed unexpectedly", e)
|
||||
throw new BuildException("Compilation failed unexpectedly", e)
|
||||
}
|
||||
}
|
||||
if (!messageHandler.errorMessagesByCompiler.isEmpty()) {
|
||||
|
||||
+4
-1
@@ -94,7 +94,10 @@ class BuildMessagesImpl implements BuildMessages {
|
||||
|
||||
@Override
|
||||
void error(String message, Throwable cause) {
|
||||
throw new BuildException(message, cause)
|
||||
def writer = new StringWriter()
|
||||
new PrintWriter(writer).withCloseable { cause.printStackTrace(it) }
|
||||
processMessage(new LogMessage(LogMessage.Kind.ERROR, "$message\n$writer"))
|
||||
throw new BuildException(message)
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+20
-5
@@ -34,10 +34,26 @@ class TeamCityBuildMessageLogger extends BuildMessageLogger {
|
||||
@Override
|
||||
void processMessage(LogMessage message) {
|
||||
switch (message.kind) {
|
||||
case LogMessage.Kind.ERROR:
|
||||
case LogMessage.Kind.WARNING:
|
||||
case LogMessage.Kind.INFO:
|
||||
logPlainMessage(message)
|
||||
logPlainMessage(message, "")
|
||||
break
|
||||
case LogMessage.Kind.WARNING:
|
||||
logPlainMessage(message, " status='WARNING'")
|
||||
break
|
||||
case LogMessage.Kind.ERROR:
|
||||
def messageText = message.text.trim()
|
||||
int lineEnd = messageText.indexOf('\n')
|
||||
String firstLine
|
||||
String details
|
||||
if (lineEnd != -1) {
|
||||
firstLine = messageText.substring(0, lineEnd)
|
||||
details = " errorDetails='${escape(messageText.substring(lineEnd + 1))}'"
|
||||
}
|
||||
else {
|
||||
firstLine = messageText
|
||||
details = ""
|
||||
}
|
||||
printTeamCityMessage("message", true, "text='${escape(firstLine)}'$details status='ERROR'")
|
||||
break
|
||||
case LogMessage.Kind.PROGRESS:
|
||||
printTeamCityMessage("progressMessage", false, "'${escape(message.text)}'")
|
||||
@@ -89,8 +105,7 @@ class TeamCityBuildMessageLogger extends BuildMessageLogger {
|
||||
}
|
||||
}
|
||||
|
||||
void logPlainMessage(LogMessage message) {
|
||||
String status = message.kind == LogMessage.Kind.WARNING ? " status='WARNING'" : ""
|
||||
void logPlainMessage(LogMessage message, String status) {
|
||||
if (parallelTaskId != null || !status.isEmpty()) {
|
||||
printTeamCityMessage("message", true, "text='${escape(message.text)}'$status")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user