You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by hi...@apache.org on 2012/08/15 12:37:23 UTC

svn commit: r1373321 - in /ant/core/trunk: WHATSNEW src/main/org/apache/tools/ant/ProjectHelper.java src/main/org/apache/tools/ant/helper/ProjectHelper2.java

Author: hibou
Date: Wed Aug 15 10:37:23 2012
New Revision: 1373321

URL: http://svn.apache.org/viewvc?rev=1373321&view=rev
Log:
BR 53549
Make the ProjectHelper class expose the method which properly bind targets and extension points.
Thanks to Jean-Louis Boudart

Modified:
    ant/core/trunk/WHATSNEW
    ant/core/trunk/src/main/org/apache/tools/ant/ProjectHelper.java
    ant/core/trunk/src/main/org/apache/tools/ant/helper/ProjectHelper2.java

Modified: ant/core/trunk/WHATSNEW
URL: http://svn.apache.org/viewvc/ant/core/trunk/WHATSNEW?rev=1373321&r1=1373320&r2=1373321&view=diff
==============================================================================
--- ant/core/trunk/WHATSNEW (original)
+++ ant/core/trunk/WHATSNEW Wed Aug 15 10:37:23 2012
@@ -83,6 +83,11 @@ Other changes:
    it is more portable.  For backwards compatibility reasons "warn"
    will still create "gnu" extensions rather than "posix" extensions.
 
+ * The ProjectHelper class now exposes a method to be used by third party
+   implementations to properly resolve the binding between target extensions
+   and extension points.
+   Bugzilla Report 53549.
+
 Changes from Ant 1.8.3 TO Ant 1.8.4
 ===================================
 

Modified: ant/core/trunk/src/main/org/apache/tools/ant/ProjectHelper.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/ProjectHelper.java?rev=1373321&r1=1373320&r2=1373321&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/ProjectHelper.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/ProjectHelper.java Wed Aug 15 10:37:23 2012
@@ -606,4 +606,51 @@ public class ProjectHelper {
     public String getDefaultBuildFile() {
         return Main.DEFAULT_BUILD_FILENAME;
     }
+
+    /**
+     * Check extensionStack and inject all targets having extensionOf attributes
+     * into extensionPoint.
+     * <p>
+     * This method allow you to defer injection and have a powerful control of
+     * extensionPoint wiring.
+     * </p>
+     * <p>
+     * This should be invoked by each concrete implementation of ProjectHelper
+     * when the root "buildfile" and all imported/included buildfile are loaded.
+     * </p>
+     * 
+     * @param project The project containing the target. Must not be
+     *            <code>null</code>.
+     * @exception BuildException if OnMissingExtensionPoint.FAIL and
+     *                extensionPoint does not exist
+     * @see OnMissingExtensionPoint
+     * @since 1.9
+     */
+    public void resolveExtensionOfAttributes(Project project)
+            throws BuildException {
+        for (String[] extensionInfo : getExtensionStack()) {
+            String tgName = extensionInfo[0];
+            String name = extensionInfo[1];
+            OnMissingExtensionPoint missingBehaviour = OnMissingExtensionPoint.valueOf(extensionInfo[2]);
+            Hashtable projectTargets = project.getTargets();
+            if (!projectTargets.containsKey(tgName)) {
+                String message = "can't add target " + name
+                        + " to extension-point " + tgName
+                        + " because the extension-point is unknown.";
+                if (missingBehaviour == OnMissingExtensionPoint.FAIL) {
+                    throw new BuildException(message);
+                } else if (missingBehaviour == OnMissingExtensionPoint.WARN) {
+                    Target target = (Target) projectTargets.get(name);
+                    project.log(target, "Warning: " + message, Project.MSG_WARN);
+                }
+            } else {
+                Target t = (Target) projectTargets.get(tgName);
+                if (!(t instanceof ExtensionPoint)) {
+                    throw new BuildException("referenced target " + tgName
+                            + " is not an extension-point");
+                }
+                t.addDependency(name);
+            }
+        }
+    }
 }

Modified: ant/core/trunk/src/main/org/apache/tools/ant/helper/ProjectHelper2.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/helper/ProjectHelper2.java?rev=1373321&r1=1373320&r2=1373321&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/helper/ProjectHelper2.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/helper/ProjectHelper2.java Wed Aug 15 10:37:23 2012
@@ -180,34 +180,7 @@ public class ProjectHelper2 extends Proj
             context.getImplicitTarget().execute();
 
             // resolve extensionOf attributes
-            for (String[] extensionInfo : getExtensionStack()) {
-                String tgName = extensionInfo[0];
-                String name = extensionInfo[1];
-                OnMissingExtensionPoint missingBehaviour = OnMissingExtensionPoint
-                        .valueOf(extensionInfo[2]);
-                Hashtable projectTargets = project.getTargets();
-                if (!projectTargets.containsKey(tgName)) {
-                    String message = "can't add target " + name
-                        + " to extension-point " + tgName
-                        + " because the extension-point is unknown.";
-                    if (missingBehaviour == OnMissingExtensionPoint.FAIL) {
-                        throw new BuildException(message);
-                    } else if (missingBehaviour == OnMissingExtensionPoint.WARN) {
-                        Target target = (Target) projectTargets.get(name);
-                        context.getProject().log(target,
-                                                 "Warning: " + message,
-                                                 Project.MSG_WARN);
-                    }
-                } else {
-                    Target t = (Target) projectTargets.get(tgName);
-                    if (!(t instanceof ExtensionPoint)) {
-                        throw new BuildException("referenced target "
-                                                 + tgName
-                                                 + " is not an extension-point");
-                    }
-                    t.addDependency(name);
-                }
-            }
+            resolveExtensionOfAttributes(project);
         }
     }