diff --git a/docs/faq.html b/docs/faq.html index 89a95f917..370fd7c61 100644 --- a/docs/faq.html +++ b/docs/faq.html @@ -335,6 +335,12 @@
<zip>
is broken in Ant 1.5.2.
+ + + + Why do my custom task containers see Unknown Elements in Ant 1.6 + - they worked in Ant 1.5? + +
++ The objects added in TaskContainer.addTask(Task task) + have changed from Tasks to UnknownElements. +
++ There was a number of valid reasons for this change. But the backward + compatibility problems were not noticied until after Ant 1.6.0 was + released. +
++ Your container class will need to be modified to check if the Task + is an UnknownElement and call perform on it to + convert it to a Task and to execute it. + (see apache.tools.ant.taskdefs.Sequential) +
++ If you want to do more processing on the task, + you need to use the techniques in apache.tools.ant.taskdefs.Antlib#execute() + This does make use of one 1.6 method call (UE#getRealObject()), + you need to use UE#getTask() instread - this will + return null for non tasks (types like fileset id=x). +
++ So.. interate over the tasks, if they are UEs, convert them to + tasks, using UE#maybeConfigure and UE#getTask() +
++ for (Iterator i = tasks.iterator(); i.hasNext();) { + Task t = (Task) i.next(); + if (t instanceof UnknownElement) { + ((UnknownElement) t).maybeConfigure(); + t = ((UnknownElement) t).getTask(); + if (t == null) { + continue; + } + } + // .... original Custom code + } ++
+ This approach should work for ant1.5 and ant1.6. +
diff --git a/xdocs/faq.xml b/xdocs/faq.xml index db168a070..b4825cbac 100644 --- a/xdocs/faq.xml +++ b/xdocs/faq.xml @@ -1359,6 +1359,56 @@ mv /tmp/foo $ANT_HOME/bin/antRun ++ The objects added in TaskContainer.addTask(Task task) + have changed from Tasks to UnknownElements. +
++ There was a number of valid reasons for this change. But the backward + compatibility problems were not noticied until after Ant 1.6.0 was + released. +
++ Your container class will need to be modified to check if the Task + is an UnknownElement and call perform on it to + convert it to a Task and to execute it. + (see apache.tools.ant.taskdefs.Sequential) +
++ If you want to do more processing on the task, + you need to use the techniques in apache.tools.ant.taskdefs.Antlib#execute() + This does make use of one 1.6 method call (UE#getRealObject()), + you need to use UE#getTask() instread - this will + return null for non tasks (types like fileset id=x). +
++ So.. interate over the tasks, if they are UEs, convert them to + tasks, using UE#maybeConfigure and UE#getTask() +
++ This approach should work for ant1.5 and ant1.6. +
+