@@ -215,7 +215,11 @@ public class Ant extends Task {
}
}
// set user-defined properties
if (allowNativeBasedir) {
addAlmostAll(getProject().getUserProperties(), PropertyType.USER);
} else {
getProject().copyUserProperties(newProject);
}
if (!inheritAll) {
// set Ant's built-in properties separately,
@@ -224,13 +228,13 @@ public class Ant extends Task {
} else {
// set all properties from calling project
addAlmostAll(getProject().getProperties());
addAlmostAll(getProject().getProperties(), PropertyType.PLAIN );
}
Enumeration e = propertySets.elements();
while (e.hasMoreElements()) {
PropertySet ps = (PropertySet) e.nextElement();
addAlmostAll(ps.getProperties());
addAlmostAll(ps.getProperties(), PropertyType.PLAIN );
}
}
@@ -490,7 +494,12 @@ public class Ant extends Task {
p.setProject(newProject);
p.execute();
}
if (allowNativeBasedir) {
addAlmostAll(getProject().getInheritedProperties(),
PropertyType.INHERITED);
} else {
getProject().copyInheritedProperties(newProject);
}
}
/**
@@ -601,23 +610,32 @@ public class Ant extends Task {
* well as properties named basedir or ant.file.
* @param props properties <code>Hashtable</code> to copy to the
* new project.
* @since Ant 1.6
* @param the type of property to set (a plain Ant property, a
* user property or an inherited property).
* @since Ant 1.8.0
*/
private void addAlmostAll(Hashtable props) {
private void addAlmostAll(Hashtable props, PropertyType type ) {
Enumeration e = props.keys();
while (e.hasMoreElements()) {
String key = e.nextElement().toString();
if (MagicNames.PROJECT_BASEDIR.equals(key) || MagicNames.ANT_FILE.equals(key)) {
if (MagicNames.PROJECT_BASEDIR.equals(key)
|| MagicNames.ANT_FILE.equals(key)) {
// basedir and ant.file get special treatment in execute()
continue;
}
String value = props.get(key).toString();
if (type == PropertyType.PLAIN) {
// don't re-set user properties, avoid the warning message
if (newProject.getProperty(key) == null) {
// no user property
newProject.setNewProperty(key, value);
}
} else if (type == PropertyType.USER) {
newProject.setUserProperty(key, value);
} else if (type == PropertyType.INHERITED) {
newProject.setInheritedProperty(key, value);
}
}
}
@@ -801,4 +819,11 @@ public class Ant extends Task {
return name;
}
}
private static final class PropertyType {
private PropertyType() {}
private static final PropertyType PLAIN = new PropertyType();
private static final PropertyType INHERITED = new PropertyType();
private static final PropertyType USER = new PropertyType();
}
}