in src/main/java/org/apache/easyant/core/ant/helper/EasyAntProjectHelper.java [91:254]
public void onStartElement(String uri, String tag, String qname, Attributes attrs, AntXMLContext context)
throws SAXParseException {
String name = null;
String depends = "";
String extensionPoint = null;
String phase = null;
OnMissingExtensionPoint extensionPointMissing = null;
Project project = context.getProject();
Target target;
if ("extension-point".equals(tag)) {
target = new ExtensionPoint();
} else if ("phase".equals(tag)) {
target = new Phase();
} else {
target = new Target();
}
target.setProject(project);
target.setLocation(new Location(context.getLocator()));
context.addTarget(target);
for (int i = 0; i < attrs.getLength(); i++) {
String attrUri = attrs.getURI(i);
if (attrUri != null && !attrUri.equals("") && !attrUri.equals(uri)) {
continue; // Ignore attributes from unknown uris
}
String key = attrs.getLocalName(i);
String value = attrs.getValue(i);
if (key.equals("name")) {
name = value;
if ("".equals(name)) {
throw new BuildException("name attribute must " + "not be empty");
}
} else if (key.equals("depends")) {
depends = value;
} else if (key.equals("if")) {
target.setIf(value);
} else if (key.equals("unless")) {
target.setUnless(value);
} else if (key.equals("id")) {
if (value != null && !value.equals("")) {
context.getProject().addReference(value, target);
}
} else if (key.equals("description")) {
target.setDescription(value);
} else if (key.equals("extensionOf")) {
extensionPoint = value;
} else if (key.equals("onMissingExtensionPoint")) {
try {
extensionPointMissing = OnMissingExtensionPoint.valueOf(value);
} catch (IllegalArgumentException e) {
throw new BuildException("Invalid onMissingExtensionPoint " + value);
}
} else if (key.equals("phase")) {
phase = value;
} else {
throw new SAXParseException("Unexpected attribute \"" + key + "\"", context.getLocator());
}
}
if (name == null) {
throw new SAXParseException("target element appears without a name attribute", context.getLocator());
}
boolean isPhase = target instanceof Phase;
String prefix = null;
boolean isInIncludeMode = context.isIgnoringProjectTag() && isInIncludeMode();
String sep = getCurrentPrefixSeparator();
if (isInIncludeMode && !isPhase) {
prefix = getTargetPrefix(context);
if (prefix == null) {
throw new BuildException("can't include build file " + context.getBuildFile()
+ ", no as attribute has been given" + " and the project tag doesn't"
+ " specify a name attribute");
}
name = prefix + sep + name;
}
// Check if this target is in the current build file
if (context.getCurrentTargets().get(name) != null) {
throw new BuildException("Duplicate target '" + name + "'", target.getLocation());
}
Map<String, Target> 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;
}
if (!depends.isEmpty()) {
if (!isInIncludeMode) {
target.setDepends(depends);
} else {
for (String curTarget : Target.parseDepends(depends, name, "depends")) {
if (projectTargets.containsKey(curTarget) && (projectTargets.get(curTarget) instanceof Phase)) {
target.addDependency(curTarget);
} else {
target.addDependency(prefix + sep + curTarget);
}
}
}
}
if (!isInIncludeMode && context.isIgnoringProjectTag() && (prefix = getTargetPrefix(context)) != null) {
// In an imported file (and not completely
// ignoring the project tag or having a preconfigured prefix)
String newName = prefix + sep + name;
Target newTarget = usedTarget ? new Target(target) : target;
newTarget.setName(newName);
context.getCurrentTargets().put(newName, newTarget);
project.addOrReplaceTarget(newName, newTarget);
}
if (extensionPointMissing != null && extensionPoint == null) {
throw new BuildException("onMissingExtensionPoint attribute cannot "
+ "be specified unless extensionOf is specified", target.getLocation());
}
if (extensionPoint != null) {
ProjectHelper helper = ProjectUtils.getConfiguredProjectHelper(context.getProject());
for (String tgName : Target.parseDepends(extensionPoint, name, "extensionOf")) {
if (isInIncludeMode()) {
tgName = prefix + sep + tgName;
}
if (extensionPointMissing == null) {
extensionPointMissing = OnMissingExtensionPoint.FAIL;
}
// defer extensionpoint resolution until the full
// import stack has been processed
helper.getExtensionStack().add(new String[]{tgName, name, extensionPointMissing.name()});
}
}
if (phase != null) {
if (!projectTargets.containsKey(phase)) {
if (!Project.toBoolean(project.getProperty("audit.mode"))) {
throw new BuildException("can't add target " + name + " to phase " + phase
+ " because the phase" + " is unknown.");
} else {
Phase p = new Phase();
p.setName(phase);
project.addTarget(p);
}
}
Target t = projectTargets.get(phase);
if (t != null) {
if (!(t instanceof Phase)) {
throw new BuildException("referenced target " + phase + " is not a phase");
}
t.addDependency(name);
}
}
}