Browse Source

Mutant can now bootstrap itself

Upgraded to checkstyle 2.1


git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@271412 13f79535-47bb-0310-9956-ffa450edef68
master
Conor MacNeill 23 years ago
parent
commit
e1018ac5ba
49 changed files with 1525 additions and 187 deletions
  1. +4
    -0
      proposal/mutant/.cvsignore
  2. +28
    -0
      proposal/mutant/bootstrap.sh
  3. +6
    -0
      proposal/mutant/build.sh
  4. +5
    -3
      proposal/mutant/build.xml
  5. +3
    -3
      proposal/mutant/build/ant1compat.xml
  6. +9
    -0
      proposal/mutant/build/bootstrap.xml
  7. +150
    -0
      proposal/mutant/build/bootstrap.xsl
  8. +49
    -0
      proposal/mutant/build/docs.xml
  9. +1
    -1
      proposal/mutant/build/script.xml
  10. +7
    -7
      proposal/mutant/src/java/antcore/org/apache/ant/antcore/antlib/AntLibHandler.java
  11. +1
    -1
      proposal/mutant/src/java/antcore/org/apache/ant/antcore/antlib/AntLibManager.java
  12. +1
    -1
      proposal/mutant/src/java/antcore/org/apache/ant/antcore/antlib/ClassNameHandler.java
  13. +2
    -2
      proposal/mutant/src/java/antcore/org/apache/ant/antcore/antlib/ComponentLibrary.java
  14. +2
    -2
      proposal/mutant/src/java/antcore/org/apache/ant/antcore/antlib/DefinitionHandler.java
  15. +1
    -1
      proposal/mutant/src/java/antcore/org/apache/ant/antcore/antlib/DynamicLibrary.java
  16. +4
    -4
      proposal/mutant/src/java/antcore/org/apache/ant/antcore/config/AntConfigHandler.java
  17. +3
    -3
      proposal/mutant/src/java/antcore/org/apache/ant/antcore/config/LibPathHandler.java
  18. +1
    -1
      proposal/mutant/src/java/antcore/org/apache/ant/antcore/config/LoadLibHandler.java
  19. +34
    -1
      proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/ComponentManager.java
  20. +1
    -1
      proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/CoreDataService.java
  21. +1
    -1
      proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/CoreEventService.java
  22. +1
    -1
      proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/CoreFileService.java
  23. +2
    -2
      proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/ExecutionContext.java
  24. +67
    -42
      proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/Frame.java
  25. +6
    -6
      proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/TaskContext.java
  26. +1
    -1
      proposal/mutant/src/java/antcore/org/apache/ant/antcore/modelparser/IncludeHandler.java
  27. +3
    -3
      proposal/mutant/src/java/antcore/org/apache/ant/antcore/modelparser/ProjectHandler.java
  28. +2
    -2
      proposal/mutant/src/java/antcore/org/apache/ant/antcore/modelparser/RefHandler.java
  29. +5
    -5
      proposal/mutant/src/java/antcore/org/apache/ant/antcore/modelparser/TargetHandler.java
  30. +8
    -0
      proposal/mutant/src/java/antlibs/ant1compat/antlib.xml
  31. +10
    -10
      proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/Project.java
  32. +34
    -11
      proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/Import.java
  33. +94
    -0
      proposal/mutant/src/java/bootstrap/org/apache/ant/bootstrap/Bootstrap.java
  34. +37
    -0
      proposal/mutant/src/java/bootstrap/org/apache/ant/builder/Ant1CompatBuilder.java
  35. +504
    -0
      proposal/mutant/src/java/bootstrap/org/apache/ant/builder/BuildHelper.java
  36. +241
    -0
      proposal/mutant/src/java/bootstrap/org/apache/ant/builder/Builder.java
  37. +97
    -0
      proposal/mutant/src/java/bootstrap/org/apache/ant/builder/MutantBuilder.java
  38. +26
    -12
      proposal/mutant/src/java/cli/org/apache/ant/cli/Commandline.java
  39. +1
    -1
      proposal/mutant/src/java/cli/org/apache/ant/cli/DefaultLogger.java
  40. +9
    -9
      proposal/mutant/src/java/common/org/apache/ant/common/event/BuildEvent.java
  41. +5
    -5
      proposal/mutant/src/java/common/org/apache/ant/common/event/MessageLevel.java
  42. +1
    -1
      proposal/mutant/src/java/common/org/apache/ant/common/model/Project.java
  43. +13
    -0
      proposal/mutant/src/java/common/org/apache/ant/common/service/ComponentService.java
  44. +2
    -2
      proposal/mutant/src/java/common/org/apache/ant/common/service/MagicProperties.java
  45. +1
    -1
      proposal/mutant/src/java/common/org/apache/ant/common/util/Location.java
  46. +1
    -1
      proposal/mutant/src/java/common/org/apache/ant/common/util/StringUtils.java
  47. +38
    -0
      proposal/mutant/src/java/init/org/apache/ant/init/ClassLocator.java
  48. +1
    -1
      proposal/mutant/src/java/init/org/apache/ant/init/LoaderUtils.java
  49. +2
    -39
      proposal/mutant/src/java/start/org/apache/ant/start/Main.java

