Browse Source

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
master
Stefan Bodewig 17 years ago
parent
commit
c4ab43e8d7
2 changed files with 44 additions and 4 deletions
  1. +5
    -0
      WHATSNEW
  2. +39
    -4
      src/main/org/apache/tools/ant/listener/BigProjectLogger.java

+ 5
- 0
WHATSNEW View File

@@ -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:
--------------



+ 39
- 4
src/main/org/apache/tools/ant/listener/BigProjectLogger.java View File

@@ -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);
}
}
}
}
}

Loading…
Cancel
Save