From c4ab43e8d76504c1398d062007d9d4d40511aaae Mon Sep 17 00:00:00 2001 From: Stefan Bodewig Date: Mon, 25 Aug 2008 14:23:23 +0000 Subject: [PATCH] defer self-generated subBuildStarted event until project instance has been configured and basedir has been set. PR 45607. git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@688732 13f79535-47bb-0310-9956-ffa450edef68 --- WHATSNEW | 5 +++ .../tools/ant/listener/BigProjectLogger.java | 43 +++++++++++++++++-- 2 files changed, 44 insertions(+), 4 deletions(-) diff --git a/WHATSNEW b/WHATSNEW index 6938e986a..a8266a6eb 100644 --- a/WHATSNEW +++ b/WHATSNEW @@ -166,6 +166,11 @@ Fixed bugs: contained the character '8'. Bugzilla Report 45675. + * If the buildfile's project element didn't contain any basedir + attribute, BigProjectLogger would set the project's basedir to the + current working directory. + Bugzilla Report 45607. + Other changes: -------------- diff --git a/src/main/org/apache/tools/ant/listener/BigProjectLogger.java b/src/main/org/apache/tools/ant/listener/BigProjectLogger.java index c21df3ca3..7f7c3d4cb 100644 --- a/src/main/org/apache/tools/ant/listener/BigProjectLogger.java +++ b/src/main/org/apache/tools/ant/listener/BigProjectLogger.java @@ -33,7 +33,11 @@ import java.io.File; * @since Ant1.7.1 */ -public class BigProjectLogger extends NoBannerLogger implements SubBuildListener { +public class BigProjectLogger extends NoBannerLogger + implements SubBuildListener { + + private volatile boolean subBuildStartedRaised = false; + private final Object subBuildLock = new Object(); /** * Header string for the log. @@ -69,15 +73,24 @@ public class BigProjectLogger extends NoBannerLogger implements SubBuildListener return super.getBuildSuccessfulMessage() + TimestampedLogger.SPACER + getTimestamp(); } + /** + * {@inheritDoc} + * + * @param event + */ + public void targetStarted(BuildEvent event) { + maybeRaiseSubBuildStarted(event); + super.targetStarted(event); + } /** * {@inheritDoc} * * @param event */ - public void buildStarted(BuildEvent event) { - super.buildStarted(event); - subBuildStarted(event); + public void taskStarted(BuildEvent event) { + maybeRaiseSubBuildStarted(event); + super.taskStarted(event); } /** @@ -86,10 +99,21 @@ public class BigProjectLogger extends NoBannerLogger implements SubBuildListener * @param event */ public void buildFinished(BuildEvent event) { + maybeRaiseSubBuildStarted(event); subBuildFinished(event); super.buildFinished(event); } + /** + * {@inheritDoc} + * + * @param event + */ + public void messageLogged(BuildEvent event) { + maybeRaiseSubBuildStarted(event); + super.messageLogged(event); + } + /** * Override point, extract the target name * @@ -173,4 +197,15 @@ public class BigProjectLogger extends NoBannerLogger implements SubBuildListener return FOOTER; } + private void maybeRaiseSubBuildStarted(BuildEvent event) { + // double checked locking should be OK since the flag is write-once + if (!subBuildStartedRaised) { + synchronized (subBuildLock) { + if (!subBuildStartedRaised) { + subBuildStartedRaised = true; + subBuildStarted(event); + } + } + } + } }