diff --git a/src/etc/testcases/taskdefs/property.xml b/src/etc/testcases/taskdefs/property.xml
index cc3fb771a..c46e21c73 100644
--- a/src/etc/testcases/taskdefs/property.xml
+++ b/src/etc/testcases/taskdefs/property.xml
@@ -21,4 +21,13 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/main/org/apache/tools/ant/taskdefs/Property.java b/src/main/org/apache/tools/ant/taskdefs/Property.java
index 9d8f68b9d..d8fde8506 100644
--- a/src/main/org/apache/tools/ant/taskdefs/Property.java
+++ b/src/main/org/apache/tools/ant/taskdefs/Property.java
@@ -86,6 +86,7 @@ public class Property extends Task {
protected Path classpath;
protected String env;
protected Reference ref;
+ protected String prefix;
protected boolean userProperty; // set read-only properties
@@ -124,6 +125,13 @@ public class Property extends Task {
public File getFile() {
return file;
}
+
+ public void setPrefix(String prefix) {
+ this.prefix = prefix;
+ if (!prefix.endsWith(".")) {
+ this.prefix += ".";
+ }
+ }
public void setRefid(Reference ref) {
this.ref = ref;
@@ -192,6 +200,10 @@ public class Property extends Task {
location);
}
}
+
+ if (file == null && resource == null && prefix != null) {
+ throw new BuildException("Prefix is only valid when loading from a file or resource", location);
+ }
if ((name != null) && (value != null)) {
addProperty(name, value);
@@ -298,6 +310,11 @@ public class Property extends Task {
String value = props.getProperty(name);
String v = project.replaceProperties(value);
+
+ if (prefix != null) {
+ name = prefix + name;
+ }
+
addProperty(name, v);
}
}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/PropertyTest.java b/src/testcases/org/apache/tools/ant/taskdefs/PropertyTest.java
index 04e6d1f8b..f0b497463 100644
--- a/src/testcases/org/apache/tools/ant/taskdefs/PropertyTest.java
+++ b/src/testcases/org/apache/tools/ant/taskdefs/PropertyTest.java
@@ -95,4 +95,21 @@ public class PropertyTest extends BuildFileTest {
expectLog("test4", "http.url is http://localhost:999");
}
+ public void testPrefixSuccess() {
+ executeTarget("prefix.success");
+ assertEquals("80", project.getProperty("server1.http.port"));
+ }
+
+ public void testPrefixFailure() {
+ try {
+ executeTarget("prefix.fail");
+ }
+ catch (BuildException e) {
+ assertEquals("Prefix allowed on non-resource/file load - ", true,
+ e.getMessage().indexOf("Prefix is only valid") != -1);
+ return;
+ }
+ fail("Did not throw exception on invalid use of prefix");
+ }
+
}