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/"); | ||||