Browse Source

Reorg of mutant frontend classes

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@272472 13f79535-47bb-0310-9956-ffa450edef68
master
Conor MacNeill 23 years ago
parent
commit
07d490fcd5
14 changed files with 294 additions and 111 deletions
  1. +2
    -2
      proposal/mutant/bootstrap.bat
  2. +2
    -2
      proposal/mutant/bootstrap.sh
  3. +2
    -2
      proposal/mutant/build.bat
  4. +2
    -2
      proposal/mutant/build.sh
  5. +15
    -10
      proposal/mutant/build.xml
  6. +25
    -3
      proposal/mutant/build/bootstrap.xsl
  7. +1
    -1
      proposal/mutant/src/java/bootstrap/org/apache/ant/builder/Ant1CompatBuilder.java
  8. +79
    -9
      proposal/mutant/src/java/bootstrap/org/apache/ant/builder/BuildHelper.java
  9. +3
    -2
      proposal/mutant/src/java/bootstrap/org/apache/ant/builder/Builder.java
  10. +17
    -15
      proposal/mutant/src/java/bootstrap/org/apache/ant/builder/MutantBuilder.java
  11. +0
    -0
      proposal/mutant/src/java/frontend/org/apache/ant/cli/BuildLogger.java
  12. +10
    -63
      proposal/mutant/src/java/frontend/org/apache/ant/cli/Commandline.java
  13. +0
    -0
      proposal/mutant/src/java/frontend/org/apache/ant/cli/DefaultLogger.java
  14. +136
    -0
      proposal/mutant/src/java/frontend/org/apache/ant/frontend/FrontendUtils.java

+ 2
- 2
proposal/mutant/bootstrap.bat View File

@@ -23,10 +23,10 @@ REM run bootstrap
java -classpath bin\init;bin\bootstrap org.apache.ant.bootstrap.Bootstrap

REM run full build using bootstrapped version
java -classpath bootstrap\lib\start.jar;bootstrap\lib\init.jar org.apache.ant.start.Main %*
java -jar bootstrap\lib\start.jar %*

REM Use the full build as the build used by the build script
xcopy /s dist bootstrap

REM clean up after bootstrap
java -classpath bootstrap\lib\start.jar:bootstrap\lib\init.jar org.apache.ant.start.Main clean
java -jar bootstrap\lib\start.jar clean

+ 2
- 2
proposal/mutant/bootstrap.sh View File

@@ -22,10 +22,10 @@ javac -classpath bin/init:bin/bootstrap -d bin/builder src/java/bootstrap/org/ap
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 $*
java -jar bootstrap/lib/start.jar $*

# Use the full build as the build used by the build script
cp -r dist/lib bootstrap

#clean up after bootstrap
java -classpath bootstrap/lib/start.jar:bootstrap/lib/init.jar org.apache.ant.start.Main clean
java -jar bootstrap/lib/start.jar clean

+ 2
- 2
proposal/mutant/build.bat View File

@@ -1,5 +1,5 @@
@echo off
REM Copyright (c) 2000-2001 The Apache Software Foundation. All rights
REM Copyright (c) 2002 The Apache Software Foundation. All rights
REM reserved.

java -classpath bootstrap\lib\start.jar;bootstrap\lib\init.jar org.apache.ant.start.Main %*
java -jar bootstrap\lib\start.jar %*

+ 2
- 2
proposal/mutant/build.sh View File

@@ -1,6 +1,6 @@
#!/bin/sh -x

# Copyright (c) 2000-2001 The Apache Software Foundation. All rights
# Copyright (c) 2002 The Apache Software Foundation. All rights
# reserved.

java -classpath bootstrap/lib/start.jar:bootstrap/lib/init.jar org.apache.ant.start.Main $@
java -jar bootstrap/lib/start.jar $@

+ 15
- 10
proposal/mutant/build.xml View File

@@ -25,7 +25,7 @@
<path refid="classpath.parser"/>
</path>

