diff --git a/proposal/sandbox/embed/ProjectHelperImpl2.java b/proposal/sandbox/embed/ProjectHelperImpl2.java index 2b4534471..9d03a85f6 100644 --- a/proposal/sandbox/embed/ProjectHelperImpl2.java +++ b/proposal/sandbox/embed/ProjectHelperImpl2.java @@ -60,6 +60,7 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; +import java.io.UnsupportedEncodingException; import java.util.Hashtable; import java.util.Vector; import java.util.Enumeration; @@ -67,7 +68,6 @@ import java.util.Locale; import java.util.Stack; import org.xml.sax.Locator; import org.xml.sax.InputSource; -//import org.xml.sax.HandlerBase; import org.xml.sax.SAXParseException; import org.xml.sax.XMLReader; import org.xml.sax.SAXException; @@ -78,11 +78,8 @@ import org.xml.sax.helpers.XMLReaderAdapter; import org.xml.sax.helpers.DefaultHandler; import org.xml.sax.helpers.AttributeListImpl; -import javax.xml.parsers.SAXParserFactory; -import javax.xml.parsers.SAXParser; -import javax.xml.parsers.ParserConfigurationException; +import org.apache.tools.ant.util.JAXPUtils; -import org.apache.tools.ant.types.SystemPath; /** * Sax2 based project reader * @@ -92,12 +89,6 @@ import org.apache.tools.ant.types.SystemPath; public class ProjectHelperImpl2 extends ProjectHelper { /* Stateless */ - /** - * Parser factory to use to create parsers. - * @see #getParserFactory - */ - private static SAXParserFactory parserFactory = null; - /** * Parses the project file, configuring the project as it goes. * @@ -106,7 +97,11 @@ public class ProjectHelperImpl2 extends ProjectHelper { */ public void parse(Project project, Object source) throws BuildException { // Hook our one tasks. - project.addDataTypeDefinition( "systemPath" , SystemPath.class ); + try { + Class c=Class.forName("org.apache.tools.ant.types.SystemPath"); + project.addDataTypeDefinition( "systemPath" , c ); + } catch (Exception ex ) { + } AntXmlContext context=new AntXmlContext(); if(source instanceof File) { @@ -132,12 +127,7 @@ public class ProjectHelperImpl2 extends ProjectHelper { */ org.xml.sax.XMLReader parser; - if (parserFactory == null) { - parserFactory = SAXParserFactory.newInstance(); - } - - SAXParser saxParser = parserFactory.newSAXParser(); - parser =saxParser.getXMLReader(); + parser =JAXPUtils.getXMLReader(); String uri = "file:" + context.buildFile.getAbsolutePath().replace('\\', '/'); for (int index = uri.indexOf('#'); index != -1; index = uri.indexOf('#')) { @@ -156,13 +146,9 @@ public class ProjectHelperImpl2 extends ProjectHelper { parser.setErrorHandler(hb); parser.setDTDHandler(hb); parser.parse(inputSource); - } - catch(ParserConfigurationException exc) { - throw new BuildException("Parser has not been configured correctly", exc); - } - catch(SAXParseException exc) { + } catch(SAXParseException exc) { Location location = - new Location(context.buildFile.toString(), exc.getLineNumber(), exc.getColumnNumber()); + new Location(exc.getSystemId(), exc.getLineNumber(), exc.getColumnNumber()); Throwable t = exc.getException(); if (t instanceof BuildException) { @@ -185,8 +171,11 @@ public class ProjectHelperImpl2 extends ProjectHelper { catch(FileNotFoundException exc) { throw new BuildException(exc); } + catch(UnsupportedEncodingException exc) { + throw new BuildException("Encoding of project file is invalid.",exc); + } catch(IOException exc) { - throw new BuildException("Error reading project file", exc); + throw new BuildException("Error reading project file: " +exc.getMessage(), exc); } finally { if (inputStream != null) { @@ -301,6 +290,18 @@ public class ProjectHelperImpl2 extends ProjectHelper { */ Locator locator; + /** + * Target that all other targets will depend upon implicitly. + * + *
This holds all tasks and data type definitions that have + * been placed outside of targets.
+ */ + Target implicitTarget = new Target(); + + public AntXmlContext() { + implicitTarget.setName(""); + } + /** * Scans an attribute list for theid
attribute and
* stores a reference to the target object in the project if an
@@ -431,7 +432,6 @@ public class ProjectHelperImpl2 extends ProjectHelper {
* @exception SAXException in case of error (not thrown in
* this implementation)
*
- * @see #finished()
*/
public void endElement(String uri, String name, String qName) throws SAXException {
currentHandler.onEndElement(uri, name, context);
@@ -521,14 +521,12 @@ public class ProjectHelperImpl2 extends ProjectHelper {
}
}
- if (def == null) {
- throw new SAXParseException("The default attribute of project is required",
- context.locator);
- }
-
Project project=context.project;
- project.setDefaultTarget(def);
+ if (def != null && !def.equals("")) {
+ project.setDefaultTarget(def);
+ }
+
if (name != null) {
project.setName(name);
project.addReference(name, project);
@@ -553,7 +551,7 @@ public class ProjectHelperImpl2 extends ProjectHelper {
}
}
}
-
+ project.addTarget("", context.implicitTarget);
}
/**
@@ -576,16 +574,12 @@ public class ProjectHelperImpl2 extends ProjectHelper {
AntXmlContext context)
throws SAXParseException
{
- if (qname.equals("taskdef")) {
- return new TaskHandler(null, null, null);
- } else if (qname.equals("typedef")) {
- return new TaskHandler(null, null, null);
- } else if (qname.equals("property")) {
- return new TaskHandler(null, null, null);
- } else if (qname.equals("target")) {
+ if (qname.equals("target")) {
return new TargetHandler();
} else if (context.project.getDataTypeDefinitions().get(qname) != null) {
- return new DataTypeHandler(null);
+ return new DataTypeHandler(context.implicitTarget);
+ } else if (context.project.getTaskDefinitions().get(qname) != null) {
+ return new TaskHandler(context.implicitTarget,null,context.implicitTarget);
} else {
throw new SAXParseException("Unexpected element \"" + qname + "\" " + name, context.locator);
}
@@ -633,6 +627,8 @@ public class ProjectHelperImpl2 extends ProjectHelper {
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")) {
@@ -654,6 +650,7 @@ public class ProjectHelperImpl2 extends ProjectHelper {
}
target = new Target();
+ target.addDependency( "" );
target.setName(name);
target.setIf(ifCond);
target.setUnless(unlessCond);
@@ -731,18 +728,13 @@ public class ProjectHelperImpl2 extends ProjectHelper {
* Must not be null
.
*
* @param container Container for the element.
- * May be null
if the target is
- * null
as well. If the
- * target is null
, this parameter
- * is effectively ignored.
+ * Must not be null
*
* @param parentWrapper Wrapper for the parent element, if any.
- * May be null
. If the
- * target is null
, this parameter
- * is effectively ignored.
+ * May be null
.
*
* @param target Target this element is part of.
- * May be null
.
+ * Must not be null
.
*/
public TaskHandler(TaskContainer container, RuntimeConfigurable2 parentWrapper, Target target) {
this.container = container;
@@ -785,13 +777,11 @@ public class ProjectHelperImpl2 extends ProjectHelper {
task.setTaskName(qname);
}
- task.setLocation(new Location(context.buildFile.toString(),
+ task.setLocation(new Location(context.locator.getSystemId(),
context.locator.getLineNumber(),
context.locator.getColumnNumber()));
context.configureId(task, attrs);
- // Top level tasks don't have associated targets
- if (target != null) {
task.setOwningTarget(target);
container.addTask(task);
task.init();
@@ -801,25 +791,11 @@ public class ProjectHelperImpl2 extends ProjectHelper {
if (parentWrapper != null) {
parentWrapper.addChild(wrapper);
}
- } else {
- task.init();
- PropertyHelper.getPropertyHelper(context.project).configure(task, attrs, context.project);
- }
}
- /**
- * Executes the task if it is a top-level one.
- */
- public void onEndElement(String uri, String tag, AntXmlContext context) {
- if (task != null && target == null) {
- task.execute();
- }
- }
/**
- * Adds text to the task, using the wrapper if one is
- * available (in other words if the task is within a target)
- * or using addText otherwise.
+ * Adds text to the task, using the wrapper
*
* @param buf A character array of the text within the element.
* Will not be null
.
@@ -834,15 +810,7 @@ public class ProjectHelperImpl2 extends ProjectHelper {
AntXmlContext context)
throws SAXParseException
{
- if (wrapper == null) {
- try {
- ProjectHelper.addText(context.project, task, buf, start, count);
- } catch (BuildException exc) {
- throw new SAXParseException(exc.getMessage(), context.locator, exc);
- }
- } else {
wrapper.addText(buf, start, count);
- }
}
/**
@@ -907,10 +875,10 @@ public class ProjectHelperImpl2 extends ProjectHelper {
* Must not be null
.
*
* @param parentWrapper Wrapper for the parent element, if any.
- * May be null
.
+ * Must not be null
.
*
* @param target Target this element is part of.
- * May be null
.
+ * Must not be null
.
*/
public NestedElementHandler(Object parent,
RuntimeConfigurable2 parentWrapper,
@@ -962,14 +930,9 @@ public class ProjectHelperImpl2 extends ProjectHelper {
context.configureId(child, attrs);
- if (parentWrapper != null) {
childWrapper = new RuntimeConfigurable2(child, qname);
childWrapper.setAttributes2(attrs);
parentWrapper.addChild(childWrapper);
- } else {
- PropertyHelper.getPropertyHelper(context.project).configure(child, attrs, context.project);
- ih.storeElement(context.project, parent, child, elementName);
- }
} catch (BuildException exc) {
throw new SAXParseException(exc.getMessage(), context.locator, exc);
}
@@ -992,15 +955,7 @@ public class ProjectHelperImpl2 extends ProjectHelper {
AntXmlContext context)
throws SAXParseException
{
- if (parentWrapper == null) {
- try {
- ProjectHelper.addText(context.project, child, buf, start, count);
- } catch (BuildException exc) {
- throw new SAXParseException(exc.getMessage(), context.locator, exc);
- }
- } else {
childWrapper.addText(buf, start, count);
- }
}
/**
@@ -1080,14 +1035,9 @@ public class ProjectHelperImpl2 extends ProjectHelper {
throw new BuildException("Unknown data type "+qname);
}
- if (target != null) {
wrapper = new RuntimeConfigurable2(element, qname);
wrapper.setAttributes2(attrs);
target.addDataType(wrapper);
- } else {
- PropertyHelper.getPropertyHelper(context.project).configure(element, attrs, context.project);
- context.configureId(element, attrs);
- }
} catch (BuildException exc) {
throw new SAXParseException(exc.getMessage(), context.locator, exc);
}
diff --git a/proposal/sandbox/embed/ant-sax2.jar b/proposal/sandbox/embed/ant-sax2.jar
index c2334e58d..cabbafe24 100644
Binary files a/proposal/sandbox/embed/ant-sax2.jar and b/proposal/sandbox/embed/ant-sax2.jar differ