aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/syntax
diff options
context:
space:
mode:
authorGravatar Florian Weikert <fwe@google.com>2015-08-27 08:24:24 +0000
committerGravatar Philipp Wollermann <philwo@google.com>2015-08-27 14:45:15 +0000
commit77303b435c443c48cd81cc0b0d4315ca8868fd22 (patch)
tree9057c062ce78cad948ef2ec07966624024fb2ab7 /src/main/java/com/google/devtools/build/lib/syntax
parent47107aad33695a040b0f771f0c09d66874c4d533 (diff)
Ensures that EvalExceptionWithStackTrace does not have an empty exception message.
-- MOS_MIGRATED_REVID=101659996
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/syntax')
-rw-r--r--src/main/java/com/google/devtools/build/lib/syntax/EvalException.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/syntax/EvalExceptionWithStackTrace.java31
2 files changed, 35 insertions, 3 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 32f289b180..0382079414 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
@@ -70,8 +70,11 @@ public class EvalException extends Exception {
if (message == null) {
message = "";
}
- if (cause != null && !message.contains(cause.getMessage())) {
- message = message + (message.isEmpty() ? "" : ": ") + cause.getMessage();
+ if (cause != null) {
+ String causeMsg = cause.getMessage();
+ if (causeMsg != null && !message.contains(causeMsg)) {
+ message = message + (message.isEmpty() ? "" : ": ") + causeMsg;
+ }
}
if (message.isEmpty()) {
LoggingUtil.logToRemote(Level.SEVERE, "Invalid EvalException", cause);
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 d967962229..d1baabc5fd 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
@@ -30,7 +30,7 @@ public class EvalExceptionWithStackTrace extends EvalException {
private StackTraceElement mostRecentElement;
public EvalExceptionWithStackTrace(Exception original, Location callLocation) {
- super(callLocation, original.getMessage(), original.getCause());
+ super(callLocation, getNonEmptyMessage(original), original.getCause());
}
/**
@@ -215,4 +215,33 @@ public class EvalExceptionWithStackTrace extends EvalException {
output.addLast(message);
}
}
+
+ /**
+ * Returns a non-empty message for the given exception.
+ *
+ * <p> If the exception itself does not have a message, a new message is constructed from the
+ * exception's class name.
+ * For example, an IllegalArgumentException will lead to "Illegal Argument".
+ */
+ private static String getNonEmptyMessage(Exception original) {
+ Preconditions.checkNotNull(original);
+ String msg = original.getMessage();
+ if (msg != null && !msg.isEmpty()) {
+ return msg;
+ }
+
+ char[] name = original.getClass().getSimpleName().replace("Exception", "").toCharArray();
+ boolean first = true;
+ StringBuilder builder = new StringBuilder();
+
+ for (char current : name) {
+ if (Character.isUpperCase(current) && !first) {
+ builder.append(" ");
+ }
+ builder.append(current);
+ first = false;
+ }
+
+ return builder.toString();
+ }
}