diff --git a/src/main/org/apache/tools/ant/ProjectHelper.java b/src/main/org/apache/tools/ant/ProjectHelper.java index c5241eb6c..31ee8405c 100644 --- a/src/main/org/apache/tools/ant/ProjectHelper.java +++ b/src/main/org/apache/tools/ant/ProjectHelper.java @@ -83,21 +83,57 @@ public class ProjectHelper { } /** - * Possible value for target's onMissingExtensionPoint attribute: - * fail if the extension-point is not defined. - */ - public static final String MISSING_EP_FAIL = "fail"; - /** - * Possible value for target's onMissingExtensionPoint attribute: - * warn if the extension-point is not defined. - */ - public static final String MISSING_EP_WARN = "warn"; - /** - * Possible value for target's onMissingExtensionPoint attribute: - * ignore the extensionOf attribute if the extension-point is not - * defined. + * Possible value for target's onMissingExtensionPoint attribute. It determines how to deal with + * targets that want to extend missing extension-points. + *
+ * This class behaves like a Java 1.5 Enum class.
+ *
+ * @since 1.8.2
*/
- public static final String MISSING_EP_IGNORE = "ignore";
+ public final static class OnMissingExtensionPoint {
+
+ /** fail if the extension-point is not defined */
+ public static final OnMissingExtensionPoint FAIL = new OnMissingExtensionPoint(
+ "fail");
+
+ /** warn if the extension-point is not defined */
+ public static final OnMissingExtensionPoint WARN = new OnMissingExtensionPoint(
+ "warn");
+
+ /** ignore the extensionOf attribute if the extension-point is not defined */
+ public static final OnMissingExtensionPoint IGNORE = new OnMissingExtensionPoint(
+ "ignore");
+
+ private static final OnMissingExtensionPoint[] values = new OnMissingExtensionPoint[] {
+ FAIL, WARN, IGNORE };
+
+ private final String name;
+
+ private OnMissingExtensionPoint(String name) {
+ this.name = name;
+ }
+
+ public String name() {
+ return name;
+ }
+
+ public String toString() {
+ return name;
+ }
+
+ public static OnMissingExtensionPoint valueOf(String name) {
+ if (name == null) {
+ throw new NullPointerException();
+ }
+ for (int i = 0; i < values.length; i++) {
+ if (name.equals(values[i].name())) {
+ return values[i];
+ }
+ }
+ throw new IllegalArgumentException(
+ "Unknown onMissingExtensionPoint " + name);
+ }
+ }
/** Default constructor */
public ProjectHelper() {
@@ -127,9 +163,8 @@ public class ProjectHelper {
*
* @return a list of three element string arrays where the first
* element is the name of the extensionpoint, the second the name
- * of the target and the third one of the MISSINS_EP constants
- * defined inside this class - it determines how to deal with
- * targets that want to extend missing extension-points.
+ * of the target and the third the name of the enum like class
+ * {@link OnMissingExtensionPoint}.
*/
public List getExtensionStack() {
return extensionStack;
diff --git a/src/main/org/apache/tools/ant/helper/ProjectHelper2.java b/src/main/org/apache/tools/ant/helper/ProjectHelper2.java
index e5ff216fa..45efdae5d 100644
--- a/src/main/org/apache/tools/ant/helper/ProjectHelper2.java
+++ b/src/main/org/apache/tools/ant/helper/ProjectHelper2.java
@@ -184,15 +184,16 @@ public class ProjectHelper2 extends ProjectHelper {
String[] extensionInfo = (String[]) i.next();
String tgName = extensionInfo[0];
String name = extensionInfo[1];
- String missingBehaviour = extensionInfo[2];
+ 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.equals(MISSING_EP_FAIL)) {
+ if (missingBehaviour == OnMissingExtensionPoint.FAIL) {
throw new BuildException(message);
- } else if (missingBehaviour.equals(MISSING_EP_WARN)) {
+ } else if (missingBehaviour == OnMissingExtensionPoint.WARN) {
Target target = (Target) projectTargets.get(name);
context.getProject().log(target,
"Warning: " + message,
@@ -914,7 +915,7 @@ public class ProjectHelper2 extends ProjectHelper {
String name = null;
String depends = "";
String extensionPoint = null;
- String extensionPointMissing = null;
+ OnMissingExtensionPoint extensionPointMissing = null;
Project project = context.getProject();
Target target = "target".equals(tag)
@@ -951,7 +952,11 @@ public class ProjectHelper2 extends ProjectHelper {
} else if (key.equals("extensionOf")) {
extensionPoint = value;
} else if (key.equals("onMissingExtensionPoint")) {
- extensionPointMissing = value;
+ try {
+ extensionPointMissing = OnMissingExtensionPoint.valueOf(value);
+ } catch (IllegalArgumentException e) {
+ throw new BuildException("Invalid onMissingExtensionPoint " + value);
+ }
} else {
throw new SAXParseException("Unexpected attribute \"" + key + "\"", context
.getLocator());
@@ -1039,25 +1044,12 @@ public class ProjectHelper2 extends ProjectHelper {
tgName = prefix + sep + tgName;
}
if (extensionPointMissing == null) {
- extensionPointMissing = MISSING_EP_FAIL;
- }
- if (extensionPointMissing.equals(MISSING_EP_FAIL) ||
- extensionPointMissing.equals(MISSING_EP_IGNORE) ||
- extensionPointMissing.equals(MISSING_EP_WARN)) {
- // defer extensionpoint resolution until the full
- // import stack has been processed
- helper.getExtensionStack().add(new String[] {
- tgName, name, extensionPointMissing
- });
- } else {
- throw new BuildException("onMissingExtensionPoint"
- + " attribute can only be '"
- + MISSING_EP_FAIL
- + "', '" + MISSING_EP_WARN
- + "' or '" + MISSING_EP_IGNORE
- + "'",
- target.getLocation());
+ extensionPointMissing = OnMissingExtensionPoint.FAIL;
}
+ // defer extensionpoint resolution until the full
+ // import stack has been processed
+ helper.getExtensionStack().add(new String[] {
+ tgName, name, extensionPointMissing.name() });
}
}
}
diff --git a/src/main/org/apache/tools/ant/taskdefs/BindTargets.java b/src/main/org/apache/tools/ant/taskdefs/BindTargets.java
index c40fd74ad..2ba79edc2 100644
--- a/src/main/org/apache/tools/ant/taskdefs/BindTargets.java
+++ b/src/main/org/apache/tools/ant/taskdefs/BindTargets.java
@@ -23,6 +23,7 @@ import java.util.List;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.ProjectHelper;
+import org.apache.tools.ant.ProjectHelper.OnMissingExtensionPoint;
import org.apache.tools.ant.Task;
/**
@@ -34,13 +35,21 @@ public class BindTargets extends Task {
private List/*