<path id="classpath.cli">
<path id="classpath.frontend">
<path refid="classpath.antcore"/>
<pathelement location="${distlib.dir}/antcore/antcore.jar"/>
</path>
@@ -75,18 +75,23 @@
<jar basedir="${bin.dir}/antcore" jarfile="${distlib.dir}/antcore/antcore.jar"/>
</target>

<target name="cli" depends="antcore, start">
<mkdir dir="${bin.dir}/cli"/>
<target name="frontend" depends="antcore, start">
<mkdir dir="${bin.dir}/frontend"/>
<mkdir dir="${distlib.dir}/frontend"/>
<depend destdir="${bin.dir}/cli" srcdir="${java.dir}/cli">
<classpath refid="classpath.cli"/>
<depend destdir="${bin.dir}/frontend" srcdir="${java.dir}/frontend">
<classpath refid="classpath.frontend"/>
</depend>
<javac destdir="${bin.dir}/cli" srcdir="${java.dir}/cli" debug="${debug}">
<classpath refid="classpath.cli"/>
<javac destdir="${bin.dir}/frontend" srcdir="${java.dir}/frontend" debug="${debug}">
<classpath refid="classpath.frontend"/>
</javac>
<jar basedir="${bin.dir}/cli" jarfile="${distlib.dir}/frontend/cli.jar">
<jar basedir="${bin.dir}/frontend" jarfile="${distlib.dir}/frontend/frontend.jar">
<include name="**/frontend/*.class"/>
</jar>
<jar basedir="${bin.dir}/frontend" jarfile="${distlib.dir}/frontend/cli.jar">
<include name="**/cli/*.class"/>
<manifest>
<attribute name="Main-Class" value="org.apache.ant.cli.Commandline"/>
<attribute name="Class-Path" value="frontend.jar"/>
</manifest>
</jar>
</target>
@@ -165,7 +170,7 @@
</jar>
</target>

<target name="main" depends="cli, antlibs, ant1compat, remote, checkstyle"/>
<target name="main" depends="frontend, antlibs, ant1compat, remote, checkstyle"/>
<target name="checkstyle" if="checkstyle.available">
<taskdef name="checkstyle"
@@ -197,7 +202,7 @@
<mkdir dir="${javadocs.dir}"/>
<javadoc packagenames="org.apache.*"
useexternalfile="yes"
sourcepath="${java.dir}/antcore:${java.dir}/init:${java.dir}/common:${java.dir}/cli:${java.dir}/start"
sourcepath="${java.dir}/antcore:${java.dir}/init:${java.dir}/common:${java.dir}/frontend:${java.dir}/start"
destdir="${javadocs.dir}"
author="true"
private ="true"


+ 25
- 3
proposal/mutant/build/bootstrap.xsl View File

@@ -23,11 +23,15 @@
<xsl:text>&quot;);&#10;</xsl:text>
</xsl:template>

<xsl:template match="echo">
</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>
@@ -48,6 +52,7 @@
</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>
@@ -56,6 +61,7 @@
<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>
@@ -114,17 +120,33 @@
<xsl:when test="metainf/attribute::includes">
<xsl:text>&quot;</xsl:text>
<xsl:value-of select="metainf/attribute::includes"/>
<xsl:text>&quot;</xsl:text>
<xsl:text>&quot;, </xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>null</xsl:text>
<xsl:text>null, </xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
<xsl:text>null, null</xsl:text>
<xsl:text>null, null, </xsl:text>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="manifest/attribute[attribute::name='Class-Path']">
<xsl:text>&quot;</xsl:text>
<xsl:value-of select="manifest/attribute[attribute::name='Class-Path']/attribute::value"/>
<xsl:text>&quot;, </xsl:text>
</xsl:when>
<xsl:otherwise>null, </xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="manifest/attribute[attribute::name='Main-Class']">
<xsl:text>&quot;</xsl:text>
<xsl:value-of select="manifest/attribute[attribute::name='Main-Class']/attribute::value"/>
<xsl:text>&quot;</xsl:text>
</xsl:when>
<xsl:otherwise>null</xsl:otherwise>
</xsl:choose>
<xsl:text>);&#10;</xsl:text>
</xsl:template>



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

