ant-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Peter Reilly <peterrei...@apache.org>
Subject Re: What is the difference between a nested element and a nested type?
Date Thu, 09 Jun 2005 14:43:46 GMT
Antoine Levy-Lambert wrote:

>>--- Urspr√ľngliche Nachricht ---
>>Von: Eric Tchepannou <mellists@gmail.com>
>>An: user@ant.apache.org
>>Betreff: Re: What is the difference between a nested element and a nested
>>type?
>>Datum: Thu, 9 Jun 2005 10:32:51 +0100
>>
>>Thanks a lot for that Antoine. That was very clear to me.
>>I was able to check at
>>http://www.oracle.com/technology/pub/articles/bodewig_taskwriters.html
>>and I think the correct syntax (at least the one used there) to nest
>>types is
>>public void addSomething(BaseType t);
>>    
>>
>this one means :
>   - map <something/> to instantiating BaseType
>   - and creates the BaseType from the nested element <something/>
>  
>
>>I have been using 
>>public void add(BaseType);
>>and experience problems with this syntax. I will later rewrite my code
>>accordingly and see how it behaves.
>>
>>My guess is that public void add(BaseType) is obsolete. I use 1.6.2. I
>>am just wondering why the Ant documentation keeps mentioning this...
>>
>>    
>>
>No, it is not obsolete, but it will only work if you are mapping BaseType to
>an XML tag name such as <basetype/> using the <typedef/> task before.
>  
>
And one can used types that derive from the base type as follows (continuing
my previous example):
----- Derived.java ----
package my;

public class Derived extends Type {
}

----- build.xml -----
...
  <target name="works" depends="compile">
    <taskdef name="task" classname="my.Task"
             classpath="classes" loaderref="my.loaderref"/>
    <typedef name="type" classname="my.Type"
             loaderref="my.loaderref"/>
    <typedef name="derived" classname="my.Derived"
             loaderref="my.loaderref"/>
    <task>
      <type/>
    </task>
    <task>
      <derived/>
    </task>
  </target>
...


However this may be not what you want to do. One
can just use nested elements discoved by reflection as
Antonie has shown above.

---- Reflect.java --
package my;

public class Reflect extends org.apache.tools.ant.Task {
    public void addBase(Type p) {
    }
    public void addDerived(Derived p) {
    }
}

---- build.xml ---
..
  <target name="reflect" depends="compile">
    <taskdef name="reflect" classname="my.Reflect"
             classpath="classes" loaderref="my.loaderref"/>
    <reflect>
      <base/>
      <derived/>
    </reflect>
  </target>
..

Peter

>  
>
>>Eric
>>
>>    
>>
>Antoine
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: user-unsubscribe@ant.apache.org
>For additional commands, e-mail: user-help@ant.apache.org
>
>
>
>  
>


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@ant.apache.org
For additional commands, e-mail: user-help@ant.apache.org


Mime
View raw message