diff --git a/java/compiler/compile-server/src/org/jetbrains/jpsservice/Bootstrap.java b/java/compiler/compile-server/src/org/jetbrains/jpsservice/Bootstrap.java index 1e1aea268cfa..172e169cc0d1 100644 --- a/java/compiler/compile-server/src/org/jetbrains/jpsservice/Bootstrap.java +++ b/java/compiler/compile-server/src/org/jetbrains/jpsservice/Bootstrap.java @@ -51,7 +51,8 @@ public class Bootstrap { name.startsWith("gant")|| name.startsWith("groovy") || name.startsWith("javac2") || - name.startsWith("util") + name.startsWith("util") || + name.startsWith("trove") ); if (shouldAdd) { cp.add(file); diff --git a/java/compiler/compile-server/src/org/jetbrains/jpsservice/impl/JpsServerMessageHandler.java b/java/compiler/compile-server/src/org/jetbrains/jpsservice/impl/JpsServerMessageHandler.java index da7376fbf234..d311abeedc1b 100644 --- a/java/compiler/compile-server/src/org/jetbrains/jpsservice/impl/JpsServerMessageHandler.java +++ b/java/compiler/compile-server/src/org/jetbrains/jpsservice/impl/JpsServerMessageHandler.java @@ -9,6 +9,8 @@ import org.jetbrains.jps.server.*; import org.jetbrains.jpsservice.JpsRemoteProto; import org.jetbrains.jpsservice.Server; +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ExecutorService; @@ -180,9 +182,26 @@ public class JpsServerMessageHandler extends SimpleChannelHandler { error = e; } finally { - final JpsRemoteProto.Message lastMessage = error != null? - ProtoUtil.toMessage(mySessionId, ProtoUtil.createFailure("build failed: ", error)) : - ProtoUtil.toMessage(mySessionId, ProtoUtil.createBuildCompletedEvent("build completed")); + final JpsRemoteProto.Message lastMessage; + if (error != null) { + Throwable cause = error.getCause(); + if (cause == null) { + cause = error; + } + final ByteArrayOutputStream out = new ByteArrayOutputStream(); + cause.printStackTrace(new PrintStream(out)); + + final StringBuilder messageText = new StringBuilder(); + messageText.append("JPS Internal error: (").append(cause.getClass().getName()).append(") ").append(cause.getMessage()); + final String trace = out.toString(); + if (!trace.isEmpty()) { + messageText.append("\n").append(trace); + } + lastMessage = ProtoUtil.toMessage(mySessionId, ProtoUtil.createFailure(messageText.toString(), cause)); + } + else { + lastMessage = ProtoUtil.toMessage(mySessionId, ProtoUtil.createBuildCompletedEvent("build completed")); + } Channels.write(myChannelContext.getChannel(), lastMessage).addListener(new ChannelFutureListener() { public void operationComplete(ChannelFuture future) throws Exception { diff --git a/lib/jps-facade.jar b/lib/jps-facade.jar index 424b4ae7e42c..cad92dce7403 100644 Binary files a/lib/jps-facade.jar and b/lib/jps-facade.jar differ diff --git a/lib/rt/jps-incremental/jps.jar b/lib/rt/jps-incremental/jps.jar index 4a9d7c0b61c3..f29f44d065e7 100644 Binary files a/lib/rt/jps-incremental/jps.jar and b/lib/rt/jps-incremental/jps.jar differ diff --git a/lib/rt/jps-incremental/src/jps-sources.zip b/lib/rt/jps-incremental/src/jps-sources.zip index d9c0114976eb..ef133ff3e6f0 100644 Binary files a/lib/rt/jps-incremental/src/jps-sources.zip and b/lib/rt/jps-incremental/src/jps-sources.zip differ diff --git a/lib/rt/jps-incremental/trove4j.jar b/lib/rt/jps-incremental/trove4j.jar new file mode 100644 index 000000000000..8f3c6a7f8438 Binary files /dev/null and b/lib/rt/jps-incremental/trove4j.jar differ diff --git a/lib/rt/jps-incremental/util.jar b/lib/rt/jps-incremental/util.jar index bc108f4e6fbf..3493e322a6d0 100644 Binary files a/lib/rt/jps-incremental/util.jar and b/lib/rt/jps-incremental/util.jar differ diff --git a/lib/rt/required_for_dist.txt b/lib/rt/required_for_dist.txt index dfc37b046ab4..d928269ee93f 100644 --- a/lib/rt/required_for_dist.txt +++ b/lib/rt/required_for_dist.txt @@ -9,3 +9,4 @@ jps-incremental/jps-gwt.jar jps-incremental/jps-javaee.jar jps-incremental/jps-jpa.jar jps-incremental/util.jar +jps-incremental/trove4j.jar