Browse Source

get the tasks imported using <import> to be placed

in-line and not at the end of the current tasks
PR:
Obtained from:
Submitted by:
Reviewed by:


git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@274836 13f79535-47bb-0310-9956-ffa450edef68
master
Peter Reilly 22 years ago
parent
commit
7b6a46d131
6 changed files with 44 additions and 16 deletions
  1. +0
    -1
      build.xml
  2. +0
    -5
      docs/manual/CoreTasks/import.html
  3. +34
    -3
      src/main/org/apache/tools/ant/Target.java
  4. +5
    -2
      src/main/org/apache/tools/ant/helper/ProjectHelper2.java
  5. +0
    -5
      src/main/org/apache/tools/ant/taskdefs/ImportTask.java
  6. +5
    -0
      src/testcases/org/apache/tools/ant/taskdefs/ImportTest.java

+ 0
- 1
build.xml View File

@@ -326,7 +326,6 @@


<patternset id="teststhatfail"> <patternset id="teststhatfail">
<exclude name="${optional.package}/BeanShellScriptTest.java"/> <exclude name="${optional.package}/BeanShellScriptTest.java"/>
<exclude name="${ant.package}/taskdefs/ImportTest.java"/>
</patternset> </patternset>


<!-- <!--


+ 0
- 5
docs/manual/CoreTasks/import.html View File

@@ -16,11 +16,6 @@ Includes as explained in the Ant FAQ</a>, as if the imported file was
contained in the importing file, minus the top <code>&lt;project&gt;</code> contained in the importing file, minus the top <code>&lt;project&gt;</code>
tag.<br> tag.<br>
<br> <br>
<b>Important</b>: there is one limitation related to the top level
elements in the imported files. The current implementation will add
them at the end of the top-level ( instead of replacing the import
element - which would be more intuitive ).<br>
<br>
There are two further functional aspects that pertain to this task and There are two further functional aspects that pertain to this task and
that are not possible with entity includes:<br> that are not possible with entity includes:<br>
<ul> <ul>


+ 34
- 3
src/main/org/apache/tools/ant/Target.java View File

