From 4c8ebdb4898358e956a8b82fd4c5b3d11b657746 Mon Sep 17 00:00:00 2001 From: Peter Donald Date: Fri, 30 Nov 2001 17:35:06 +0000 Subject: [PATCH] This patch forces property setting to follow the same rules as the rest of ant in most tasks. The few tasks where we have not forced immutability will instead get 3 line ugly warnings telling them that they should upgrade or not use the same property name etc. The reason for just warning them is backwards compatability. Submitted by: "Erik Hatcher" git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@270054 13f79535-47bb-0310-9956-ffa450edef68 --- src/main/org/apache/tools/ant/Project.java | 28 +++++++++++++++++++ .../apache/tools/ant/taskdefs/Checksum.java | 2 +- .../tools/ant/taskdefs/ConditionTask.java | 2 +- .../apache/tools/ant/taskdefs/ExecTask.java | 4 +-- .../tools/ant/taskdefs/PathConvert.java | 2 +- .../apache/tools/ant/taskdefs/Property.java | 10 +++---- .../org/apache/tools/ant/taskdefs/Tstamp.java | 24 +++++++++++----- 7 files changed, 55 insertions(+), 17 deletions(-) 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)); } } }