+ 4
- 0
proposal/mutant/.cvsignore View File

@@ -0,0 +1,4 @@
bin
dist
bootstrap


+ 28
- 0
proposal/mutant/bootstrap.sh View File

@@ -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

+ 6
- 0
proposal/mutant/build.sh View File

@@ -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 $*

+ 5
- 3
proposal/mutant/build.xml View File

@@ -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"


proposal/mutant/ant1compat.xml → proposal/mutant/build/ant1compat.xml View File

@@ -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" />

+ 9
- 0
proposal/mutant/build/bootstrap.xml View File

@@ -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>


+ 150
- 0
proposal/mutant/build/bootstrap.xsl View File

@@ -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;&#10;</xsl:text>
<xsl:text>public class </xsl:text>
<xsl:value-of select="attribute::name"/>
<xsl:text>Builder {&#10;</xsl:text>
<xsl:text> protected void _init(BuildHelper helper) {&#10;</xsl:text>
<xsl:apply-templates select="property"/>
<xsl:apply-templates select="path"/>
<xsl:text> }&#10;</xsl:text>
<xsl:apply-templates select="target"/>
<xsl:text>}&#10;</xsl:text>
</xsl:template>
<xsl:template match="property">
<xsl:text> helper.setProperty(&quot;</xsl:text>
<xsl:value-of select="attribute::name"/>
<xsl:text>&quot;, &quot;</xsl:text>
<xsl:value-of select="attribute::value"/>
<xsl:text>&quot;);&#10;</xsl:text>
</xsl:template>

<xsl:template match="path">
<xsl:text> helper.createPath(&quot;</xsl:text>
<xsl:variable name="pathName" select="attribute::id"/>
<xsl:value-of select="$pathName"/>
<xsl:text>&quot;);&#10;</xsl:text>
<xsl:for-each select="fileset">
<xsl:text> </xsl:text>
<xsl:text>helper.addFileSetToPath(&quot;</xsl:text>
<xsl:value-of select="$pathName"/>
<xsl:text>&quot;, &#10;</xsl:text>
<xsl:text> &quot;</xsl:text>
<xsl:value-of select="attribute::dir"/>
<xsl:text>&quot;, </xsl:text>
<xsl:choose>
<xsl:when test="attribute::includes">
<xsl:text>&quot;</xsl:text>
<xsl:value-of select="attribute::includes"/>
<xsl:text>&quot;</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>null</xsl:text>
</xsl:otherwise>
</xsl:choose>
<xsl:text>);&#10;</xsl:text>
</xsl:for-each>
<xsl:for-each select="pathelement">
<xsl:text> </xsl:text>
<xsl:text>helper.addPathElementToPath(&quot;</xsl:text>
<xsl:value-of select="$pathName"/>
<xsl:text>&quot;, &quot;</xsl:text>
<xsl:value-of select="attribute::location"/>
<xsl:text>&quot;);&#10;</xsl:text>
</xsl:for-each>
<xsl:for-each select="path">
<xsl:text> </xsl:text>
<xsl:text>helper.addPathToPath(&quot;</xsl:text>
<xsl:value-of select="$pathName"/>
<xsl:text>&quot;, &quot;</xsl:text>
<xsl:value-of select="attribute::refid"/>
<xsl:text>&quot;);&#10;</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) {&#10;</xsl:text>
<xsl:apply-templates/>
<xsl:text> }&#10;</xsl:text>
</xsl:template>
<xsl:template match="mkdir">
<xsl:text> helper.mkdir(&quot;</xsl:text>
<xsl:value-of select="attribute::dir"/>
<xsl:text>&quot;);&#10;</xsl:text>
</xsl:template>
<xsl:template match="javac">
<xsl:text> helper.javac(&quot;</xsl:text>
<xsl:value-of select="attribute::srcdir"/>
<xsl:text>&quot;, &quot;</xsl:text>
<xsl:value-of select="attribute::destdir"/>
<xsl:text>&quot;, </xsl:text>
<xsl:choose>
<xsl:when test="classpath">
<xsl:text>&quot;</xsl:text>
<xsl:value-of select="classpath/attribute::refid"/>
<xsl:text>&quot;</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>null</xsl:text>
</xsl:otherwise>
</xsl:choose>
<xsl:text>);&#10;</xsl:text>
</xsl:template>

