From f12aca5b440d96fc6b79546be69c47cb22f962a7 Mon Sep 17 00:00:00 2001 From: Stefan Bodewig Date: Tue, 18 Aug 2009 12:18:20 +0000 Subject: [PATCH] improve nested-record patch. PR 41368. Submitted by Gene-Sung Chung git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@805382 13f79535-47bb-0310-9956-ffa450edef68 --- CONTRIBUTORS | 1 + contributors.xml | 8 ++++++ .../taskdefs/recorder/rectest5.result | 1 + .../taskdefs/recorder/rectest6.result | 2 ++ src/etc/testcases/taskdefs/recorder2.xml | 4 +++ .../apache/tools/ant/taskdefs/Recorder.java | 25 ++++++++++--------- .../tools/ant/taskdefs/RecorderEntry.java | 9 +++++++ 7 files changed, 38 insertions(+), 12 deletions(-) diff --git a/CONTRIBUTORS b/CONTRIBUTORS index c716a4f25..ce7bc179b 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -102,6 +102,7 @@ Frederic Bothamy Frederic Lavigne Gary S. Weaver Gautam Guliani +Gene-Sung Chung Georges-Etienne Legendre Gero Vermaas Gerrit Riessen diff --git a/contributors.xml b/contributors.xml index 64844ca5b..eda08884f 100644 --- a/contributors.xml +++ b/contributors.xml @@ -434,6 +434,14 @@ Gautam Guliani + + Gene-Sung + Chung + + + Georges-Etienne + Legendre + Gero Vermaas diff --git a/src/etc/testcases/taskdefs/recorder/rectest5.result b/src/etc/testcases/taskdefs/recorder/rectest5.result index 1da3c5a8e..7f58ebf83 100644 --- a/src/etc/testcases/taskdefs/recorder/rectest5.result +++ b/src/etc/testcases/taskdefs/recorder/rectest5.result @@ -2,3 +2,4 @@ test6: [echo] some message6 + [echo] some message8 diff --git a/src/etc/testcases/taskdefs/recorder/rectest6.result b/src/etc/testcases/taskdefs/recorder/rectest6.result index 29bb451d7..c9ceb0b5d 100644 --- a/src/etc/testcases/taskdefs/recorder/rectest6.result +++ b/src/etc/testcases/taskdefs/recorder/rectest6.result @@ -1 +1,3 @@ [echo] some message6 + [echo] some message7 + [echo] some message8 diff --git a/src/etc/testcases/taskdefs/recorder2.xml b/src/etc/testcases/taskdefs/recorder2.xml index 01eeec3a8..92284c9bc 100644 --- a/src/etc/testcases/taskdefs/recorder2.xml +++ b/src/etc/testcases/taskdefs/recorder2.xml @@ -7,6 +7,10 @@ + + + + diff --git a/src/main/org/apache/tools/ant/taskdefs/Recorder.java b/src/main/org/apache/tools/ant/taskdefs/Recorder.java index 30ac27e05..44d5543ad 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Recorder.java +++ b/src/main/org/apache/tools/ant/taskdefs/Recorder.java @@ -18,6 +18,8 @@ package org.apache.tools.ant.taskdefs; import java.util.Hashtable; +import java.util.Iterator; +import java.util.Map; import org.apache.tools.ant.BuildEvent; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Project; @@ -64,7 +66,7 @@ public class Recorder extends Task implements SubBuildListener { private int loglevel = -1; /** Strip task banners if true. */ private boolean emacsMode = false; - /** The recorder entries keyed by Project. Each value is another Hashtable of filename to RecorderEntry. */ + /** The list of recorder entries. */ private static Hashtable recorderEntries = new Hashtable(); ////////////////////////////////////////////////////////////////////// @@ -203,12 +205,7 @@ public class Recorder extends Task implements SubBuildListener { */ protected RecorderEntry getRecorder(String name, Project proj) throws BuildException { - Hashtable entries = (Hashtable) recorderEntries.get(proj); - if (null == entries) { - entries = new Hashtable(); - recorderEntries.put(proj, entries); - } - Object o = entries.get(name); + Object o = recorderEntries.get(name); RecorderEntry entry; if (o == null) { @@ -221,7 +218,7 @@ public class Recorder extends Task implements SubBuildListener { entry.openFile(append.booleanValue()); } entry.setProject(proj); - entries.put(name, entry); + recorderEntries.put(name, entry); } else { entry = (RecorderEntry) o; } @@ -311,10 +308,14 @@ public class Recorder extends Task implements SubBuildListener { * @since Ant 1.7 */ private void cleanup() { - Hashtable entries = (Hashtable) recorderEntries.get(getProject()); - if (null != entries) { - entries.clear(); - recorderEntries.remove(entries); + Hashtable entries = (Hashtable) recorderEntries.clone(); + Iterator itEntries = entries.entrySet().iterator(); + while (itEntries.hasNext()) { + Map.Entry entry = (Map.Entry) itEntries.next(); + RecorderEntry re = (RecorderEntry) entry.getValue(); + if (re.getProject() == getProject()) { + recorderEntries.remove(entry.getKey()); + } } getProject().removeBuildListener(this); } diff --git a/src/main/org/apache/tools/ant/taskdefs/RecorderEntry.java b/src/main/org/apache/tools/ant/taskdefs/RecorderEntry.java index dbf1f1205..e42020780 100644 --- a/src/main/org/apache/tools/ant/taskdefs/RecorderEntry.java +++ b/src/main/org/apache/tools/ant/taskdefs/RecorderEntry.java @@ -298,6 +298,15 @@ public class RecorderEntry implements BuildLogger, SubBuildListener { } } + /** + * Get the project associated with this recorder entry. + * + * @since 1.8.0 + */ + public Project getProject() { + return project; + } + /** * @since 1.6.2 */