Browse Source

Changes to <ant>

do not call the "" target (it gets run anyway)
   allow duplicate params with the same name, last
     param will be used.

Test cases for above


git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@275212 13f79535-47bb-0310-9956-ffa450edef68
master
Peter Reilly 22 years ago
parent
commit
2ae23a6a4b
4 changed files with 45 additions and 5 deletions
  1. +3
    -0
      src/etc/testcases/taskdefs/ant.topleveltest.xml
  2. +16
    -0
      src/etc/testcases/taskdefs/ant.xml
  3. +18
    -5
      src/main/org/apache/tools/ant/taskdefs/Ant.java
  4. +8
    -0
      src/testcases/org/apache/tools/ant/taskdefs/AntTest.java

+ 3
- 0
src/etc/testcases/taskdefs/ant.topleveltest.xml View File

@@ -0,0 +1,3 @@
<project>
<echo>Hello world</echo>
</project>

+ 16
- 0
src/etc/testcases/taskdefs/ant.xml View File

@@ -169,4 +169,20 @@

<target name="middleman" depends="infinite-loop-via-depends"/>
<target name="dependent" depends="middleman"/>
<target name="multi-same-property">
<ant antfile="ant.xml" target="echo-for-multi-same">
<property name="prop" value="one"/>
<property name="prop" value="two"/>
</ant>
</target>

<target name="echo-for-multi-same">
<echo>prop is ${prop}</echo>
</target>

<target name="topleveltarget">
<ant antfile="ant.topleveltest.xml"/>
</target>

</project>

+ 18
- 5
src/main/org/apache/tools/ant/taskdefs/Ant.java View File

@@ -62,6 +62,8 @@ import java.lang.reflect.Method;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Vector;
import java.util.Set;
import java.util.HashSet;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.BuildListener;
import org.apache.tools.ant.DefaultLogger;
@@ -393,10 +395,10 @@ public class Ant extends Task {
throw new BuildException(getTaskName() + " task calling "
+ "its own parent target.");
} else {
Target other =
Target other =
(Target) getProject().getTargets().get(target);
if (other != null && other.dependsOn(owningTargetName)) {
throw new BuildException(getTaskName()
throw new BuildException(getTaskName()
+ " task calling a target"
+ " that depends on"
+ " its parent target \'"
@@ -409,9 +411,9 @@ public class Ant extends Task {
addReferences();

if (target != null) {
newProject.executeTarget(target);
} else {
newProject.executeTarget("");
if (!"".equals(target)) {
newProject.executeTarget(target);
}
}
} finally {
// help the gc
@@ -441,6 +443,17 @@ public class Ant extends Task {
* @throws BuildException under unknown circumstances
*/
private void overrideProperties() throws BuildException {
// remove duplicate properties - last property wins
// Needed for backward compatibility
Set set = new HashSet();
for (int i = properties.size() - 1; i >= 0; --i) {
Property p = (Property) properties.get(i);
if (set.contains(p.getName())) {
properties.remove(i);
} else {
set.add(p.getName());
}
}
Enumeration e = properties.elements();
while (e.hasMoreElements()) {
Property p = (Property) e.nextElement();


+ 8
- 0
src/testcases/org/apache/tools/ant/taskdefs/AntTest.java View File

@@ -306,6 +306,14 @@ public class AntTest extends BuildFileTest {
expectBuildException("infinite-loop-via-depends", "recursive call");
}

public void testMultiSameProperty() {
expectLog("multi-same-property", "prop is two");
}

public void testTopLevelTarget() {
expectLog("topleveltarget", "Hello world");
}
private class BasedirChecker implements BuildListener {
private String[] expectedBasedirs;
private int calls = 0;


Loading…
Cancel
Save