<xsl:template match="jar">
<xsl:text> helper.jar(&quot;</xsl:text>
<xsl:value-of select="attribute::basedir"/>
<xsl:text>&quot;, &quot;</xsl:text>
<xsl:value-of select="attribute::jarfile"/>
<xsl:text>&quot;,&#10; </xsl:text>
<xsl:choose>
<xsl:when test="metainf">
<xsl:text>&quot;</xsl:text>
<xsl:value-of select="metainf/attribute::dir"/>
<xsl:text>&quot;, </xsl:text>
<xsl:choose>
<xsl:when test="metainf/attribute::includes">
<xsl:text>&quot;</xsl:text>
<xsl:value-of select="metainf/attribute::includes"/>
<xsl:text>&quot;</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>);&#10;</xsl:text>
</xsl:template>

<xsl:template match="copy/fileset">
<xsl:choose>
<xsl:when test="attribute::refid">
<xsl:text> helper.copyFilesetRef(&quot;</xsl:text>
<xsl:value-of select="attribute::refid"/>
<xsl:text>&quot;, &quot;</xsl:text>
<xsl:value-of select="../attribute::todir"/>
<xsl:text>&quot;);&#10;</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text> helper.copyFileset(&quot;</xsl:text>
<xsl:value-of select="attribute::dir"/>
<xsl:text>&quot;, &quot;</xsl:text>
<xsl:value-of select="../attribute::todir"/>
<xsl:text>&quot;);&#10;</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>

+ 49
- 0
proposal/mutant/build/docs.xml View File

@@ -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>

proposal/mutant/script.xml → proposal/mutant/build/script.xml View File

@@ -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"/>

+ 7
- 7
proposal/mutant/src/java/antcore/org/apache/ant/antcore/antlib/AntLibHandler.java View File

@@ -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};




+ 1
- 1
proposal/mutant/src/java/antcore/org/apache/ant/antcore/antlib/AntLibManager.java View File

@@ -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 */


+ 1
- 1
proposal/mutant/src/java/antcore/org/apache/ant/antcore/antlib/ClassNameHandler.java View File

@@ -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


+ 2
- 2
proposal/mutant/src/java/antcore/org/apache/ant/antcore/antlib/ComponentLibrary.java View File

@@ -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


+ 2
- 2
proposal/mutant/src/java/antcore/org/apache/ant/antcore/antlib/DefinitionHandler.java View File

@@ -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;


+ 1
- 1
proposal/mutant/src/java/antcore/org/apache/ant/antcore/antlib/DynamicLibrary.java View File

@@ -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;




+ 4
- 4
proposal/mutant/src/java/antcore/org/apache/ant/antcore/config/AntConfigHandler.java View File

@@ -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


