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
*/