You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by pe...@apache.org on 2005/05/16 20:59:58 UTC

cvs commit: ant/src/main/org/apache/tools/ant/helper ProjectHelper2.java

peterreilly    2005/05/16 11:59:58

  Modified:    .        WHATSNEW
               src/testcases/org/apache/tools/ant/taskdefs ImportTest.java
               src/main/org/apache/tools/ant Target.java
               src/main/org/apache/tools/ant/helper ProjectHelper2.java
  Added:       src/etc/testcases/taskdefs/import a.xml b.xml c.xml
  Log:
  Allways create qualified targets in imported build files
  PR: 28444
  
  Revision  Changes    Path
  1.822     +3 -0      ant/WHATSNEW
  
  Index: WHATSNEW
  ===================================================================
  RCS file: /home/cvs/ant/WHATSNEW,v
  retrieving revision 1.821
  retrieving revision 1.822
  diff -u -r1.821 -r1.822
  --- WHATSNEW	13 May 2005 22:12:29 -0000	1.821
  +++ WHATSNEW	16 May 2005 18:59:57 -0000	1.822
  @@ -200,6 +200,9 @@
     can be caused by the test JVM exiting during a test, either via a System.exit()
     call or a JVM crash.
   
  +* project name is now used for *all* targets so one can write consistent import
  +  build file. bugzilla report 28444.
  +
   Changes from Ant 1.6.3 to current Ant 1.6 CVS version
   =====================================================
   
  
  
  
  1.17      +5 -0      ant/src/testcases/org/apache/tools/ant/taskdefs/ImportTest.java
  
  Index: ImportTest.java
  ===================================================================
  RCS file: /home/cvs/ant/src/testcases/org/apache/tools/ant/taskdefs/ImportTest.java,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- ImportTest.java	25 Apr 2005 10:15:11 -0000	1.16
  +++ ImportTest.java	16 May 2005 18:59:57 -0000	1.17
  @@ -163,4 +163,9 @@
           configureProject("src/etc/testcases/taskdefs/import/importtargetfirst.xml");
           assertLogContaining("Importing targetfirstAfter target firstAfter importing");
       }
  +
  +    public void testTargetName() {
  +        configureProject("src/etc/testcases/taskdefs/import/c.xml");
  +    }
  +
   }
  
  
  
  1.59      +20 -4     ant/src/main/org/apache/tools/ant/Target.java
  
  Index: Target.java
  ===================================================================
  RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/Target.java,v
  retrieving revision 1.58
  retrieving revision 1.59
  diff -u -r1.58 -r1.59
  --- Target.java	10 Mar 2005 12:50:57 -0000	1.58
  +++ Target.java	16 May 2005 18:59:57 -0000	1.59
  @@ -52,12 +52,28 @@
       /** Description of this target, if any. */
       private String description = null;
   
  -    /** Sole constructor. */
  +    /** Default constructor. */
       public Target() {
           //empty
       }
   
       /**
  +     * Cloning constructor.
  +     * @param other the Target to clone.
  +     */
  +    public Target(Target other) {
  +        this.name = other.name;
  +        this.ifCondition = other.ifCondition;
  +        this.unlessCondition = other.unlessCondition;
  +        this.dependencies = other.dependencies;
  +        this.location = other.location;
  +        this.project = other.project;
  +        this.description = other.description;
  +        // The children are added to after this cloning
  +        this.children = other.children;
  +    }
  +
  +    /**
        * Sets the project this target belongs to.
        *
        * @param project The project this target belongs to.
  @@ -209,7 +225,7 @@
        * @return an enumeration of the dependencies of this target
        */
       public Enumeration getDependencies() {
  -        return (dependencies != null ? Collections.enumeration(dependencies) 
  +        return (dependencies != null ? Collections.enumeration(dependencies)
                                        : new CollectionUtils.EmptyEnumeration());
       }
   
  @@ -222,7 +238,7 @@
       public boolean dependsOn(String other) {
           Project p = getProject();
           Hashtable t = (p == null) ? null : p.getTargets();
  -        return (p != null 
  +        return (p != null
                   && p.topoSort(getName(), t, false).contains(t.get(other)));
       }
   
  @@ -438,4 +454,4 @@
           String test = project.replaceProperties(unlessCondition);
           return project.getProperty(test) == null;
       }
  -}
  \ No newline at end of file
  +}
  
  
  
  1.1                  ant/src/etc/testcases/taskdefs/import/a.xml
  
  Index: a.xml
  ===================================================================
  <project name="A">
    <target name="x"/>
  </project>
  
  
  
  1.1                  ant/src/etc/testcases/taskdefs/import/b.xml
  
  Index: b.xml
  ===================================================================
  <project name="B">
     <import file="a.xml"/>
     <target name="x" depends="A.x"/>
  </project>
  
  
  
  1.1                  ant/src/etc/testcases/taskdefs/import/c.xml
  
  Index: c.xml
  ===================================================================
  <project name="C">
     <import file="a.xml"/>
     <import file="b.xml"/>
  </project>
  
  
  
  1.55      +25 -24    ant/src/main/org/apache/tools/ant/helper/ProjectHelper2.java
  
  Index: ProjectHelper2.java
  ===================================================================
  RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/helper/ProjectHelper2.java,v
  retrieving revision 1.54
  retrieving revision 1.55
  diff -u -r1.54 -r1.55
  --- ProjectHelper2.java	26 Apr 2005 11:55:18 -0000	1.54
  +++ ProjectHelper2.java	16 May 2005 18:59:58 -0000	1.55
  @@ -815,38 +815,39 @@
                       + "a name attribute", context.getLocator());
               }
   
  -            Hashtable currentTargets = project.getTargets();
  +            // Check if this target is in the current build file
  +            if (context.getCurrentTargets().get(name) != null) {
  +                throw new BuildException(
  +                    "Duplicate target '" + name + "'", target.getLocation());
  +            }
   
  -            // If the name has already been defined ( import for example )
  -            if (currentTargets.containsKey(name)) {
  -                if (context.getCurrentTargets().get(name) != null) {
  -                    throw new BuildException(
  -                        "Duplicate target '" + name + "'", target.getLocation());
  -                }
  -                // Alter the name.
  -                if (context.getCurrentProjectName() != null) {
  -                    String newName = context.getCurrentProjectName()
  -                        + "." + name;
  -                    project.log("Already defined in main or a previous import, "
  -                        + "define " + name + " as " + newName,
  -                                Project.MSG_VERBOSE);
  -                    name = newName;
  -                } else {
  -                    project.log("Already defined in main or a previous import, "
  -                        + "ignore " + name, Project.MSG_VERBOSE);
  -                    name = null;
  -                }
  +            if (depends.length() > 0) {
  +                target.setDepends(depends);
               }
   
  -            if (name != null) {
  +            Hashtable projectTargets = project.getTargets();
  +            boolean   usedTarget = false;
  +            // If the name has not already been defined define it
  +            if (projectTargets.containsKey(name)) {
  +                project.log("Already defined in main or a previous import, "
  +                            + "ignore " + name, Project.MSG_VERBOSE);
  +            } else {
                   target.setName(name);
                   context.getCurrentTargets().put(name, target);
                   project.addOrReplaceTarget(name, target);
  +                usedTarget = true;
               }
   
  -            // take care of dependencies
  -            if (depends.length() > 0) {
  -                target.setDepends(depends);
  +            if (context.isIgnoringProjectTag() && context.getCurrentProjectName() != null
  +                && context.getCurrentProjectName().length() != 0) {
  +                // In an impored file (and not completely
  +                // ignoring the project tag)
  +                String newName = context.getCurrentProjectName()
  +                    + "." + name;
  +                Target newTarget = usedTarget ? new Target(target) : target;
  +                newTarget.setName(newName);
  +                context.getCurrentTargets().put(newName, newTarget);
  +                project.addOrReplaceTarget(newName, newTarget);
               }
           }
   
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org