Browse Source

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" <erik@hatcher.net>


git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@270054 13f79535-47bb-0310-9956-ffa450edef68
master
Peter Donald 23 years ago
parent
commit
4c8ebdb489
7 changed files with 55 additions and 17 deletions
  1. +28
    -0
      src/main/org/apache/tools/ant/Project.java
  2. +1
    -1
      src/main/org/apache/tools/ant/taskdefs/Checksum.java
  3. +1
    -1
      src/main/org/apache/tools/ant/taskdefs/ConditionTask.java
  4. +2
    -2
      src/main/org/apache/tools/ant/taskdefs/ExecTask.java
  5. +1
    -1
      src/main/org/apache/tools/ant/taskdefs/PathConvert.java
  6. +5
    -5
      src/main/org/apache/tools/ant/taskdefs/Property.java
  7. +17
    -7
      src/main/org/apache/tools/ant/taskdefs/Tstamp.java

+ 28
- 0
src/main/org/apache/tools/ant/Project.java View File

@@ -301,6 +301,7 @@ public class Project {
* <i>the immutability policy is not implemented at this level</i>
* @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.
* <i>the immutability policy <b>is</b> enforced at this level</i>
* @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);


+ 1
- 1
src/main/org/apache/tools/ant/taskdefs/Checksum.java View File

@@ -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());
}
}


+ 1
- 1
src/main/org/apache/tools/ant/taskdefs/ConditionTask.java View File

@@ -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);
}
}
}

+ 2
- 2
src/main/org/apache/tools/ant/taskdefs/ExecTask.java View File

@@ -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());
}
}



+ 1
- 1
src/main/org/apache/tools/ant/taskdefs/PathConvert.java View File

@@ -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 );
}

/**


+ 5
- 5
src/main/org/apache/tools/ant/taskdefs/Property.java View File

@@ -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);
}
}



+ 17
- 7
src/main/org/apache/tools/ant/taskdefs/Tstamp.java View File

@@ -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));
}
}
}

Loading…
Cancel
Save