aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com
diff options
context:
space:
mode:
authorGravatar Laurent Le Brun <laurentlb@google.com>2015-09-10 11:37:32 +0000
committerGravatar Damien Martin-Guillerez <dmarting@google.com>2015-09-11 09:45:17 +0000
commit6e5eecb1d7a25f8f38a2aed681621be91db7fd0f (patch)
tree26cac04c22a8c4ddf788af5ba9517d81c7d29112 /src/main/java/com
parent4aa2912d12dbcede9bf74397a4269499fc153fd4 (diff)
Preserve the original location in EvalExceptionWithStackTrace
-- MOS_MIGRATED_REVID=102744198
Diffstat (limited to 'src/main/java/com')
-rw-r--r--src/main/java/com/google/devtools/build/lib/syntax/EvalException.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/syntax/EvalExceptionWithStackTrace.java15
2 files changed, 17 insertions, 2 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/EvalException.java b/src/main/java/com/google/devtools/build/lib/syntax/EvalException.java
index e7073bb158..186153e5b2 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/EvalException.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/EvalException.java
@@ -21,6 +21,7 @@ import com.google.devtools.build.lib.events.Location;
import com.google.devtools.build.lib.util.LoggingUtil;
import java.util.logging.Level;
+import javax.annotation.Nullable;
/**
* Exceptions thrown during evaluation of BUILD ASTs or Skylark extensions.
@@ -34,7 +35,7 @@ import java.util.logging.Level;
*/
public class EvalException extends Exception {
- private Location location;
+ @Nullable private Location location;
private final String message;
private final boolean dueToIncompleteAST;
@@ -133,6 +134,7 @@ public class EvalException extends Exception {
/**
* Returns the location of the evaluation error.
*/
+ @Nullable
public Location getLocation() {
return location;
}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/EvalExceptionWithStackTrace.java b/src/main/java/com/google/devtools/build/lib/syntax/EvalExceptionWithStackTrace.java
index 82ca835ccd..8688465aab 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/EvalExceptionWithStackTrace.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/EvalExceptionWithStackTrace.java
@@ -14,6 +14,7 @@
package com.google.devtools.build.lib.syntax;
import com.google.common.base.Joiner;
+import com.google.common.base.MoreObjects;
import com.google.common.base.Preconditions;
import com.google.devtools.build.lib.events.Location;
import com.google.devtools.build.lib.packages.Rule;
@@ -30,7 +31,19 @@ public class EvalExceptionWithStackTrace extends EvalException {
private StackTraceElement mostRecentElement;
public EvalExceptionWithStackTrace(Exception original, Location callLocation) {
- super(callLocation, getNonEmptyMessage(original), getCause(original));
+ super(
+ originalLocation(original, callLocation), getNonEmptyMessage(original), getCause(original));
+ }
+
+ /**
+ * Returns the location of the {@code original} exception, or {@code callLocation}
+ * if there's none.
+ */
+ private static Location originalLocation(Exception original, Location callLocation) {
+ if (!(original instanceof EvalException)) {
+ return callLocation;
+ }
+ return MoreObjects.firstNonNull(((EvalException) original).getLocation(), callLocation);
}
/**