From 03b6e25418f4b94cbb94e191d23d8ab0ba7b8f6e Mon Sep 17 00:00:00 2001 From: Costin Manolache Date: Thu, 18 Jul 2002 20:47:32 +0000 Subject: [PATCH] Merged all the changes from ProjectHelper. The only thing not merged is 'description' - I would rather add a 'description' task, it's cleaner. git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@273131 13f79535-47bb-0310-9956-ffa450edef68 --- .../sandbox/embed/ProjectHelperImpl2.java | 140 ++++++------------ proposal/sandbox/embed/ant-sax2.jar | Bin 44270 -> 43567 bytes 2 files changed, 45 insertions(+), 95 deletions(-) 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 the id 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 c2334e58de3d4742c161662d4e60f3c7847d8188..cabbafe240fbf312f8fca15376ebf200e2ccc65e 100644 GIT binary patch delta 15446 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