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">
<exclude name="${optional.package}/BeanShellScriptTest.java"/>
<exclude name="${ant.package}/taskdefs/ImportTest.java"/>
</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>
tag.<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
that are not possible with entity includes:<br>
<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;
/** Children of this target (tasks and data types). */
private List/*<Task|RuntimeConfigurable>*/ children = new ArrayList(5);
/** Position in task list */
private int taskPosition = 0;
/** Project this target belongs to. */
private Project project;
/** Description of this target, if any. */
private String description = null;
/** If adding top-level imported tasks */
private boolean addingImportedTasks;
/** Imported tasks/types being added */
private List importedTasks = null;

/** Sole constructor. */
public Target() {
@@ -165,13 +172,35 @@ public class Target implements TaskContainer {
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.
*
* @param task The task to be added. Must not be <code>null</code>.
*/
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 {
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) {
Task task = (Task) o;
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) {
// we are in an imported file.
context.setIgnoreProjectTag(true);
context.getCurrentTarget().startImportedTasks();
parse(project, source, new RootHandler(context));
context.getCurrentTarget().endImportedTasks();
} else {
// top level file
parse(project, source, new RootHandler(context));
@@ -468,6 +470,7 @@ public class ProjectHelper2 extends ProjectHelper {
throws SAXParseException {
String id = null;
String baseDir = null;
boolean nameAttributeSet = false;

Project project = context.getProject();

@@ -495,7 +498,7 @@ public class ProjectHelper2 extends ProjectHelper {
} else if (key.equals("name")) {
if (value != null) {
context.setCurrentProjectName(value);
nameAttributeSet = true;
if (!context.isIgnoringProjectTag()) {
project.setName(value);
project.addReference(value, project);
@@ -522,7 +525,7 @@ public class ProjectHelper2 extends ProjectHelper {
// XXX Move to Project ( so it is shared by all helpers )
String antFileProp = "ant.file." + context.getCurrentProjectName();
String dup = project.getProperty(antFileProp);
if (dup != null) {
if (dup != null && nameAttributeSet) {
File dupFile = new File(dup);
if (context.isIgnoringProjectTag() &&
!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
* into the same Project.
* <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
* will be resolved in deep/complex build hierarchies -such as what happens
* 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() {
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() {


Loading…
Cancel
Save