@@ -80,10 +80,17 @@ public class Target implements TaskContainer {
private List/*<String>*/ dependencies = null; private List/*<String>*/ dependencies = null;
/** Children of this target (tasks and data types). */ /** Children of this target (tasks and data types). */
private List/*<Task|RuntimeConfigurable>*/ children = new ArrayList(5); private List/*<Task|RuntimeConfigurable>*/ children = new ArrayList(5);
/** Position in task list */
private int taskPosition = 0;
/** Project this target belongs to. */ /** Project this target belongs to. */
private Project project; private Project project;
/** Description of this target, if any. */ /** Description of this target, if any. */
private String description = null; private String description = null;
/** If adding top-level imported tasks */
private boolean addingImportedTasks;
/** Imported tasks/types being added */
private List importedTasks = null;


/** Sole constructor. */ /** Sole constructor. */
public Target() { public Target() {
@@ -165,13 +172,35 @@ public class Target implements TaskContainer {
return name; return name;
} }


/**
* This method called when an import file is being processed.
* The top-level tasks/types are placed in the importedTasks array.
*
*/
public void startImportedTasks() {
importedTasks = new ArrayList();
}
/** /**
* Adds a task to this target. * Adds a task to this target.
* *
* @param task The task to be added. Must not be <code>null</code>. * @param task The task to be added. Must not be <code>null</code>.
*/ */
public void addTask(Task task) { public void addTask(Task task) {
children.add(task);
if (importedTasks != null) {
importedTasks.add(task);
} else {
children.add(task);
}
}

/**
* This method called when an import file is being processed.
* The top-level tasks/types are placed in the importedTasks array.
*
*/
public void endImportedTasks() {
children.addAll(taskPosition + 1, importedTasks);
} }


/** /**
@@ -311,8 +340,10 @@ public class Target implements TaskContainer {
*/ */
public void execute() throws BuildException { public void execute() throws BuildException {
if (testIfCondition() && testUnlessCondition()) { if (testIfCondition() && testUnlessCondition()) {
for (int i = 0; i < children.size(); ++i) {
Object o = children.get(i);
for (taskPosition = 0;
taskPosition < children.size();
++taskPosition) {
Object o = children.get(taskPosition);
if (o instanceof Task) { if (o instanceof Task) {
Task task = (Task) o; Task task = (Task) o;
task.perform(); task.perform();


+ 5
- 2
src/main/org/apache/tools/ant/helper/ProjectHelper2.java View File

@@ -119,7 +119,9 @@ public class ProjectHelper2 extends ProjectHelper {
if (this.getImportStack().size() > 1) { if (this.getImportStack().size() > 1) {
// we are in an imported file. // we are in an imported file.
context.setIgnoreProjectTag(true); context.setIgnoreProjectTag(true);
context.getCurrentTarget().startImportedTasks();
parse(project, source, new RootHandler(context)); parse(project, source, new RootHandler(context));
context.getCurrentTarget().endImportedTasks();
} else { } else {
// top level file // top level file
parse(project, source, new RootHandler(context)); parse(project, source, new RootHandler(context));
@@ -468,6 +470,7 @@ public class ProjectHelper2 extends ProjectHelper {
throws SAXParseException { throws SAXParseException {
String id = null; String id = null;
String baseDir = null; String baseDir = null;
boolean nameAttributeSet = false;


Project project = context.getProject(); Project project = context.getProject();


@@ -495,7 +498,7 @@ public class ProjectHelper2 extends ProjectHelper {
} else if (key.equals("name")) { } else if (key.equals("name")) {
if (value != null) { if (value != null) {
context.setCurrentProjectName(value); context.setCurrentProjectName(value);
nameAttributeSet = true;
if (!context.isIgnoringProjectTag()) { if (!context.isIgnoringProjectTag()) {
project.setName(value); project.setName(value);
project.addReference(value, project); project.addReference(value, project);
@@ -522,7 +525,7 @@ public class ProjectHelper2 extends ProjectHelper {
// XXX Move to Project ( so it is shared by all helpers ) // XXX Move to Project ( so it is shared by all helpers )
String antFileProp = "ant.file." + context.getCurrentProjectName(); String antFileProp = "ant.file." + context.getCurrentProjectName();
String dup = project.getProperty(antFileProp); String dup = project.getProperty(antFileProp);
if (dup != null) {
if (dup != null && nameAttributeSet) {
File dupFile = new File(dup); File dupFile = new File(dup);
if (context.isIgnoringProjectTag() && if (context.isIgnoringProjectTag() &&
!dupFile.equals(context.getBuildFile())) { !dupFile.equals(context.getBuildFile())) {


+ 0
- 5
src/main/org/apache/tools/ant/taskdefs/ImportTask.java View File

@@ -69,11 +69,6 @@ import java.util.Vector;
* It must be 'top level'. On execution it will read another Ant file * It must be 'top level'. On execution it will read another Ant file
* into the same Project. * into the same Project.
* <p> * <p>
* <b>Important</b>: there is one limitation related to the top level
* elements in the imported files. The current implementation will
* add them at the end of the top-level ( instead of replacing the
* import element - which would be more intuitive ).
* <p>
* <b>Important</b>: we have not finalized how relative file references * <b>Important</b>: we have not finalized how relative file references
* will be resolved in deep/complex build hierarchies -such as what happens * will be resolved in deep/complex build hierarchies -such as what happens
* when an imported file imports another file. Use absolute references for * when an imported file imports another file. Use absolute references for


+ 5
- 0
src/testcases/org/apache/tools/ant/taskdefs/ImportTest.java View File

@@ -74,6 +74,11 @@ public class ImportTest extends BuildFileTest {


public void testSimpleImport() { public void testSimpleImport() {
configureProject("src/etc/testcases/taskdefs/import/import.xml"); configureProject("src/etc/testcases/taskdefs/import/import.xml");
String logMessage = getLog();
String expect = "Before importIn imported topAfter import";
assertTrue("expecting log to contain \"" + expect + "\" log was \""
+ logMessage + "\"",
logMessage.indexOf(expect) >= 0);
} }


public void testUnnamedNesting() { public void testUnnamedNesting() {


Loading…
Cancel
Save