So far, I have got two +1 (myself and Jan Materne) for this proposal. The vote will be closed tomorrow at 12:28 pm CET (20 hours from now). Three +1s are required for a code change, so, by the likes of it, the vote will have a negative result.
The <antfetch/>, <antcallback/>, <call/> tasks of Antelope provide functionality in terms of returning properties. This <antreturn/> is also returning references, so it can bring something new, plus the ease for users who want to deploy ant, but no extra jars providing core functionality to ant. Since there are already tons of changes in ant 1.6 alpha, there can be some wisdom in refusing or postponing this change. And there is also enough work fixing small or large bugs in existing functionality. Cheers, Antoine ----- Original Message ----- From: "Antoine Levy-Lambert" <[EMAIL PROTECTED]> To: "Ant Developers List" <[EMAIL PROTECTED]> Sent: Friday, August 22, 2003 12:28 PM Subject: [VOTE] Ant/Antcall Returning properties and references [WAS] Re: ant 1.5.4 : Import > I think that the code of Dominique would add a lot of value to ant. > Instead of committing the code as is, I would like simply to add the new > features to the <ant/> task. > This means that it should be a no brainer to have these features then also > in <antcall/> > Can we vote about introducing it ? > I start with my +1 > Cheers, > Antoine > ----- Original Message ----- > From: "Dominique Devienne" <[EMAIL PROTECTED]> > To: "'Ant Developers List'" <[EMAIL PROTECTED]> > Sent: Thursday, July 24, 2003 5:36 PM > Subject: RE: ant 1.5.4 : Import > > > > Then have a look at what I did in the past two days to do something > similar > > ;-) I created an <antreturn> task that piggybacks on <ant>, and allows > > returning properties and/or references from the called build file back > into > > the caller's context (Project). > > > > That would take care of that use case ;-) --DD > > > > > -----Original Message----- > > > From: Conor MacNeill [mailto:[EMAIL PROTECTED] > > > Sent: Thursday, July 24, 2003 10:39 AM > > > To: Ant Developers List > > > Subject: Re: ant 1.5.4 : Import > > > > > > On Fri, 25 Jul 2003 01:23 am, Dominique Devienne wrote: > > > > > > > > I (strongly again ;) believe that imported build files should be > > > designed > > > > to be imported, and never used without being imported. > > > > > > I disagree (strongly :-). I think augmenting/overriding an existing > build > > > file > > > is a valid use for import. I recently changed the checkstyle build I > have > > > been using (check.xml) to import Ant's build.xml to pick up property > defs > > > for > > > various locations. Have a look. > > > > > > Conor > > > > > > <?xml version="1.0"?> > > > > <project name="AntReturnTest" default="test-returnProperty"> > > > > <!-- Our custom tasks we are testing --> > > <taskdef resource="com/lgc/buildmagic/tasks.properties" /> > > <typedef resource="com/lgc/buildmagic/types.properties" /> > > > > <target name="test-returnProperty"> > > <antreturn antfile="AntReturnNestedTest.xml" target="set-properties"> > > <return> > > <property name="propA" /> > > <property name="propC" /> > > </return> > > </antreturn> > > </target> > > > > <target name="test-returnReference"> > > <antreturn antfile="AntReturnNestedTest.xml" target="set-references"> > > <return> > > <reference refid="pathRef" /> > > <reference refid="filesetRef" /> > > </return> > > </antreturn> > > </target> > > > > </project> > > > > <?xml version="1.0"?> > > > > <project name="AntReturnNestedTest" default="set-properties"> > > > > <target name="set-properties"> > > <property name="propA" value="a" /> > > <property name="propB" value="bb" /> > > <property name="propC" value="ccc" /> > > <property name="propD" value="dddd" /> > > </target> > > > > <target name="set-references"> > > <path id="pathRef" location="${basedir}" /> > > <fileset id="filesetRef" dir="${basedir}"> > > <include name="AntReturn*Test.xml" /> > > </fileset> > > <patternset id="patternsetRef"> > > <include name="dummy" /> > > </patternset> > > </target> > > > > </project> > > > > // vim:ts=2:sw=2 > > package com.lgc.buildmagic.test; > > > > import org.apache.tools.ant.ProjectComponent; > > import org.apache.tools.ant.types.Path; > > import org.apache.tools.ant.types.FileSet; > > > > import com.lgc.buildmagic.util.BuildFileTestCase; > > > > /** > > * Tests <antreturn>. > > * > > * @author <a href="mailto:[EMAIL PROTECTED]">Dominique Devienne</a> > > * @version Jul 2003 - Copyright (c) 2003, Landmark Graphics Corp. > > */ > > public class AntReturnTest > > extends BuildFileTestCase { > > > > public void testReturnProperty() { > > executeTarget("test-returnProperty"); > > > > assertProperty("propA", "a"); > > assertProperty("propB", null); > > assertProperty("propC", "ccc"); > > assertProperty("propD", null); > > } > > > > private void assertProperty(String name, String expectedValue) { > > String value = getProject().getProperty(name); > > assertEquals(name + " property", value, expectedValue); > > } > > > > public void testReturnReference() { > > executeTarget("test-returnReference"); > > > > assertReference("pathRef", Path.class); > > assertReference("filesetRef", FileSet.class); > > assertReference("patternsetRef", null); > > } > > > > private void assertReference(String refid, Class expectedClass) { > > Object value = getProject().getReference(refid); > > if (expectedClass != null) { > > assertNotNull(refid + " reference", value); > > assertEquals(refid + " reference type", expectedClass, > > value.getClass()); > > assertSame(refid + " reference project", getProject(), > > ((ProjectComponent)value).getProject()); > > } > > else { > > assertEquals(refid + " reference found", false, value != null); > > } > > } > > > > } // END class AntReturnTest > > > > // vim:ts=2:sw=2 > > package com.lgc.buildmagic; > > > > import java.util.List; > > import java.util.Iterator; > > import java.util.ArrayList; > > import java.util.Collections; > > > > import org.apache.tools.ant.Project; > > import org.apache.tools.ant.ProjectComponent; > > import org.apache.tools.ant.BuildException; > > > > import org.apache.tools.ant.types.Reference; > > > > import org.apache.tools.ant.taskdefs.Ant; > > import org.apache.tools.ant.taskdefs.Property; > > > > /** > > * ... > > * > > * @author <a href="mailto:[EMAIL PROTECTED]">Dominique Devienne</a> > > * @version Jul 2003 - Copyright (c) 2003, Landmark Graphics Corp. > > * > > * @ant.task category="control" > > */ > > public class AntReturn > > extends Ant { > > > > private Project _newProject; > > private ReturnedElements _returns; > > > > public void init() { > > super.init(); > > setInheritAll(false); > > setInheritRefs(false); > > } > > > > public void execute() > > throws BuildException { > > int returnCount = 0; > > if (_returns != null) { > > returnCount = _returns._references.size() > > + _returns._properties.size(); > > } > > > > if (returnCount > 0 && _newProject == null) { > > // Create dummy property to get at nested project > > Property p = createProperty(); > > p.setName("sdliugyhspuygh.asdjhriawu120983472$376asdbfandbfa7347"); > > p.setValue(""); > > > > if (_newProject == null) { > > throw new BuildException("Cannot access nested Project > BEFORE!!!"); > > } > > } > > > > super.execute(); > > > > if (returnCount < 1) { > > return; // Nothing to return > > } > > > > // Set the returned properties in the outer project > > for (Iterator i = _returns._properties.iterator(); i.hasNext();) { > > ReturnProperty retProperty = (ReturnProperty)i.next(); > > String name = retProperty.getName(); > > String value = _newProject.getProperty(name); > > if (value == null) { > > throw new BuildException("Cannot find property '" + name + "'"); > > } > > getProject().setNewProperty(retProperty.getToName(), value); > > } > > > > // Set the returned properties in the outer project > > for (Iterator i = _returns._references.iterator(); i.hasNext();) { > > ReturnReference retReference = (ReturnReference)i.next(); > > String refid = retReference.getRefid(); > > Object value = _newProject.getReference(refid); > > if (value == null) { > > throw new BuildException("Cannot find reference '" + refid + "'"); > > } > > if (value instanceof ProjectComponent) { > > ((ProjectComponent)value).setProject(getProject()); > > } > > getProject().addReference(retReference.getToRefid(), value); > > } > > } > > > > /** Intercept property creation to catch the new project. Wicked! */ > > public Property createProperty() { > > Property p = super.createProperty(); > > _newProject = p.getProject(); > > return p; > > } > > > > /** Adds the set of properties/references to return. */ > > public void addReturn(ReturnedElements returns) { > > if (_returns != null) { > > throw new BuildException("Can have only one nested <return>"); > > } > > _returns = returns; > > } > > > > /** Programatic convenience to select a property to return. */ > > public void selectProperty(String name, String toName) { > > if (_returns == null) { > > addReturn(new ReturnedElements()); > > } > > ReturnProperty p = new ReturnProperty(); > > p.setName(name); > > if (toName != null) { > > p.setToName(toName); > > } > > _returns.addProperty(p); > > } > > > > /** Programatic convenience to select a reference to return. */ > > public void selectReference(String refid, String toRefid) { > > if (_returns == null) { > > addReturn(new ReturnedElements()); > > } > > ReturnReference r = new ReturnReference(); > > r.setRefid(refid); > > if (toRefid != null) { > > r.setToRefid(toRefid); > > } > > _returns.addReference(r); > > } > > > > /** A property name to return from the called project. */ > > public static class ReturnProperty { > > private String _name; > > private String _toName; > > > > public void setName(String name) { > > _name = TaskUtils.assertNotEmpty(name, "name", true); > > } > > public void setToName(String toName) { > > _toName = TaskUtils.assertNotEmpty(toName, "toName", true); > > } > > public String getName() { > > TaskUtils.assertAttributeSet(_name, "name"); > > return _name; > > } > > public String getToName() { > > return (_toName == null)? getName(): _toName; > > } > > } // END class AntReturn.ReturnProperty > > > > /** A reference name to return from the called project. */ > > public static class ReturnReference { > > private String _refid; > > private String _toRefid; > > > > public void setRefid(String refid) { > > _refid = TaskUtils.assertNotEmpty(refid, "refid", true); > > } > > public void setToRefid(String toRefid) { > > _toRefid = TaskUtils.assertNotEmpty(toRefid, "toRefid", true); > > } > > public String getRefid() { > > TaskUtils.assertAttributeSet(_refid, "refid"); > > return _refid; > > } > > public String getToRefid() { > > return (_toRefid == null)? getRefid(): _toRefid; > > } > > } // END class AntReturn.ReturnReference > > > > /** List of properties and references to return from the called project. > > */ > > public static class ReturnedElements { > > private List _properties = Collections.EMPTY_LIST; > > private List _references = Collections.EMPTY_LIST; > > > > public void addProperty(ReturnProperty retProperty) { > > if (_properties == Collections.EMPTY_LIST) { > > _properties = new ArrayList(4); > > } > > _properties.add(retProperty); > > } > > > > public void addReference(ReturnReference retReference) { > > if (_references == Collections.EMPTY_LIST) { > > _references = new ArrayList(4); > > } > > _references.add(retReference); > > } > > } // END class AntReturn.ReturnedElements > > > > } // END class AntReturn > > > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]