Upgraded to checkstyle 2.1 git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@271412 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -0,0 +1,4 @@ | |||||
| bin | |||||
| dist | |||||
| bootstrap | |||||
| @@ -0,0 +1,28 @@ | |||||
| #!/bin/sh | |||||
| # Copyright (c) 2000-2001 The Apache Software Foundation. All rights | |||||
| # reserved. | |||||
| # cleanup curretn boot area | |||||
| rm -rf bin bootstrap | |||||
| # compile init jar | |||||
| mkdir -p bin/init | |||||
| javac -d bin/init src/java/init/org/apache/ant/init/*.java | |||||
| # compile bootstrap classes | |||||
| mkdir bin/bootstrap | |||||
| javac -classpath bin/init -d bin/bootstrap src/java/bootstrap/org/apache/ant/bootstrap/*.java | |||||
| # compiler builder classes | |||||
| mkdir bin/builder | |||||
| javac -classpath bin/init:bin/bootstrap -d bin/builder src/java/bootstrap/org/apache/ant/builder/*.java | |||||
| # run bootstrap | |||||
| java -classpath bin/init:bin/bootstrap org.apache.ant.bootstrap.Bootstrap | |||||
| # run full build using bootstrapped version | |||||
| java -classpath bootstrap/lib/start.jar:bootstrap/lib/init.jar org.apache.ant.start.Main $* | |||||
| # Use the full build as the build used by the build script | |||||
| cp -r dist/* bootstrap | |||||
| @@ -0,0 +1,6 @@ | |||||
| #!/bin/sh | |||||
| # Copyright (c) 2000-2001 The Apache Software Foundation. All rights | |||||
| # reserved. | |||||
| java -classpath bootstrap/lib/start.jar:bootstrap/lib/init.jar org.apache.ant.start.Main $* | |||||
| @@ -1,4 +1,4 @@ | |||||
| <project default="main" name="mutant"> | |||||
| <project default="main" name="Mutant"> | |||||
| <property name="src.dir" value="src"/> | <property name="src.dir" value="src"/> | ||||
| <property name="lib.dir" value="lib"/> | <property name="lib.dir" value="lib"/> | ||||
| @@ -103,7 +103,7 @@ | |||||
| </target> | </target> | ||||
| <target name="ant1compat" depends="common"> | <target name="ant1compat" depends="common"> | ||||
| <ant antfile="ant1compat.xml"/> | |||||
| <ant antfile="build/ant1compat.xml" /> | |||||
| </target> | </target> | ||||
| <target name="remote" depends="init"> | <target name="remote" depends="init"> | ||||
| @@ -130,7 +130,7 @@ | |||||
| <antcall target="build-lib" inheritall="false"> | <antcall target="build-lib" inheritall="false"> | ||||
| <param name="libset" value="system"/> | <param name="libset" value="system"/> | ||||
| </antcall> | </antcall> | ||||
| <ant antfile="script.xml" inheritAll="false"/> | |||||
| <ant antfile="build/script.xml" inheritAll="false"/> | |||||
| </target> | </target> | ||||
| <target name="build-lib"> | <target name="build-lib"> | ||||
| @@ -174,6 +174,8 @@ | |||||
| <exclude name="**/org/apache/tools/ant/Task.java"/> | <exclude name="**/org/apache/tools/ant/Task.java"/> | ||||
| <exclude name="**/org/apache/tools/ant/ProjectComponent.java"/> | <exclude name="**/org/apache/tools/ant/ProjectComponent.java"/> | ||||
| <exclude name="**/org/apache/tools/ant/types/DataType.java"/> | <exclude name="**/org/apache/tools/ant/types/DataType.java"/> | ||||
| <exclude name="**/builder/MutantBuilder.java"/> | |||||
| <exclude name="**/builder/Ant1CompatBuilder.java"/> | |||||
| </fileset> | </fileset> | ||||
| </checkstyle> | </checkstyle> | ||||
| <checkstyle maxlinelen="80" | <checkstyle maxlinelen="80" | ||||
| @@ -1,4 +1,4 @@ | |||||
| <project default="ant1compat" name="mutant Ant 1 compatability library"> | |||||
| <project default="ant1compat" name="Ant1Compat" basedir=".."> | |||||
| <property name="src.dir" value="src"/> | <property name="src.dir" value="src"/> | ||||
| <property name="lib.dir" value="lib"/> | <property name="lib.dir" value="lib"/> | ||||
| @@ -198,8 +198,8 @@ | |||||
| <classpath refid="classpath"/> | <classpath refid="classpath"/> | ||||
| </depend> | </depend> | ||||
| <javac destdir="${bin.dir}/ant1compat" | <javac destdir="${bin.dir}/ant1compat" | ||||
| srcdir="${bin.dir}/ant1src;${java.dir}/antlibs/ant1compat" | |||||
| includeAntRuntime="false" debug="${debug}"> | |||||
| srcdir="${bin.dir}/ant1src:${java.dir}/antlibs/ant1compat" | |||||
| debug="${debug}"> | |||||
| <classpath refid="classpath"/> | <classpath refid="classpath"/> | ||||
| <exclude name="${regexp.package}/JakartaRegexp*.java" | <exclude name="${regexp.package}/JakartaRegexp*.java" | ||||
| unless="jakarta.regexp.present" /> | unless="jakarta.regexp.present" /> | ||||
| @@ -0,0 +1,9 @@ | |||||
| <project name="mutant-bootstrap" default="main" basedir=".."> | |||||
| <target name="main"> | |||||
| <style in="build.xml" out="src/java/bootstrap/org/apache/ant/builder/MutantBuilder.java" | |||||
| style="build/bootstrap.xsl"/> | |||||
| <style in="build/ant1compat.xml" out="src/java/bootstrap/org/apache/ant/builder/Ant1CompatBuilder.java" | |||||
| style="build/bootstrap.xsl"/> | |||||
| </target> | |||||
| </project> | |||||
| @@ -0,0 +1,150 @@ | |||||
| <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> | |||||
| <xsl:strip-space elements="*"/> | |||||
| <xsl:output method="text" omit-xml-declaration="yes"/> | |||||
| <xsl:template match="project"> | |||||
| <xsl:text>package org.apache.ant.builder; </xsl:text> | |||||
| <xsl:text>public class </xsl:text> | |||||
| <xsl:value-of select="attribute::name"/> | |||||
| <xsl:text>Builder { </xsl:text> | |||||
| <xsl:text> protected void _init(BuildHelper helper) { </xsl:text> | |||||
| <xsl:apply-templates select="property"/> | |||||
| <xsl:apply-templates select="path"/> | |||||
| <xsl:text> } </xsl:text> | |||||
| <xsl:apply-templates select="target"/> | |||||
| <xsl:text>} </xsl:text> | |||||
| </xsl:template> | |||||
| <xsl:template match="property"> | |||||
| <xsl:text> helper.setProperty("</xsl:text> | |||||
| <xsl:value-of select="attribute::name"/> | |||||
| <xsl:text>", "</xsl:text> | |||||
| <xsl:value-of select="attribute::value"/> | |||||
| <xsl:text>"); </xsl:text> | |||||
| </xsl:template> | |||||
| <xsl:template match="path"> | |||||
| <xsl:text> helper.createPath("</xsl:text> | |||||
| <xsl:variable name="pathName" select="attribute::id"/> | |||||
| <xsl:value-of select="$pathName"/> | |||||
| <xsl:text>"); </xsl:text> | |||||
| <xsl:for-each select="fileset"> | |||||
| <xsl:text> </xsl:text> | |||||
| <xsl:text>helper.addFileSetToPath("</xsl:text> | |||||
| <xsl:value-of select="$pathName"/> | |||||
| <xsl:text>", </xsl:text> | |||||
| <xsl:text> "</xsl:text> | |||||
| <xsl:value-of select="attribute::dir"/> | |||||
| <xsl:text>", </xsl:text> | |||||
| <xsl:choose> | |||||
| <xsl:when test="attribute::includes"> | |||||
| <xsl:text>"</xsl:text> | |||||
| <xsl:value-of select="attribute::includes"/> | |||||
| <xsl:text>"</xsl:text> | |||||
| </xsl:when> | |||||
| <xsl:otherwise> | |||||
| <xsl:text>null</xsl:text> | |||||
| </xsl:otherwise> | |||||
| </xsl:choose> | |||||
| <xsl:text>); </xsl:text> | |||||
| </xsl:for-each> | |||||
| <xsl:for-each select="pathelement"> | |||||
| <xsl:text> </xsl:text> | |||||
| <xsl:text>helper.addPathElementToPath("</xsl:text> | |||||
| <xsl:value-of select="$pathName"/> | |||||
| <xsl:text>", "</xsl:text> | |||||
| <xsl:value-of select="attribute::location"/> | |||||
| <xsl:text>"); </xsl:text> | |||||
| </xsl:for-each> | |||||
| <xsl:for-each select="path"> | |||||
| <xsl:text> </xsl:text> | |||||
| <xsl:text>helper.addPathToPath("</xsl:text> | |||||
| <xsl:value-of select="$pathName"/> | |||||
| <xsl:text>", "</xsl:text> | |||||
| <xsl:value-of select="attribute::refid"/> | |||||
| <xsl:text>"); </xsl:text> | |||||
| </xsl:for-each> | |||||
| </xsl:template> | |||||
| <xsl:template match="target"> | |||||
| <xsl:text> protected void </xsl:text> | |||||
| <xsl:value-of select="translate(attribute::name, '-', '_')"/> | |||||
| <xsl:text>(BuildHelper helper) { </xsl:text> | |||||
| <xsl:apply-templates/> | |||||
| <xsl:text> } </xsl:text> | |||||
| </xsl:template> | |||||
| <xsl:template match="mkdir"> | |||||
| <xsl:text> helper.mkdir("</xsl:text> | |||||
| <xsl:value-of select="attribute::dir"/> | |||||
| <xsl:text>"); </xsl:text> | |||||
| </xsl:template> | |||||
| <xsl:template match="javac"> | |||||
| <xsl:text> helper.javac("</xsl:text> | |||||
| <xsl:value-of select="attribute::srcdir"/> | |||||
| <xsl:text>", "</xsl:text> | |||||
| <xsl:value-of select="attribute::destdir"/> | |||||
| <xsl:text>", </xsl:text> | |||||
| <xsl:choose> | |||||
| <xsl:when test="classpath"> | |||||
| <xsl:text>"</xsl:text> | |||||
| <xsl:value-of select="classpath/attribute::refid"/> | |||||
| <xsl:text>"</xsl:text> | |||||
| </xsl:when> | |||||
| <xsl:otherwise> | |||||
| <xsl:text>null</xsl:text> | |||||
| </xsl:otherwise> | |||||
| </xsl:choose> | |||||
| <xsl:text>); </xsl:text> | |||||
| </xsl:template> | |||||
| <xsl:template match="jar"> | |||||
| <xsl:text> helper.jar("</xsl:text> | |||||
| <xsl:value-of select="attribute::basedir"/> | |||||
| <xsl:text>", "</xsl:text> | |||||
| <xsl:value-of select="attribute::jarfile"/> | |||||
| <xsl:text>", </xsl:text> | |||||
| <xsl:choose> | |||||
| <xsl:when test="metainf"> | |||||
| <xsl:text>"</xsl:text> | |||||
| <xsl:value-of select="metainf/attribute::dir"/> | |||||
| <xsl:text>", </xsl:text> | |||||
| <xsl:choose> | |||||
| <xsl:when test="metainf/attribute::includes"> | |||||
| <xsl:text>"</xsl:text> | |||||
| <xsl:value-of select="metainf/attribute::includes"/> | |||||
| <xsl:text>"</xsl:text> | |||||
| </xsl:when> | |||||
| <xsl:otherwise> | |||||
| <xsl:text>null</xsl:text> | |||||
| </xsl:otherwise> | |||||
| </xsl:choose> | |||||
| </xsl:when> | |||||
| <xsl:otherwise> | |||||
| <xsl:text>null, null</xsl:text> | |||||
| </xsl:otherwise> | |||||
| </xsl:choose> | |||||
| <xsl:text>); </xsl:text> | |||||
| </xsl:template> | |||||
| <xsl:template match="copy/fileset"> | |||||
| <xsl:choose> | |||||
| <xsl:when test="attribute::refid"> | |||||
| <xsl:text> helper.copyFilesetRef("</xsl:text> | |||||
| <xsl:value-of select="attribute::refid"/> | |||||
| <xsl:text>", "</xsl:text> | |||||
| <xsl:value-of select="../attribute::todir"/> | |||||
| <xsl:text>"); </xsl:text> | |||||
| </xsl:when> | |||||
| <xsl:otherwise> | |||||
| <xsl:text> helper.copyFileset("</xsl:text> | |||||
| <xsl:value-of select="attribute::dir"/> | |||||
| <xsl:text>", "</xsl:text> | |||||
| <xsl:value-of select="../attribute::todir"/> | |||||
| <xsl:text>"); </xsl:text> | |||||
| </xsl:otherwise> | |||||
| </xsl:choose> | |||||
| </xsl:template> | |||||
| </xsl:stylesheet> | |||||
| @@ -0,0 +1,49 @@ | |||||
| <project name="build-site" default="docs" basedir="."> | |||||
| <!-- Initialization properties --> | |||||
| <property name="project.name" value="mutant"/> | |||||
| <property name="docs.src" location="xdocs"/> | |||||
| <property name="docs.dest" location="docs"/> | |||||
| <property name="project.file" value="stylesheets/project.xml" /> | |||||
| <property name="site.dir" location="../../../jakarta-site2" /> | |||||
| <property name="templ.path" location="xdocs/stylesheets" /> | |||||
| <property name="velocity.props" location="${docs.src}/velocity.properties" /> | |||||
| <path id="anakia.classpath"> | |||||
| <fileset dir="${site.dir}/lib"> | |||||
| <include name="*.jar"/> | |||||
| </fileset> | |||||
| </path> | |||||
| <target name="prepare"> | |||||
| <available classname="org.apache.velocity.anakia.AnakiaTask" | |||||
| property="AnakiaTask.present"> | |||||
| <classpath refid="anakia.classpath"/> | |||||
| </available> | |||||
| </target> | |||||
| <target depends="prepare" name="prepare-error" unless="AnakiaTask.present"> | |||||
| <echo> | |||||
| AnakiaTask is not present! Please check to make sure that | |||||
| velocity.jar is in your classpath. | |||||
| </echo> | |||||
| </target> | |||||
| <target name="docs" depends="prepare-error" if="AnakiaTask.present"> | |||||
| <taskdef name="anakia" classname="org.apache.velocity.anakia.AnakiaTask"> | |||||
| <classpath refid="anakia.classpath"/> | |||||
| </taskdef> | |||||
| <anakia basedir="${docs.src}" destdir="${docs.dest}/" | |||||
| extension=".html" style="./site.vsl" | |||||
| projectFile="${project.file}" | |||||
| excludes="**/stylesheets/** faq.xml" | |||||
| includes="**/*.xml" | |||||
| lastModifiedCheck="true" | |||||
| templatePath="${templ.path}" | |||||
| velocityPropertiesFile="${velocity.props}"> | |||||
| </anakia> | |||||
| </target> | |||||
| <target name="all" depends="docs"/> | |||||
| </project> | |||||
| @@ -1,4 +1,4 @@ | |||||
| <project default="build" name="Ant2 script tasks"> | |||||
| <project default="build" name="Ant2 script tasks" basedir=".."> | |||||
| <property name="src.dir" value="src"/> | <property name="src.dir" value="src"/> | ||||
| <property name="lib.dir" value="lib"/> | <property name="lib.dir" value="lib"/> | ||||
| @@ -65,24 +65,24 @@ import org.xml.sax.SAXParseException; | |||||
| */ | */ | ||||
| public class AntLibHandler extends ElementHandler { | public class AntLibHandler extends ElementHandler { | ||||
| /** The library identifier attribute name */ | /** The library identifier attribute name */ | ||||
| public final static String LIBID_ATTR = "libid"; | |||||
| public static final String LIBID_ATTR = "libid"; | |||||
| /** The home attribute name */ | /** The home attribute name */ | ||||
| public final static String HOME_ATTR = "home"; | |||||
| public static final String HOME_ATTR = "home"; | |||||
| /** | /** | ||||
| * The name of the attribute which indicates if Ant's XML parser is to | * The name of the attribute which indicates if Ant's XML parser is to | ||||
| * be made available | * be made available | ||||
| */ | */ | ||||
| public final static String REQXML_ATTR = "reqxml"; | |||||
| public static final String REQXML_ATTR = "reqxml"; | |||||
| /** The extends attribute name */ | /** The extends attribute name */ | ||||
| public final static String EXTENDS_ATTR = "extends"; | |||||
| public static final String EXTENDS_ATTR = "extends"; | |||||
| /** The name of the attribute which indicates tools jar is required */ | /** The name of the attribute which indicates tools jar is required */ | ||||
| public final static String REQTOOLS_ATTR = "reqtools"; | |||||
| public static final String REQTOOLS_ATTR = "reqtools"; | |||||
| /** The extends attribute name */ | /** The extends attribute name */ | ||||
| public final static String ISOLATED_ATTR = "isolated"; | |||||
| public static final String ISOLATED_ATTR = "isolated"; | |||||
| /** The list of allowed Attributes */ | /** The list of allowed Attributes */ | ||||
| public final static String[] ALLOWED_ATTRIBUTES | |||||
| public static final String[] ALLOWED_ATTRIBUTES | |||||
| = {LIBID_ATTR, HOME_ATTR, REQXML_ATTR, REQTOOLS_ATTR, | = {LIBID_ATTR, HOME_ATTR, REQXML_ATTR, REQTOOLS_ATTR, | ||||
| EXTENDS_ATTR, ISOLATED_ATTR}; | EXTENDS_ATTR, ISOLATED_ATTR}; | ||||
| @@ -78,7 +78,7 @@ import org.apache.ant.init.LoaderUtils; | |||||
| public class AntLibManager { | public class AntLibManager { | ||||
| /** The list of extensions which are examined for ant libraries */ | /** The list of extensions which are examined for ant libraries */ | ||||
| public final static String[] ANTLIB_EXTENSIONS | |||||
| public static final String[] ANTLIB_EXTENSIONS | |||||
| = new String[]{".tsk", ".jar", ".zip"}; | = new String[]{".tsk", ".jar", ".zip"}; | ||||
| /** Flag which indicates whether non-file URLS are used */ | /** Flag which indicates whether non-file URLS are used */ | ||||
| @@ -63,7 +63,7 @@ import org.xml.sax.SAXParseException; | |||||
| */ | */ | ||||
| public class ClassNameHandler extends ElementHandler { | public class ClassNameHandler extends ElementHandler { | ||||
| /** The classname attribute name */ | /** The classname attribute name */ | ||||
| public final static String CLASSNAME_ATTR = "classname"; | |||||
| public static final String CLASSNAME_ATTR = "classname"; | |||||
| /** | /** | ||||
| * Gets the className of the Converter | * Gets the className of the Converter | ||||
| @@ -64,9 +64,9 @@ import org.apache.ant.common.util.ExecutionException; | |||||
| */ | */ | ||||
| public interface ComponentLibrary { | public interface ComponentLibrary { | ||||
| /** constant indicating a taskdef definition */ | /** constant indicating a taskdef definition */ | ||||
| final static int TASKDEF = 1; | |||||
| public static final int TASKDEF = 1; | |||||
| /** constant indicating a typedef definition */ | /** constant indicating a typedef definition */ | ||||
| final static int TYPEDEF = 2; | |||||
| public static final int TYPEDEF = 2; | |||||
| /** | /** | ||||
| * Gets the ClassLoader of the AntLibrary | * Gets the ClassLoader of the AntLibrary | ||||
| @@ -64,10 +64,10 @@ import org.xml.sax.SAXParseException; | |||||
| */ | */ | ||||
| public class DefinitionHandler extends ElementHandler { | public class DefinitionHandler extends ElementHandler { | ||||
| /** The name attribute name */ | /** The name attribute name */ | ||||
| public final static String NAME_ATTR = "name"; | |||||
| public static final String NAME_ATTR = "name"; | |||||
| /** The classname attribute name */ | /** The classname attribute name */ | ||||
| public final static String CLASSNAME_ATTR = "classname"; | |||||
| public static final String CLASSNAME_ATTR = "classname"; | |||||
| /** the type of the definition */ | /** the type of the definition */ | ||||
| private String definitionType; | private String definitionType; | ||||
| @@ -65,7 +65,7 @@ import org.apache.ant.common.antlib.AntLibFactory; | |||||
| */ | */ | ||||
| public class DynamicLibrary implements ComponentLibrary { | public class DynamicLibrary implements ComponentLibrary { | ||||
| /** The name profix for naming dynamic libraries */ | /** The name profix for naming dynamic libraries */ | ||||
| public final static String DYNAMIC_LIB_PREFIX = "_internal"; | |||||
| public static final String DYNAMIC_LIB_PREFIX = "_internal"; | |||||
| /** A static field used to uniquely name dynamic libraries */ | /** A static field used to uniquely name dynamic libraries */ | ||||
| private static int dynamicIdCounter = 0; | private static int dynamicIdCounter = 0; | ||||
| @@ -65,16 +65,16 @@ import org.xml.sax.SAXParseException; | |||||
| */ | */ | ||||
| public class AntConfigHandler extends ElementHandler { | public class AntConfigHandler extends ElementHandler { | ||||
| /** The allowRemoteProject attribute name */ | /** The allowRemoteProject attribute name */ | ||||
| public final static String REMOTE_PROJECT_ATTR = "allow-remote-project"; | |||||
| public static final String REMOTE_PROJECT_ATTR = "allow-remote-project"; | |||||
| /** The allowRemoteLibrary attribute name */ | /** The allowRemoteLibrary attribute name */ | ||||
| public final static String REMOTE_LIBRARY_ATTR = "allow-remote-library"; | |||||
| public static final String REMOTE_LIBRARY_ATTR = "allow-remote-library"; | |||||
| /** The allowReportProject attribute name */ | /** The allowReportProject attribute name */ | ||||
| public final static String UNSET_PROPS_ATTR = "allow-unset-properties"; | |||||
| public static final String UNSET_PROPS_ATTR = "allow-unset-properties"; | |||||
| /** The list of allowed Attributes */ | /** The list of allowed Attributes */ | ||||
| public final static String[] ALLOWED_ATTRIBUTES | |||||
| public static final String[] ALLOWED_ATTRIBUTES | |||||
| = {REMOTE_PROJECT_ATTR, REMOTE_LIBRARY_ATTR, UNSET_PROPS_ATTR}; | = {REMOTE_PROJECT_ATTR, REMOTE_LIBRARY_ATTR, UNSET_PROPS_ATTR}; | ||||
| /** | /** | ||||
| * The config object which is contructed from the XML representation of | * The config object which is contructed from the XML representation of | ||||
| @@ -64,11 +64,11 @@ import org.xml.sax.SAXParseException; | |||||
| */ | */ | ||||
| public class LibPathHandler extends ElementHandler { | public class LibPathHandler extends ElementHandler { | ||||
| /** The library identifier attribute name */ | /** The library identifier attribute name */ | ||||
| public final static String LIBID_ATTR = "libid"; | |||||
| public static final String LIBID_ATTR = "libid"; | |||||
| /** The path attribute name */ | /** The path attribute name */ | ||||
| public final static String PATH_ATTR = "path"; | |||||
| public static final String PATH_ATTR = "path"; | |||||
| /** The path attribute name */ | /** The path attribute name */ | ||||
| public final static String URL_ATTR = "url"; | |||||
| public static final String URL_ATTR = "url"; | |||||
| /** | /** | ||||
| * Get the libraryId for which the additional path is being defined | * Get the libraryId for which the additional path is being defined | ||||
| @@ -64,7 +64,7 @@ import org.xml.sax.SAXParseException; | |||||
| */ | */ | ||||
| public class LoadLibHandler extends ElementHandler { | public class LoadLibHandler extends ElementHandler { | ||||
| /** The location attribute name */ | /** The location attribute name */ | ||||
| public final static String LOCATION_ATTR = "location"; | |||||
| public static final String LOCATION_ATTR = "location"; | |||||
| /** | /** | ||||
| * Get the location of the additional search directory | * Get the location of the additional search directory | ||||
| @@ -82,7 +82,7 @@ import org.apache.ant.common.util.ExecutionException; | |||||
| */ | */ | ||||
| public class ComponentManager implements ComponentService { | public class ComponentManager implements ComponentService { | ||||
| /** The prefix for library ids that are automatically imported */ | /** The prefix for library ids that are automatically imported */ | ||||
| public final static String ANT_LIB_PREFIX = "ant."; | |||||
| public static final String ANT_LIB_PREFIX = "ant."; | |||||
| /** | /** | ||||
| * Type converters for this frame. Converters are used when configuring | * Type converters for this frame. Converters are used when configuring | ||||
| @@ -267,6 +267,38 @@ public class ComponentManager implements ComponentService { | |||||
| addLibraryConverters(library); | addLibraryConverters(library); | ||||
| } | } | ||||
| /** | |||||
| * Imports a component defined in a nother frame. | |||||
| * | |||||
| * @param relativeName the qualified name of the component relative to | |||||
| * this execution frame | |||||
| * @param alias the name under which this component will be used in the | |||||
| * build scripts. If this is null, the components default name is | |||||
| * used. | |||||
| * @exception ExecutionException if the component cannot be imported | |||||
| */ | |||||
| public void importFrameComponent(String relativeName, String alias) | |||||
| throws ExecutionException { | |||||
| ImportInfo definition | |||||
| = frame.getReferencedDefinition(relativeName); | |||||
| if (definition == null) { | |||||
| throw new ExecutionException("The reference \"relativeName\" does" | |||||
| + " not refer to a defined component"); | |||||
| } | |||||
| String label = alias; | |||||
| if (label == null) { | |||||
| label = frame.getNameInFrame(relativeName); | |||||
| } | |||||
| frame.log("Adding referenced component <" + definition.getLocalName() | |||||
| + "> as <" + label + "> from library \"" | |||||
| + definition.getComponentLibrary().getLibraryId() + "\", class: " | |||||
| + definition.getClassName(), MessageLevel.MSG_DEBUG); | |||||
| definitions.put(label, definition); | |||||
| } | |||||
| /** | /** | ||||
| * Set the standard libraries (i.e. those which are independent of the | * Set the standard libraries (i.e. those which are independent of the | ||||
| * build files) to be used in this component manager | * build files) to be used in this component manager | ||||
| @@ -443,5 +475,6 @@ public class ComponentManager implements ComponentService { | |||||
| + className, e); | + className, e); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| @@ -82,7 +82,7 @@ public class CoreDataService implements DataService { | |||||
| * @param allowUnsetProperties true if the reference to an unset | * @param allowUnsetProperties true if the reference to an unset | ||||
| * property should not throw an exception | * property should not throw an exception | ||||
| */ | */ | ||||
| public CoreDataService(Frame frame, | |||||
| protected CoreDataService(Frame frame, | |||||
| boolean allowUnsetProperties) { | boolean allowUnsetProperties) { | ||||
| this.frame = frame; | this.frame = frame; | ||||
| this.allowUnsetProperties = allowUnsetProperties; | this.allowUnsetProperties = allowUnsetProperties; | ||||
| @@ -71,7 +71,7 @@ public class CoreEventService implements EventService { | |||||
| * | * | ||||
| * @param frame the frame for which this instance is providing service | * @param frame the frame for which this instance is providing service | ||||
| */ | */ | ||||
| public CoreEventService(Frame frame) { | |||||
| protected CoreEventService(Frame frame) { | |||||
| this.frame = frame; | this.frame = frame; | ||||
| } | } | ||||
| @@ -76,7 +76,7 @@ public class CoreFileService implements FileService { | |||||
| * | * | ||||
| * @param frame the frame containing this context | * @param frame the frame containing this context | ||||
| */ | */ | ||||
| public CoreFileService(Frame frame) { | |||||
| protected CoreFileService(Frame frame) { | |||||
| this.frame = frame; | this.frame = frame; | ||||
| } | } | ||||
| @@ -79,7 +79,7 @@ public class ExecutionContext implements AntContext { | |||||
| * | * | ||||
| * @param frame the frame containing this context | * @param frame the frame containing this context | ||||
| */ | */ | ||||
| public ExecutionContext(Frame frame) { | |||||
| protected ExecutionContext(Frame frame) { | |||||
| this.frame = frame; | this.frame = frame; | ||||
| this.eventSupport = frame.getEventSupport(); | this.eventSupport = frame.getEventSupport(); | ||||
| } | } | ||||
| @@ -89,7 +89,7 @@ public class ExecutionContext implements AntContext { | |||||
| * | * | ||||
| * @param modelElement the model element associated with this context | * @param modelElement the model element associated with this context | ||||
| */ | */ | ||||
| public void setModelElement(ModelElement modelElement) { | |||||
| protected void setModelElement(ModelElement modelElement) { | |||||
| this.modelElement = modelElement; | this.modelElement = modelElement; | ||||
| } | } | ||||
| @@ -94,7 +94,7 @@ import org.apache.ant.init.InitConfig; | |||||
| */ | */ | ||||
| public class Frame { | public class Frame { | ||||
| /** The Ant aspect used to identify Ant metadata */ | /** The Ant aspect used to identify Ant metadata */ | ||||
| public final static String ANT_ASPECT = "ant"; | |||||
| public static final String ANT_ASPECT = "ant"; | |||||
| /** the base dir of the project */ | /** the base dir of the project */ | ||||
| private File baseDir; | private File baseDir; | ||||
| @@ -222,8 +222,8 @@ public class Frame { | |||||
| throws ExecutionException { | throws ExecutionException { | ||||
| Frame frame = getContainingFrame(name); | Frame frame = getContainingFrame(name); | ||||
| if (frame == null) { | if (frame == null) { | ||||
| throw new ExecutionException("There is no project corresponding " | |||||
| + "to the name \"" + name + "\""); | |||||
| throw new ExecutionException("There is no project corresponding " | |||||
| + "to the name \"" + name + "\""); | |||||
| } | } | ||||
| if (frame == this) { | if (frame == this) { | ||||
| if (dataValues.containsKey(name) && !mutable) { | if (dataValues.containsKey(name) && !mutable) { | ||||
| @@ -265,6 +265,31 @@ public class Frame { | |||||
| initConfig.getAntHome().toString(), true); | initConfig.getAntHome().toString(), true); | ||||
| } | } | ||||
| /** | |||||
| * Get a definition from a referenced frame | |||||
| * | |||||
| * @param definitionName the name of the definition relative to this | |||||
| * frame | |||||
| * @return the appropriate import info object from the referenced | |||||
| * frame's imports | |||||
| * @exception ExecutionException if the referenced definition cannot be | |||||
| * found | |||||
| */ | |||||
| protected ImportInfo getReferencedDefinition(String definitionName) | |||||
| throws ExecutionException { | |||||
| Frame containingFrame = getContainingFrame(definitionName); | |||||
| String localName = getNameInFrame(definitionName); | |||||
| if (containingFrame == null) { | |||||
| throw new ExecutionException("There is no project corresponding " | |||||
| + "to the name \"" + definitionName + "\""); | |||||
| } | |||||
| if (containingFrame == this) { | |||||
| return componentManager.getDefinition(localName); | |||||
| } else { | |||||
| return containingFrame.getReferencedDefinition(localName); | |||||
| } | |||||
| } | |||||
| /** | /** | ||||
| * Gets the project model this frame is working with | * Gets the project model this frame is working with | ||||
| * | * | ||||
| @@ -404,8 +429,8 @@ public class Frame { | |||||
| protected Object getDataValue(String name) throws ExecutionException { | protected Object getDataValue(String name) throws ExecutionException { | ||||
| Frame frame = getContainingFrame(name); | Frame frame = getContainingFrame(name); | ||||
| if (frame == null) { | if (frame == null) { | ||||
| throw new ExecutionException("There is no project corresponding " | |||||
| + "to the name \"" + name + "\""); | |||||
| throw new ExecutionException("There is no project corresponding " | |||||
| + "to the name \"" + name + "\""); | |||||
| } | } | ||||
| if (frame == this) { | if (frame == this) { | ||||
| return dataValues.get(name); | return dataValues.get(name); | ||||
| @@ -426,8 +451,8 @@ public class Frame { | |||||
| protected boolean isDataValueSet(String name) throws ExecutionException { | protected boolean isDataValueSet(String name) throws ExecutionException { | ||||
| Frame frame = getContainingFrame(name); | Frame frame = getContainingFrame(name); | ||||
| if (frame == null) { | if (frame == null) { | ||||
| throw new ExecutionException("There is no project corresponding " | |||||
| + "to the name \"" + name + "\""); | |||||
| throw new ExecutionException("There is no project corresponding " | |||||
| + "to the name \"" + name + "\""); | |||||
| } | } | ||||
| if (frame == this) { | if (frame == this) { | ||||
| return dataValues.containsKey(name); | return dataValues.containsKey(name); | ||||
| @@ -436,6 +461,36 @@ public class Frame { | |||||
| } | } | ||||
| } | } | ||||
| /** | |||||
| * Get the execution frame which contains, directly, the named element | |||||
| * where the name is relative to this frame | |||||
| * | |||||
| * @param elementName The name of the element | |||||
| * @return the execution frame for the project that contains the given | |||||
| * target | |||||
| */ | |||||
| protected Frame getContainingFrame(String elementName) { | |||||
| int index = elementName.lastIndexOf(Project.REF_DELIMITER); | |||||
| if (index == -1) { | |||||
| return this; | |||||
| } | |||||
| Frame currentFrame = this; | |||||
| String relativeName = elementName.substring(0, index); | |||||
| StringTokenizer tokenizer | |||||
| = new StringTokenizer(relativeName, Project.REF_DELIMITER); | |||||
| while (tokenizer.hasMoreTokens()) { | |||||
| String refName = tokenizer.nextToken(); | |||||
| currentFrame = currentFrame.getReferencedFrame(refName); | |||||
| if (currentFrame == null) { | |||||
| return null; | |||||
| } | |||||
| } | |||||
| return currentFrame; | |||||
| } | |||||
| /** | /** | ||||
| * Add a collection of properties to this frame | * Add a collection of properties to this frame | ||||
| * | * | ||||
| @@ -706,36 +761,6 @@ public class Frame { | |||||
| return setter; | return setter; | ||||
| } | } | ||||
| /** | |||||
| * Get the execution frame which contains, directly, the named target | |||||
| * where the name is relative to this frame | |||||
| * | |||||
| * @param targetName The name of the target | |||||
| * @return the execution frame for the project that contains the given | |||||
| * target | |||||
| */ | |||||
| private Frame getContainingFrame(String targetName) { | |||||
| int index = targetName.lastIndexOf(Project.REF_DELIMITER); | |||||
| if (index == -1) { | |||||
| return this; | |||||
| } | |||||
| Frame currentFrame = this; | |||||
| String relativeName = targetName.substring(0, index); | |||||
| StringTokenizer tokenizer | |||||
| = new StringTokenizer(relativeName, Project.REF_DELIMITER); | |||||
| while (tokenizer.hasMoreTokens()) { | |||||
| String refName = tokenizer.nextToken(); | |||||
| currentFrame = currentFrame.getReferencedFrame(refName); | |||||
| if (currentFrame == null) { | |||||
| return null; | |||||
| } | |||||
| } | |||||
| return currentFrame; | |||||
| } | |||||
| /** | /** | ||||
| * Determine the base directory for each frame in the frame hierarchy | * Determine the base directory for each frame in the frame hierarchy | ||||
| * | * | ||||
| @@ -964,11 +989,11 @@ public class Frame { | |||||
| typeInstance = createTypeInstance(nestedType, factory, model, null); | typeInstance = createTypeInstance(nestedType, factory, model, null); | ||||
| } else { | } else { | ||||
| throw new ExecutionException("The type of the <" | |||||
| + nestedElementName + "> nested element is not known. " | |||||
| + "Please specify by the type using the \"ant:type\" " | |||||
| + "attribute or provide a reference to an instance with " | |||||
| + "the \"ant:id\" attribute"); | |||||
| throw new ExecutionException("The type of the <" | |||||
| + nestedElementName + "> nested element is not known. " | |||||
| + "Please specify by the type using the \"ant:type\" " | |||||
| + "attribute or provide a reference to an instance with " | |||||
| + "the \"ant:id\" attribute"); | |||||
| } | } | ||||
| // is the typeInstance compatible with the type expected | // is the typeInstance compatible with the type expected | ||||
| @@ -87,7 +87,7 @@ public class TaskContext extends ExecutionContext { | |||||
| * | * | ||||
| * @return the task instance | * @return the task instance | ||||
| */ | */ | ||||
| public Task getTask() { | |||||
| protected Task getTask() { | |||||
| return task; | return task; | ||||
| } | } | ||||
| @@ -96,7 +96,7 @@ public class TaskContext extends ExecutionContext { | |||||
| * | * | ||||
| * @return the task's loader | * @return the task's loader | ||||
| */ | */ | ||||
| public ClassLoader getLoader() { | |||||
| protected ClassLoader getLoader() { | |||||
| return loader; | return loader; | ||||
| } | } | ||||
| @@ -108,8 +108,8 @@ public class TaskContext extends ExecutionContext { | |||||
| * @param modelElement the model element associated with this context | * @param modelElement the model element associated with this context | ||||
| * @exception ExecutionException if the task cannot be initialized | * @exception ExecutionException if the task cannot be initialized | ||||
| */ | */ | ||||
| public void init(ClassLoader loader, Task task, ModelElement modelElement) | |||||
| throws ExecutionException { | |||||
| protected void init(ClassLoader loader, Task task, | |||||
| ModelElement modelElement) throws ExecutionException { | |||||
| this.task = task; | this.task = task; | ||||
| this.loader = loader; | this.loader = loader; | ||||
| setModelElement(modelElement); | setModelElement(modelElement); | ||||
| @@ -122,7 +122,7 @@ public class TaskContext extends ExecutionContext { | |||||
| * @exception ExecutionException if there is a problem executing the | * @exception ExecutionException if there is a problem executing the | ||||
| * task | * task | ||||
| */ | */ | ||||
| public void execute() throws ExecutionException { | |||||
| protected void execute() throws ExecutionException { | |||||
| task.execute(); | task.execute(); | ||||
| } | } | ||||
| @@ -130,7 +130,7 @@ public class TaskContext extends ExecutionContext { | |||||
| * Destroy this context. The context can be reused for another task | * Destroy this context. The context can be reused for another task | ||||
| * after this one | * after this one | ||||
| */ | */ | ||||
| public void destroy() { | |||||
| protected void destroy() { | |||||
| task.destroy(); | task.destroy(); | ||||
| task = null; | task = null; | ||||
| loader = null; | loader = null; | ||||
| @@ -69,7 +69,7 @@ import org.xml.sax.SAXParseException; | |||||
| */ | */ | ||||
| public class IncludeHandler extends ElementHandler { | public class IncludeHandler extends ElementHandler { | ||||
| /** The attribute name which identifies the fragment to be included */ | /** The attribute name which identifies the fragment to be included */ | ||||
| public final static String SYSTEMID_ATTR = "fragment"; | |||||
| public static final String SYSTEMID_ATTR = "fragment"; | |||||
| /** The including project */ | /** The including project */ | ||||
| private Project project; | private Project project; | ||||
| @@ -68,13 +68,13 @@ import org.xml.sax.SAXParseException; | |||||
| */ | */ | ||||
| public class ProjectHandler extends ElementHandler { | public class ProjectHandler extends ElementHandler { | ||||
| /** The basedir attribute tag */ | /** The basedir attribute tag */ | ||||
| public final static String BASEDIR_ATTR = "basedir"; | |||||
| public static final String BASEDIR_ATTR = "basedir"; | |||||
| /** The name attribute */ | /** The name attribute */ | ||||
| public final static String NAME_ATTR = "name"; | |||||
| public static final String NAME_ATTR = "name"; | |||||
| /** The default attribute name */ | /** The default attribute name */ | ||||
| public final static String DEFAULT_ATTR = "default"; | |||||
| public static final String DEFAULT_ATTR = "default"; | |||||
| /** The project being parsed. */ | /** The project being parsed. */ | ||||
| private Project project; | private Project project; | ||||
| @@ -70,10 +70,10 @@ import org.xml.sax.SAXParseException; | |||||
| */ | */ | ||||
| public class RefHandler extends ElementHandler { | public class RefHandler extends ElementHandler { | ||||
| /** The attribute used to name the ref. */ | /** The attribute used to name the ref. */ | ||||
| public final static String NAME_ATTR = "name"; | |||||
| public static final String NAME_ATTR = "name"; | |||||
| /** The attribute name used to locate the project to be referenced. */ | /** The attribute name used to locate the project to be referenced. */ | ||||
| public final static String SYSTEMID_ATTR = "project"; | |||||
| public static final String SYSTEMID_ATTR = "project"; | |||||
| /** The project that has been referenced. */ | /** The project that has been referenced. */ | ||||
| private Project referencedProject; | private Project referencedProject; | ||||
| @@ -67,19 +67,19 @@ import org.xml.sax.SAXParseException; | |||||
| */ | */ | ||||
| public class TargetHandler extends ElementHandler { | public class TargetHandler extends ElementHandler { | ||||
| /** The name attribute */ | /** The name attribute */ | ||||
| public final static String NAME_ATTR = "name"; | |||||
| public static final String NAME_ATTR = "name"; | |||||
| /** The depends attribute name */ | /** The depends attribute name */ | ||||
| public final static String DEPENDS_ATTR = "depends"; | |||||
| public static final String DEPENDS_ATTR = "depends"; | |||||
| /** The depends attribute name */ | /** The depends attribute name */ | ||||
| public final static String DESC_ATTR = "description"; | |||||
| public static final String DESC_ATTR = "description"; | |||||
| /** The if attribute name */ | /** The if attribute name */ | ||||
| public final static String IF_ATTR = "if"; | |||||
| public static final String IF_ATTR = "if"; | |||||
| /** The unless attribute name */ | /** The unless attribute name */ | ||||
| public final static String UNLESS_ATTR = "unless"; | |||||
| public static final String UNLESS_ATTR = "unless"; | |||||
| /** The target being configured. */ | /** The target being configured. */ | ||||
| private Target target; | private Target target; | ||||
| @@ -6,6 +6,7 @@ | |||||
| <converter classname="org.apache.tools.ant.Ant1Converter"/> | <converter classname="org.apache.tools.ant.Ant1Converter"/> | ||||
| <!-- typedefs --> | |||||
| <taskdef name="ant" classname="org.apache.tools.ant.taskdefs.Ant"/> | <taskdef name="ant" classname="org.apache.tools.ant.taskdefs.Ant"/> | ||||
| <taskdef name="antcall" classname="org.apache.tools.ant.taskdefs.CallTarget"/> | <taskdef name="antcall" classname="org.apache.tools.ant.taskdefs.CallTarget"/> | ||||
| <taskdef name="antlr" classname="org.apache.tools.ant.taskdefs.optional.ANTLR"/> | <taskdef name="antlr" classname="org.apache.tools.ant.taskdefs.optional.ANTLR"/> | ||||
| @@ -144,7 +145,14 @@ | |||||
| <taskdef name="wlstop" classname="org.apache.tools.ant.taskdefs.optional.ejb.WLStop"/> | <taskdef name="wlstop" classname="org.apache.tools.ant.taskdefs.optional.ejb.WLStop"/> | ||||
| <taskdef name="xmlvalidate" classname="org.apache.tools.ant.taskdefs.optional.XMLValidateTask"/> | <taskdef name="xmlvalidate" classname="org.apache.tools.ant.taskdefs.optional.XMLValidateTask"/> | ||||
| <taskdef name="zip" classname="org.apache.tools.ant.taskdefs.Zip"/> | <taskdef name="zip" classname="org.apache.tools.ant.taskdefs.Zip"/> | ||||
| <!-- Deprecated tasks --> | |||||
| <taskdef name="copydir" classname="org.apache.tools.ant.taskdefs.Copydir"/> | |||||
| <taskdef name="copyfile" classname="org.apache.tools.ant.taskdefs.Copyfile"/> | |||||
| <taskdef name="deltree" classname="org.apache.tools.ant.taskdefs.Deltree"/> | |||||
| <taskdef name="rename" classname="org.apache.tools.ant.taskdefs.Rename"/> | |||||
| <!-- typedefs --> | |||||
| <typedef name="path" classname="org.apache.tools.ant.types.Path"/> | <typedef name="path" classname="org.apache.tools.ant.types.Path"/> | ||||
| <typedef name="fileset" classname="org.apache.tools.ant.types.FileSet"/> | <typedef name="fileset" classname="org.apache.tools.ant.types.FileSet"/> | ||||
| <typedef name="filelist" classname="org.apache.tools.ant.types.FileList"/> | <typedef name="filelist" classname="org.apache.tools.ant.types.FileList"/> | ||||
| @@ -83,36 +83,36 @@ import org.apache.tools.ant.util.FileUtils; | |||||
| public class Project implements org.apache.ant.common.event.BuildListener { | public class Project implements org.apache.ant.common.event.BuildListener { | ||||
| /** String which indicates Java version 1.0 */ | /** String which indicates Java version 1.0 */ | ||||
| public final static String JAVA_1_0 = "1.0"; | |||||
| public static final String JAVA_1_0 = "1.0"; | |||||
| /** String which indicates Java version 1.1 */ | /** String which indicates Java version 1.1 */ | ||||
| public final static String JAVA_1_1 = "1.1"; | |||||
| public static final String JAVA_1_1 = "1.1"; | |||||
| /** String which indicates Java version 1.2 */ | /** String which indicates Java version 1.2 */ | ||||
| public final static String JAVA_1_2 = "1.2"; | |||||
| public static final String JAVA_1_2 = "1.2"; | |||||
| /** String which indicates Java version 1.3 */ | /** String which indicates Java version 1.3 */ | ||||
| public final static String JAVA_1_3 = "1.3"; | |||||
| public static final String JAVA_1_3 = "1.3"; | |||||
| /** String which indicates Java version 1.4 */ | /** String which indicates Java version 1.4 */ | ||||
| public final static String JAVA_1_4 = "1.4"; | |||||
| public static final String JAVA_1_4 = "1.4"; | |||||
| /** | /** | ||||
| * @see MessageLevel.MSG_ERR | * @see MessageLevel.MSG_ERR | ||||
| */ | */ | ||||
| public final static int MSG_ERR = MessageLevel.MSG_ERR; | |||||
| public static final int MSG_ERR = MessageLevel.MSG_ERR; | |||||
| /** | /** | ||||
| * @see MessageLevel.MSG_WARN | * @see MessageLevel.MSG_WARN | ||||
| */ | */ | ||||
| public final static int MSG_WARN = MessageLevel.MSG_WARN; | |||||
| public static final int MSG_WARN = MessageLevel.MSG_WARN; | |||||
| /** | /** | ||||
| * @see MessageLevel.MSG_INFO | * @see MessageLevel.MSG_INFO | ||||
| */ | */ | ||||
| public final static int MSG_INFO = MessageLevel.MSG_INFO; | |||||
| public static final int MSG_INFO = MessageLevel.MSG_INFO; | |||||
| /** | /** | ||||
| * @see MessageLevel.MSG_VERBOSE | * @see MessageLevel.MSG_VERBOSE | ||||
| */ | */ | ||||
| public final static int MSG_VERBOSE = MessageLevel.MSG_VERBOSE; | |||||
| public static final int MSG_VERBOSE = MessageLevel.MSG_VERBOSE; | |||||
| /** | /** | ||||
| * @see MessageLevel.MSG_DEBUG | * @see MessageLevel.MSG_DEBUG | ||||
| */ | */ | ||||
| public final static int MSG_DEBUG = MessageLevel.MSG_DEBUG; | |||||
| public static final int MSG_DEBUG = MessageLevel.MSG_DEBUG; | |||||
| /** The java version detected that Ant is running on */ | /** The java version detected that Ant is running on */ | ||||
| private static String javaVersion; | private static String javaVersion; | ||||
| @@ -69,7 +69,11 @@ public class Import extends AbstractTask { | |||||
| private String libraryId = null; | private String libraryId = null; | ||||
| /** The name of the component to be imported */ | /** The name of the component to be imported */ | ||||
| private String name = null; | private String name = null; | ||||
| /** | |||||
| * A ref is used to import a task which has been declared in another | |||||
| * project | |||||
| */ | |||||
| private String ref = null; | |||||
| /** The alias that is to be used for the name */ | /** The alias that is to be used for the name */ | ||||
| private String alias = null; | private String alias = null; | ||||
| @@ -85,16 +89,25 @@ public class Import extends AbstractTask { | |||||
| /** | /** | ||||
| * Sets the name of the Import | * Sets the name of the Import | ||||
| * | * | ||||
| * @param name the new name value | |||||
| * @param name the new name value | |||||
| */ | */ | ||||
| public void setName(String name) { | public void setName(String name) { | ||||
| this.name = name; | this.name = name; | ||||
| } | } | ||||
| /** | |||||
| * Set the reference name of a task defined in a referenced frame | |||||
| * | |||||
| * @param ref the new ref value | |||||
| */ | |||||
| public void setRef(String ref) { | |||||
| this.ref = ref; | |||||
| } | |||||
| /** | /** | ||||
| * Sets the alias of the Import | * Sets the alias of the Import | ||||
| * | * | ||||
| * @param alias the new alias value | |||||
| * @param alias the new alias value | |||||
| */ | */ | ||||
| public void setAlias(String alias) { | public void setAlias(String alias) { | ||||
| this.alias = alias; | this.alias = alias; | ||||
| @@ -106,13 +119,21 @@ public class Import extends AbstractTask { | |||||
| * @exception ExecutionException if the task is not configured correctly | * @exception ExecutionException if the task is not configured correctly | ||||
| */ | */ | ||||
| public void validateComponent() throws ExecutionException { | public void validateComponent() throws ExecutionException { | ||||
| if (libraryId == null) { | |||||
| throw new ExecutionException("You must specify a library identifier" | |||||
| + " with the \"libraryid\" attribute"); | |||||
| } | |||||
| if (alias != null && name == null) { | |||||
| throw new ExecutionException("You may only specify an alias" | |||||
| + " when you specify the component name"); | |||||
| if (ref != null) { | |||||
| if (libraryId != null || name != null) { | |||||
| throw new ExecutionException("The \"ref\" attribute can only " | |||||
| + "be used when \"libraryId\" and \"name\" attributes are " | |||||
| + "not present"); | |||||
| } | |||||
| } else { | |||||
| if (libraryId == null) { | |||||
| throw new ExecutionException("You must specify a library " | |||||
| + "identifier with the \"libraryid\" attribute"); | |||||
| } | |||||
| if (alias != null && name == null) { | |||||
| throw new ExecutionException("You may only specify an alias" | |||||
| + " when you specify the \"name\" or \"ref\" attributes"); | |||||
| } | |||||
| } | } | ||||
| } | } | ||||
| @@ -125,7 +146,9 @@ public class Import extends AbstractTask { | |||||
| AntContext context = getContext(); | AntContext context = getContext(); | ||||
| ComponentService componentService = (ComponentService) | ComponentService componentService = (ComponentService) | ||||
| context.getCoreService(ComponentService.class); | context.getCoreService(ComponentService.class); | ||||
| if (name == null) { | |||||
| if (ref != null) { | |||||
| componentService.importFrameComponent(ref, alias); | |||||
| } else if (name == null) { | |||||
| componentService.importLibrary(libraryId); | componentService.importLibrary(libraryId); | ||||
| } else { | } else { | ||||
| componentService.importComponent(libraryId, name, alias); | componentService.importComponent(libraryId, name, alias); | ||||
| @@ -0,0 +1,94 @@ | |||||
| /* | |||||
| * The Apache Software License, Version 1.1 | |||||
| * | |||||
| * Copyright (c) 2002 The Apache Software Foundation. All rights | |||||
| * reserved. | |||||
| * | |||||
| * Redistribution and use in source and binary forms, with or without | |||||
| * modification, are permitted provided that the following conditions | |||||
| * are met: | |||||
| * | |||||
| * 1. Redistributions of source code must retain the above copyright | |||||
| * notice, this list of conditions and the following disclaimer. | |||||
| * | |||||
| * 2. Redistributions in binary form must reproduce the above copyright | |||||
| * notice, this list of conditions and the following disclaimer in | |||||
| * the documentation and/or other materials provided with the | |||||
| * distribution. | |||||
| * | |||||
| * 3. The end-user documentation included with the redistribution, if | |||||
| * any, must include the following acknowlegement: | |||||
| * "This product includes software developed by the | |||||
| * Apache Software Foundation (http://www.apache.org/)." | |||||
| * Alternately, this acknowlegement may appear in the software itself, | |||||
| * if and wherever such third-party acknowlegements normally appear. | |||||
| * | |||||
| * 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||||
| * Foundation" must not be used to endorse or promote products derived | |||||
| * from this software without prior written permission. For written | |||||
| * permission, please contact apache@apache.org. | |||||
| * | |||||
| * 5. Products derived from this software may not be called "Apache" | |||||
| * nor may "Apache" appear in their names without prior written | |||||
| * permission of the Apache Group. | |||||
| * | |||||
| * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||||
| * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||||
| * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||||
| * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||||
| * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||||
| * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||||
| * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||||
| * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||||
| * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||||
| * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||||
| * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||||
| * SUCH DAMAGE. | |||||
| * ==================================================================== | |||||
| * | |||||
| * This software consists of voluntary contributions made by many | |||||
| * individuals on behalf of the Apache Software Foundation. For more | |||||
| * information on the Apache Software Foundation, please see | |||||
| * <http://www.apache.org/>. | |||||
| */ | |||||
| package org.apache.ant.bootstrap; | |||||
| import java.lang.reflect.Method; | |||||
| import java.net.URL; | |||||
| import java.net.URLClassLoader; | |||||
| import org.apache.ant.init.ClassLocator; | |||||
| /** | |||||
| * The Bootstrap class initailses the boot strap build, then loads the | |||||
| * Builder class to perform the bootstrap build. | |||||
| * | |||||
| * @author <a href="mailto:conor@apache.org">Conor MacNeill</a> | |||||
| * @created 18 February 2002 | |||||
| */ | |||||
| public class Bootstrap { | |||||
| /** | |||||
| * The main program - adds tools.jar and runs build | |||||
| * | |||||
| * @param args The command line arguments | |||||
| * @exception Exception if there is a bootstrap problem | |||||
| */ | |||||
| public static void main(String[] args) throws Exception { | |||||
| System.out.println("Bootstrapping mutant"); | |||||
| URL bootstrapURL = ClassLocator.getClassLocationURL(Bootstrap.class); | |||||
| URL builderURL = new URL(bootstrapURL, "../builder/"); | |||||
| URL toolsJarURL = ClassLocator.getToolsJarURL(); | |||||
| URL[] urls = new URL[]{builderURL, toolsJarURL}; | |||||
| ClassLoader builderLoader = new URLClassLoader(urls); | |||||
| // org.apache.ant.init.LoaderUtils.dumpLoader(System.out, | |||||
| // builderLoader); | |||||
| Class builderClass = Class.forName("org.apache.ant.builder.Builder", | |||||
| true, builderLoader); | |||||
| final Class[] param = {Class.forName("[Ljava.lang.String;")}; | |||||
| final Method main = builderClass.getMethod("main", param); | |||||
| final Object[] argument = {args}; | |||||
| main.invoke(null, argument); | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,37 @@ | |||||
| package org.apache.ant.builder; | |||||
| public class Ant1CompatBuilder { | |||||
| protected void _init(BuildHelper helper) { | |||||
| helper.setProperty("src.dir", "src"); | |||||
| helper.setProperty("lib.dir", "lib"); | |||||
| helper.setProperty("java.dir", "${src.dir}/java"); | |||||
| helper.setProperty("bin.dir", "bin"); | |||||
| helper.setProperty("dist.dir", "dist"); | |||||
| helper.setProperty("javadocs.dir", "${dist.dir}/javadocs"); | |||||
| helper.setProperty("distlib.dir", "${dist.dir}/lib"); | |||||
| helper.setProperty("debug", "true"); | |||||
| helper.setProperty("ant.package", "org/apache/tools/ant"); | |||||
| helper.setProperty("optional.package", "${ant.package}/taskdefs/optional"); | |||||
| helper.setProperty("optional.type.package", "${ant.package}/types/optional"); | |||||
| helper.setProperty("util.package", "${ant.package}/util"); | |||||
| helper.setProperty("regexp.package", "${util.package}/regexp"); | |||||
| helper.createPath("classpath"); | |||||
| helper.addFileSetToPath("classpath", "${lib.dir}/parser", "*.jar"); | |||||
| helper.addFileSetToPath("classpath", "${lib.dir}/ant1compat", "*.jar"); | |||||
| helper.addPathElementToPath("classpath", "${distlib.dir}/init.jar"); | |||||
| helper.addPathElementToPath("classpath", "${distlib.dir}/common/common.jar"); | |||||
| } | |||||
| protected void check_for_optional_packages(BuildHelper helper) { | |||||
| } | |||||
| protected void ant1compat(BuildHelper helper) { | |||||
| helper.mkdir("${bin.dir}/ant1src"); | |||||
| helper.mkdir("${bin.dir}/ant1compat"); | |||||
| helper.copyFilesetRef("ant1src", "${bin.dir}/ant1src"); | |||||
| helper.javac("${bin.dir}/ant1src:${java.dir}/antlibs/ant1compat", "${bin.dir}/ant1compat", "classpath"); | |||||
| helper.copyFileset("${bin.dir}/ant1src", "${bin.dir}/ant1compat"); | |||||
| helper.jar("${bin.dir}/ant1compat", "${distlib.dir}/antlibs/ant1compat.jar", | |||||
| "${java.dir}/antlibs/ant1compat", "antlib.xml"); | |||||
| } | |||||
| protected void clean(BuildHelper helper) { | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,504 @@ | |||||
| /* | |||||
| * The Apache Software License, Version 1.1 | |||||
| * | |||||
| * Copyright (c) 2002 The Apache Software Foundation. All rights | |||||
| * reserved. | |||||
| * | |||||
| * Redistribution and use in source and binary forms, with or without | |||||
| * modification, are permitted provided that the following conditions | |||||
| * are met: | |||||
| * | |||||
| * 1. Redistributions of source code must retain the above copyright | |||||
| * notice, this list of conditions and the following disclaimer. | |||||
| * | |||||
| * 2. Redistributions in binary form must reproduce the above copyright | |||||
| * notice, this list of conditions and the following disclaimer in | |||||
| * the documentation and/or other materials provided with the | |||||
| * distribution. | |||||
| * | |||||
| * 3. The end-user documentation included with the redistribution, if | |||||
| * any, must include the following acknowlegement: | |||||
| * "This product includes software developed by the | |||||
| * Apache Software Foundation (http://www.apache.org/)." | |||||
| * Alternately, this acknowlegement may appear in the software itself, | |||||
| * if and wherever such third-party acknowlegements normally appear. | |||||
| * | |||||
| * 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||||
| * Foundation" must not be used to endorse or promote products derived | |||||
| * from this software without prior written permission. For written | |||||
| * permission, please contact apache@apache.org. | |||||
| * | |||||
| * 5. Products derived from this software may not be called "Apache" | |||||
| * nor may "Apache" appear in their names without prior written | |||||
| * permission of the Apache Group. | |||||
| * | |||||
| * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||||
| * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||||
| * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||||
| * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||||
| * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||||
| * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||||
| * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||||
| * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||||
| * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||||
| * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||||
| * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||||
| * SUCH DAMAGE. | |||||
| * ==================================================================== | |||||
| * | |||||
| * This software consists of voluntary contributions made by many | |||||
| * individuals on behalf of the Apache Software Foundation. For more | |||||
| * information on the Apache Software Foundation, please see | |||||
| * <http://www.apache.org/>. | |||||
| */ | |||||
| package org.apache.ant.builder; | |||||
| import java.io.File; | |||||
| import java.io.FileInputStream; | |||||
| import java.io.FileOutputStream; | |||||
| import java.io.FilenameFilter; | |||||
| import java.io.IOException; | |||||
| import java.lang.reflect.Method; | |||||
| import java.util.ArrayList; | |||||
| import java.util.HashMap; | |||||
| import java.util.Iterator; | |||||
| import java.util.List; | |||||
| import java.util.Map; | |||||
| import java.util.StringTokenizer; | |||||
| import java.util.jar.JarOutputStream; | |||||
| import java.util.zip.ZipEntry; | |||||
| /** | |||||
| * A helper class which allows the build files which have been converted to | |||||
| * code to be built. | |||||
| * | |||||
| * @author <a href="mailto:conor@apache.org">Conor MacNeill</a> | |||||
| * @created 16 February 2002 | |||||
| */ | |||||
| public class BuildHelper { | |||||
| /** | |||||
| * Simple data class for storing info about a fileset. | |||||
| * | |||||
| * @author <a href="mailto:conor@apache.org">Conor MacNeill</a> | |||||
| * @created 18 February 2002 | |||||
| */ | |||||
| private static class FileSetInfo { | |||||
| /** The root directory of this fileset */ | |||||
| private File root; | |||||
| /** the list of files in the file set */ | |||||
| private File[] files; | |||||
| } | |||||
| /** The properties which have been defined in the build */ | |||||
| private Map properties = new HashMap(); | |||||
| /** Path objects created in the build */ | |||||
| private Map paths = new HashMap(); | |||||
| /** Filesets created in the build */ | |||||
| private Map filesets = new HashMap(); | |||||
| /** | |||||
| * Set a property for the build | |||||
| * | |||||
| * @param propertyName the name of the property | |||||
| * @param propertyValue the value of the property | |||||
| */ | |||||
| protected void setProperty(String propertyName, String propertyValue) { | |||||
| if (!properties.containsKey(propertyName)) { | |||||
| String value = resolve(propertyValue); | |||||
| properties.put(propertyName, value); | |||||
| } | |||||
| } | |||||
| /** | |||||
| * Create a Jar | |||||
| * | |||||
| * @param basedir the base directpory from which files are added to the | |||||
| * jar | |||||
| * @param metaInfDir the directory containing the META-INF for the jar | |||||
| * @param metaInfIncludes the files to be included in the META-INF area | |||||
| * of the jar | |||||
| * @param jarFile the file in which the Jar is created | |||||
| */ | |||||
| protected void jar(String basedir, String jarFile, String metaInfDir, | |||||
| String metaInfIncludes) { | |||||
| try { | |||||
| File base = new File(resolve(basedir)); | |||||
| File jar = new File(resolve(jarFile)); | |||||
| JarOutputStream jos | |||||
| = new JarOutputStream(new FileOutputStream(jar)); | |||||
| addToJar(jos, base, null); | |||||
| if (metaInfDir != null) { | |||||
| File[] metaFileSet = buildFileSet(metaInfDir, metaInfIncludes); | |||||
| addFilesToJar(jos, new File(resolve(metaInfDir)), | |||||
| metaFileSet, "META-INF"); | |||||
| } | |||||
| jos.close(); | |||||
| } catch (IOException e) { | |||||
| e.printStackTrace(); | |||||
| throw new RuntimeException("Unable to Jar file"); | |||||
| } | |||||
| } | |||||
| /** | |||||
| * Compile a set of files | |||||
| * | |||||
| * @param srcDir the source directory | |||||
| * @param destDir where the compiled classes will go | |||||
| * @param classpathRef the id of a path object with the classpath for | |||||
| * the build | |||||
| */ | |||||
| protected void javac(String srcDir, String destDir, String classpathRef) { | |||||
| List javaFiles = new ArrayList(); | |||||
| String src = resolve(srcDir); | |||||
| StringTokenizer tokenizer = new StringTokenizer(src, ":"); | |||||
| while (tokenizer.hasMoreTokens()) { | |||||
| File srcLocation = new File(tokenizer.nextToken()); | |||||
| getJavaFiles(srcLocation, javaFiles); | |||||
| } | |||||
| File dest = new File(resolve(destDir)); | |||||
| int numArgs = javaFiles.size() + 2; | |||||
| if (classpathRef != null) { | |||||
| numArgs += 2; | |||||
| } | |||||
| String[] args = new String[numArgs]; | |||||
| int index = 0; | |||||
| args[index++] = "-d"; | |||||
| args[index++] = dest.getPath(); | |||||
| if (classpathRef != null) { | |||||
| String path = (String)paths.get(resolve(classpathRef)); | |||||
| args[index++] = "-classpath"; | |||||
| args[index++] = path; | |||||
| } | |||||
| for (Iterator i = javaFiles.iterator(); i.hasNext(); ) { | |||||
| args[index++] = ((File)i.next()).getPath(); | |||||
| } | |||||
| try { | |||||
| Class c = Class.forName("com.sun.tools.javac.Main"); | |||||
| Object compiler = c.newInstance(); | |||||
| Method compile = c.getMethod("compile", | |||||
| new Class[]{(new String[]{}).getClass()}); | |||||
| compile.invoke(compiler, new Object[]{args}); | |||||
| } catch (Exception e) { | |||||
| e.printStackTrace(); | |||||
| throw new RuntimeException("Compile failed"); | |||||
| } | |||||
| } | |||||
| /** | |||||
| * Copy a directory | |||||
| * | |||||
| * @param fromDir the source directory name | |||||
| * @param toDir the destination directory name | |||||
| */ | |||||
| protected void copyFileset(String fromDir, String toDir) { | |||||
| File from = new File(resolve(fromDir)); | |||||
| File to = new File(resolve(toDir)); | |||||
| copyDir(from, to); | |||||
| } | |||||
| /** | |||||
| * Add a fileset to this build helper | |||||
| * | |||||
| * @param name the name of the fileset (its id) | |||||
| * @param root the root directory of the fileset | |||||
| * @param files the files in the fileset | |||||
| */ | |||||
| protected void addFileSet(String name, File root, File[] files) { | |||||
| FileSetInfo info = new FileSetInfo(); | |||||
| info.root = root; | |||||
| info.files = files; | |||||
| filesets.put(name, info); | |||||
| } | |||||
| /** | |||||
| * Copy a fileset given a reference to the source fileset | |||||
| * | |||||
| * @param toDir the name of the destination directory | |||||
| * @param fileSetRef the fileset to be copied | |||||
| */ | |||||
| protected void copyFilesetRef(String fileSetRef, String toDir) { | |||||
| FileSetInfo fileset = (FileSetInfo)filesets.get(resolve(fileSetRef)); | |||||
| if (fileset != null) { | |||||
| File to = new File(resolve(toDir)); | |||||
| copyFileList(fileset.root, fileset.files, to); | |||||
| } | |||||
| } | |||||
| /** | |||||
| * Make a directory | |||||
| * | |||||
| * @param dirName the name of the directory path to be created. | |||||
| */ | |||||
| protected void mkdir(String dirName) { | |||||
| File dir = new File(resolve(dirName)); | |||||
| dir.mkdirs(); | |||||
| } | |||||
| /** | |||||
| * Create a path object | |||||
| * | |||||
| * @param pathName the name of the path object in the build | |||||
| */ | |||||
| protected void createPath(String pathName) { | |||||
| String path = ""; | |||||
| paths.put(pathName, path); | |||||
| } | |||||
| /** | |||||
| * Add a fileset to a path | |||||
| * | |||||
| * @param pathName the name of the path | |||||
| * @param filesetDir the base directory of the fileset | |||||
| * @param filesetIncludes the files to be included in the fileset | |||||
| */ | |||||
| protected void addFileSetToPath(String pathName, String filesetDir, | |||||
| String filesetIncludes) { | |||||
| File[] files = buildFileSet(filesetDir, filesetIncludes); | |||||
| String currentPath = (String)paths.get(pathName); | |||||
| for (int i = 0; i < files.length; ++i) { | |||||
| if (currentPath == null || currentPath.length() == 0) { | |||||
| currentPath = files[i].getPath(); | |||||
| } else { | |||||
| currentPath = currentPath + File.pathSeparator | |||||
| + files[i].getPath(); | |||||
| } | |||||
| } | |||||
| paths.put(pathName, currentPath); | |||||
| } | |||||
| /** | |||||
| * Add a new element to a path | |||||
| * | |||||
| * @param pathName the name of the path object to be updated | |||||
| * @param location the location to be added to the path | |||||
| */ | |||||
| protected void addPathElementToPath(String pathName, String location) { | |||||
| String pathElement = resolve(location).replace('/', File.separatorChar); | |||||
| String currentPath = (String)paths.get(pathName); | |||||
| if (currentPath == null || currentPath.length() == 0) { | |||||
| currentPath = pathElement; | |||||
| } else { | |||||
| currentPath = currentPath + File.pathSeparator + pathElement; | |||||
| } | |||||
| paths.put(pathName, currentPath); | |||||
| } | |||||
| /** | |||||
| * Add an existing path to another path | |||||
| * | |||||
| * @param pathName the name of the path to which the path is to be added | |||||
| * @param pathNameToAdd the name of the path to be added. | |||||
| */ | |||||
| protected void addPathToPath(String pathName, String pathNameToAdd) { | |||||
| String pathToAdd = (String)paths.get(pathNameToAdd); | |||||
| if (pathToAdd == null || pathToAdd.length() == 0) { | |||||
| return; | |||||
| } | |||||
| String currentPath = (String)paths.get(pathName); | |||||
| if (currentPath == null || currentPath.length() == 0) { | |||||
| currentPath = pathToAdd; | |||||
| } else { | |||||
| currentPath = currentPath + File.pathSeparator + pathToAdd; | |||||
| } | |||||
| paths.put(pathName, currentPath); | |||||
| } | |||||
| /** | |||||
| * Get the set of Java files to be compiled | |||||
| * | |||||
| * @param srcDir the directory to search (recursively searched) | |||||
| * @param javaFiles the list of files to which Java files are added | |||||
| */ | |||||
| private void getJavaFiles(File srcDir, List javaFiles) { | |||||
| File[] files = srcDir.listFiles(); | |||||
| for (int i = 0; i < files.length; ++i) { | |||||
| if (files[i].isDirectory()) { | |||||
| getJavaFiles(files[i], javaFiles); | |||||
| } else if (files[i].getPath().endsWith(".java")) { | |||||
| javaFiles.add(files[i]); | |||||
| } | |||||
| } | |||||
| } | |||||
| /** | |||||
| * Copy a file | |||||
| * | |||||
| * @param from the source location | |||||
| * @param dest the destination location | |||||
| */ | |||||
| private void copyFile(File from, File dest) { | |||||
| if (from.exists()) { | |||||
| dest.getParentFile().mkdirs(); | |||||
| try { | |||||
| FileInputStream in = new FileInputStream(from); | |||||
| FileOutputStream out = new FileOutputStream(dest); | |||||
| byte[] buf = new byte[1024 * 16]; | |||||
| int count = 0; | |||||
| count = in.read(buf, 0, buf.length); | |||||
| while (count != -1) { | |||||
| out.write(buf, 0, count); | |||||
| count = in.read(buf, 0, buf.length); | |||||
| } | |||||
| in.close(); | |||||
| out.close(); | |||||
| } catch (IOException ioe) { | |||||
| ioe.printStackTrace(); | |||||
| throw new RuntimeException("Unable to copy files"); | |||||
| } | |||||
| } | |||||
| } | |||||
| /** | |||||
| * Copy a list of files from one directory to another, preserving the | |||||
| * relative paths | |||||
| * | |||||
| * @param root the root of the source directory | |||||
| * @param files the files to be copied | |||||
| * @param to the destination directory | |||||
| */ | |||||
| private void copyFileList(File root, File[] files, File to) { | |||||
| for (int i = 0; i < files.length; ++i) { | |||||
| if (files[i].getName().equals("CVS")) { | |||||
| continue; | |||||
| } | |||||
| String name | |||||
| = files[i].getPath().substring(root.getPath().length() + 1); | |||||
| File dest = new File(to, name); | |||||
| if (files[i].isDirectory()) { | |||||
| copyDir(files[i], dest); | |||||
| } else { | |||||
| copyFile(files[i], dest); | |||||
| } | |||||
| } | |||||
| } | |||||
| /** | |||||
| * Copy a directory | |||||
| * | |||||
| * @param from the source directory | |||||
| * @param to the destination directory | |||||
| */ | |||||
| private void copyDir(File from, File to) { | |||||
| to.mkdirs(); | |||||
| File[] files = from.listFiles(); | |||||
| copyFileList(from, files, to); | |||||
| } | |||||
| /** | |||||
| * Add a directory to a Jar | |||||
| * | |||||
| * @param jos the JarOutputStream representing the Jar being created | |||||
| * @param dir the directory to be added to the jar | |||||
| * @param prefix the prefix in the jar at which the directory is to be | |||||
| * added | |||||
| * @exception IOException if the files cannot be added to the jar | |||||
| */ | |||||
| private void addToJar(JarOutputStream jos, File dir, String prefix) | |||||
| throws IOException { | |||||
| File[] files = dir.listFiles(); | |||||
| addFilesToJar(jos, dir, files, prefix); | |||||
| } | |||||
| /** | |||||
| * Add a set of files to a jar | |||||
| * | |||||
| * @param jos the JarOutputStream representing the Jar being created | |||||
| * @param dir the directory fro which the files are taken | |||||
| * @param prefix the prefix in the jar at which the directory is to be | |||||
| * added | |||||
| * @param files the list of files to be added to the jar | |||||
| * @exception IOException if the files cannot be added to the jar | |||||
| */ | |||||
| private void addFilesToJar(JarOutputStream jos, File dir, | |||||
| File[] files, String prefix) throws IOException { | |||||
| for (int i = 0; i < files.length; i++) { | |||||
| String name = files[i].getPath().replace('\\', '/'); | |||||
| name = name.substring(dir.getPath().length() + 1); | |||||
| if (prefix != null) { | |||||
| name = prefix + "/" + name; | |||||
| } | |||||
| ZipEntry ze = new ZipEntry(name); | |||||
| jos.putNextEntry(ze); | |||||
| if (files[i].isDirectory()) { | |||||
| addToJar(jos, files[i], name); | |||||
| } else { | |||||
| FileInputStream fis = new FileInputStream(files[i]); | |||||
| int count = 0; | |||||
| byte[] buf = new byte[8 * 1024]; | |||||
| count = fis.read(buf, 0, buf.length); | |||||
| while (count != -1) { | |||||
| jos.write(buf, 0, count); | |||||
| count = fis.read(buf, 0, buf.length); | |||||
| } | |||||
| fis.close(); | |||||
| } | |||||
| } | |||||
| } | |||||
| /** | |||||
| * Build a simple fileset. Only simple inclusion filtering is supported | |||||
| * - no complicated patterns. | |||||
| * | |||||
| * @param filesetDir the base directory of the fileset | |||||
| * @param filesetIncludes the simple includes spec for the fileset | |||||
| * @return the fileset expressed as an array of File instances. | |||||
| */ | |||||
| private File[] buildFileSet(String filesetDir, String filesetIncludes) { | |||||
| if (filesetDir == null) { | |||||
| return new File[0]; | |||||
| } | |||||
| final String includes = resolve(filesetIncludes); | |||||
| if (includes.indexOf("**") != -1) { | |||||
| throw new RuntimeException("Simple fileset cannot handle ** " | |||||
| + "style includes"); | |||||
| } | |||||
| int index = 0; | |||||
| if (includes.charAt(0) == '*') { | |||||
| index = 1; | |||||
| } | |||||
| if (includes.indexOf("*", index) != -1) { | |||||
| throw new RuntimeException("Simple fileset cannot handle * " | |||||
| + "style includes except at start"); | |||||
| } | |||||
| File base = new File(resolve(filesetDir)); | |||||
| return base.listFiles( | |||||
| new FilenameFilter() { | |||||
| public boolean accept(File dir, String name) { | |||||
| if (includes.startsWith("*")) { | |||||
| return name.endsWith(includes.substring(1)); | |||||
| } else { | |||||
| return name.equals(includes); | |||||
| } | |||||
| } | |||||
| }); | |||||
| } | |||||
| /** | |||||
| * Resolve the property references in a string | |||||
| * | |||||
| * @param propertyValue the string to be resolved | |||||
| * @return the string with property references replaced by their current | |||||
| * value. | |||||
| */ | |||||
| private String resolve(String propertyValue) { | |||||
| String newValue = propertyValue; | |||||
| while (newValue.indexOf("${") != -1) { | |||||
| int index = newValue.indexOf("${"); | |||||
| int endIndex = newValue.indexOf("}", index); | |||||
| String propertyName = newValue.substring(index + 2, endIndex); | |||||
| String repValue = (String)properties.get(propertyName); | |||||
| newValue = newValue.substring(0, index) + | |||||
| repValue + newValue.substring(endIndex + 1); | |||||
| } | |||||
| return newValue; | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,241 @@ | |||||
| /* | |||||
| * The Apache Software License, Version 1.1 | |||||
| * | |||||
| * Copyright (c) 2002 The Apache Software Foundation. All rights | |||||
| * reserved. | |||||
| * | |||||
| * Redistribution and use in source and binary forms, with or without | |||||
| * modification, are permitted provided that the following conditions | |||||
| * are met: | |||||
| * | |||||
| * 1. Redistributions of source code must retain the above copyright | |||||
| * notice, this list of conditions and the following disclaimer. | |||||
| * | |||||
| * 2. Redistributions in binary form must reproduce the above copyright | |||||
| * notice, this list of conditions and the following disclaimer in | |||||
| * the documentation and/or other materials provided with the | |||||
| * distribution. | |||||
| * | |||||
| * 3. The end-user documentation included with the redistribution, if | |||||
| * any, must include the following acknowlegement: | |||||
| * "This product includes software developed by the | |||||
| * Apache Software Foundation (http://www.apache.org/)." | |||||
| * Alternately, this acknowlegement may appear in the software itself, | |||||
| * if and wherever such third-party acknowlegements normally appear. | |||||
| * | |||||
| * 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||||
| * Foundation" must not be used to endorse or promote products derived | |||||
| * from this software without prior written permission. For written | |||||
| * permission, please contact apache@apache.org. | |||||
| * | |||||
| * 5. Products derived from this software may not be called "Apache" | |||||
| * nor may "Apache" appear in their names without prior written | |||||
| * permission of the Apache Group. | |||||
| * | |||||
| * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||||
| * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||||
| * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||||
| * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||||
| * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||||
| * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||||
| * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||||
| * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||||
| * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||||
| * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||||
| * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||||
| * SUCH DAMAGE. | |||||
| * ==================================================================== | |||||
| * | |||||
| * This software consists of voluntary contributions made by many | |||||
| * individuals on behalf of the Apache Software Foundation. For more | |||||
| * information on the Apache Software Foundation, please see | |||||
| * <http://www.apache.org/>. | |||||
| */ | |||||
| package org.apache.ant.builder; | |||||
| import java.io.File; | |||||
| import java.util.ArrayList; | |||||
| import java.util.List; | |||||
| /** | |||||
| * The Builder object builds the code for bootstrap purposes. It invokes the | |||||
| * mathods of the required targets in the converted build files. | |||||
| * | |||||
| * @author <a href="mailto:conor@apache.org">Conor MacNeill</a> | |||||
| * @created 18 February 2002 | |||||
| */ | |||||
| public class Builder { | |||||
| /** The root of the Ant1 source tree */ | |||||
| private static final File ANT1_SRC_ROOT = new File("../../src/main"); | |||||
| /** the root of the Ant package in the Ant1 source tree */ | |||||
| private static final File PACKAGE_ROOT | |||||
| = new File(ANT1_SRC_ROOT, "org/apache/tools/ant"); | |||||
| /** The zip utilities root */ | |||||
| private static final File ZIP_ROOT | |||||
| = new File(ANT1_SRC_ROOT, "org/apache/tools/zip"); | |||||
| /** the taskdefs root */ | |||||
| private static final File TASKDEFS_ROOT | |||||
| = new File(PACKAGE_ROOT, "taskdefs"); | |||||
| /** the root forthe depend task's support classes */ | |||||
| private static final File DEPEND_ROOT | |||||
| = new File(TASKDEFS_ROOT, "optional/depend"); | |||||
| /** | |||||
| * The main program - create a builder and run the build | |||||
| * | |||||
| * @param args the command line arguments - not currently used | |||||
| */ | |||||
| public static void main(String[] args) { | |||||
| Builder builder = new Builder(); | |||||
| builder.runBuild(args); | |||||
| } | |||||
| /** | |||||
| * Get the Ant1 files currently required to build a bootstrap build. | |||||
| * | |||||
| * @return an array of files which need to be copied into the bootstrap | |||||
| * build. | |||||
| */ | |||||
| private File[] getAnt1Files() { | |||||
| List files = new ArrayList(); | |||||
| files.add(new File(PACKAGE_ROOT, "types/EnumeratedAttribute.java")); | |||||
| files.add(new File(PACKAGE_ROOT, "types/Path.java")); | |||||
| files.add(new File(PACKAGE_ROOT, "types/FileSet.java")); | |||||
| files.add(new File(PACKAGE_ROOT, "types/PatternSet.java")); | |||||
| files.add(new File(PACKAGE_ROOT, "types/Reference.java")); | |||||
| files.add(new File(PACKAGE_ROOT, "types/FilterSet.java")); | |||||
| files.add(new File(PACKAGE_ROOT, "types/FilterSetCollection.java")); | |||||
| files.add(new File(PACKAGE_ROOT, "types/Mapper.java")); | |||||
| files.add(new File(PACKAGE_ROOT, "types/ZipFileSet.java")); | |||||
| files.add(new File(PACKAGE_ROOT, "types/ZipScanner.java")); | |||||
| files.add(new File(PACKAGE_ROOT, "util/FileNameMapper.java")); | |||||
| files.add(new File(PACKAGE_ROOT, "util/FlatFileNameMapper.java")); | |||||
| files.add(new File(PACKAGE_ROOT, "util/SourceFileScanner.java")); | |||||
| files.add(new File(PACKAGE_ROOT, "util/IdentityMapper.java")); | |||||
| files.add(new File(PACKAGE_ROOT, "util/MergingMapper.java")); | |||||
| files.add(new File(PACKAGE_ROOT, "util/GlobPatternMapper.java")); | |||||
| files.add(new File(PACKAGE_ROOT, "types/Commandline.java")); | |||||
| files.add(new File(PACKAGE_ROOT, "BuildException.java")); | |||||
| files.add(new File(PACKAGE_ROOT, "Location.java")); | |||||
| files.add(new File(PACKAGE_ROOT, "AntClassLoader.java")); | |||||
| files.add(new File(PACKAGE_ROOT, "BuildListener.java")); | |||||
| files.add(new File(PACKAGE_ROOT, "BuildEvent.java")); | |||||
| files.add(new File(PACKAGE_ROOT, "DirectoryScanner.java")); | |||||
| files.add(new File(PACKAGE_ROOT, "FileScanner.java")); | |||||
| files.add(new File(PACKAGE_ROOT, "PathTokenizer.java")); | |||||
| files.add(new File(PACKAGE_ROOT, "util/FileUtils.java")); | |||||
| files.add(new File(PACKAGE_ROOT, "defaultManifest.mf")); | |||||
| files.add(new File(TASKDEFS_ROOT, "defaults.properties")); | |||||
| files.add(new File(PACKAGE_ROOT, "types/defaults.properties")); | |||||
| files.add(new File(TASKDEFS_ROOT, "Property.java")); | |||||
| files.add(new File(TASKDEFS_ROOT, "Execute.java")); | |||||
| files.add(new File(TASKDEFS_ROOT, "ExecuteStreamHandler.java")); | |||||
| files.add(new File(TASKDEFS_ROOT, "ExecuteWatchdog.java")); | |||||
| files.add(new File(TASKDEFS_ROOT, "ProcessDestroyer.java")); | |||||
| files.add(new File(TASKDEFS_ROOT, "PumpStreamHandler.java")); | |||||
| files.add(new File(TASKDEFS_ROOT, "StreamPumper.java")); | |||||
| files.add(new File(TASKDEFS_ROOT, "LogStreamHandler.java")); | |||||
| files.add(new File(TASKDEFS_ROOT, "LogOutputStream.java")); | |||||
| files.add(new File(TASKDEFS_ROOT, "condition/Os.java")); | |||||
| files.add(new File(TASKDEFS_ROOT, "condition/Condition.java")); | |||||
| files.add(new File(TASKDEFS_ROOT, "Available.java")); | |||||
| files.add(new File(TASKDEFS_ROOT, "Mkdir.java")); | |||||
| files.add(new File(TASKDEFS_ROOT, "Copy.java")); | |||||
| files.add(new File(TASKDEFS_ROOT, "MatchingTask.java")); | |||||
| files.add(new File(DEPEND_ROOT, "Depend.java")); | |||||
| files.add(new File(DEPEND_ROOT, "ClassFile.java")); | |||||
| files.add(new File(DEPEND_ROOT, "ClassFileUtils.java")); | |||||
| files.add(new File(DEPEND_ROOT, "constantpool/ClassCPInfo.java")); | |||||
| files.add(new File(DEPEND_ROOT, "constantpool/ConstantPool.java")); | |||||
| files.add(new File(DEPEND_ROOT, "constantpool/ConstantPoolEntry.java")); | |||||
| files.add(new File(DEPEND_ROOT, "constantpool/Utf8CPInfo.java")); | |||||
| files.add(new File(DEPEND_ROOT, "constantpool/ConstantCPInfo.java")); | |||||
| files.add(new File(DEPEND_ROOT, "constantpool/MethodRefCPInfo.java")); | |||||
| files.add(new File(DEPEND_ROOT, | |||||
| "constantpool/InterfaceMethodRefCPInfo.java")); | |||||
| files.add(new File(DEPEND_ROOT, "constantpool/FieldRefCPInfo.java")); | |||||
| files.add(new File(DEPEND_ROOT, "constantpool/NameAndTypeCPInfo.java")); | |||||
| files.add(new File(DEPEND_ROOT, "constantpool/IntegerCPInfo.java")); | |||||
| files.add(new File(DEPEND_ROOT, "constantpool/FloatCPInfo.java")); | |||||
| files.add(new File(DEPEND_ROOT, "constantpool/LongCPInfo.java")); | |||||
| files.add(new File(DEPEND_ROOT, "constantpool/StringCPInfo.java")); | |||||
| files.add(new File(DEPEND_ROOT, "constantpool/DoubleCPInfo.java")); | |||||
| files.add(new File(TASKDEFS_ROOT, "Javac.java")); | |||||
| files.add(new File(TASKDEFS_ROOT, "compilers/CompilerAdapter.java")); | |||||
| files.add(new File(TASKDEFS_ROOT, | |||||
| "compilers/DefaultCompilerAdapter.java")); | |||||
| files.add(new File(TASKDEFS_ROOT, | |||||
| "compilers/CompilerAdapterFactory.java")); | |||||
| files.add(new File(TASKDEFS_ROOT, "compilers/Jikes.java")); | |||||
| files.add(new File(TASKDEFS_ROOT, "compilers/JavacExternal.java")); | |||||
| files.add(new File(TASKDEFS_ROOT, "compilers/Javac12.java")); | |||||
| files.add(new File(TASKDEFS_ROOT, "compilers/Javac13.java")); | |||||
| files.add(new File(TASKDEFS_ROOT, "compilers/Kjc.java")); | |||||
| files.add(new File(TASKDEFS_ROOT, "compilers/Gcj.java")); | |||||
| files.add(new File(TASKDEFS_ROOT, "compilers/Jvc.java")); | |||||
| files.add(new File(TASKDEFS_ROOT, "compilers/Sj.java")); | |||||
| files.add(new File(TASKDEFS_ROOT, "Jar.java")); | |||||
| files.add(new File(TASKDEFS_ROOT, "Zip.java")); | |||||
| files.add(new File(TASKDEFS_ROOT, "Manifest.java")); | |||||
| files.add(new File(TASKDEFS_ROOT, "ManifestException.java")); | |||||
| files.add(new File(ZIP_ROOT, "ZipOutputStream.java")); | |||||
| files.add(new File(ZIP_ROOT, "ZipOutputStream.java")); | |||||
| files.add(new File(ZIP_ROOT, "ZipEntry.java")); | |||||
| files.add(new File(ZIP_ROOT, "ZipLong.java")); | |||||
| files.add(new File(ZIP_ROOT, "ZipShort.java")); | |||||
| files.add(new File(ZIP_ROOT, "ZipExtraField.java")); | |||||
| files.add(new File(ZIP_ROOT, "ExtraFieldUtils.java")); | |||||
| files.add(new File(ZIP_ROOT, "AsiExtraField.java")); | |||||
| files.add(new File(ZIP_ROOT, "UnrecognizedExtraField.java")); | |||||
| files.add(new File(ZIP_ROOT, "UnixStat.java")); | |||||
| files.add(new File(TASKDEFS_ROOT, "ConditionTask.java")); | |||||
| files.add(new File(TASKDEFS_ROOT, "condition/ConditionBase.java")); | |||||
| files.add(new File(TASKDEFS_ROOT, "Checksum.java")); | |||||
| files.add(new File(TASKDEFS_ROOT, "UpToDate.java")); | |||||
| files.add(new File(TASKDEFS_ROOT, "condition/Not.java")); | |||||
| files.add(new File(TASKDEFS_ROOT, "condition/And.java")); | |||||
| files.add(new File(TASKDEFS_ROOT, "condition/Equals.java")); | |||||
| files.add(new File(TASKDEFS_ROOT, "condition/Or.java")); | |||||
| files.add(new File(TASKDEFS_ROOT, "condition/IsSet.java")); | |||||
| files.add(new File(TASKDEFS_ROOT, "condition/Http.java")); | |||||
| files.add(new File(TASKDEFS_ROOT, "condition/Socket.java")); | |||||
| files.add(new File(TASKDEFS_ROOT, "condition/FilesMatch.java")); | |||||
| files.add(new File(TASKDEFS_ROOT, "Taskdef.java")); | |||||
| files.add(new File(TASKDEFS_ROOT, "Definer.java")); | |||||
| return (File[])files.toArray(new File[0]); | |||||
| } | |||||
| /** | |||||
| * Run the build | |||||
| * | |||||
| * @param args the command line arguments for the build - currently not | |||||
| * used. | |||||
| */ | |||||
| private void runBuild(String[] args) { | |||||
| BuildHelper mainBuild = new BuildHelper(); | |||||
| mainBuild.setProperty("dist.dir", "bootstrap"); | |||||
| MutantBuilder mutantBuilder = new MutantBuilder(); | |||||
| mutantBuilder._init(mainBuild); | |||||
| mutantBuilder.buildsetup(mainBuild); | |||||
| mutantBuilder.init(mainBuild); | |||||
| mutantBuilder.common(mainBuild); | |||||
| mutantBuilder.antcore(mainBuild); | |||||
| mutantBuilder.start(mainBuild); | |||||
| mutantBuilder.cli(mainBuild); | |||||
| BuildHelper systemBuild = new BuildHelper(); | |||||
| systemBuild.setProperty("libset", "system"); | |||||
| systemBuild.setProperty("dist.dir", "bootstrap"); | |||||
| mutantBuilder._init(systemBuild); | |||||
| mutantBuilder.build_lib(systemBuild); | |||||
| Ant1CompatBuilder ant1Builder = new Ant1CompatBuilder(); | |||||
| BuildHelper ant1Build = new BuildHelper(); | |||||
| ant1Build.setProperty("dist.dir", "bootstrap"); | |||||
| ant1Build.addFileSet("ant1src", ANT1_SRC_ROOT, getAnt1Files()); | |||||
| ant1Builder._init(ant1Build); | |||||
| ant1Builder.ant1compat(ant1Build); | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,97 @@ | |||||
| package org.apache.ant.builder; | |||||
| public class MutantBuilder { | |||||
| protected void _init(BuildHelper helper) { | |||||
| helper.setProperty("src.dir", "src"); | |||||
| helper.setProperty("lib.dir", "lib"); | |||||
| helper.setProperty("java.dir", "${src.dir}/java"); | |||||
| helper.setProperty("bin.dir", "bin"); | |||||
| helper.setProperty("dist.dir", "dist"); | |||||
| helper.setProperty("javadocs.dir", "${dist.dir}/javadocs"); | |||||
| helper.setProperty("distlib.dir", "${dist.dir}/lib"); | |||||
| helper.setProperty("debug", "true"); | |||||
| helper.createPath("classpath.parser"); | |||||
| helper.addFileSetToPath("classpath.parser", "${lib.dir}/parser", "*.jar"); | |||||
| helper.createPath("classpath.common"); | |||||
| helper.addPathElementToPath("classpath.common", "${distlib.dir}/init.jar"); | |||||
| helper.createPath("classpath.antcore"); | |||||
| helper.addPathElementToPath("classpath.antcore", "${distlib.dir}/common/common.jar"); | |||||
| helper.addPathToPath("classpath.antcore", "classpath.common"); | |||||
| helper.addPathToPath("classpath.antcore", "classpath.parser"); | |||||
| helper.createPath("classpath.cli"); | |||||
| helper.addPathElementToPath("classpath.cli", "${distlib.dir}/antcore/antcore.jar"); | |||||
| helper.addPathToPath("classpath.cli", "classpath.antcore"); | |||||
| helper.createPath("classpath.start"); | |||||
| helper.addPathElementToPath("classpath.start", "${distlib.dir}/init.jar"); | |||||
| } | |||||
| protected void buildsetup(BuildHelper helper) { | |||||
| helper.mkdir("${bin.dir}"); | |||||
| helper.mkdir("${distlib.dir}"); | |||||
| helper.copyFileset("${lib.dir}/parser", "${distlib.dir}/parser"); | |||||
| } | |||||
| protected void init(BuildHelper helper) { | |||||
| helper.mkdir("${bin.dir}/init"); | |||||
| helper.javac("${java.dir}/init", "${bin.dir}/init", null); | |||||
| helper.jar("${bin.dir}/init", "${distlib.dir}/init.jar", | |||||
| null, null); | |||||
| } | |||||
| protected void common(BuildHelper helper) { | |||||
| helper.mkdir("${bin.dir}/common"); | |||||
| helper.mkdir("${distlib.dir}/common"); | |||||
| helper.javac("${java.dir}/common", "${bin.dir}/common", "classpath.common"); | |||||
| helper.jar("${bin.dir}/common", "${distlib.dir}/common/common.jar", | |||||
| null, null); | |||||
| } | |||||
| protected void antcore(BuildHelper helper) { | |||||
| helper.mkdir("${bin.dir}/antcore"); | |||||
| helper.mkdir("${distlib.dir}/antcore"); | |||||
| helper.javac("${java.dir}/antcore", "${bin.dir}/antcore", "classpath.antcore"); | |||||
| helper.jar("${bin.dir}/antcore", "${distlib.dir}/antcore/antcore.jar", | |||||
| null, null); | |||||
| } | |||||
| protected void cli(BuildHelper helper) { | |||||
| helper.mkdir("${bin.dir}/cli"); | |||||
| helper.mkdir("${distlib.dir}/cli"); | |||||
| helper.javac("${java.dir}/cli", "${bin.dir}/cli", "classpath.cli"); | |||||
| helper.jar("${bin.dir}/cli", "${distlib.dir}/cli/cli.jar", | |||||
| null, null); | |||||
| } | |||||
| protected void start(BuildHelper helper) { | |||||
| helper.mkdir("${bin.dir}/start"); | |||||
| helper.javac("${java.dir}/start", "${bin.dir}/start", "classpath.start"); | |||||
| helper.jar("${bin.dir}/start", "${distlib.dir}/start.jar", | |||||
| null, null); | |||||
| } | |||||
| protected void ant1compat(BuildHelper helper) { | |||||
| } | |||||
| protected void remote(BuildHelper helper) { | |||||
| helper.mkdir("${bin.dir}/remote"); | |||||
| helper.javac("${java.dir}/remote", "${bin.dir}/remote", "classpath.start"); | |||||
| helper.jar("${bin.dir}/remote", "${distlib.dir}/remote.jar", | |||||
| null, null); | |||||
| } | |||||
| protected void clean(BuildHelper helper) { | |||||
| } | |||||
| protected void antlibs(BuildHelper helper) { | |||||
| } | |||||
| protected void build_lib(BuildHelper helper) { | |||||
| helper.mkdir("${bin.dir}/antlibs/${libset}"); | |||||
| helper.mkdir("${distlib.dir}/antlibs"); | |||||
| helper.createPath("classpath.antlibs"); | |||||
| helper.addPathElementToPath("classpath.antlibs", "${distlib.dir}/common/common.jar"); | |||||
| helper.addPathToPath("classpath.antlibs", "classpath.common"); | |||||
| helper.javac("${java.dir}/antlibs/${libset}", "${bin.dir}/antlibs/${libset}", "classpath.antlibs"); | |||||
| helper.jar("${bin.dir}/antlibs/${libset}", "${distlib.dir}/antlibs/${libset}.tsk", | |||||
| "${java.dir}/antlibs/${libset}", "antlib.xml"); | |||||
| } | |||||
| protected void main(BuildHelper helper) { | |||||
| } | |||||
| protected void checkstyle(BuildHelper helper) { | |||||
| helper.setProperty("checkstyle.bin", "../checkstyle"); | |||||
| helper.createPath("checkstyle.path"); | |||||
| helper.addFileSetToPath("checkstyle.path", "${checkstyle.bin}", null); | |||||
| helper.mkdir("${bin.dir}/check"); | |||||
| } | |||||
| protected void javadocs(BuildHelper helper) { | |||||
| helper.mkdir("${javadocs.dir}"); | |||||
| } | |||||
| } | |||||
| @@ -70,10 +70,11 @@ import org.apache.ant.antcore.execution.ExecutionManager; | |||||
| import org.apache.ant.antcore.modelparser.XMLProjectParser; | import org.apache.ant.antcore.modelparser.XMLProjectParser; | ||||
| import org.apache.ant.antcore.xml.ParseContext; | import org.apache.ant.antcore.xml.ParseContext; | ||||
| import org.apache.ant.antcore.xml.XMLParseException; | import org.apache.ant.antcore.xml.XMLParseException; | ||||
| import org.apache.ant.common.event.BuildEvent; | |||||
| import org.apache.ant.common.event.BuildListener; | import org.apache.ant.common.event.BuildListener; | ||||
| import org.apache.ant.common.event.MessageLevel; | |||||
| import org.apache.ant.common.model.Project; | import org.apache.ant.common.model.Project; | ||||
| import org.apache.ant.common.util.ConfigException; | import org.apache.ant.common.util.ConfigException; | ||||
| import org.apache.ant.common.event.MessageLevel; | |||||
| import org.apache.ant.init.InitConfig; | import org.apache.ant.init.InitConfig; | ||||
| import org.apache.ant.init.InitUtils; | import org.apache.ant.init.InitUtils; | ||||
| @@ -85,10 +86,10 @@ import org.apache.ant.init.InitUtils; | |||||
| */ | */ | ||||
| public class Commandline { | public class Commandline { | ||||
| /** The default build file name */ | /** The default build file name */ | ||||
| public final static String DEFAULT_BUILD_FILENAME = "build.ant"; | |||||
| public static final String DEFAULT_BUILD_FILENAME = "build.ant"; | |||||
| /** The default build file name */ | /** The default build file name */ | ||||
| public final static String DEFAULT_ANT1_FILENAME = "build.xml"; | |||||
| public static final String DEFAULT_ANT1_FILENAME = "build.xml"; | |||||
| /** The initialisation configuration for Ant */ | /** The initialisation configuration for Ant */ | ||||
| private InitConfig initConfig; | private InitConfig initConfig; | ||||
| @@ -127,6 +128,9 @@ public class Commandline { | |||||
| /** Our current message output status. Follows MessageLevel values */ | /** Our current message output status. Follows MessageLevel values */ | ||||
| private int messageOutputLevel = MessageLevel.MSG_INFO; | private int messageOutputLevel = MessageLevel.MSG_INFO; | ||||
| /** The logger that will be used for the build */ | |||||
| private BuildLogger logger = null; | |||||
| /** | /** | ||||
| * Start the command line front end for mutant. | * Start the command line front end for mutant. | ||||
| * | * | ||||
| @@ -152,7 +156,7 @@ public class Commandline { | |||||
| throws ConfigException { | throws ConfigException { | ||||
| // Add the default listener | // Add the default listener | ||||
| execManager.addBuildListener(createLogger()); | |||||
| execManager.addBuildListener(logger); | |||||
| for (Iterator i = listeners.iterator(); i.hasNext(); ) { | for (Iterator i = listeners.iterator(); i.hasNext(); ) { | ||||
| String className = (String)i.next(); | String className = (String)i.next(); | ||||
| @@ -259,8 +263,11 @@ public class Commandline { | |||||
| */ | */ | ||||
| private void process(String[] args, InitConfig initConfig) { | private void process(String[] args, InitConfig initConfig) { | ||||
| this.initConfig = initConfig; | this.initConfig = initConfig; | ||||
| ExecutionManager executionManager = null; | |||||
| Project project = null; | |||||
| try { | try { | ||||
| parseArguments(args); | parseArguments(args); | ||||
| createLogger(); | |||||
| determineBuildFile(); | determineBuildFile(); | ||||
| AntConfig config = new AntConfig(); | AntConfig config = new AntConfig(); | ||||
| @@ -287,12 +294,23 @@ public class Commandline { | |||||
| + buildFileURL); | + buildFileURL); | ||||
| } | } | ||||
| Project project = parseProject(); | |||||
| project = parseProject(); | |||||
| // create the execution manager to execute the build | // create the execution manager to execute the build | ||||
| ExecutionManager executionManager | |||||
| = new ExecutionManager(initConfig, config); | |||||
| executionManager = new ExecutionManager(initConfig, config); | |||||
| addBuildListeners(executionManager); | addBuildListeners(executionManager); | ||||
| } catch (Throwable e) { | |||||
| if (logger != null) { | |||||
| BuildEvent finishedEvent | |||||
| = new BuildEvent(this, BuildEvent.BUILD_FINISHED, e); | |||||
| logger.buildFinished(finishedEvent); | |||||
| } else { | |||||
| e.printStackTrace(); | |||||
| } | |||||
| System.exit(1); | |||||
| } | |||||
| try { | |||||
| executionManager.init(); | executionManager.init(); | ||||
| executionManager.runBuild(project, targets, definedProperties); | executionManager.runBuild(project, targets, definedProperties); | ||||
| System.exit(0); | System.exit(0); | ||||
| @@ -448,11 +466,9 @@ public class Commandline { | |||||
| * Creates the default build logger for sending build events to the ant | * Creates the default build logger for sending build events to the ant | ||||
| * log. | * log. | ||||
| * | * | ||||
| * @return the logger instance to be used for the build | |||||
| * @exception ConfigException if the logger cannot be instantiatd | * @exception ConfigException if the logger cannot be instantiatd | ||||
| */ | */ | ||||
| private BuildLogger createLogger() throws ConfigException { | |||||
| BuildLogger logger = null; | |||||
| private void createLogger() throws ConfigException { | |||||
| if (loggerClassname != null) { | if (loggerClassname != null) { | ||||
| try { | try { | ||||
| Class loggerClass = Class.forName(loggerClassname); | Class loggerClass = Class.forName(loggerClassname); | ||||
| @@ -477,8 +493,6 @@ public class Commandline { | |||||
| logger.setMessageOutputLevel(messageOutputLevel); | logger.setMessageOutputLevel(messageOutputLevel); | ||||
| logger.setOutputPrintStream(out); | logger.setOutputPrintStream(out); | ||||
| logger.setErrorPrintStream(err); | logger.setErrorPrintStream(err); | ||||
| return logger; | |||||
| } | } | ||||
| } | } | ||||
| @@ -85,7 +85,7 @@ public class DefaultLogger implements BuildLogger { | |||||
| /** Standard field separator */ | /** Standard field separator */ | ||||
| private static String lSep = System.getProperty("line.separator"); | private static String lSep = System.getProperty("line.separator"); | ||||
| /** spacing to allow for task tags */ | /** spacing to allow for task tags */ | ||||
| private final static int LEFT_COLUMN_SIZE = 12; | |||||
| private static final int LEFT_COLUMN_SIZE = 12; | |||||
| /** | /** | ||||
| * Set the messageOutputLevel this logger is to respond to. Only | * Set the messageOutputLevel this logger is to respond to. Only | ||||
| @@ -68,19 +68,19 @@ import org.apache.ant.common.model.ModelElement; | |||||
| public class BuildEvent extends EventObject { | public class BuildEvent extends EventObject { | ||||
| /** Build Started Event type */ | /** Build Started Event type */ | ||||
| public final static int BUILD_STARTED = 1; | |||||
| public static final int BUILD_STARTED = 1; | |||||
| /** Build Finished Event Type */ | /** Build Finished Event Type */ | ||||
| public final static int BUILD_FINISHED = 2; | |||||
| public static final int BUILD_FINISHED = 2; | |||||
| /** Start of target event type */ | /** Start of target event type */ | ||||
| public final static int TARGET_STARTED = 3; | |||||
| public static final int TARGET_STARTED = 3; | |||||
| /** Target finished event type */ | /** Target finished event type */ | ||||
| public final static int TARGET_FINISHED = 4; | |||||
| public static final int TARGET_FINISHED = 4; | |||||
| /** Start of task event type */ | /** Start of task event type */ | ||||
| public final static int TASK_STARTED = 5; | |||||
| public static final int TASK_STARTED = 5; | |||||
| /** end of task event type */ | /** end of task event type */ | ||||
| public final static int TASK_FINISHED = 6; | |||||
| public static final int TASK_FINISHED = 6; | |||||
| /** message event type */ | /** message event type */ | ||||
| public final static int MESSAGE = 7; | |||||
| public static final int MESSAGE = 7; | |||||
| /** The type of this event */ | /** The type of this event */ | ||||
| private int eventType; | private int eventType; | ||||
| @@ -97,7 +97,7 @@ public class BuildEvent extends EventObject { | |||||
| * @param eventType the type of the buildEvent. | * @param eventType the type of the buildEvent. | ||||
| * @param source the element with which this event is associated | * @param source the element with which this event is associated | ||||
| */ | */ | ||||
| public BuildEvent(ModelElement source, int eventType) { | |||||
| public BuildEvent(Object source, int eventType) { | |||||
| super(source); | super(source); | ||||
| this.eventType = eventType; | this.eventType = eventType; | ||||
| } | } | ||||
| @@ -109,7 +109,7 @@ public class BuildEvent extends EventObject { | |||||
| * @param cause An exception if associated with the event | * @param cause An exception if associated with the event | ||||
| * @param source the object with which this event is associated | * @param source the object with which this event is associated | ||||
| */ | */ | ||||
| public BuildEvent(ModelElement source, int eventType, | |||||
| public BuildEvent(Object source, int eventType, | |||||
| Throwable cause) { | Throwable cause) { | ||||
| this(source, eventType); | this(source, eventType); | ||||
| this.cause = cause; | this.cause = cause; | ||||
| @@ -61,14 +61,14 @@ package org.apache.ant.common.event; | |||||
| */ | */ | ||||
| public class MessageLevel { | public class MessageLevel { | ||||
| /** Error message level */ | /** Error message level */ | ||||
| public final static int MSG_ERR = 0; | |||||
| public static final int MSG_ERR = 0; | |||||
| /** Warnign message level */ | /** Warnign message level */ | ||||
| public final static int MSG_WARN = 1; | |||||
| public static final int MSG_WARN = 1; | |||||
| /** Informational message level */ | /** Informational message level */ | ||||
| public final static int MSG_INFO = 2; | |||||
| public static final int MSG_INFO = 2; | |||||
| /** Verbose message level */ | /** Verbose message level */ | ||||
| public final static int MSG_VERBOSE = 3; | |||||
| public static final int MSG_VERBOSE = 3; | |||||
| /** Debug Message level */ | /** Debug Message level */ | ||||
| public final static int MSG_DEBUG = 4; | |||||
| public static final int MSG_DEBUG = 4; | |||||
| } | } | ||||
| @@ -79,7 +79,7 @@ public class Project extends ModelElement { | |||||
| * The delimiter used to separate reference names in target names, data | * The delimiter used to separate reference names in target names, data | ||||
| * values, etc | * values, etc | ||||
| */ | */ | ||||
| public final static String REF_DELIMITER = ":"; | |||||
| public static final String REF_DELIMITER = ":"; | |||||
| /** The default target in this project. */ | /** The default target in this project. */ | ||||
| private String defaultTarget = null; | private String defaultTarget = null; | ||||
| @@ -145,5 +145,18 @@ public interface ComponentService { | |||||
| * @exception ExecutionException if the library cannot be imported | * @exception ExecutionException if the library cannot be imported | ||||
| */ | */ | ||||
| void importLibrary(String libraryId) throws ExecutionException; | void importLibrary(String libraryId) throws ExecutionException; | ||||
| /** | |||||
| * Imports a component defined in a nother frame. | |||||
| * | |||||
| * @param relativeName the qualified name of the component relative to | |||||
| * this execution frame | |||||
| * @param alias the name under which this component will be used in the | |||||
| * build scripts. If this is null, the components default name is | |||||
| * used. | |||||
| * @exception ExecutionException if the component cannot be imported | |||||
| */ | |||||
| void importFrameComponent(String relativeName, String alias) | |||||
| throws ExecutionException; | |||||
| } | } | ||||
| @@ -64,9 +64,9 @@ public class MagicProperties { | |||||
| * This property describes the basedir which is being used for an Ant | * This property describes the basedir which is being used for an Ant | ||||
| * run. | * run. | ||||
| */ | */ | ||||
| public final static String BASEDIR = "basedir"; | |||||
| public static final String BASEDIR = "basedir"; | |||||
| /** This property provides the location of Ant's home directory */ | /** This property provides the location of Ant's home directory */ | ||||
| public final static String ANT_HOME = "ant.home"; | |||||
| public static final String ANT_HOME = "ant.home"; | |||||
| } | } | ||||
| @@ -62,7 +62,7 @@ package org.apache.ant.common.util; | |||||
| public class Location { | public class Location { | ||||
| /** Standard unknown location constant; */ | /** Standard unknown location constant; */ | ||||
| public final static Location UNKNOWN_LOCATION = new Location(); | |||||
| public static final Location UNKNOWN_LOCATION = new Location(); | |||||
| /** The source URL to which this location relates. */ | /** The source URL to which this location relates. */ | ||||
| private String source; | private String source; | ||||
| @@ -66,7 +66,7 @@ import java.util.ArrayList; | |||||
| public final class StringUtils { | public final class StringUtils { | ||||
| /** the line separator for this OS */ | /** the line separator for this OS */ | ||||
| public final static String LINE_SEP = System.getProperty("line.separator"); | |||||
| public static final String LINE_SEP = System.getProperty("line.separator"); | |||||
| /** | /** | ||||
| * Convenient method to retrieve the full stacktrace from a given | * Convenient method to retrieve the full stacktrace from a given | ||||
| @@ -55,6 +55,7 @@ package org.apache.ant.init; | |||||
| import java.net.MalformedURLException; | import java.net.MalformedURLException; | ||||
| import java.net.URL; | import java.net.URL; | ||||
| import java.io.File; | |||||
| /** | /** | ||||
| * The ClassLocator is a utility class which is used to determine the URL | * The ClassLocator is a utility class which is used to determine the URL | ||||
| @@ -103,5 +104,42 @@ public class ClassLocator { | |||||
| return classRawURL; | return classRawURL; | ||||
| } | } | ||||
| } | } | ||||
| /** | |||||
| * Get the URLs necessary to load the Sun compiler tools. In some JVMs | |||||
| * this is available in the VM's system loader, in others we have to | |||||
| * find it ourselves | |||||
| * | |||||
| * @return the URL to the tools jar if available, null otherwise | |||||
| * @throws InitException if the URL to the tools jar cannot be formed. | |||||
| */ | |||||
| public static URL getToolsJarURL() | |||||
| throws InitException { | |||||
| try { | |||||
| // just check whether this throws an exception | |||||
| Class.forName("sun.tools.javac.Main"); | |||||
| // tools jar is on system classpath - no need for URL | |||||
| return null; | |||||
| } catch (ClassNotFoundException cnfe) { | |||||
| try { | |||||
| // couldn't find compiler - try to find tools.jar | |||||
| // based on java.home setting | |||||
| String javaHome = System.getProperty("java.home"); | |||||
| if (javaHome.endsWith("jre")) { | |||||
| javaHome = javaHome.substring(0, javaHome.length() - 4); | |||||
| } | |||||
| File toolsjar = new File(javaHome + "/lib/tools.jar"); | |||||
| if (!toolsjar.exists()) { | |||||
| System.out.println("Unable to locate tools.jar. " | |||||
| + "Expected to find it in " + toolsjar.getPath()); | |||||
| return null; | |||||
| } | |||||
| URL toolsJarURL = InitUtils.getFileURL(toolsjar); | |||||
| return toolsJarURL; | |||||
| } catch (MalformedURLException e) { | |||||
| throw new InitException(e); | |||||
| } | |||||
| } | |||||
| } | |||||
| } | } | ||||
| @@ -77,7 +77,7 @@ public class LoaderUtils { | |||||
| * This is the file that is consulted on remote systems to specify | * This is the file that is consulted on remote systems to specify | ||||
| * available jars | * available jars | ||||
| */ | */ | ||||
| public final static String LIST_FILE = "file.list"; | |||||
| public static final String LIST_FILE = "file.list"; | |||||
| /** | /** | ||||
| @@ -73,7 +73,7 @@ import org.apache.ant.init.LoaderUtils; | |||||
| */ | */ | ||||
| public class Main { | public class Main { | ||||
| /** The actual class that implements the command line front end. */ | /** The actual class that implements the command line front end. */ | ||||
| public final static String COMMANDLINE_CLASS | |||||
| public static final String COMMANDLINE_CLASS | |||||
| = "org.apache.ant.cli.Commandline"; | = "org.apache.ant.cli.Commandline"; | ||||
| @@ -127,43 +127,6 @@ public class Main { | |||||
| } | } | ||||
| /** | |||||
| * Get the URLs necessary to load the Sun compiler tools. In some JVMs | |||||
| * this is available in the VM's system loader, in others we have to | |||||
| * find it ourselves | |||||
| * | |||||
| * @return the URL to the tools jar if available, null otherwise | |||||
| * @throws InitException if the URL to the tools jar cannot be formed. | |||||
| */ | |||||
| private URL getToolsJarURL() | |||||
| throws InitException { | |||||
| try { | |||||
| // just check whether this throws an exception | |||||
| Class.forName("sun.tools.javac.Main"); | |||||
| // tools jar is on system classpath - no need for URL | |||||
| return null; | |||||
| } catch (ClassNotFoundException cnfe) { | |||||
| try { | |||||
| // couldn't find compiler - try to find tools.jar | |||||
| // based on java.home setting | |||||
| String javaHome = System.getProperty("java.home"); | |||||
| if (javaHome.endsWith("jre")) { | |||||
| javaHome = javaHome.substring(0, javaHome.length() - 4); | |||||
| } | |||||
| File toolsjar = new File(javaHome + "/lib/tools.jar"); | |||||
| if (!toolsjar.exists()) { | |||||
| System.out.println("Unable to locate tools.jar. " | |||||
| + "Expected to find it in " + toolsjar.getPath()); | |||||
| return null; | |||||
| } | |||||
| URL toolsJarURL = InitUtils.getFileURL(toolsjar); | |||||
| return toolsJarURL; | |||||
| } catch (MalformedURLException e) { | |||||
| throw new InitException(e); | |||||
| } | |||||
| } | |||||
| } | |||||
| /** | /** | ||||
| * Get the location of AntHome | * Get the location of AntHome | ||||
| @@ -211,7 +174,7 @@ public class Main { | |||||
| // set up the class loaders that will be used when running Ant | // set up the class loaders that will be used when running Ant | ||||
| ClassLoader systemLoader = getClass().getClassLoader(); | ClassLoader systemLoader = getClass().getClassLoader(); | ||||
| config.setSystemLoader(systemLoader); | config.setSystemLoader(systemLoader); | ||||
| URL toolsJarURL = getToolsJarURL(); | |||||
| URL toolsJarURL = ClassLocator.getToolsJarURL(); | |||||
| config.setToolsJarURL(toolsJarURL); | config.setToolsJarURL(toolsJarURL); | ||||
| URL commonJarLib = new URL(libraryURL, "common/"); | URL commonJarLib = new URL(libraryURL, "common/"); | ||||