ant-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Hari Krishna Dara" <harid...@gmail.com>
Subject FileSet inside MacroDef causing ClassCastException
Date Wed, 23 Aug 2006 04:00:36 GMT
I sent this email to the user list a few days back and haven't heard
anything yet. Since the question is about a code problem in the ant, I
thought I might have better luck in here. I would really appreciate
any help on this, as my entire build process is based on this
approach, and I don't want to workaround using external tools, custom
tasks etc.

I also found later that this is not specific to FileSet inside a
MacroDef. I commented the calls to let the build go past that, and got
a CCE for a macro that was invoking another macro in the sequence. I
think there is a more generic problem here, as testing these macros in
a completely isolated environment shows no problems. The build scripts
loads and depends on a whole bunch of external files, so there is no
use sending the entire file, but if anyone thinks they can give better
help by looking at the whole file, please let me know and I will do
something.

Thank you,
Hari

-----------

Inside a MacroDef, I am using a FileSet with an id that I refer to
later in the same macro. This is working fine in one of the macros but
the other one causes a CCE at the below line in MacroInstance.copy():

           UnknownElement unknownElement = (UnknownElement) r.getProxy();

While debugging the working case, I observed that the FileSet
correctly shows up as UnknownElement with a wrapper that proxies the
FileSet object, but when it results in CCE, the r.getProxy() returns
the FileSet object itself, instead of an UnknownElement. I don't know
what is causing this to happen though. I am using 1.6.2, but tried
1.6.5 as well and saw the same exception. I tried to reproduce the
problem by copying these two macros into a standalone build file with
some minor modifications to remove the dependency on properties etc.,
and strangely it works fine.

Can anyone provide any help in working around or fixing this problem?
I wanted to try creating the FileSet inside a script task (thus
avoiding the copy() seeing it), but I didn't find anyway to access the
selection element that is being passed into the macro. Can anyone
point me to the API to do this? Unlike the attributes, we can't inline
the element inside a script. An ant eval() would serve a good purpose
though as I can then do project.eval("<selection/>").

Here is the macro that causes trouble (I stripped the sequence to the
least that causes theis problem, but as I said before, I couldn't copy
this into a standalone build file and reproduce the exception):

   <macrodef name="patchifmatches">
       <attribute name="source"/>
       <!-- See "target" on patchif -->
       <attribute name="target"/>
       <attribute name="windows" default="true"/>
       <attribute name="solaris" default="true"/>
       <element name="selection" implicit="true"/>
       <sequential>
           <fileset id="patchfileset" dir="${branch.path}">
               <patternset refid="patch.filelist"/>
               <selection/>
           </fileset>
       </sequential>
   </macrodef>

Here is the macro that is part of the same build file and works fine:

   <macrodef name="checkIfComponentNeedsPatch">
       <attribute name="componentName"/>
       <element name="selection" implicit="true"/>
       <sequential>
           <!-- FIXME: How do I suppress the "override" warning
message this generates -->
           <fileset id="patchfileset" dir="${branch.path}">
               <patternset refid="patch.filelist"/>
               <selection/>
           </fileset>
           <pathconvert pathsep=" " property="@{componentName}NeedsPatchTmp"
               refid="patchfileset"/>
           <condition property="@{componentName}NeedsPatch">
               <not>
                   <equals arg1="${@{componentName}NeedsPatchTmp}" arg2=""/>
               </not>
           </condition>
       </sequential>
   </macrodef>

Here is the stacktrace that I got using the -d option:

C:\dev\puno\scripts\triage\patchbuild.xml:606: java.lang.ClassCastException
       at org.apache.tools.ant.Task.perform(Task.java:373)
       at org.apache.tools.ant.Target.execute(Target.java:341)
       at org.apache.tools.ant.Target.performTasks(Target.java:369)
       at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1216)
       at org.apache.tools.ant.Project.executeTarget(Project.java:1185)
       at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExe
cutor.java:40)
       at org.apache.tools.ant.Project.executeTargets(Project.java:1068)
       at org.apache.tools.ant.Main.runBuild(Main.java:668)
       at org.apache.tools.ant.Main.startAnt(Main.java:187)
       at org.apache.tools.ant.launch.Launcher.run(Launcher.java:246)
       at org.apache.tools.ant.launch.Launcher.main(Launcher.java:67)
Caused by: java.lang.ClassCastException
       at org.apache.tools.ant.taskdefs.MacroInstance.copy(MacroInstance.java:2
73)
       at org.apache.tools.ant.taskdefs.MacroInstance.execute(MacroInstance.jav
a:375)
       at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275)
       at org.apache.tools.ant.Task.perform(Task.java:364)
       ... 10 more
--- Nested Exception ---
java.lang.ClassCastException
       at org.apache.tools.ant.taskdefs.MacroInstance.copy(MacroInstance.java:2
73)
       at org.apache.tools.ant.taskdefs.MacroInstance.execute(MacroInstance.jav
a:375)
       at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275)
       at org.apache.tools.ant.Task.perform(Task.java:364)
       at org.apache.tools.ant.Target.execute(Target.java:341)
       at org.apache.tools.ant.Target.performTasks(Target.java:369)
       at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1216)
       at org.apache.tools.ant.Project.executeTarget(Project.java:1185)
       at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExe
cutor.java:40)
       at org.apache.tools.ant.Project.executeTargets(Project.java:1068)
       at org.apache.tools.ant.Main.runBuild(Main.java:668)
       at org.apache.tools.ant.Main.startAnt(Main.java:187)
       at org.apache.tools.ant.launch.Launcher.run(Launcher.java:246)
       at org.apache.tools.ant.launch.Launcher.main(Launcher.java:67)

Thank you,
Hari

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


Mime
View raw message