@@ -37,7 +37,7 @@ public class Ant1CompatBuilder {
helper.copyFileset("${bin.dir}/ant1src_copy", "${bin.dir}/ant1compat");
helper.copyFileset("${ant1etc.dir}", "${bin.dir}/ant1compat/${optional.package}/junit/xsl");
helper.jar("${bin.dir}/ant1compat", "${distlib.dir}/antlibs/ant1compat.jar",
"${java.dir}/antlibs/ant1compat", "antlib.xml");
"${java.dir}/antlibs/ant1compat", "antlib.xml", null, null);
}
protected void clean(BuildHelper helper) {
}


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

@@ -64,7 +64,9 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
import java.util.jar.Attributes;
import java.util.jar.JarOutputStream;
import java.util.jar.Manifest;
import java.util.zip.ZipEntry;

/**
@@ -90,6 +92,7 @@ public class BuildHelper {

}


/** The properties which have been defined in the build */
private Map properties = new HashMap();

@@ -99,6 +102,7 @@ public class BuildHelper {
/** Filesets created in the build */
private Map filesets = new HashMap();


/**
* Set a property for the build
*
@@ -108,30 +112,49 @@ public class BuildHelper {
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 metaInfIncludes the files to be included in the META-INF area of
* the jar
* @param jarFile the file in which the Jar is created
* @param classpath Class-Path attribute in manifest
* @param mainClass Main-Class attribute in manifest
*/
protected void jar(String basedir, String jarFile, String metaInfDir,
String metaInfIncludes) {
String metaInfIncludes,
String classpath, String mainClass) {
try {
File base = new File(resolve(basedir));
File jar = new File(resolve(jarFile));
Manifest manifest = new Manifest();
Attributes attributes = manifest.getMainAttributes();
attributes.putValue("Manifest-Version", "1.0");
attributes.putValue("Created-By", "Mutant Bootstrap");

if (classpath != null) {
attributes.putValue("Class-Path", classpath);
}
if (mainClass != null) {
attributes.putValue("Main-Class", mainClass);
}

JarOutputStream jos
= new JarOutputStream(new FileOutputStream(jar));
= new JarOutputStream(new FileOutputStream(jar), manifest);

addToJar(jos, base, null);
if (metaInfDir != null) {
File[] metaFileSet = buildFileSet(metaInfDir, metaInfIncludes);

addFilesToJar(jos, new File(resolve(metaInfDir)),
metaFileSet, "META-INF");
}
@@ -142,38 +165,44 @@ public class BuildHelper {
}
}


/**
* 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
* @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();) {
for (Iterator i = javaFiles.iterator(); i.hasNext(); ) {
args[index++] = ((File) i.next()).getPath();
}

@@ -182,6 +211,7 @@ public class BuildHelper {
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();
@@ -189,6 +219,7 @@ public class BuildHelper {
}
}


/**
* Copy a directory
*
@@ -198,9 +229,11 @@ public class BuildHelper {
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
*
@@ -210,11 +243,13 @@ public class BuildHelper {
*/
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
*
@@ -223,12 +258,15 @@ public class BuildHelper {
*/
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
*
@@ -236,9 +274,11 @@ public class BuildHelper {
*/
protected void mkdir(String dirName) {
File dir = new File(resolve(dirName));

dir.mkdirs();
}


/**
* Create a path object
*
@@ -246,9 +286,11 @@ public class BuildHelper {
*/
protected void createPath(String pathName) {
String path = "";

paths.put(pathName, path);
}


/**
* Add a fileset to a path
*
@@ -260,6 +302,7 @@ public class BuildHelper {
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();
@@ -271,6 +314,7 @@ public class BuildHelper {
paths.put(pathName, currentPath);
}


/**
* Add a new element to a path
*
@@ -280,6 +324,7 @@ public class BuildHelper {
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 {
@@ -288,6 +333,7 @@ public class BuildHelper {
paths.put(pathName, currentPath);
}


/**
* Add an existing path to another path
*
@@ -296,11 +342,13 @@ public class BuildHelper {
*/
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 {
@@ -309,6 +357,7 @@ public class BuildHelper {
paths.put(pathName, currentPath);
}


/**
* Get the set of Java files to be compiled
*
@@ -317,6 +366,7 @@ public class BuildHelper {
*/
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);
@@ -326,6 +376,7 @@ public class BuildHelper {
}
}


/**
* Copy a file
*
@@ -340,6 +391,7 @@ public class BuildHelper {
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);
@@ -355,6 +407,7 @@ public class BuildHelper {
}
}


/**
* Copy a list of files from one directory to another, preserving the
* relative paths
@@ -371,6 +424,7 @@ public class BuildHelper {
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 {
@@ -379,6 +433,7 @@ public class BuildHelper {
}
}


/**
* Copy a directory
*
@@ -387,10 +442,13 @@ public class BuildHelper {
*/
private void copyDir(File from, File to) {
to.mkdirs();

File[] files = from.listFiles();

copyFileList(from, files, to);
}


/**
* Add a directory to a Jar
*
@@ -403,9 +461,11 @@ public class BuildHelper {
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
*
@@ -420,11 +480,13 @@ public class BuildHelper {
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);
@@ -432,6 +494,7 @@ public class BuildHelper {
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);
@@ -442,9 +505,10 @@ public class BuildHelper {
}
}


/**
* Build a simple fileset. Only simple inclusion filtering is supported
* - no complicated patterns.
* 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
@@ -455,11 +519,13 @@ public class BuildHelper {
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;
}
@@ -469,6 +535,7 @@ public class BuildHelper {
}

File base = new File(resolve(filesetDir));

return base.listFiles(
new FilenameFilter() {
public boolean accept(File dir, String name) {
@@ -481,6 +548,7 @@ public class BuildHelper {
});
}


/**
* Resolve the property references in a string
*
@@ -490,11 +558,13 @@ public class BuildHelper {
*/
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);
}


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

@@ -141,6 +141,7 @@ public class Builder {
addJavaFiles(files, UTIL_ROOT);
addJavaFiles(files, new File(UTIL_ROOT, "depend"));
addJavaFiles(files, ZIP_ROOT);
addJavaFiles(files, new File(UTIL_ROOT, "facade"));

files.add(new File(PACKAGE_ROOT, "BuildException.java"));
files.add(new File(PACKAGE_ROOT, "Location.java"));
@@ -163,7 +164,7 @@ public class Builder {
files.add(new File(UTIL_ROOT, "regexp/RegexpMatcherFactory.java"));
files.add(new File(FILTERS_ROOT, "util/ChainReaderHelper.java"));
// these shouyld not be included
// these should not be included
files.remove(new File(TYPES_ROOT, "DataType.java"));
files.remove(new File(TASKDEFS_ROOT, "Ant.java"));
files.remove(new File(TASKDEFS_ROOT, "CallTarget.java"));
@@ -200,7 +201,7 @@ public class Builder {
mutantBuilder.common(mainBuild);
mutantBuilder.antcore(mainBuild);
mutantBuilder.start(mainBuild);
mutantBuilder.cli(mainBuild);
mutantBuilder.frontend(mainBuild);

BuildHelper systemBuild = new BuildHelper();
systemBuild.setProperty("libset", "system");


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

@@ -18,9 +18,9 @@ public class MutantBuilder {
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.frontend");
helper.addPathElementToPath("classpath.frontend", "${distlib.dir}/antcore/antcore.jar");
helper.addPathToPath("classpath.frontend", "classpath.antcore");
helper.createPath("classpath.start");
helper.addPathElementToPath("classpath.start", "${distlib.dir}/init.jar");
}
@@ -33,36 +33,38 @@ public class MutantBuilder {
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);
null, null, 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);
null, null, 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);
null, null, null, null);
}
protected void cli(BuildHelper helper) {
helper.mkdir("${bin.dir}/cli");
protected void frontend(BuildHelper helper) {
helper.mkdir("${bin.dir}/frontend");
helper.mkdir("${distlib.dir}/frontend");
helper.javac("${java.dir}/cli", "${bin.dir}/cli", "classpath.cli");
helper.jar("${bin.dir}/cli", "${distlib.dir}/frontend/cli.jar",
null, null);
helper.javac("${java.dir}/frontend", "${bin.dir}/frontend", "classpath.frontend");
helper.jar("${bin.dir}/frontend", "${distlib.dir}/frontend/frontend.jar",
null, null, null, null);
helper.jar("${bin.dir}/frontend", "${distlib.dir}/frontend/cli.jar",
null, null, "frontend.jar", "org.apache.ant.cli.Commandline");
}
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);
null, null, "init.jar", "org.apache.ant.start.Main");
helper.jar("${bin.dir}/start", "${distlib.dir}/ant.jar",
null, null);
null, null, "start.jar", "org.apache.tools.ant.Main");
}
protected void ant1compat(BuildHelper helper) {
}
@@ -70,7 +72,7 @@ public class MutantBuilder {
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);
null, null, null, "org.apache.ant.remote.RemoteMain");
}
protected void clean(BuildHelper helper) {
}
@@ -84,7 +86,7 @@ public class MutantBuilder {
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}.jar",
"${java.dir}/antlibs/${libset}", "antlib.xml");
"${java.dir}/antlibs/${libset}", "antlib.xml", null, null);
}
protected void main(BuildHelper helper) {
}


