diff --git a/src/main/org/apache/tools/ant/Project.java b/src/main/org/apache/tools/ant/Project.java
index 0a378d9fc..6499aa1bf 100644
--- a/src/main/org/apache/tools/ant/Project.java
+++ b/src/main/org/apache/tools/ant/Project.java
@@ -301,6 +301,7 @@ public class Project {
* the immutability policy is not implemented at this level
* @param name name of property
* @param value new value of the property
+ * @deprecated use, set setNewProperty
*/
public void setProperty(String name, String value) {
// command line properties take precedence
@@ -308,6 +309,33 @@ public class Project {
log("Override ignored for user property " + name, MSG_VERBOSE);
return;
}
+
+ if (null != properties.get(name)) {
+ log("DEPRECATED - Project.setProperty('" + name + "','" + value + "') used " +
+ "to overide an immutable property. Task writer should use Project.setNewProperty() " +
+ "instead and the build writer should not reuse the same property name for " +
+ "different values.");
+ }
+
+ log("Setting project property: " + name + " -> " +
+ value, MSG_DEBUG);
+ properties.put(name, value);
+ }
+
+ /**
+ * set a property. Any existing property of the same name
+ * is overwritten, unless it is a user property.
+ * the immutability policy is enforced at this level
+ * @param name name of property
+ * @param value new value of the property
+ * @since 1.5
+ */
+ public void setNewProperty(String name, String value) {
+ // command line properties take precedence
+ if (null != properties.get(name)) {
+ log("Override ignored for property " + name, MSG_VERBOSE);
+ return;
+ }
log("Setting project property: " + name + " -> " +
value, MSG_DEBUG);
properties.put(name, value);
diff --git a/src/main/org/apache/tools/ant/taskdefs/Checksum.java b/src/main/org/apache/tools/ant/taskdefs/Checksum.java
index 1a2ead14a..25d4ce396 100644
--- a/src/main/org/apache/tools/ant/taskdefs/Checksum.java
+++ b/src/main/org/apache/tools/ant/taskdefs/Checksum.java
@@ -193,7 +193,7 @@ public class Checksum extends MatchingTask implements Condition {
public void execute() throws BuildException {
boolean value = validateAndExecute();
if (verifyProperty != null) {
- project.setProperty(verifyProperty,
+ project.setNewProperty(verifyProperty,
new Boolean(value).toString());
}
}
diff --git a/src/main/org/apache/tools/ant/taskdefs/ConditionTask.java b/src/main/org/apache/tools/ant/taskdefs/ConditionTask.java
index da8f9ff4d..9296e88bc 100644
--- a/src/main/org/apache/tools/ant/taskdefs/ConditionTask.java
+++ b/src/main/org/apache/tools/ant/taskdefs/ConditionTask.java
@@ -104,7 +104,7 @@ public class ConditionTask extends ConditionBase {
}
Condition c = (Condition) getConditions().nextElement();
if (c.eval()) {
- getProject().setProperty(property, value);
+ getProject().setNewProperty(property, value);
}
}
}
diff --git a/src/main/org/apache/tools/ant/taskdefs/ExecTask.java b/src/main/org/apache/tools/ant/taskdefs/ExecTask.java
index c2625c964..70244adfe 100644
--- a/src/main/org/apache/tools/ant/taskdefs/ExecTask.java
+++ b/src/main/org/apache/tools/ant/taskdefs/ExecTask.java
@@ -196,7 +196,7 @@ public class ExecTask extends Task {
String res=Integer.toString(result);
if(resultProperty!=null
&& project.getProperty(resultProperty) == null) {
- project.setProperty(resultProperty,res);
+ project.setNewProperty(resultProperty,res);
}
}
@@ -306,7 +306,7 @@ public class ExecTask extends Task {
}
val.append(line);
}
- project.setProperty(outputprop, val.toString());
+ project.setNewProperty(outputprop, val.toString());
}
}
diff --git a/src/main/org/apache/tools/ant/taskdefs/PathConvert.java b/src/main/org/apache/tools/ant/taskdefs/PathConvert.java
index 16222bdb9..a01fb8e64 100644
--- a/src/main/org/apache/tools/ant/taskdefs/PathConvert.java
+++ b/src/main/org/apache/tools/ant/taskdefs/PathConvert.java
@@ -280,7 +280,7 @@ public class PathConvert extends Task {
log( "Set property " + property + " = " + value, Project.MSG_VERBOSE );
- getProject().setProperty( property, value );
+ getProject().setNewProperty( property, value );
}
/**
diff --git a/src/main/org/apache/tools/ant/taskdefs/Property.java b/src/main/org/apache/tools/ant/taskdefs/Property.java
index 95ead748e..f12bd409e 100644
--- a/src/main/org/apache/tools/ant/taskdefs/Property.java
+++ b/src/main/org/apache/tools/ant/taskdefs/Property.java
@@ -160,6 +160,9 @@ public class Property extends Task {
createClasspath().setRefid(r);
}
+ /**
+ * @deprecated
+ */
public void setUserProperty(boolean userProperty) {
this.userProperty = userProperty;
}
@@ -284,17 +287,14 @@ public class Property extends Task {
protected void addProperty(String n, String v) {
if( userProperty ) {
+ log("DEPRECATED - Setting user properties through the Property task has been deprecated.");
if (project.getUserProperty(n) == null) {
project.setUserProperty(n, v);
} else {
log("Override ignored for " + n, Project.MSG_VERBOSE);
}
} else {
- if (project.getProperty(n) == null) {
- project.setProperty(n, v);
- } else {
- log("Override ignored for " + n, Project.MSG_VERBOSE);
- }
+ project.setNewProperty(n, v);
}
}
diff --git a/src/main/org/apache/tools/ant/taskdefs/Tstamp.java b/src/main/org/apache/tools/ant/taskdefs/Tstamp.java
index dd887a6bf..31ab4d3fa 100644
--- a/src/main/org/apache/tools/ant/taskdefs/Tstamp.java
+++ b/src/main/org/apache/tools/ant/taskdefs/Tstamp.java
@@ -80,19 +80,27 @@ import java.text.SimpleDateFormat;
public class Tstamp extends Task {
private Vector customFormats = new Vector();
+ private String prefix = "";
+
+ public void setPrefix(String prefix) {
+ this.prefix = prefix;
+ if (!this.prefix.endsWith(".")) {
+ this.prefix += ".";
+ }
+ }
public void execute() throws BuildException {
try {
Date d = new Date();
SimpleDateFormat dstamp = new SimpleDateFormat ("yyyyMMdd");
- project.setProperty("DSTAMP", dstamp.format(d));
+ project.setNewProperty(prefix + "DSTAMP", dstamp.format(d));
SimpleDateFormat tstamp = new SimpleDateFormat ("HHmm");
- project.setProperty("TSTAMP", tstamp.format(d));
+ project.setNewProperty(prefix + "TSTAMP", tstamp.format(d));
SimpleDateFormat today = new SimpleDateFormat ("MMMM d yyyy", Locale.US);
- project.setProperty("TODAY", today.format(d));
+ project.setNewProperty(prefix + "TODAY", today.format(d));
Enumeration i = customFormats.elements();
while(i.hasMoreElements()) {
@@ -107,7 +115,7 @@ public class Tstamp extends Task {
public CustomFormat createFormat()
{
- CustomFormat cts = new CustomFormat();
+ CustomFormat cts = new CustomFormat(prefix);
customFormats.addElement(cts);
return cts;
}
@@ -122,14 +130,16 @@ public class Tstamp extends Task {
private String variant;
private int offset = 0;
private int field = Calendar.DATE;
+ private String prefix="";
- public CustomFormat()
+ public CustomFormat(String prefix)
{
+ this.prefix = prefix;
}
public void setProperty(String propertyName)
{
- this.propertyName = propertyName;
+ this.propertyName = prefix + propertyName;
}
public void setPattern(String pattern)
@@ -227,7 +237,7 @@ public class Tstamp extends Task {
if (timeZone != null){
sdf.setTimeZone(timeZone);
}
- project.setProperty(propertyName, sdf.format(date));
+ project.setNewProperty(propertyName, sdf.format(date));
}
}
}