Browse Source

Few changes merged from embed to support delayed evaluation.

All of them should be harmless if used with the original parser.

PR:
Obtained from:
Submitted by:
Reviewed by:


git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@273655 13f79535-47bb-0310-9956-ffa450edef68
master
Costin Manolache 22 years ago
parent
commit
41c3e23d1d
1 changed files with 50 additions and 5 deletions
  1. +50
    -5
      src/main/org/apache/tools/ant/UnknownElement.java

+ 50
- 5
src/main/org/apache/tools/ant/UnknownElement.java View File

@@ -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();
} }


Loading…
Cancel
Save