proposal/mutant/src/java/cli/org/apache/ant/cli/BuildLogger.java → proposal/mutant/src/java/frontend/org/apache/ant/cli/BuildLogger.java View File


proposal/mutant/src/java/cli/org/apache/ant/cli/Commandline.java → proposal/mutant/src/java/frontend/org/apache/ant/cli/Commandline.java View File

@@ -79,6 +79,7 @@ import org.apache.ant.common.util.ConfigException;
import org.apache.ant.common.util.DemuxOutputStream;
import org.apache.ant.init.InitConfig;
import org.apache.ant.init.InitUtils;
import org.apache.ant.frontend.FrontendUtils;

/**
* This is the command line front end. It drives the core.
@@ -87,12 +88,6 @@ import org.apache.ant.init.InitUtils;
* @created 9 January 2002
*/
public class Commandline {
/** The default build file name */
public static final String DEFAULT_BUILD_FILENAME = "build.ant";

/** The default build file name */
public static final String DEFAULT_ANT1_FILENAME = "build.xml";

/** The initialisation configuration for Ant */
private InitConfig initConfig;

@@ -182,58 +177,6 @@ public class Commandline {
}
}

/**
* Get the AntConfig from the given config area if it is available
*
* @param configArea the config area from which the config may be read
* @return the AntConfig instance representing the config info read in
* from the config area. May be null if the AntConfig is not
* present
* @exception ConfigException if the URL for the config file cannotbe
* formed.
*/
private AntConfig getAntConfig(File configArea) throws ConfigException {
File configFile = new File(configArea, "antconfig.xml");
try {
return getAntConfigFile(configFile);
} catch (FileNotFoundException e) {
// ignore if files are not present
return null;
}
}

