> From: peter reilly [mailto:[EMAIL PROTECTED] > > I would rather have Jose's idea of a <local-property/> > task. > > This could be used outside of macrodef. > > The only problem is the implementation. >
Indeed, there is an easy implementation but will not solve the case of <parallel>, because the local definition would really be a temporary global one: public class LocalProperty extends Sequential { private String property; private String oldValue; public setName(String i_property){property = i_property;} public void execute() { if (property == null) throw new BuildException("name attribute is mandatory"); try { oldValue = getProject().getProperty(property); getProject().setProperty(property, null); // This may need changes to core super.execute(); } finally { // This is using the deprecated setProperty method // that actually changes the properties even if set getProject().setProperty(property, oldValue); } } } Here we just change the property value on the project frame, for the duration of the task. And put the old value back before we leave. The problem with this simple implementation is that all the parallel branches will see the change, which is exactly what we were trying to avoid. To do it right, we would need to create a new execution frame that would be use in the "super" call. But if we do that (which is like what <ant> or <antcall> do), what happens if the user defines properties other than the local-property inside the code? Somehow, we would need to find them and propagate them back to the frame above upon exit. <local-property name="x"> <property name="y" value="myY"/> <local-property> <echo message="${y}"/> [echo] myY Doable, but not that easy anymore. What do you guys think? Jose Alberto > Peter > On Friday 17 October 2003 17:02, Shatzer, Larry wrote: > > Maybe allow <attribute> have another <attribute> that > allows it to be > > undeclared with default or passed in, so we can set it inside the > > macrodef, such as "newcurrent". > > > > Example: > > > > <macrodef name="recursive"> > > <attribute name="until"/> > > <attribute name="current"/> > > <attribute name="method"/> > > <attribute name="newcurrent" staticscope="true"/> > > ... > > </macrodef> > > > > Then when you call "recursive" such as this: <recursive until="10" > > current="0" method="blah"/> it won't die that you did not pass > > "newcurrent". > > > > the "staticscope" attribute name could be something else, or > > scope="static" and a list of others that could be used. > > > > -- Larry > > > > > -----Original Message----- > > > From: peter reilly [mailto:[EMAIL PROTECTED] > > > Sent: Friday, October 17, 2003 12:43 AM > > > To: Ant Developers List > > > Subject: Re: Macrodef and parallel in a recursive situation > > > > > > > > > The parellel would cause grief. > > > The problem is not the attribute, I think > > > but the "newcurrent" global "variable". > > > > > > On using macrodef, I have noticed that > > > it would be really cool to have a static scopped > > > variable. > > > > > > Peter > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]