From 78f88a7c4a3ea7ea57dafbd2dd0bd3801b30588d Mon Sep 17 00:00:00 2001 From: "Jesse N. Glick" Date: Wed, 12 Aug 2009 23:16:08 +0000 Subject: [PATCH] #43398 revisited: display full stack traces for non-BuildException's, even inside . git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@803739 13f79535-47bb-0310-9956-ffa450edef68 --- WHATSNEW | 4 ++++ src/main/org/apache/tools/ant/DefaultLogger.java | 8 +++++++- .../org/apache/tools/ant/DefaultLoggerTest.java | 12 +++++++----- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/WHATSNEW b/WHATSNEW index df270d8a6..669c75ebf 100644 --- a/WHATSNEW +++ b/WHATSNEW @@ -148,6 +148,10 @@ Changes that could break older environments: Fixed bugs: ----------- +* The default logger was failing to print complete stack traces for exceptions + other than BuildException when inside or , thus omitting often + important diagnostic information. Bugzilla 43398 (continued). + * Better handling of package-info.class. Bugzilla Report 43114. * RPM task needed an inserted space between the define and the value. diff --git a/src/main/org/apache/tools/ant/DefaultLogger.java b/src/main/org/apache/tools/ant/DefaultLogger.java index 5342de706..16356c27f 100644 --- a/src/main/org/apache/tools/ant/DefaultLogger.java +++ b/src/main/org/apache/tools/ant/DefaultLogger.java @@ -133,7 +133,13 @@ public class DefaultLogger implements BuildLogger { static void throwableMessage(StringBuffer m, Throwable error, boolean verbose) { while (error instanceof BuildException) { // #43398 Throwable cause = ((BuildException) error).getCause(); - if (cause != null && cause.toString().equals(error.getMessage())) { + if (cause == null) { + break; + } + String msg1 = error.toString(); + String msg2 = cause.toString(); + if (msg1.endsWith(msg2)) { + m.append(msg1.substring(0, msg1.length() - msg2.length())); error = cause; } else { break; diff --git a/src/tests/junit/org/apache/tools/ant/DefaultLoggerTest.java b/src/tests/junit/org/apache/tools/ant/DefaultLoggerTest.java index 25eca7c47..37e264835 100644 --- a/src/tests/junit/org/apache/tools/ant/DefaultLoggerTest.java +++ b/src/tests/junit/org/apache/tools/ant/DefaultLoggerTest.java @@ -56,19 +56,21 @@ public class DefaultLoggerTest extends TestCase { w.println(" at p.C.m"); } }; - be = new BuildException(x); assertEquals( "problem\n" + " at p.C.m\n", + msg(x, false)); + be = new BuildException(x, new Location("build.xml", 1, 0)); + assertEquals( + "build.xml:1: problem\n" + + " at p.C.m\n", msg(be, false)); - /* XXX still broken: - be = ProjectHelper.addLocationToBuildException(be, new Location("build.xml", 1, 0)); + be = ProjectHelper.addLocationToBuildException(be, new Location("build.xml", 2, 0)); assertEquals( - "The following error occurred while executing this line:\n" + + "build.xml:2: The following error occurred while executing this line:\n" + "build.xml:1: problem\n" + " at p.C.m\n", msg(be, false)); - */ } }