/**
* Read in a config file
*
* @param configFile the file containing the XML config
* @return the parsed config object
* @exception ConfigException if the config cannot be parsed
* @exception FileNotFoundException if the file cannot be found.
*/
private AntConfig getAntConfigFile(File configFile)
throws ConfigException, FileNotFoundException {
try {
URL configFileURL = InitUtils.getFileURL(configFile);

ParseContext context = new ParseContext();
AntConfigHandler configHandler = new AntConfigHandler();

context.parse(configFileURL, "antconfig", configHandler);

return configHandler.getAntConfig();
} catch (MalformedURLException e) {
throw new ConfigException("Unable to form URL to read config from "
+ configFile, e);
} catch (XMLParseException e) {
if (e.getCause() instanceof FileNotFoundException) {
throw (FileNotFoundException) e.getCause();
}

throw new ConfigException("Unable to parse config file from "
+ configFile, e);
}
}

/**
* Get an option value
*
@@ -273,9 +216,10 @@ public class Commandline {
determineBuildFile();

AntConfig config = new AntConfig();
AntConfig userConfig = getAntConfig(initConfig.getUserConfigArea());
AntConfig userConfig =
FrontendUtils.getAntConfig(initConfig.getUserConfigArea());
AntConfig systemConfig
= getAntConfig(initConfig.getSystemConfigArea());
= FrontendUtils.getAntConfig(initConfig.getSystemConfigArea());

if (systemConfig != null) {
config.merge(systemConfig);
@@ -286,7 +230,8 @@ public class Commandline {

for (Iterator i = configFiles.iterator(); i.hasNext();) {
File configFile = (File) i.next();
AntConfig runConfig = getAntConfigFile(configFile);
AntConfig runConfig
= FrontendUtils.getAntConfigFile(configFile);
config.merge(runConfig);
}

@@ -398,9 +343,11 @@ public class Commandline {
*/
private void determineBuildFile() throws ConfigException {
if (buildFileURL == null) {
File defaultBuildFile = new File(DEFAULT_BUILD_FILENAME);
File defaultBuildFile
= new File(FrontendUtils.DEFAULT_BUILD_FILENAME);
if (!defaultBuildFile.exists()) {
File ant1BuildFile = new File(DEFAULT_ANT1_FILENAME);
File ant1BuildFile
= new File(FrontendUtils.DEFAULT_ANT1_FILENAME);
if (ant1BuildFile.exists()) {
defaultBuildFile = ant1BuildFile;
}

proposal/mutant/src/java/cli/org/apache/ant/cli/DefaultLogger.java → proposal/mutant/src/java/frontend/org/apache/ant/cli/DefaultLogger.java View File


+ 136
- 0
proposal/mutant/src/java/frontend/org/apache/ant/frontend/FrontendUtils.java View File

@@ -0,0 +1,136 @@
/*
* 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.frontend;

import java.io.File;
import java.io.FileNotFoundException;
import java.net.MalformedURLException;
import java.net.URL;
import org.apache.ant.antcore.config.AntConfig;
import org.apache.ant.antcore.config.AntConfigHandler;
import org.apache.ant.antcore.xml.ParseContext;
import org.apache.ant.antcore.xml.XMLParseException;
import org.apache.ant.common.util.ConfigException;
import org.apache.ant.init.InitUtils;

/**
* Frontend Utilities methods and constants.
*
* @author Conor MacNeill
* @created 16 April 2002
*/
public class FrontendUtils {
/** The default build file name */
public static final String DEFAULT_BUILD_FILENAME = "build.ant";

/** The default build file name */
public static final String DEFAULT_ANT1_FILENAME = "build.xml";


/**
* Get the AntConfig from the given config area if it is available
*
* @param configArea the config area from which the config may be read
* @return the AntConfig instance representing the config info read in
* from the config area. May be null if the AntConfig is not present
* @exception ConfigException if the URL for the config file cannotbe
* formed.
*/
public static AntConfig getAntConfig(File configArea)
throws ConfigException {
File configFile = new File(configArea, "antconfig.xml");

try {
return getAntConfigFile(configFile);
} catch (FileNotFoundException e) {
// ignore if files are not present
return null;
}
}


/**
* Read in a config file
*
* @param configFile the file containing the XML config
* @return the parsed config object
* @exception ConfigException if the config cannot be parsed
* @exception FileNotFoundException if the file cannot be found.
*/
public static AntConfig getAntConfigFile(File configFile)
throws ConfigException, FileNotFoundException {
try {
URL configFileURL = InitUtils.getFileURL(configFile);

ParseContext context = new ParseContext();
AntConfigHandler configHandler = new AntConfigHandler();

context.parse(configFileURL, "antconfig", configHandler);

return configHandler.getAntConfig();
} catch (MalformedURLException e) {
throw new ConfigException("Unable to form URL to read config from "
+ configFile, e);
} catch (XMLParseException e) {
if (e.getCause() instanceof FileNotFoundException) {
throw (FileNotFoundException) e.getCause();
}

throw new ConfigException("Unable to parse config file from "
+ configFile, e);
}
}

}


Loading…
Cancel
Save