On 9/11/06, Dominique Devienne <[EMAIL PROTECTED]> wrote:

> > > 2) Introduce a <tagdef> or <roledef> for the purpose
> > > of locating extension points as nested elements.

> but I looked at the code and realized that the type
> handling in ant would become too complicated - there

I see your point. Increased complexity is not good. But is it really
that complex? This new mechanism would only kick in when IH would
overwise have rejected a nested element, and only add lookup into a
new mapping when the current type has an add(Type) extension point.

True, their can be tricky cases when a type has both an add(Condition)
and a add(FileSelector), but that should be pretty rare, and could be
thrown out as ambiguous. It could even be resolved using the
undocumented ant:type attribute.


Ok, I dug out my old code and after digging out some of the bugs
and misunderstanding, I have modded IH, CH (componenthelper),
and <typedef> to allow "restricted" types.

These are like normal types except:
 1) they are only allowed in add[Configured](Class) contexts, they
     cannot be used at the top level or task containers.
 2) One can have a multiple number of definitions with
     the same name. IH will pick the one that matches the
     add() methods in the container class. If there are multiple
     matches, - for example class that has add(Condition) and
add(FileSelector)
     presented with "and", IH will throw a buildexception for ambigeous.

I am not too sure this should be user visible but it can be implemented
by an extra attribute to the typedef task - restrict=yes/no default is no.

One problem is that the antlib.xml for antlib:org.apache.tools.ant would
be long and tedious when all the conditions, selectors, mappers, resources
are added.
Being long means that startup time for ant would suffer a little (the file
needs to
be parsed) and being tedious means that it would be difficult to maintain.

To solve the startup problem, I propose that we use an AntLibDefinitions
class associated
with a name-space which would contain the definitions.

To solve problem two, I propose that we use annotation like syntax:

* @ant.type [restrict="yes"/"no"] [name="whatever"]
or
* @ant.task [name="whatever"]

Where the defaults are restrict=no, name={classname in lower case without
package)

And have a task that will generate the definitions - either as an antlib xml
file
or as a AntLibDefinitions java.

I will create a bugzilla issue where I will place the diffs and task.
This will not of course be for ant 1.7!,
however we can add the @ant.type tags now for documentation?,
@ant.task is already in place for the ant doc project.
@ant.datatype is used as well - but ant types do not need to be
datatypes and not all datatypes are ant types.


Peter



It would however be nice to get something that
> allows add(Condition) or add(FileSelector) to work
> without having to extend BaseCondition or whatever
> is done for FileSelector .

Precisely. Unless I'm mistaken, this can already be achieved now by
using namespaces, and the condition antlib. So AssertTask could be
made ConditionBase independent now, no?

--DD

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


Reply via email to