bodewig     2005/03/17 07:13:09

  Modified:    src/main/org/apache/tools/ant/taskdefs Recorder.java
  Log:
  Clean up recorder map when subbuild finishes, PR 20053
  
  Revision  Changes    Path
  1.26      +99 -2     ant/src/main/org/apache/tools/ant/taskdefs/Recorder.java
  
  Index: Recorder.java
  ===================================================================
  RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/Recorder.java,v
  retrieving revision 1.25
  retrieving revision 1.26
  diff -u -r1.25 -r1.26
  --- Recorder.java     6 Jan 2005 17:22:44 -0000       1.25
  +++ Recorder.java     17 Mar 2005 15:13:09 -0000      1.26
  @@ -17,8 +17,10 @@
   package org.apache.tools.ant.taskdefs;
   
   import java.util.Hashtable;
  +import org.apache.tools.ant.BuildEvent;
   import org.apache.tools.ant.BuildException;
   import org.apache.tools.ant.Project;
  +import org.apache.tools.ant.SubBuildListener;
   import org.apache.tools.ant.Task;
   import org.apache.tools.ant.types.EnumeratedAttribute;
   
  @@ -40,7 +42,7 @@
    * @since Ant 1.4
    * @ant.task name="record" category="utility"
    */
  -public class Recorder extends Task {
  +public class Recorder extends Task implements SubBuildListener {
   
       //////////////////////////////////////////////////////////////////////
       // ATTRIBUTES
  @@ -66,6 +68,15 @@
       //////////////////////////////////////////////////////////////////////
       // CONSTRUCTORS / INITIALIZERS
   
  +    /**
  +     * Overridden so we can add the task as build listener.
  +     *
  +     * @since Ant 1.7
  +     */
  +    public void init() {
  +        getProject().addBuildListener(this);
  +    }
  +
       //////////////////////////////////////////////////////////////////////
       // ACCESSOR METHODS
   
  @@ -153,6 +164,7 @@
           RecorderEntry recorder = getRecorder(filename, getProject());
           // set the values on the recorder
           recorder.setMessageOutputLevel(loglevel);
  +        recorder.setEmacsMode(emacsMode);
           if (start != null) {
               if (start.booleanValue()) {
                   recorder.reopenFile();
  @@ -162,7 +174,6 @@
                   recorder.closeFile();
               }
           }
  -        recorder.setEmacsMode(emacsMode);
       }
   
       //////////////////////////////////////////////////////////////////////
  @@ -231,5 +242,91 @@
           return entry;
       }
   
  +    /**
  +     * Empty implementation required by SubBuildListener interface.
  +     *
  +     * @since Ant 1.7
  +     */
  +    public void buildStarted(BuildEvent event) {
  +    }
  +
  +    /**
  +     * Empty implementation required by SubBuildListener interface.
  +     *
  +     * @since Ant 1.7
  +     */
  +    public void subBuildStarted(BuildEvent event) {
  +    }
  +
  +    /**
  +     * Empty implementation required by SubBuildListener interface.
  +     *
  +     * @since Ant 1.7
  +     */
  +    public void targetStarted(BuildEvent event) {
  +    }
  +
  +    /**
  +     * Empty implementation required by SubBuildListener interface.
  +     *
  +     * @since Ant 1.7
  +     */
  +    public void targetFinished(BuildEvent event) {
  +    }
  +
  +    /**
  +     * Empty implementation required by SubBuildListener interface.
  +     *
  +     * @since Ant 1.7
  +     */
  +    public void taskStarted(BuildEvent event) {
  +    }
  +
  +    /**
  +     * Empty implementation required by SubBuildListener interface.
  +     *
  +     * @since Ant 1.7
  +     */
  +    public void taskFinished(BuildEvent event) {
  +    }
  +
  +    /**
  +     * Empty implementation required by SubBuildListener interface.
  +     *
  +     * @since Ant 1.7
  +     */
  +    public void messageLogged(BuildEvent event) {
  +    }
  +
  +    /**
  +     * Cleans recorder registry.
  +     *
  +     * @since Ant 1.7
  +     */
  +    public void buildFinished(BuildEvent event) {
  +        cleanup();
  +    }
  +
  +    /**
  +     * Cleans recorder registry, if this is the subbuild the task has
  +     * been created in.
  +     *
  +     * @since Ant 1.7
  +     */
  +    public void subBuildFinished(BuildEvent event) {
  +        if (event.getProject() == getProject()) {
  +            cleanup();
  +        }
  +    }
  +
  +    /**
  +     * cleans recorder registry and removes itself from BuildListener list.
  +     *
  +     * @since Ant 1.7
  +     */
  +    private void cleanup() {
  +        recorderEntries.clear();
  +        getProject().removeBuildListener(this);
  +    }
   }
   
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to