diff options
author | 2015-08-27 08:24:24 +0000 | |
---|---|---|
committer | 2015-08-27 14:45:15 +0000 | |
commit | 77303b435c443c48cd81cc0b0d4315ca8868fd22 (patch) | |
tree | 9057c062ce78cad948ef2ec07966624024fb2ab7 /src/main/java/com/google/devtools/build/lib/syntax | |
parent | 47107aad33695a040b0f771f0c09d66874c4d533 (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.java | 7 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/syntax/EvalExceptionWithStackTrace.java | 31 |
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(); + } } |