I would like to propose a new ANT task coding guideline.  I frequently need to 
allow my users to customize the ANT build via a build.properties file.  
Therefore, a lot of my ANT task usage has placeholders for the various 
different ant task attributes with variables, ${xxxx}.  The problem is that 
many ANT tasks are written such that specifying an attribute with an empty 
string has DIFFERENT behavior than not specifying that attribute at all.  I 
think this is a problem.  That causes my code to have to use <if> statements to 
check if ${xxxx} is set so that I can call the ANT task with or without the 
attribute specified.

Here is an example:

I wrote a macrodef called launchNative that would just call the <exec> task 
with optional parameters for spawn and resultproperty.  They are optional since 
I defaulted their values in the macrodef:

<attribute name="spawn" default="false"/>
<attribute name="resultproperty" default=""/>

In the actual call to <exec>, I had to put in the placeholders based on the 
parameters of the macrodef like:

<exec spawn="@{spawn}" resultproperty="@{resultproperty}"/>

Now if the user passes in a macrodef parameter of spawn="true", the <exec> call 
will fail even though resultproperty is defaulted to the empty string.  This is 
because the setter for resultproperty in the <exec> ant task does NOT check the 
input resultproperty value to detect the empty string and do nothing.  Instead 
it sets a flag stating it is not compatible with spawn and the <exec> task 
eventually fails.

In order for me to get around this, I would have to use an <if> to check the 
value of @{resultproperty} and call a separate invocation of <exec> without 
resultproperty specified.  This is frustrating.

Therefore, I propose that a new ANT task coding guideline be introduced such 
that all setters (where applicable) check the incoming values for null or empty 
strings and behave as if the setter was never called.

---
Shawn Castrianni

----------------------------------------------------------------------
This e-mail, including any attached files, may contain confidential and 
privileged information for the sole use of the intended recipient.  Any review, 
use, distribution, or disclosure by others is strictly prohibited.  If you are 
not the intended recipient (or authorized to receive information for the 
intended recipient), please contact the sender by reply e-mail and delete all 
copies of this message.

Reply via email to