diff options
author | Laurent Le Brun <laurentlb@google.com> | 2015-09-10 11:37:32 +0000 |
---|---|---|
committer | Damien Martin-Guillerez <dmarting@google.com> | 2015-09-11 09:45:17 +0000 |
commit | 6e5eecb1d7a25f8f38a2aed681621be91db7fd0f (patch) | |
tree | 26cac04c22a8c4ddf788af5ba9517d81c7d29112 /src/main/java/com | |
parent | 4aa2912d12dbcede9bf74397a4269499fc153fd4 (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.java | 4 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/syntax/EvalExceptionWithStackTrace.java | 15 |
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); } /** |