Backporting trunk conflict-resolution from r4488 merge. This change should not be merged up into trunk.
git-svn-id: https://google-web-toolkit.googlecode.com/svn/releases/1.6@4489 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/src/com/google/gwt/dev/CompilePerms.java b/dev/core/src/com/google/gwt/dev/CompilePerms.java
index b2e7072..87f4b3a 100644
--- a/dev/core/src/com/google/gwt/dev/CompilePerms.java
+++ b/dev/core/src/com/google/gwt/dev/CompilePerms.java
@@ -172,22 +172,19 @@
/**
* Compile a single permutation.
+ *
+ * @throws UnableToCompleteException if the permutation compile fails
*/
public static PermutationResult compile(TreeLogger logger,
- Permutation permutation, UnifiedAst unifiedAst) {
- try {
- final String js = JavaToJavaScriptCompiler.compilePermutation(logger,
- unifiedAst, permutation.getRebindAnswers());
- return new PermutationResult() {
- public String getJs() {
- return js;
- }
- };
- } catch (UnableToCompleteException e) {
- // We intentionally don't pass in the exception here since the real
- // cause has been logged.
- return null;
- }
+ Permutation permutation, UnifiedAst unifiedAst)
+ throws UnableToCompleteException {
+ final String js = JavaToJavaScriptCompiler.compilePermutation(logger,
+ unifiedAst, permutation.getRebindAnswers());
+ return new PermutationResult() {
+ public String getJs() {
+ return js;
+ }
+ };
}
/**
diff --git a/dev/core/src/com/google/gwt/dev/CompilePermsServer.java b/dev/core/src/com/google/gwt/dev/CompilePermsServer.java
index ac4cc42..3f080f8 100644
--- a/dev/core/src/com/google/gwt/dev/CompilePermsServer.java
+++ b/dev/core/src/com/google/gwt/dev/CompilePermsServer.java
@@ -16,6 +16,7 @@
package com.google.gwt.dev;
import com.google.gwt.core.ext.TreeLogger;
+import com.google.gwt.core.ext.UnableToCompleteException;
import com.google.gwt.core.ext.TreeLogger.Type;
import com.google.gwt.dev.jjs.UnifiedAst;
import com.google.gwt.dev.util.arg.ArgHandlerLogLevel;
@@ -290,10 +291,22 @@
Permutation p = (Permutation) in.readObject();
logger.log(TreeLogger.SPAM, "Permutation read");
- PermutationResult result = CompilePerms.compile(logger.branch(
- TreeLogger.DEBUG, "Compiling"), p, ast);
- logger.log(TreeLogger.DEBUG, "Successfully compiled permutation");
- out.writeObject(result);
+ Throwable caught = null;
+ try {
+ PermutationResult result = CompilePerms.compile(logger.branch(
+ TreeLogger.DEBUG, "Compiling"), p, ast);
+ out.writeObject(result);
+ out.flush();
+ logger.log(TreeLogger.DEBUG, "Successfully compiled permutation");
+ return;
+ } catch (UnableToCompleteException e) {
+ caught = e;
+ } catch (Throwable e) {
+ logger.log(TreeLogger.ERROR, "Compile failed", e);
+ caught = e;
+ }
+
+ out.writeObject(caught);
out.flush();
logger.log(TreeLogger.SPAM, "Sent result");
}
diff --git a/dev/core/src/com/google/gwt/dev/ExternalPermutationWorkerFactory.java b/dev/core/src/com/google/gwt/dev/ExternalPermutationWorkerFactory.java
index 137144d..a039d07 100644
--- a/dev/core/src/com/google/gwt/dev/ExternalPermutationWorkerFactory.java
+++ b/dev/core/src/com/google/gwt/dev/ExternalPermutationWorkerFactory.java
@@ -141,7 +141,13 @@
out.writeBoolean(true);
out.writeObject(permutation);
out.flush();
- return (PermutationResult) in.readObject();
+ Object result = in.readObject();
+ if (result instanceof Throwable) {
+ Throwable t = (Throwable) result;
+ logger.log(TreeLogger.ERROR, "Error from external worker", t);
+ throw new UnableToCompleteException();
+ }
+ return (PermutationResult) result;
} catch (IOException e) {
logger.log(TreeLogger.WARN, "Lost communication with remote process", e);
throw new TransientWorkerException(
diff --git a/dev/core/src/com/google/gwt/dev/PermutationWorker.java b/dev/core/src/com/google/gwt/dev/PermutationWorker.java
index 80e69cd..26afa3d 100644
--- a/dev/core/src/com/google/gwt/dev/PermutationWorker.java
+++ b/dev/core/src/com/google/gwt/dev/PermutationWorker.java
@@ -32,8 +32,7 @@
*
* @throws TransientWorkerException if the Permutation should be tried again
* on another worker
- * @throws UnableToCompleteException due to a fatal error
- * @return <code>null</code> if the compile failed
+ * @throws UnableToCompleteException if the compile fails for any reason
*/
PermutationResult compile(TreeLogger logger, Permutation permutation)
throws TransientWorkerException, UnableToCompleteException;
diff --git a/dev/core/src/com/google/gwt/dev/PermutationWorkerFactory.java b/dev/core/src/com/google/gwt/dev/PermutationWorkerFactory.java
index 507f9ba..ef828ac 100644
--- a/dev/core/src/com/google/gwt/dev/PermutationWorkerFactory.java
+++ b/dev/core/src/com/google/gwt/dev/PermutationWorkerFactory.java
@@ -70,15 +70,9 @@
TreeLogger logger = work.getLogger();
try {
PermutationResult result = worker.compile(logger, work.getPerm());
- if (result == null) {
- logger.log(TreeLogger.ERROR, "Compilation failed");
- return;
- } else {
- Util.writeObjectAsFile(logger, work.getResultFile(), result);
- logger.log(TreeLogger.DEBUG,
- "Successfully compiled permutation");
- resultsQueue.put(Result.SUCCESS);
- }
+ Util.writeObjectAsFile(logger, work.getResultFile(), result);
+ logger.log(TreeLogger.DEBUG, "Successfully compiled permutation");
+ resultsQueue.put(Result.SUCCESS);
} catch (TransientWorkerException e) {
logger.log(TreeLogger.DEBUG,
"Worker died, will retry Permutation", e);