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"); + } + }