Hi,
I'm heavily using <presetdef> to override/customize tasks. It annoys me
and users
of my framework to see messages like
Trying to override old definition of task junit
and so I had the idea to write my "own" ComponentHelper and to hook it in
via
reference "ant.ComponentHelper".
The idea is - theoretically - simple, just inherit from ComponentHelper
and override
method
updateDataTypeDefinition()
and get rid of this project.log() statement (which should be a verbose
message
after all).
In practice however I run into serious problems and I have no real clue
how to do
it:
- updateDataType() is private, so I need to change addTaskDefinition() as
well (
I really wonder why updateDataTypeDefinition() is private and not
protected).
- updateDataType() uses lot's of private variables and methods like
rebuildTaskClassDefinitions
antTypeTable
sameDefinition
project
invalidateCreatedTasks
and it appears that most of this private staff does not even have a
"read"
method.
Therfore customization by inheritance appears not to work.
In a second approach I copied ComponentHelper.java in my own package
structure,
added a couple of import statements, and finally got stuck because of
Task t = (Task) ref.get();
//being a weak ref, it may be null by this point
if (t != null) {
t.markInvalid(); // <= package access only
}
Ok, so do I need to put ComponentHelper.java in org.apache.tools.ant to
make javac
happy? This was then my third approach. I saved a copy of
ComponentHelper.java as
MyComponentHelper.java in "your" namespace and now I'm stuck because of
for (Iterator i = helper.checkedNamespaces.iterator(); i.hasNext();)
{
// ..
}
Here checkedNamespaces is private (again) and there's no way to access it.
Now for my final question (thanks for reading so far):
How do I ever have a chance to replace ComponentHelper with my own version
if
basically everything is "private" ?
And here's my proposal for Ant 1.6.6:
1. $ perl -pi -e 's,\sprivate\s, protected ,g' `find -name
\*.java`
2. provide at least a "getter" for each "non-public" attribute
Cheers,
Wolfgang.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]