+ 3
- 3
proposal/mutant/src/java/antcore/org/apache/ant/antcore/config/LibPathHandler.java View File

@@ -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


+ 1
- 1
proposal/mutant/src/java/antcore/org/apache/ant/antcore/config/LoadLibHandler.java View File

@@ -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


+ 34
- 1
proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/ComponentManager.java View File

@@ -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);
} }
} }

} }



+ 1
- 1
proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/CoreDataService.java View File

@@ -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;


+ 1
- 1
proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/CoreEventService.java View File

@@ -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;
} }




+ 1
- 1
proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/CoreFileService.java View File

@@ -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;
} }




+ 2
- 2
proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/ExecutionContext.java View File

@@ -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;
} }




+ 67
- 42
proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/Frame.java View File

@@ -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


+ 6
- 6
proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/TaskContext.java View File

@@ -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;


+ 1
- 1
proposal/mutant/src/java/antcore/org/apache/ant/antcore/modelparser/IncludeHandler.java View File

@@ -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;


+ 3
- 3
proposal/mutant/src/java/antcore/org/apache/ant/antcore/modelparser/ProjectHandler.java View File

@@ -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;


+ 2
- 2
proposal/mutant/src/java/antcore/org/apache/ant/antcore/modelparser/RefHandler.java View File

@@ -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;


+ 5
- 5
proposal/mutant/src/java/antcore/org/apache/ant/antcore/modelparser/TargetHandler.java View File

@@ -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;


+ 8
- 0
proposal/mutant/src/java/antlibs/ant1compat/antlib.xml View File

@@ -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"/>


+ 10
- 10
proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/Project.java View File

@@ -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;


+ 34
- 11
proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/Import.java View File

@@ -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);


+ 94
- 0
proposal/mutant/src/java/bootstrap/org/apache/ant/bootstrap/Bootstrap.java View File

@@ -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);
}
}


+ 37
- 0
proposal/mutant/src/java/bootstrap/org/apache/ant/builder/Ant1CompatBuilder.java View File

@@ -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) {
}
}

+ 504
- 0
proposal/mutant/src/java/bootstrap/org/apache/ant/builder/BuildHelper.java View File

@@ -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;
}
}


+ 241
- 0
proposal/mutant/src/java/bootstrap/org/apache/ant/builder/Builder.java View File

@@ -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);
}
}


+ 97
- 0
proposal/mutant/src/java/bootstrap/org/apache/ant/builder/MutantBuilder.java View File

@@ -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}");
}
}

+ 26
- 12
proposal/mutant/src/java/cli/org/apache/ant/cli/Commandline.java View File

@@ -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;
} }
} }



+ 1
- 1
proposal/mutant/src/java/cli/org/apache/ant/cli/DefaultLogger.java View File

@@ -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


+ 9
- 9
proposal/mutant/src/java/common/org/apache/ant/common/event/BuildEvent.java View File

@@ -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;


+ 5
- 5
proposal/mutant/src/java/common/org/apache/ant/common/event/MessageLevel.java View File

@@ -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;
} }



+ 1
- 1
proposal/mutant/src/java/common/org/apache/ant/common/model/Project.java View File

@@ -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;


+ 13
- 0
proposal/mutant/src/java/common/org/apache/ant/common/service/ComponentService.java View File

@@ -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;
} }



+ 2
- 2
proposal/mutant/src/java/common/org/apache/ant/common/service/MagicProperties.java View File

@@ -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";
} }



+ 1
- 1
proposal/mutant/src/java/common/org/apache/ant/common/util/Location.java View File

@@ -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;




+ 1
- 1
proposal/mutant/src/java/common/org/apache/ant/common/util/StringUtils.java View File

@@ -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


+ 38
- 0
proposal/mutant/src/java/init/org/apache/ant/init/ClassLocator.java View File

@@ -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);
}
}
}
} }



+ 1
- 1
proposal/mutant/src/java/init/org/apache/ant/init/LoaderUtils.java View File

@@ -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";




/** /**


+ 2
- 39
proposal/mutant/src/java/start/org/apache/ant/start/Main.java View File

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


Loading…
Cancel
Save