Browse Source

check for same targets in a source file

PR: 34566


git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@278179 13f79535-47bb-0310-9956-ffa450edef68
master
Peter Reilly 20 years ago
parent
commit
0a36bf20ec
6 changed files with 55 additions and 4 deletions
  1. +2
    -0
      WHATSNEW
  2. +4
    -0
      src/etc/testcases/taskdefs/import/import_same_target.xml
  3. +3
    -0
      src/etc/testcases/taskdefs/import/same_target.xml
  4. +21
    -1
      src/main/org/apache/tools/ant/helper/AntXMLContext.java
  5. +8
    -2
      src/main/org/apache/tools/ant/helper/ProjectHelper2.java
  6. +17
    -1
      src/testcases/org/apache/tools/ant/taskdefs/ImportTest.java

+ 2
- 0
WHATSNEW View File

@@ -90,6 +90,8 @@ Fixed bugs:


* JavaTest testcases sometimes fail on windows. Bugzilla Report 34502. * JavaTest testcases sometimes fail on windows. Bugzilla Report 34502.


* Targets with identical name work in imported project. Bugzilla Report 34566.

Other changes: Other changes:
-------------- --------------




+ 4
- 0
src/etc/testcases/taskdefs/import/import_same_target.xml View File

@@ -0,0 +1,4 @@
<project>
<target name="t"/>
<target name="t"/>
</project>

+ 3
- 0
src/etc/testcases/taskdefs/import/same_target.xml View File

@@ -0,0 +1,3 @@
<project>
<import file="import_same_target.xml"/>
</project>

+ 21
- 1
src/main/org/apache/tools/ant/helper/AntXMLContext.java View File

@@ -1,5 +1,5 @@
/* /*
* Copyright 2003-2004 The Apache Software Foundation
* Copyright 2003-2005 The Apache Software Foundation
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -92,6 +92,9 @@ public class AntXMLContext {
private Map prefixMapping = new HashMap(); private Map prefixMapping = new HashMap();




/** Keeps track of targets in files */
private Map currentTargets = null;

/** /**
* constructor * constructor
* @param project the project to which this antxml context belongs to * @param project the project to which this antxml context belongs to
@@ -341,6 +344,23 @@ public class AntXMLContext {
} }
return (String) list.get(list.size() - 1); return (String) list.get(list.size() - 1);
} }

/**
* Get the targets in the current source file.
* @return the current targets.
*/
public Map getCurrentTargets() {
return currentTargets;
}

/**
* Set the map of the targets in the current source file.
* @param currentTargets a map of targets.
*/
void setCurrentTargets(Map currentTargets) {
this.currentTargets = currentTargets;
}

} }





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

@@ -24,7 +24,9 @@ import java.io.InputStream;
import java.io.IOException; import java.io.IOException;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.net.URL; import java.net.URL;
import java.util.HashMap;
import java.util.Hashtable; import java.util.Hashtable;
import java.util.Map;
import java.util.Stack; import java.util.Stack;


import org.xml.sax.Locator; import org.xml.sax.Locator;
@@ -117,20 +119,24 @@ public class ProjectHelper2 extends ProjectHelper {
context.setIgnoreProjectTag(true); context.setIgnoreProjectTag(true);
Target currentTarget = context.getCurrentTarget(); Target currentTarget = context.getCurrentTarget();
Target currentImplicit = context.getImplicitTarget(); Target currentImplicit = context.getImplicitTarget();
Map currentTargets = context.getCurrentTargets();
try { try {
Target newCurrent = new Target(); Target newCurrent = new Target();
newCurrent.setProject(project); newCurrent.setProject(project);
newCurrent.setName(""); newCurrent.setName("");
context.setCurrentTarget(newCurrent); context.setCurrentTarget(newCurrent);
context.setCurrentTargets(new HashMap());
context.setImplicitTarget(newCurrent); context.setImplicitTarget(newCurrent);
parse(project, source, new RootHandler(context, mainHandler)); parse(project, source, new RootHandler(context, mainHandler));
newCurrent.execute(); newCurrent.execute();
} finally { } finally {
context.setCurrentTarget(currentTarget); context.setCurrentTarget(currentTarget);
context.setImplicitTarget(currentImplicit); context.setImplicitTarget(currentImplicit);
context.setCurrentTargets(currentTargets);
} }
} else { } else {
// top level file // top level file
context.setCurrentTargets(new HashMap());
parse(project, source, new RootHandler(context, mainHandler)); parse(project, source, new RootHandler(context, mainHandler));
// Execute the top-level target // Execute the top-level target
context.getImplicitTarget().execute(); context.getImplicitTarget().execute();
@@ -819,8 +825,7 @@ public class ProjectHelper2 extends ProjectHelper {


// If the name has already been defined ( import for example ) // If the name has already been defined ( import for example )
if (currentTargets.containsKey(name)) { if (currentTargets.containsKey(name)) {
if (!context.isIgnoringProjectTag()) {
// not in an import'ed file
if (context.getCurrentTargets().get(name) != null) {
throw new BuildException( throw new BuildException(
"Duplicate target '" + name + "'", target.getLocation()); "Duplicate target '" + name + "'", target.getLocation());
} }
@@ -841,6 +846,7 @@ public class ProjectHelper2 extends ProjectHelper {


if (name != null) { if (name != null) {
target.setName(name); target.setName(name);
context.getCurrentTargets().put(name, target);
project.addOrReplaceTarget(name, target); project.addOrReplaceTarget(name, target);
} }




+ 17
- 1
src/testcases/org/apache/tools/ant/taskdefs/ImportTest.java View File

@@ -1,5 +1,5 @@
/* /*
* Copyright 2003-2004 The Apache Software Foundation
* Copyright 2003-2005 The Apache Software Foundation
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -91,6 +91,22 @@ public class ImportTest extends BuildFileTest {
assertNotNull(getProject().getReference("baz")); assertNotNull(getProject().getReference("baz"));
} }


public void testImportSameTargets() {
try {
configureProject(
"src/etc/testcases/taskdefs/import/same_target.xml");
} catch (BuildException ex) {
String message = ex.getMessage();
if (message.indexOf("Duplicate target") == -1) {
assertTrue("Did not see 'Duplicate target' in '" + message +"'", false);
}
return;
}
assertTrue(
"Did not see build exception",
false);
}

public void testImportError() { public void testImportError() {
try { try {
configureProject( configureProject(


Loading…
Cancel
Save