Browse Source

Add nested <propertyset>s to <ant>, <antcall> and <subant>.

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@274561 13f79535-47bb-0310-9956-ffa450edef68
master
Stefan Bodewig 22 years ago
parent
commit
56d0ca9a29
5 changed files with 97 additions and 17 deletions
  1. +19
    -0
      src/etc/testcases/taskdefs/ant.xml
  2. +44
    -16
      src/main/org/apache/tools/ant/taskdefs/Ant.java
  3. +12
    -0
      src/main/org/apache/tools/ant/taskdefs/CallTarget.java
  4. +14
    -0
      src/main/org/apache/tools/ant/taskdefs/SubAnt.java
  5. +8
    -1
      src/testcases/org/apache/tools/ant/taskdefs/AntTest.java

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

@@ -143,4 +143,23 @@
<property name="test" value="5" />
<echo message="The value of test is ${test}" />
</target>

<target name="test-propertyset">
<property name="test1" value="1"/>
<property name="test2" value="2"/>
<propertyset id="set">
<propertyref name="test1"/>
<mapper type="glob" from="*" to="*.x"/>
</propertyset>
<ant antfile="ant.xml" target="echo-for-propertyset-test"
inheritall="false">
<propertyset refid="set"/>
</ant>
</target>

<target name="echo-for-propertyset-test">
<echo>test1 is ${test1}</echo>
<echo>test2 is ${test2}</echo>
<echo>test1.x is ${test1.x}</echo>
</target>
</project>

+ 44
- 16
src/main/org/apache/tools/ant/taskdefs/Ant.java View File

@@ -69,6 +69,7 @@ import org.apache.tools.ant.Project;
import org.apache.tools.ant.ProjectComponent;
import org.apache.tools.ant.ProjectHelper;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.types.PropertySet;
import org.apache.tools.ant.util.FileUtils;

/**
@@ -129,6 +130,9 @@ public class Ant extends Task {
/** The stream to which output is to be written. */
private PrintStream out = null;

/** the sets of properties to pass to the new project */
private Vector propertySets = new Vector();

/**
* If true, pass all properties to the new Ant project.
* Defaults to true.
@@ -264,23 +268,13 @@ public class Ant extends Task {

} else {
// set all properties from calling project
addAlmostAll(getProject().getProperties());
}

Hashtable props = getProject().getProperties();
e = props.keys();
while (e.hasMoreElements()) {
String arg = e.nextElement().toString();
if ("basedir".equals(arg) || "ant.file".equals(arg)) {
// basedir and ant.file get special treatment in execute()
continue;
}

String value = props.get(arg).toString();
// don't re-set user properties, avoid the warning message
if (newProject.getProperty(arg) == null){
// no user property
newProject.setNewProperty(arg, value);
}
}
e = propertySets.elements();
while (e.hasMoreElements()) {
PropertySet ps = (PropertySet) e.nextElement();
addAlmostAll(ps.getProperties());
}
}

@@ -550,6 +544,31 @@ public class Ant extends Task {
newProject.addReference(newKey, copy);
}

/**
* Copies all properties from the given table to the new project -
* ommiting those that have already been set in the new project as
* well as properties named basedir or ant.file.
*
* @since Ant 1.6
*/
private void addAlmostAll(Hashtable props) {
Enumeration e = props.keys();
while (e.hasMoreElements()) {
String key = e.nextElement().toString();
if ("basedir".equals(key) || "ant.file".equals(key)) {
// basedir and ant.file get special treatment in execute()
continue;
}

String value = props.get(key).toString();
// don't re-set user properties, avoid the warning message
if (newProject.getProperty(key) == null){
// no user property
newProject.setNewProperty(key, value);
}
}
}

/**
* The directory to use as a base directory for the new Ant project.
* Defaults to the current project's basedir, unless inheritall
@@ -617,6 +636,15 @@ public class Ant extends Task {
references.addElement(r);
}

/**
* Set of properties to pass to the new project.
*
* @since Ant 1.6
*/
public void addPropertyset(PropertySet ps) {
propertySets.addElement(ps);
}

/**
* Helper class that implements the nested &lt;reference&gt;
* element of &lt;ant&gt; and &lt;antcall&gt;.


+ 12
- 0
src/main/org/apache/tools/ant/taskdefs/CallTarget.java View File

@@ -166,6 +166,18 @@ public class CallTarget extends Task {
callee.addReference(r);
}

/**
* Set of properties to pass to the new project.
*
* @since Ant 1.6
*/
public void addPropertyset(org.apache.tools.ant.types.PropertySet ps) {
if (callee == null) {
init();
}
callee.addPropertyset(ps);
}

/**
* Target to execute, required.
*/


+ 14
- 0
src/main/org/apache/tools/ant/taskdefs/SubAnt.java View File

@@ -68,6 +68,7 @@ import org.apache.tools.ant.types.Path;
import org.apache.tools.ant.types.DirSet;
import org.apache.tools.ant.types.FileSet;
import org.apache.tools.ant.types.FileList;
import org.apache.tools.ant.types.PropertySet;
import org.apache.tools.ant.types.Reference;

import org.apache.tools.ant.taskdefs.Ant;
@@ -97,6 +98,7 @@ public class SubAnt

private Vector properties = new Vector();
private Vector references = new Vector();
private Vector propertySets = new Vector();

/**
* Runs the various sub-builds.
@@ -238,6 +240,14 @@ public class SubAnt
references.addElement(r);
}

/**
* Corresponds to <code>&lt;ant&gt;</code>'s
* nested <code>&lt;propertyset&gt;</code> element.
*/
public void addPropertyset(PropertySet ps) {
propertySets.addElement(ps);
}

/**
* Adds a directory set to the implicit build path.
* <p>
@@ -345,6 +355,10 @@ public class SubAnt
copyProperty(ant.createProperty(), (Property) i.nextElement());
}
for (Enumeration i = propertySets.elements(); i.hasMoreElements();) {
ant.addPropertyset((PropertySet) i.nextElement());
}
ant.setInheritRefs(inheritRefs);
for (Enumeration i = references.elements(); i.hasMoreElements();) {
ant.addReference((Ant.Reference) i.nextElement());


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

@@ -1,7 +1,7 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2000-2002 The Apache Software Foundation. All rights
* Copyright (c) 2000-2003 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -295,6 +295,13 @@ public class AntTest extends BuildFileTest {
"The value of test is 4");
}

public void testPropertySet() {
executeTarget("test-propertyset");
assertTrue(getLog().indexOf("test1 is ${test1}") > -1);
assertTrue(getLog().indexOf("test2 is ${test2}") > -1);
assertTrue(getLog().indexOf("test1.x is 1") > -1);
}

private class BasedirChecker implements BuildListener {
private String[] expectedBasedirs;
private int calls = 0;


Loading…
Cancel
Save