diff --git a/WHATSNEW b/WHATSNEW index eded0c2bf..af87578c3 100644 --- a/WHATSNEW +++ b/WHATSNEW @@ -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 =================================== diff --git a/src/main/org/apache/tools/ant/ProjectHelper.java b/src/main/org/apache/tools/ant/ProjectHelper.java index 7b61160ba..b600de483 100644 --- a/src/main/org/apache/tools/ant/ProjectHelper.java +++ b/src/main/org/apache/tools/ant/ProjectHelper.java @@ -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. + *
+ * This method allow you to defer injection and have a powerful control of + * extensionPoint wiring. + *
+ *+ * This should be invoked by each concrete implementation of ProjectHelper + * when the root "buildfile" and all imported/included buildfile are loaded. + *
+ * + * @param project The project containing the target. Must not be + *null
.
+ * @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);
+ }
+ }
+ }
}
diff --git a/src/main/org/apache/tools/ant/helper/ProjectHelper2.java b/src/main/org/apache/tools/ant/helper/ProjectHelper2.java
index 24d74df19..b6dd419f7 100644
--- a/src/main/org/apache/tools/ant/helper/ProjectHelper2.java
+++ b/src/main/org/apache/tools/ant/helper/ProjectHelper2.java
@@ -180,34 +180,7 @@ public class ProjectHelper2 extends ProjectHelper {
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);
}
}