@@ -103,6 +103,10 @@ public class UnknownElement extends Task {
return elementName;
return elementName;
}
}
public RuntimeConfigurable getWrapper() {
return wrapper;
}
/**
/**
* Creates the real object instance and child elements, then configures
* Creates the real object instance and child elements, then configures
* the attributes and text of the real object. This unknown element
* the attributes and text of the real object. This unknown element
@@ -112,11 +116,25 @@ public class UnknownElement extends Task {
* @exception BuildException if the configuration fails
* @exception BuildException if the configuration fails
*/
*/
public void maybeConfigure() throws BuildException {
public void maybeConfigure() throws BuildException {
//ProjectComponentHelper helper=ProjectComponentHelper.getProjectComponentHelper();
//realThing = helper.createProjectComponent( this, getProject(), null,
// this.getTag());
realThing = makeObject(this, getWrapper());
realThing = makeObject(this, getWrapper());
getWrapper().setProxy(realThing);
getWrapper().setProxy(realThing);
if (realThing instanceof Task) {
if (realThing instanceof Task) {
((Task) realThing).setRuntimeConfigurableWrapper(getWrapper());
Task task=(Task)realThing;
task.setRuntimeConfigurableWrapper(getWrapper());
task.setLocation(this.getLocation());
// UnknownElement always has an associated target
task.setOwningTarget(this.getOwningTarget());
task.init();
// For Script to work. Ugly
// The reference is replaced by RuntimeConfigurable
this.getOwningTarget().replaceChild(this, (Task)realThing);
}
}
handleChildren(realThing, getWrapper());
handleChildren(realThing, getWrapper());
@@ -165,6 +183,10 @@ public class UnknownElement extends Task {
if (realThing instanceof Task) {
if (realThing instanceof Task) {
((Task) realThing).execute();
((Task) realThing).execute();
}
}
// the task will not be reused ( a new init() will be called )
// Let GC do its job
realThing=null;
}
}
/**
/**
@@ -191,8 +213,8 @@ public class UnknownElement extends Task {
*/
*/
protected void handleChildren(Object parent,
protected void handleChildren(Object parent,
RuntimeConfigurable parentWrapper)
RuntimeConfigurable parentWrapper)
throws BuildException {
throws BuildException
{
if (parent instanceof TaskAdapter) {
if (parent instanceof TaskAdapter) {
parent = ((TaskAdapter) parent).getProxy();
parent = ((TaskAdapter) parent).getProxy();
}
}
@@ -206,8 +228,26 @@ public class UnknownElement extends Task {
Object realChild = null;
Object realChild = null;
if (parent instanceof TaskContainer) {
if (parent instanceof TaskContainer) {
realChild = makeTask(child, childWrapper, false);
((TaskContainer) parent).addTask((Task) realChild);
//ProjectComponentHelper helper=ProjectComponentHelper.getProjectComponentHelper();
//realChild = helper.createProjectComponent( child, getProject(), null,
// child.getTag());
realChild=makeTask(child, childWrapper, false);
if (realChild == null ) {
throw getNotFoundException("task", child.getTag());
}
// XXX DataTypes will be wrapped or treated like normal components
if( realChild instanceof Task ) {
Task task=(Task)realChild;
((TaskContainer) parent).addTask(task);
task.setLocation(child.getLocation());
// UnknownElement always has an associated target
task.setOwningTarget(this.getOwningTarget());
task.init();
} else {
// What ? Add data type ? createElement ?
}
} else {
} else {
realChild = ih.createElement(getProject(), parent, child.getTag());
realChild = ih.createElement(getProject(), parent, child.getTag());
}
}
@@ -218,6 +258,10 @@ public class UnknownElement extends Task {
}
}
child.handleChildren(realChild, childWrapper);
child.handleChildren(realChild, childWrapper);
// if (parent instanceof TaskContainer) {
// ((Task) realChild).maybeConfigure();
// }
}
}
}
}
@@ -330,6 +374,7 @@ public class UnknownElement extends Task {
* @return the name to use in logging messages.
* @return the name to use in logging messages.
*/
*/
public String getTaskName() {
public String getTaskName() {
//return elementName;
return realThing == null || !(realThing instanceof Task) ?
return realThing == null || !(realThing instanceof Task) ?
super.getTaskName() : ((Task) realThing).getTaskName();
super.getTaskName() : ((Task) realThing).getTaskName();
}
}