Hi,
I want to run this by people here to see what people think of this.
Basically DirectoryScanner has some duplicated code
[ accountForIncludedFile, accountForIncludedDir ], I think I have a
refactored processIncluded method that can replace the duplication,
but it relies on using Reflection to get access to the classes fields
and then does the work [1]. I know a lot of Java developers are a
little leary about using reflection in general as it has a reputation
for being slow and obtuse, so I'd like to see what you guys think
before committing something that will be veto'd.
Thanks,
Kev
[1]
/**
* Can process included dirs or files
* @param name path of dir/file relative to the directory of the
* FileSet
* @param file dir/file as File
* @param dirOrFile dir or file ("dirs" | "files")
* @throws BuildException
*/
private void processIncluded(String name, File file, String
dirOrFile) {
try {
Vector inc = (Vector)this.getClass().getField(dirOrFile
+"Included").get(this);
Vector exc = (Vector)this.getClass().getField(dirOrFile
+"Excluded").get(this);
Vector des = (Vector)this.getClass().getField(dirOrFile
+"Deselected").get(this);
if (inc.contains(name) || exc.contains(name) ||
des.contains(name)) { return; }
boolean included = false;
if (isExcluded(name)) {
exc.add(name);
} else if (isSelected(name, file)) {
included = true;
inc.add(name);
} else {
des.add(name);
}
everythingIncluded &= included;
//is this required? <-- I think you must 'reset' the
values that you used as the API states that only the values are
returned from get, not the original reference, if the original
vectors are returned, then the following 3 lines are unnecessary
this.getClass().getField(dirOrFile+"Included").set(this,
inc);
this.getClass().getField(dirOrFile+"Excluded").set(this,
exc);
this.getClass().getField(dirOrFile+"Deselected").set
(this, des);
} catch (IllegalAccessException e) {
//do nothing
} catch (NoSuchFieldException e) {
//do nothing
}
}
--
"Government is begotten of aggression, by aggression" - Herbert Spencer
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]