Browse Source

The attached patch makes <path> useable as a data-type in myrmidon.

* Added a String -> Path converter.

* Added the appropriate declarations to ant1-ant-descriptor.xml.

* PathLocation is now only used internally by Path.  This means a <path> may
not contain nested <pathlocation> elements any more.  Nested <path> elements
can be used to do the same thing.

* Removed Path.systemClasspath and Path.concatSystemClassPath().  The goal
is to add specialised <systemclasspath>, <antruntime>, and <javaruntime>
data-types to control this explicitly.  I left it unfinished, because the
as-yet-unwritten Java util stuff will determine how it should be done.

* Moved Path.addExtdirs() -> DefaultCompilerAdaptor.  This was the only
place it was used.

* Cleaned out a few more Path createX() methods.


git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@270786 13f79535-47bb-0310-9956-ffa450edef68
master
Peter Donald 23 years ago
parent
commit
29cd889775
44 changed files with 394 additions and 650 deletions
  1. +0
    -2
      proposal/myrmidon/build.xml
  2. +42
    -27
      proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapter.java
  3. +1
    -1
      proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/compilers/Gcj.java
  4. +1
    -1
      proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/compilers/Jikes.java
  5. +1
    -1
      proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/compilers/Jvc.java
  6. +1
    -1
      proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/compilers/Kjc.java
  7. +8
    -6
      proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/javadoc/Javadoc.java
  8. +12
    -36
      proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/Javah.java
  9. +2
    -1
      proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/ejb/BorlandGenerateClient.java
  10. +7
    -17
      proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/ejb/IPlanetEjbcTask.java
  11. +1
    -5
      proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/javacc/JJTree.java
  12. +1
    -5
      proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/javacc/JavaCC.java
  13. +3
    -1
      proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/jsp/WLJspc.java
  14. +2
    -2
      proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java
  15. +1
    -4
      proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/metamata/AbstractMetamataTask.java
  16. +1
    -4
      proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/metamata/MParse.java
  17. +4
    -24
      proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/rmic/DefaultRmicAdapter.java
  18. +3
    -5
      proposal/myrmidon/src/main/org/apache/tools/ant/types/CommandlineJava.java
  19. +20
    -152
      proposal/myrmidon/src/main/org/apache/tools/ant/types/Path.java
  20. +12
    -5
      proposal/myrmidon/src/main/org/apache/tools/ant/types/PathElement.java
  21. +53
    -0
      proposal/myrmidon/src/main/org/apache/tools/ant/types/converters/StringToPathConverter.java
  22. +15
    -26
      proposal/myrmidon/src/main/org/apache/tools/ant/util/FileUtils.java
  23. +12
    -0
      proposal/myrmidon/src/manifest/ant1-ant-descriptor.xml
  24. +42
    -27
      proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapter.java
  25. +1
    -1
      proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/compilers/Gcj.java
  26. +1
    -1
      proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/compilers/Jikes.java
  27. +1
    -1
      proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/compilers/Jvc.java
  28. +1
    -1
      proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/compilers/Kjc.java
  29. +8
    -6
      proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/javadoc/Javadoc.java
  30. +12
    -36
      proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/optional/Javah.java
  31. +2
    -1
      proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/optional/ejb/BorlandGenerateClient.java
  32. +7
    -17
      proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/optional/ejb/IPlanetEjbcTask.java
  33. +1
    -5
      proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/optional/javacc/JJTree.java
  34. +1
    -5
      proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/optional/javacc/JavaCC.java
  35. +3
    -1
      proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/optional/jsp/WLJspc.java
  36. +2
    -2
      proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java
  37. +1
    -4
      proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/optional/metamata/AbstractMetamataTask.java
  38. +1
    -4
      proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/optional/metamata/MParse.java
  39. +4
    -24
      proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/rmic/DefaultRmicAdapter.java
  40. +3
    -5
      proposal/myrmidon/src/todo/org/apache/tools/ant/types/CommandlineJava.java
  41. +20
    -152
      proposal/myrmidon/src/todo/org/apache/tools/ant/types/Path.java
  42. +12
    -5
      proposal/myrmidon/src/todo/org/apache/tools/ant/types/PathElement.java
  43. +53
    -0
      proposal/myrmidon/src/todo/org/apache/tools/ant/types/converters/StringToPathConverter.java
  44. +15
    -26
      proposal/myrmidon/src/todo/org/apache/tools/ant/util/FileUtils.java

+ 0
- 2
proposal/myrmidon/build.xml View File

@@ -387,14 +387,12 @@ Legal:
</zipfileset>
</jar>

<!--
<jar jarfile="${build.lib}/ant1.atl" basedir="${build.classes}">
<include name="org/apache/antlib/ant1/**"/>
<zipfileset dir="${manifest.dir}" fullpath="META-INF/ant-descriptor.xml">
<include name="ant1-ant-descriptor.xml"/>
</zipfileset>
</jar>
-->

</target>



+ 42
- 27
proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapter.java View File

@@ -14,10 +14,12 @@ import java.io.PrintWriter;
import org.apache.avalon.excalibur.util.StringUtil;
import org.apache.avalon.framework.logger.AbstractLogEnabled;
import org.apache.myrmidon.api.TaskException;
import org.apache.myrmidon.api.TaskContext;
import org.apache.tools.ant.taskdefs.Javac;
import org.apache.tools.ant.taskdefs.exec.Execute2;
import org.apache.tools.ant.types.Commandline;
import org.apache.tools.ant.types.Path;
import org.apache.tools.ant.types.FileSet;

/**
* This is the default implementation for the CompilerAdapter interface.
@@ -77,8 +79,6 @@ public abstract class DefaultCompilerAdapter
m_compileList = attributes.getFileList();
m_compileClasspath = attributes.getClasspath();
m_baseDir = attributes.getBaseDirectory();
m_includeAntRuntime = attributes.getIncludeantruntime();
m_includeJavaRuntime = attributes.getIncludejavaruntime();
m_memoryInitialSize = attributes.getMemoryInitialSize();
m_memoryMaximumSize = attributes.getMemoryMaximumSize();
}
@@ -283,34 +283,13 @@ public abstract class DefaultCompilerAdapter

if( m_destDir != null )
{
classpath.setLocation( m_destDir );
classpath.addLocation( m_destDir );
}

// Combine the build classpath with the system classpath, in an
// order determined by the value of build.classpath

if( m_compileClasspath == null )
// add the classpath
if ( m_compileClasspath != null )
{
if( m_includeAntRuntime )
{
classpath.addExisting( Path.systemClasspath );
}
}
else
{
if( m_includeAntRuntime )
{
classpath.addExisting( m_compileClasspath.concatSystemClasspath( "last" ) );
}
else
{
classpath.addExisting( m_compileClasspath.concatSystemClasspath( "ignore" ) );
}
}

if( m_includeJavaRuntime )
{
classpath.addJavaRuntime();
classpath.addExisting( m_compileClasspath );
}

return classpath;
@@ -437,5 +416,41 @@ public abstract class DefaultCompilerAdapter

getLogger().debug( niceSourceList.toString() );
}

/**
* Emulation of extdirs feature in java >= 1.2. This method adds all files
* in the given directories (but not in sub-directories!) to the classpath,
* so that you don't have to specify them all one by one.
*/
protected void addExtdirs( Path path )
throws TaskException
{
if( m_extdirs == null )
{
String extProp = System.getProperty( "java.ext.dirs" );
if( extProp != null )
{
m_extdirs = new Path( extProp );
}
else
{
return;
}
}

final String[] dirs = m_extdirs.list();
for( int i = 0; i < dirs.length; i++ )
{
final File dir = new File( dirs[ i ] );
if( dir.exists() && dir.isDirectory() )
{
final FileSet fileSet = new FileSet();
fileSet.setDir( dir );
fileSet.setIncludes( "*" );
path.addFileset( fileSet );
}
}
}

}


+ 1
- 1
proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/compilers/Gcj.java View File

@@ -55,7 +55,7 @@ public class Gcj extends DefaultCompilerAdapter

// gcj doesn't support an extension dir (-extdir)
// so we'll emulate it for compatibility and convenience.
classpath.addExtdirs( m_extdirs );
addExtdirs( classpath );

if( ( m_bootclasspath == null ) || ( m_bootclasspath.size() == 0 ) )
{


+ 1
- 1
proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/compilers/Jikes.java View File

@@ -52,7 +52,7 @@ public class Jikes

// Jikes doesn't support an extension dir (-extdir)
// so we'll emulate it for compatibility and convenience.
classpath.addExtdirs( m_extdirs );
addExtdirs( classpath );

if( ( m_bootclasspath == null ) || ( m_bootclasspath.size() == 0 ) )
{


+ 1
- 1
proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/compilers/Jvc.java View File

@@ -40,7 +40,7 @@ public class Jvc extends DefaultCompilerAdapter

// jvc doesn't support an extension dir (-extdir)
// so we'll emulate it for compatibility and convenience.
classpath.addExtdirs( m_extdirs );
addExtdirs( classpath );

if( ( m_bootclasspath == null ) || ( m_bootclasspath.size() == 0 ) )
{


+ 1
- 1
proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/compilers/Kjc.java View File

@@ -94,7 +94,7 @@ public class Kjc extends DefaultCompilerAdapter

if( m_extdirs != null )
{
cp.addExtdirs( m_extdirs );
addExtdirs( cp );
}

cp.append( classpath );


+ 8
- 6
proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/javadoc/Javadoc.java View File

@@ -559,14 +559,16 @@ public class Javadoc
cmd.setExecutable( getJavadocExecutableName() );

// ------------------------------------------------ general javadoc arguments
if( m_classpath == null )
m_classpath = Path.systemClasspath;
else
m_classpath = m_classpath.concatSystemClasspath( "ignore" );

// Build the classpath to pass to Javadoc
Path classpath = new Path();
classpath.addPath( m_sourcePath );
if ( m_classpath != null )
{
classpath.addPath( m_classpath );
}
cmd.createArgument().setValue( "-classpath" );
cmd.createArgument().setValue( m_sourcePath.toString() +
System.getProperty( "path.separator" ) + m_classpath.toString() );
cmd.createArgument().setValue( classpath.toString() );

if( m_version && m_doclet == null )
cmd.createArgument().setValue( "-version" );


+ 12
- 36
proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/Javah.java View File

@@ -14,6 +14,7 @@ import java.util.StringTokenizer;
import org.apache.avalon.excalibur.util.StringUtil;
import org.apache.avalon.framework.logger.AbstractLogEnabled;
import org.apache.myrmidon.api.TaskException;
import org.apache.myrmidon.api.AbstractTask;
import org.apache.tools.ant.types.Commandline;
import org.apache.tools.ant.types.Path;

@@ -52,7 +53,7 @@ import org.apache.tools.ant.types.Path;
*/

public class Javah
extends AbstractLogEnabled
extends AbstractTask
{
private final static String FAIL_MSG = "Compile failed, messages should have been provided.";

@@ -67,8 +68,10 @@ public class Javah
private String m_cls;
private File m_destDir;

public void setBootclasspath( final Path bootclasspath )
throws TaskException
/**
* Adds an element to the bootclasspath.
*/
public void addBootclasspath( final Path bootclasspath )
{
if( m_bootclasspath == null )
{
@@ -76,7 +79,7 @@ public class Javah
}
else
{
m_bootclasspath.append( bootclasspath );
m_bootclasspath.addPath( bootclasspath );
}
}

@@ -85,7 +88,10 @@ public class Javah
m_cls = cls;
}

public void setClasspath( final Path classpath )
/**
* Adds an element to the classpath.
*/
public void addClasspath( final Path classpath )
throws TaskException
{
if( m_classpath == null )
@@ -94,7 +100,7 @@ public class Javah
}
else
{
m_classpath.append( classpath );
m_classpath.addPath( classpath );
}
}

@@ -149,18 +155,6 @@ public class Javah
m_verbose = verbose;
}

public Path createBootclasspath()
{
if( m_bootclasspath == null )
{
m_bootclasspath = new Path();
}
Path path1 = m_bootclasspath;
final Path path = new Path();
path1.addPath( path );
return path;
}

public ClassArgument createClass()
{
final ClassArgument ga = new ClassArgument();
@@ -169,18 +163,6 @@ public class Javah
return ga;
}

public Path createClasspath()
{
if( m_classpath == null )
{
m_classpath = new Path();
}
Path path1 = m_classpath;
final Path path = new Path();
path1.addPath( path );
return path;
}

/**
* Executes the task.
*/
@@ -188,12 +170,6 @@ public class Javah
throws TaskException
{
validate();

if( m_classpath == null )
{
m_classpath = Path.systemClasspath;
}

doClassicCompile();
}



+ 2
- 1
proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/ejb/BorlandGenerateClient.java View File

@@ -215,7 +215,8 @@ public class BorlandGenerateClient extends Task
//classpath
//add at the end of the classpath
//the system classpath in order to find the tools.jar file
execTask.addClasspath( classpath.concatSystemClasspath() );
// TODO - make sure tools.jar is in the classpath
//execTask.addClasspath( classpath.concatSystemClasspath( "last" ) );

execTask.setFork( true );
execTask.createArg().setValue( "generateclient" );


+ 7
- 17
proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/ejb/IPlanetEjbcTask.java View File

@@ -197,22 +197,6 @@ public class IPlanetEjbcTask extends Task
executeEjbc( getParser() );
}

/**
* Returns the CLASSPATH to be used when calling EJBc. If no user CLASSPATH
* is specified, the System classpath is returned instead.
*
* @return Path The classpath to be used for EJBc.
*/
private Path getClasspath()
{
if( classpath == null )
{
classpath = Path.systemClasspath;
}

return classpath;
}

/**
* Returns a SAXParser that may be used to process the XML descriptors.
*
@@ -311,10 +295,16 @@ public class IPlanetEjbcTask extends Task
private void executeEjbc( SAXParser saxParser )
throws TaskException
{
String classpath = null;
if( classpath != null )
{
classpath = this.classpath.toString();
}

IPlanetEjbc ejbc = new IPlanetEjbc( ejbdescriptor,
iasdescriptor,
dest,
getClasspath().toString(),
classpath,
saxParser );
ejbc.setRetainSource( keepgenerated );
ejbc.setDebugOutput( debug );


+ 1
- 5
proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/javacc/JJTree.java View File

@@ -17,7 +17,6 @@ import org.apache.tools.ant.taskdefs.exec.Execute2;
import org.apache.tools.ant.types.Argument;
import org.apache.tools.ant.types.CommandlineJava;
import org.apache.tools.ant.types.Path;
import org.apache.tools.ant.types.PathElement;

/**
* Taskdef for the JJTree compiler compiler.
@@ -175,10 +174,7 @@ public class JJTree extends Task
throw new TaskException( "Javacchome not set." );
}
final Path classpath = cmdl.createClasspath();
final PathElement pathElement = new PathElement();
classpath.addPathElement( pathElement );
pathElement.setPath( javaccHome.getAbsolutePath() +
"/JavaCC.zip" );
classpath.addLocation( new File( javaccHome, "JavaCC.zip" ) );
classpath.addJavaRuntime();

final Argument arg = cmdl.createVmArgument();


+ 1
- 5
proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/javacc/JavaCC.java View File

@@ -18,7 +18,6 @@ import org.apache.tools.ant.types.Argument;
import org.apache.tools.ant.types.Commandline;
import org.apache.tools.ant.types.CommandlineJava;
import org.apache.tools.ant.types.Path;
import org.apache.tools.ant.types.PathElement;
import org.apache.avalon.excalibur.util.StringUtil;

/**
@@ -229,10 +228,7 @@ public class JavaCC extends Task
throw new TaskException( "Javacchome not set." );
}
final Path classpath = cmdl.createClasspath();
final PathElement pathElement = new PathElement();
classpath.addPathElement( pathElement );
pathElement.setPath( javaccHome.getAbsolutePath() +
"/JavaCC.zip" );
classpath.addLocation( new File( javaccHome, "JavaCC.zip" ) );
classpath.addJavaRuntime();

final Argument arg = cmdl.createVmArgument();


+ 3
- 1
proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/jsp/WLJspc.java View File

@@ -163,7 +163,9 @@ public class WLJspc extends MatchingTask
compileClasspath = new Path();
}

compileClasspath.append( Path.systemClasspath );
// TODO - make sure tools.jar ends up in the classpath
//compileClasspath.append( Path.systemClasspath );

String[] files = ds.getIncludedFiles();

//Weblogic.jspc calls System.exit() ... have to fork


+ 2
- 2
proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java View File

@@ -463,14 +463,14 @@ public class JUnitTask extends Task
int pling = u.indexOf( "!" );
String jarName = u.substring( 9, pling );
getLogger().debug( "Implicitly adding " + jarName + " to classpath" );
createClasspath().setLocation( new File( ( new File( jarName ) ).getAbsolutePath() ) );
createClasspath().addLocation( new File( jarName ) );
}
else if( u.startsWith( "file:" ) )
{
int tail = u.indexOf( resource );
String dirName = u.substring( 5, tail );
getLogger().debug( "Implicitly adding " + dirName + " to classpath" );
createClasspath().setLocation( new File( ( new File( dirName ) ).getAbsolutePath() ) );
createClasspath().addLocation( new File( dirName ) );
}
else
{


+ 1
- 4
proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/metamata/AbstractMetamataTask.java View File

@@ -23,7 +23,6 @@ import org.apache.tools.ant.types.Argument;
import org.apache.tools.ant.types.CommandlineJava;
import org.apache.tools.ant.types.FileSet;
import org.apache.tools.ant.types.Path;
import org.apache.tools.ant.types.PathElement;

/**
* Somewhat abstract framework to be used for other metama 2.0 tasks. This
@@ -198,9 +197,7 @@ public abstract class AbstractMetamataTask
// set the classpath as the jar file
File jar = getMetamataJar( m_metamataHome );
final Path classPath = m_cmdl.createClasspath();
final PathElement pathElement = new PathElement();
classPath.addPathElement( pathElement );
pathElement.setLocation( jar );
classPath.addLocation( jar );

// set the metamata.home property
final Argument vmArgs = m_cmdl.createVmArgument();


+ 1
- 4
proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/metamata/MParse.java View File

@@ -19,7 +19,6 @@ import org.apache.tools.ant.taskdefs.exec.Execute2;
import org.apache.tools.ant.types.Argument;
import org.apache.tools.ant.types.CommandlineJava;
import org.apache.tools.ant.types.Path;
import org.apache.tools.ant.types.PathElement;

/**
* Simple Metamata MParse task based on the original written by <a
@@ -204,9 +203,7 @@ public class MParse
final Path classPath = m_cmdl.createClasspath();
for( int i = 0; i < jars.length; i++ )
{
final PathElement pathElement = new PathElement();
classPath.addPathElement( pathElement );
pathElement.setLocation( jars[ i ] );
classPath.addLocation( jars[ i ] );
}

// set the metamata.home property


+ 4
- 24
proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/rmic/DefaultRmicAdapter.java View File

@@ -177,34 +177,14 @@ public abstract class DefaultRmicAdapter
// add dest dir to classpath so that previously compiled and
// untouched classes are on classpath
Path classpath = new Path();
classpath.setLocation( attributes.getBase() );
classpath.addLocation( attributes.getBase() );

// Combine the build classpath with the system classpath, in an
// order determined by the value of build.classpath

if( attributes.getClasspath() == null )
{
if( attributes.getIncludeantruntime() )
{
classpath.addExisting( Path.systemClasspath );
}
}
else
// add the classpath
if ( attributes.getClasspath() != null )
{
if( attributes.getIncludeantruntime() )
{
classpath.addExisting( attributes.getClasspath().concatSystemClasspath( "last" ) );
}
else
{
classpath.addExisting( attributes.getClasspath().concatSystemClasspath( "ignore" ) );
}
classpath.addExisting( attributes.getClasspath() );
}

if( attributes.getIncludejavaruntime() )
{
classpath.addJavaRuntime();
}
return classpath;
}



+ 3
- 5
proposal/myrmidon/src/main/org/apache/tools/ant/types/CommandlineJava.java View File

@@ -132,11 +132,10 @@ public class CommandlineJava
pos += sysProperties.size();
}
// classpath is a vm option too..
Path fullClasspath = classpath != null ? classpath.concatSystemClasspath( "ignore" ) : null;
if( fullClasspath != null && fullClasspath.toString().trim().length() > 0 )
if( classpath != null && classpath.toString().trim().length() > 0 )
{
result[ pos++ ] = "-classpath";
result[ pos++ ] = fullClasspath.toString();
result[ pos++ ] = classpath.toString();
}
// this is the classname to run as well as its arguments.
// in case of 'executeJar', the executable is a jar file.
@@ -215,8 +214,7 @@ public class CommandlineJava
{
int size = getActualVMCommand().size() + javaCommand.size() + sysProperties.size();
// classpath is "-classpath <classpath>" -> 2 args
Path fullClasspath = classpath != null ? classpath.concatSystemClasspath( "ignore" ) : null;
if( fullClasspath != null && fullClasspath.toString().trim().length() > 0 )
if( classpath != null && classpath.toString().trim().length() > 0 )
{
size += 2;
}


+ 20
- 152
proposal/myrmidon/src/main/org/apache/tools/ant/types/Path.java View File

@@ -7,16 +7,15 @@
*/
package org.apache.tools.ant.types;

import org.apache.myrmidon.api.TaskException;
import org.apache.myrmidon.framework.DataType;
import org.apache.tools.ant.util.FileUtils;

import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Locale;
import org.apache.avalon.framework.logger.AbstractLogEnabled;
import org.apache.avalon.framework.logger.Logger;
import org.apache.myrmidon.api.TaskException;
import org.apache.tools.ant.ProjectComponent;
import org.apache.tools.ant.util.FileUtils;

/**
* This object represents a path as used by CLASSPATH or PATH environment
@@ -50,41 +49,24 @@ import org.apache.tools.ant.util.FileUtils;
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
*/
public class Path
extends ProjectComponent
implements Cloneable
implements DataType
{
public final static Path systemClasspath = createSystemClasspath();

private ArrayList m_elements;

private static Path createSystemClasspath()
{
try
{
return new Path( System.getProperty( "java.class.path" ) );
}
catch( final TaskException te )
{
throw new Error( te.toString() );
}
}
private ArrayList m_elements = new ArrayList();
private File m_baseDirectory;

/**
* Invoked by IntrospectionHelper for <code>setXXX(Path p)</code> attribute
* setters.
*/
public Path( final String path )
throws TaskException
{
this();
final PathElement pathElement = new PathElement();
addPathElement( pathElement );
m_elements.add( pathElement );
pathElement.setPath( path );
}

public Path()
{
m_elements = new ArrayList();
}

/**
@@ -99,28 +81,24 @@ public class Path
}

/**
* Adds a element definition to the path.
*
* @param location the location of the element to add (must not be <code>null</code>
* nor empty.
* Sets the base directory for this path.
*/
public void setLocation( final File location )
public void setBaseDirectory( final File baseDir )
{
final PathElement pathElement = new PathElement();
addPathElement( pathElement );
pathElement.setLocation( location );
m_baseDirectory = baseDir;
}

/**
* Parses a path definition and creates single PathElements.
* Adds a element definition to the path.
*
* @param path the path definition.
* @param location the location of the element to add (must not be <code>null</code>
* nor empty.
*/
public void setPath( String path )
public void addLocation( final File location )
{
final PathElement pathElement = new PathElement();
addPathElement( pathElement );
pathElement.setPath( path );
m_elements.add( pathElement );
pathElement.setLocation( location );
}

/**
@@ -138,42 +116,7 @@ public class Path
final File file = new File( list[ i ] );
if( file.exists() )
{
setLocation( file );
}
}
}

/**
* Emulation of extdirs feature in java >= 1.2. This method adds all files
* in the given directories (but not in sub-directories!) to the classpath,
* so that you don't have to specify them all one by one.
*/
public void addExtdirs( Path extdirs )
throws TaskException
{
if( extdirs == null )
{
String extProp = System.getProperty( "java.ext.dirs" );
if( extProp != null )
{
extdirs = new Path( extProp );
}
else
{
return;
}
}

final String[] dirs = extdirs.list();
for( int i = 0; i < dirs.length; i++ )
{
final File dir = resolveFile( dirs[ i ] );
if( dir.exists() && dir.isDirectory() )
{
final FileSet fileSet = new FileSet();
fileSet.setDir( dir );
fileSet.setIncludes( "*" );
addFileset( fileSet );
addLocation( file );
}
}
}
@@ -260,73 +203,6 @@ public class Path
}
}

/**
* Concatenates the system class path in the order specified by the
* ${build.sysclasspath} property - using &quot;last&quot; as default value.
*
* @return Description of the Returned Value
*/
public Path concatSystemClasspath()
throws TaskException
{
return concatSystemClasspath( "last" );
}

/**
* Concatenates the system class path in the order specified by the
* ${build.sysclasspath} property - using the supplied value if
* ${build.sysclasspath} has not been set.
*
* @param defValue Description of Parameter
* @return Description of the Returned Value
*/
public Path concatSystemClasspath( String defValue )
throws TaskException
{
Path result = new Path();

String order = defValue;
if( getProject() != null )
{
String o = getProject().getProperty( "build.sysclasspath" );
if( o != null )
{
order = o;
}
}

if( order.equals( "only" ) )
{
// only: the developer knows what (s)he is doing
result.addExisting( Path.systemClasspath );
}
else if( order.equals( "first" ) )
{
// first: developer could use a little help
result.addExisting( Path.systemClasspath );
result.addExisting( this );
}
else if( order.equals( "ignore" ) )
{
// ignore: don't trust anyone
result.addExisting( this );
}
else
{
// last: don't trust the developer
if( !order.equals( "last" ) )
{
final String message = "invalid value for build.sysclasspath: " + order;
getLogger().warn( message );
}

result.addExisting( this );
result.addExisting( Path.systemClasspath );
}

return result;
}

/**
* Creates a nested <code>&lt;path&gt;</code> element.
*
@@ -338,16 +214,9 @@ public class Path
m_elements.add( path );
}

/**
* Creates the nested <code>&lt;pathelement&gt;</code> element.
*/
public void addPathElement( final PathElement pathElement )
{
m_elements.add( pathElement );
}

/**
* Returns all path elements defined by this and nested path objects.
* The paths returned by this method are absolute.
*/
public String[] list()
throws TaskException
@@ -363,9 +232,8 @@ public class Path
}
else if( o instanceof PathElement )
{
final File baseDirectory = getBaseDirectory();
final PathElement element = (PathElement)o;
final String[] parts = element.getParts( baseDirectory, getLogger() );
final String[] parts = element.getParts( m_baseDirectory );
if( parts == null )
{
throw new NullPointerException( "You must either set location or path on <pathelement>" );


+ 12
- 5
proposal/myrmidon/src/main/org/apache/tools/ant/types/PathElement.java View File

@@ -10,17 +10,19 @@ package org.apache.tools.ant.types;
import java.io.File;
import org.apache.tools.ant.util.FileUtils;
import org.apache.avalon.framework.logger.Logger;
import org.apache.myrmidon.api.TaskException;

/**
* Helper class, holds the nested <code>&lt;pathelement&gt;</code> values.
* Helper class, holds <code>&lt;&gt;</code> values.
*/
public class PathElement
class PathElement
{
private String m_location;
private String m_path;

public void setLocation( final File location )
{
m_path = FileUtils.translateFile( location.getAbsolutePath() );
m_location = location.getAbsolutePath();
}

public void setPath( String path )
@@ -28,8 +30,13 @@ public class PathElement
m_path = path;
}

protected String[] getParts( final File baseDirectory, final Logger logger )
protected String[] getParts( final File baseDirectory )
throws TaskException
{
return FileUtils.translatePath( baseDirectory, m_path, logger );
if ( m_location != null )
{
return new String[] { m_location };
}
return FileUtils.translatePath( baseDirectory, m_path );
}
}

+ 53
- 0
proposal/myrmidon/src/main/org/apache/tools/ant/types/converters/StringToPathConverter.java View File

@@ -0,0 +1,53 @@
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE.txt file.
*/
package org.apache.tools.ant.types.converters;

import org.apache.avalon.framework.context.Context;
import org.apache.myrmidon.converter.AbstractConverter;
import org.apache.myrmidon.converter.ConverterException;
import org.apache.tools.ant.types.Path;

/**
* A converter from String to Path.
*
* @author Adam Murdoch
*/
public class StringToPathConverter
extends AbstractConverter
{
/**
* Constructors a converter.
*/
public StringToPathConverter()
{
super( String.class, Path.class );
}

/**
* Converts from String to Path
*
* @param original the original Object
* @param context the context in which to convert
* @return the converted object
* @exception Exception if an error occurs
*/
protected Object convert( Object original, Context context )
throws ConverterException
{
/*
String path = (String)original;
TaskContext taskContext = (TaskContext)context;

Path retval = new Path( path );
retval.setBaseDirectory( taskContext.getBaseDirectory() );
return retval;
*/
return null;
}
}


+ 15
- 26
proposal/myrmidon/src/main/org/apache/tools/ant/util/FileUtils.java View File

@@ -390,11 +390,7 @@ public class FileUtils
return "";

final StringBuffer result = new StringBuffer( source );
for( int i = 0; i < result.length(); i++ )
{
translateFileSep( result, i );
}

translateFileSep( result );
return result.toString();
}

@@ -406,22 +402,25 @@ public class FileUtils
* @param pos Description of Parameter
* @return Description of the Returned Value
*/
public static boolean translateFileSep( StringBuffer buffer, int pos )
public static void translateFileSep( StringBuffer buffer )
{
if( buffer.charAt( pos ) == '/' || buffer.charAt( pos ) == '\\' )
int len = buffer.length();
for ( int pos = 0; pos < len; pos++ )
{
buffer.setCharAt( pos, File.separatorChar );
return true;
char ch = buffer.charAt( pos );
if( ch == '/' || ch == '\\' )
{
buffer.setCharAt( pos, File.separatorChar );
}
}
return false;
}

/**
* Splits a PATH (with : or ; as separators) into its parts.
*/
public static String[] translatePath( final File baseDirectory,
String source,
final Logger logger )
String source )
throws TaskException
{
final ArrayList result = new ArrayList();
if( source == null )
@@ -431,23 +430,13 @@ public class FileUtils
StringBuffer element = new StringBuffer();
for( int i = 0; i < elements.length; i++ )
{
// Resolve the file relative to the base directory
element.setLength( 0 );
final String pathElement = elements[ i ];
try
{
element.append( resolveFile( baseDirectory, pathElement ) );
}
catch( TaskException e )
{
final String message =
"Dropping path element " + pathElement + " as it is not valid relative to the project";
logger.debug( message );
}
element.append( resolveFile( baseDirectory, pathElement ) );

for( int j = 0; j < element.length(); j++ )
{
translateFileSep( element, j );
}
// Tidy up the separators
translateFileSep( element );
result.add( element.toString() );
}



+ 12
- 0
proposal/myrmidon/src/manifest/ant1-ant-descriptor.xml View File

@@ -1,5 +1,17 @@
<ant-lib>

<types>
<task name="ant1-tasklib" classname="org.apache.myrmidon.libs.ant1.Ant1Tasklib" />

<data-type name="path" classname="org.apache.tools.ant.types.Path" />
<task name="path" classname="org.apache.myrmidon.framework.TypeInstanceTask" />
</types>

<converters>
<converter
classname="org.apache.tools.ant.types.converters.StringToPathConverter"
source="java.lang.String"
destination="org.apache.tools.ant.types.Path"
/>
</converters>
</ant-lib>

+ 42
- 27
proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapter.java View File

@@ -14,10 +14,12 @@ import java.io.PrintWriter;
import org.apache.avalon.excalibur.util.StringUtil;
import org.apache.avalon.framework.logger.AbstractLogEnabled;
import org.apache.myrmidon.api.TaskException;
import org.apache.myrmidon.api.TaskContext;
import org.apache.tools.ant.taskdefs.Javac;
import org.apache.tools.ant.taskdefs.exec.Execute2;
import org.apache.tools.ant.types.Commandline;
import org.apache.tools.ant.types.Path;
import org.apache.tools.ant.types.FileSet;

/**
* This is the default implementation for the CompilerAdapter interface.
@@ -77,8 +79,6 @@ public abstract class DefaultCompilerAdapter
m_compileList = attributes.getFileList();
m_compileClasspath = attributes.getClasspath();
m_baseDir = attributes.getBaseDirectory();
m_includeAntRuntime = attributes.getIncludeantruntime();
m_includeJavaRuntime = attributes.getIncludejavaruntime();
m_memoryInitialSize = attributes.getMemoryInitialSize();
m_memoryMaximumSize = attributes.getMemoryMaximumSize();
}
@@ -283,34 +283,13 @@ public abstract class DefaultCompilerAdapter

if( m_destDir != null )
{
classpath.setLocation( m_destDir );
classpath.addLocation( m_destDir );
}

// Combine the build classpath with the system classpath, in an
// order determined by the value of build.classpath

if( m_compileClasspath == null )
// add the classpath
if ( m_compileClasspath != null )
{
if( m_includeAntRuntime )
{
classpath.addExisting( Path.systemClasspath );
}
}
else
{
if( m_includeAntRuntime )
{
classpath.addExisting( m_compileClasspath.concatSystemClasspath( "last" ) );
}
else
{
classpath.addExisting( m_compileClasspath.concatSystemClasspath( "ignore" ) );
}
}

if( m_includeJavaRuntime )
{
classpath.addJavaRuntime();
classpath.addExisting( m_compileClasspath );
}

return classpath;
@@ -437,5 +416,41 @@ public abstract class DefaultCompilerAdapter

getLogger().debug( niceSourceList.toString() );
}

/**
* Emulation of extdirs feature in java >= 1.2. This method adds all files
* in the given directories (but not in sub-directories!) to the classpath,
* so that you don't have to specify them all one by one.
*/
protected void addExtdirs( Path path )
throws TaskException
{
if( m_extdirs == null )
{
String extProp = System.getProperty( "java.ext.dirs" );
if( extProp != null )
{
m_extdirs = new Path( extProp );
}
else
{
return;
}
}

final String[] dirs = m_extdirs.list();
for( int i = 0; i < dirs.length; i++ )
{
final File dir = new File( dirs[ i ] );
if( dir.exists() && dir.isDirectory() )
{
final FileSet fileSet = new FileSet();
fileSet.setDir( dir );
fileSet.setIncludes( "*" );
path.addFileset( fileSet );
}
}
}

}


+ 1
- 1
proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/compilers/Gcj.java View File

@@ -55,7 +55,7 @@ public class Gcj extends DefaultCompilerAdapter

// gcj doesn't support an extension dir (-extdir)
// so we'll emulate it for compatibility and convenience.
classpath.addExtdirs( m_extdirs );
addExtdirs( classpath );

if( ( m_bootclasspath == null ) || ( m_bootclasspath.size() == 0 ) )
{


+ 1
- 1
proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/compilers/Jikes.java View File

@@ -52,7 +52,7 @@ public class Jikes

// Jikes doesn't support an extension dir (-extdir)
// so we'll emulate it for compatibility and convenience.
classpath.addExtdirs( m_extdirs );
addExtdirs( classpath );

if( ( m_bootclasspath == null ) || ( m_bootclasspath.size() == 0 ) )
{


+ 1
- 1
proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/compilers/Jvc.java View File

@@ -40,7 +40,7 @@ public class Jvc extends DefaultCompilerAdapter

// jvc doesn't support an extension dir (-extdir)
// so we'll emulate it for compatibility and convenience.
classpath.addExtdirs( m_extdirs );
addExtdirs( classpath );

if( ( m_bootclasspath == null ) || ( m_bootclasspath.size() == 0 ) )
{


+ 1
- 1
proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/compilers/Kjc.java View File

@@ -94,7 +94,7 @@ public class Kjc extends DefaultCompilerAdapter

if( m_extdirs != null )
{
cp.addExtdirs( m_extdirs );
addExtdirs( cp );
}

cp.append( classpath );


+ 8
- 6
proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/javadoc/Javadoc.java View File

@@ -559,14 +559,16 @@ public class Javadoc
cmd.setExecutable( getJavadocExecutableName() );

// ------------------------------------------------ general javadoc arguments
if( m_classpath == null )
m_classpath = Path.systemClasspath;
else
m_classpath = m_classpath.concatSystemClasspath( "ignore" );

// Build the classpath to pass to Javadoc
Path classpath = new Path();
classpath.addPath( m_sourcePath );
if ( m_classpath != null )
{
classpath.addPath( m_classpath );
}
cmd.createArgument().setValue( "-classpath" );
cmd.createArgument().setValue( m_sourcePath.toString() +
System.getProperty( "path.separator" ) + m_classpath.toString() );
cmd.createArgument().setValue( classpath.toString() );

if( m_version && m_doclet == null )
cmd.createArgument().setValue( "-version" );


+ 12
- 36
proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/optional/Javah.java View File

@@ -14,6 +14,7 @@ import java.util.StringTokenizer;
import org.apache.avalon.excalibur.util.StringUtil;
import org.apache.avalon.framework.logger.AbstractLogEnabled;
import org.apache.myrmidon.api.TaskException;
import org.apache.myrmidon.api.AbstractTask;
import org.apache.tools.ant.types.Commandline;
import org.apache.tools.ant.types.Path;

@@ -52,7 +53,7 @@ import org.apache.tools.ant.types.Path;
*/

public class Javah
extends AbstractLogEnabled
extends AbstractTask
{
private final static String FAIL_MSG = "Compile failed, messages should have been provided.";

@@ -67,8 +68,10 @@ public class Javah
private String m_cls;
private File m_destDir;

public void setBootclasspath( final Path bootclasspath )
throws TaskException
/**
* Adds an element to the bootclasspath.
*/
public void addBootclasspath( final Path bootclasspath )
{
if( m_bootclasspath == null )
{
@@ -76,7 +79,7 @@ public class Javah
}
else
{
m_bootclasspath.append( bootclasspath );
m_bootclasspath.addPath( bootclasspath );
}
}

@@ -85,7 +88,10 @@ public class Javah
m_cls = cls;
}

public void setClasspath( final Path classpath )
/**
* Adds an element to the classpath.
*/
public void addClasspath( final Path classpath )
throws TaskException
{
if( m_classpath == null )
@@ -94,7 +100,7 @@ public class Javah
}
else
{
m_classpath.append( classpath );
m_classpath.addPath( classpath );
}
}

@@ -149,18 +155,6 @@ public class Javah
m_verbose = verbose;
}

public Path createBootclasspath()
{
if( m_bootclasspath == null )
{
m_bootclasspath = new Path();
}
Path path1 = m_bootclasspath;
final Path path = new Path();
path1.addPath( path );
return path;
}

public ClassArgument createClass()
{
final ClassArgument ga = new ClassArgument();
@@ -169,18 +163,6 @@ public class Javah
return ga;
}

public Path createClasspath()
{
if( m_classpath == null )
{
m_classpath = new Path();
}
Path path1 = m_classpath;
final Path path = new Path();
path1.addPath( path );
return path;
}

/**
* Executes the task.
*/
@@ -188,12 +170,6 @@ public class Javah
throws TaskException
{
validate();

if( m_classpath == null )
{
m_classpath = Path.systemClasspath;
}

doClassicCompile();
}



+ 2
- 1
proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/optional/ejb/BorlandGenerateClient.java View File

@@ -215,7 +215,8 @@ public class BorlandGenerateClient extends Task
//classpath
//add at the end of the classpath
//the system classpath in order to find the tools.jar file
execTask.addClasspath( classpath.concatSystemClasspath() );
// TODO - make sure tools.jar is in the classpath
//execTask.addClasspath( classpath.concatSystemClasspath( "last" ) );

execTask.setFork( true );
execTask.createArg().setValue( "generateclient" );


+ 7
- 17
proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/optional/ejb/IPlanetEjbcTask.java View File

@@ -197,22 +197,6 @@ public class IPlanetEjbcTask extends Task
executeEjbc( getParser() );
}

/**
* Returns the CLASSPATH to be used when calling EJBc. If no user CLASSPATH
* is specified, the System classpath is returned instead.
*
* @return Path The classpath to be used for EJBc.
*/
private Path getClasspath()
{
if( classpath == null )
{
classpath = Path.systemClasspath;
}

return classpath;
}

/**
* Returns a SAXParser that may be used to process the XML descriptors.
*
@@ -311,10 +295,16 @@ public class IPlanetEjbcTask extends Task
private void executeEjbc( SAXParser saxParser )
throws TaskException
{
String classpath = null;
if( classpath != null )
{
classpath = this.classpath.toString();
}

IPlanetEjbc ejbc = new IPlanetEjbc( ejbdescriptor,
iasdescriptor,
dest,
getClasspath().toString(),
classpath,
saxParser );
ejbc.setRetainSource( keepgenerated );
ejbc.setDebugOutput( debug );


+ 1
- 5
proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/optional/javacc/JJTree.java View File

@@ -17,7 +17,6 @@ import org.apache.tools.ant.taskdefs.exec.Execute2;
import org.apache.tools.ant.types.Argument;
import org.apache.tools.ant.types.CommandlineJava;
import org.apache.tools.ant.types.Path;
import org.apache.tools.ant.types.PathElement;

/**
* Taskdef for the JJTree compiler compiler.
@@ -175,10 +174,7 @@ public class JJTree extends Task
throw new TaskException( "Javacchome not set." );
}
final Path classpath = cmdl.createClasspath();
final PathElement pathElement = new PathElement();
classpath.addPathElement( pathElement );
pathElement.setPath( javaccHome.getAbsolutePath() +
"/JavaCC.zip" );
classpath.addLocation( new File( javaccHome, "JavaCC.zip" ) );
classpath.addJavaRuntime();

final Argument arg = cmdl.createVmArgument();


+ 1
- 5
proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/optional/javacc/JavaCC.java View File

@@ -18,7 +18,6 @@ import org.apache.tools.ant.types.Argument;
import org.apache.tools.ant.types.Commandline;
import org.apache.tools.ant.types.CommandlineJava;
import org.apache.tools.ant.types.Path;
import org.apache.tools.ant.types.PathElement;
import org.apache.avalon.excalibur.util.StringUtil;

/**
@@ -229,10 +228,7 @@ public class JavaCC extends Task
throw new TaskException( "Javacchome not set." );
}
final Path classpath = cmdl.createClasspath();
final PathElement pathElement = new PathElement();
classpath.addPathElement( pathElement );
pathElement.setPath( javaccHome.getAbsolutePath() +
"/JavaCC.zip" );
classpath.addLocation( new File( javaccHome, "JavaCC.zip" ) );
classpath.addJavaRuntime();

final Argument arg = cmdl.createVmArgument();


+ 3
- 1
proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/optional/jsp/WLJspc.java View File

@@ -163,7 +163,9 @@ public class WLJspc extends MatchingTask
compileClasspath = new Path();
}

compileClasspath.append( Path.systemClasspath );
// TODO - make sure tools.jar ends up in the classpath
//compileClasspath.append( Path.systemClasspath );

String[] files = ds.getIncludedFiles();

//Weblogic.jspc calls System.exit() ... have to fork


+ 2
- 2
proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java View File

@@ -463,14 +463,14 @@ public class JUnitTask extends Task
int pling = u.indexOf( "!" );
String jarName = u.substring( 9, pling );
getLogger().debug( "Implicitly adding " + jarName + " to classpath" );
createClasspath().setLocation( new File( ( new File( jarName ) ).getAbsolutePath() ) );
createClasspath().addLocation( new File( jarName ) );
}
else if( u.startsWith( "file:" ) )
{
int tail = u.indexOf( resource );
String dirName = u.substring( 5, tail );
getLogger().debug( "Implicitly adding " + dirName + " to classpath" );
createClasspath().setLocation( new File( ( new File( dirName ) ).getAbsolutePath() ) );
createClasspath().addLocation( new File( dirName ) );
}
else
{


+ 1
- 4
proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/optional/metamata/AbstractMetamataTask.java View File

@@ -23,7 +23,6 @@ import org.apache.tools.ant.types.Argument;
import org.apache.tools.ant.types.CommandlineJava;
import org.apache.tools.ant.types.FileSet;
import org.apache.tools.ant.types.Path;
import org.apache.tools.ant.types.PathElement;

/**
* Somewhat abstract framework to be used for other metama 2.0 tasks. This
@@ -198,9 +197,7 @@ public abstract class AbstractMetamataTask
// set the classpath as the jar file
File jar = getMetamataJar( m_metamataHome );
final Path classPath = m_cmdl.createClasspath();
final PathElement pathElement = new PathElement();
classPath.addPathElement( pathElement );
pathElement.setLocation( jar );
classPath.addLocation( jar );

// set the metamata.home property
final Argument vmArgs = m_cmdl.createVmArgument();


+ 1
- 4
proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/optional/metamata/MParse.java View File

@@ -19,7 +19,6 @@ import org.apache.tools.ant.taskdefs.exec.Execute2;
import org.apache.tools.ant.types.Argument;
import org.apache.tools.ant.types.CommandlineJava;
import org.apache.tools.ant.types.Path;
import org.apache.tools.ant.types.PathElement;

/**
* Simple Metamata MParse task based on the original written by <a
@@ -204,9 +203,7 @@ public class MParse
final Path classPath = m_cmdl.createClasspath();
for( int i = 0; i < jars.length; i++ )
{
final PathElement pathElement = new PathElement();
classPath.addPathElement( pathElement );
pathElement.setLocation( jars[ i ] );
classPath.addLocation( jars[ i ] );
}

// set the metamata.home property


+ 4
- 24
proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/rmic/DefaultRmicAdapter.java View File

@@ -177,34 +177,14 @@ public abstract class DefaultRmicAdapter
// add dest dir to classpath so that previously compiled and
// untouched classes are on classpath
Path classpath = new Path();
classpath.setLocation( attributes.getBase() );
classpath.addLocation( attributes.getBase() );

// Combine the build classpath with the system classpath, in an
// order determined by the value of build.classpath

if( attributes.getClasspath() == null )
{
if( attributes.getIncludeantruntime() )
{
classpath.addExisting( Path.systemClasspath );
}
}
else
// add the classpath
if ( attributes.getClasspath() != null )
{
if( attributes.getIncludeantruntime() )
{
classpath.addExisting( attributes.getClasspath().concatSystemClasspath( "last" ) );
}
else
{
classpath.addExisting( attributes.getClasspath().concatSystemClasspath( "ignore" ) );
}
classpath.addExisting( attributes.getClasspath() );
}

if( attributes.getIncludejavaruntime() )
{
classpath.addJavaRuntime();
}
return classpath;
}



+ 3
- 5
proposal/myrmidon/src/todo/org/apache/tools/ant/types/CommandlineJava.java View File

@@ -132,11 +132,10 @@ public class CommandlineJava
pos += sysProperties.size();
}
// classpath is a vm option too..
Path fullClasspath = classpath != null ? classpath.concatSystemClasspath( "ignore" ) : null;
if( fullClasspath != null && fullClasspath.toString().trim().length() > 0 )
if( classpath != null && classpath.toString().trim().length() > 0 )
{
result[ pos++ ] = "-classpath";
result[ pos++ ] = fullClasspath.toString();
result[ pos++ ] = classpath.toString();
}
// this is the classname to run as well as its arguments.
// in case of 'executeJar', the executable is a jar file.
@@ -215,8 +214,7 @@ public class CommandlineJava
{
int size = getActualVMCommand().size() + javaCommand.size() + sysProperties.size();
// classpath is "-classpath <classpath>" -> 2 args
Path fullClasspath = classpath != null ? classpath.concatSystemClasspath( "ignore" ) : null;
if( fullClasspath != null && fullClasspath.toString().trim().length() > 0 )
if( classpath != null && classpath.toString().trim().length() > 0 )
{
size += 2;
}


+ 20
- 152
proposal/myrmidon/src/todo/org/apache/tools/ant/types/Path.java View File

@@ -7,16 +7,15 @@
*/
package org.apache.tools.ant.types;

import org.apache.myrmidon.api.TaskException;
import org.apache.myrmidon.framework.DataType;
import org.apache.tools.ant.util.FileUtils;

import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Locale;
import org.apache.avalon.framework.logger.AbstractLogEnabled;
import org.apache.avalon.framework.logger.Logger;
import org.apache.myrmidon.api.TaskException;
import org.apache.tools.ant.ProjectComponent;
import org.apache.tools.ant.util.FileUtils;

/**
* This object represents a path as used by CLASSPATH or PATH environment
@@ -50,41 +49,24 @@ import org.apache.tools.ant.util.FileUtils;
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
*/
public class Path
extends ProjectComponent
implements Cloneable
implements DataType
{
public final static Path systemClasspath = createSystemClasspath();

private ArrayList m_elements;

private static Path createSystemClasspath()
{
try
{
return new Path( System.getProperty( "java.class.path" ) );
}
catch( final TaskException te )
{
throw new Error( te.toString() );
}
}
private ArrayList m_elements = new ArrayList();
private File m_baseDirectory;

/**
* Invoked by IntrospectionHelper for <code>setXXX(Path p)</code> attribute
* setters.
*/
public Path( final String path )
throws TaskException
{
this();
final PathElement pathElement = new PathElement();
addPathElement( pathElement );
m_elements.add( pathElement );
pathElement.setPath( path );
}

public Path()
{
m_elements = new ArrayList();
}

/**
@@ -99,28 +81,24 @@ public class Path
}

/**
* Adds a element definition to the path.
*
* @param location the location of the element to add (must not be <code>null</code>
* nor empty.
* Sets the base directory for this path.
*/
public void setLocation( final File location )
public void setBaseDirectory( final File baseDir )
{
final PathElement pathElement = new PathElement();
addPathElement( pathElement );
pathElement.setLocation( location );
m_baseDirectory = baseDir;
}

/**
* Parses a path definition and creates single PathElements.
* Adds a element definition to the path.
*
* @param path the path definition.
* @param location the location of the element to add (must not be <code>null</code>
* nor empty.
*/
public void setPath( String path )
public void addLocation( final File location )
{
final PathElement pathElement = new PathElement();
addPathElement( pathElement );
pathElement.setPath( path );
m_elements.add( pathElement );
pathElement.setLocation( location );
}

/**
@@ -138,42 +116,7 @@ public class Path
final File file = new File( list[ i ] );
if( file.exists() )
{
setLocation( file );
}
}
}

/**
* Emulation of extdirs feature in java >= 1.2. This method adds all files
* in the given directories (but not in sub-directories!) to the classpath,
* so that you don't have to specify them all one by one.
*/
public void addExtdirs( Path extdirs )
throws TaskException
{
if( extdirs == null )
{
String extProp = System.getProperty( "java.ext.dirs" );
if( extProp != null )
{
extdirs = new Path( extProp );
}
else
{
return;
}
}

final String[] dirs = extdirs.list();
for( int i = 0; i < dirs.length; i++ )
{
final File dir = resolveFile( dirs[ i ] );
if( dir.exists() && dir.isDirectory() )
{
final FileSet fileSet = new FileSet();
fileSet.setDir( dir );
fileSet.setIncludes( "*" );
addFileset( fileSet );
addLocation( file );
}
}
}
@@ -260,73 +203,6 @@ public class Path
}
}

/**
* Concatenates the system class path in the order specified by the
* ${build.sysclasspath} property - using &quot;last&quot; as default value.
*
* @return Description of the Returned Value
*/
public Path concatSystemClasspath()
throws TaskException
{
return concatSystemClasspath( "last" );
}

/**
* Concatenates the system class path in the order specified by the
* ${build.sysclasspath} property - using the supplied value if
* ${build.sysclasspath} has not been set.
*
* @param defValue Description of Parameter
* @return Description of the Returned Value
*/
public Path concatSystemClasspath( String defValue )
throws TaskException
{
Path result = new Path();

String order = defValue;
if( getProject() != null )
{
String o = getProject().getProperty( "build.sysclasspath" );
if( o != null )
{
order = o;
}
}

if( order.equals( "only" ) )
{
// only: the developer knows what (s)he is doing
result.addExisting( Path.systemClasspath );
}
else if( order.equals( "first" ) )
{
// first: developer could use a little help
result.addExisting( Path.systemClasspath );
result.addExisting( this );
}
else if( order.equals( "ignore" ) )
{
// ignore: don't trust anyone
result.addExisting( this );
}
else
{
// last: don't trust the developer
if( !order.equals( "last" ) )
{
final String message = "invalid value for build.sysclasspath: " + order;
getLogger().warn( message );
}

result.addExisting( this );
result.addExisting( Path.systemClasspath );
}

return result;
}

/**
* Creates a nested <code>&lt;path&gt;</code> element.
*
@@ -338,16 +214,9 @@ public class Path
m_elements.add( path );
}

/**
* Creates the nested <code>&lt;pathelement&gt;</code> element.
*/
public void addPathElement( final PathElement pathElement )
{
m_elements.add( pathElement );
}

/**
* Returns all path elements defined by this and nested path objects.
* The paths returned by this method are absolute.
*/
public String[] list()
throws TaskException
@@ -363,9 +232,8 @@ public class Path
}
else if( o instanceof PathElement )
{
final File baseDirectory = getBaseDirectory();
final PathElement element = (PathElement)o;
final String[] parts = element.getParts( baseDirectory, getLogger() );
final String[] parts = element.getParts( m_baseDirectory );
if( parts == null )
{
throw new NullPointerException( "You must either set location or path on <pathelement>" );


+ 12
- 5
proposal/myrmidon/src/todo/org/apache/tools/ant/types/PathElement.java View File

@@ -10,17 +10,19 @@ package org.apache.tools.ant.types;
import java.io.File;
import org.apache.tools.ant.util.FileUtils;
import org.apache.avalon.framework.logger.Logger;
import org.apache.myrmidon.api.TaskException;

/**
* Helper class, holds the nested <code>&lt;pathelement&gt;</code> values.
* Helper class, holds <code>&lt;&gt;</code> values.
*/
public class PathElement
class PathElement
{
private String m_location;
private String m_path;

public void setLocation( final File location )
{
m_path = FileUtils.translateFile( location.getAbsolutePath() );
m_location = location.getAbsolutePath();
}

public void setPath( String path )
@@ -28,8 +30,13 @@ public class PathElement
m_path = path;
}

protected String[] getParts( final File baseDirectory, final Logger logger )
protected String[] getParts( final File baseDirectory )
throws TaskException
{
return FileUtils.translatePath( baseDirectory, m_path, logger );
if ( m_location != null )
{
return new String[] { m_location };
}
return FileUtils.translatePath( baseDirectory, m_path );
}
}

+ 53
- 0
proposal/myrmidon/src/todo/org/apache/tools/ant/types/converters/StringToPathConverter.java View File

@@ -0,0 +1,53 @@
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE.txt file.
*/
package org.apache.tools.ant.types.converters;

import org.apache.avalon.framework.context.Context;
import org.apache.myrmidon.converter.AbstractConverter;
import org.apache.myrmidon.converter.ConverterException;
import org.apache.tools.ant.types.Path;

/**
* A converter from String to Path.
*
* @author Adam Murdoch
*/
public class StringToPathConverter
extends AbstractConverter
{
/**
* Constructors a converter.
*/
public StringToPathConverter()
{
super( String.class, Path.class );
}

/**
* Converts from String to Path
*
* @param original the original Object
* @param context the context in which to convert
* @return the converted object
* @exception Exception if an error occurs
*/
protected Object convert( Object original, Context context )
throws ConverterException
{
/*
String path = (String)original;
TaskContext taskContext = (TaskContext)context;

Path retval = new Path( path );
retval.setBaseDirectory( taskContext.getBaseDirectory() );
return retval;
*/
return null;
}
}


+ 15
- 26
proposal/myrmidon/src/todo/org/apache/tools/ant/util/FileUtils.java View File

@@ -390,11 +390,7 @@ public class FileUtils
return "";

final StringBuffer result = new StringBuffer( source );
for( int i = 0; i < result.length(); i++ )
{
translateFileSep( result, i );
}

translateFileSep( result );
return result.toString();
}

@@ -406,22 +402,25 @@ public class FileUtils
* @param pos Description of Parameter
* @return Description of the Returned Value
*/
public static boolean translateFileSep( StringBuffer buffer, int pos )
public static void translateFileSep( StringBuffer buffer )
{
if( buffer.charAt( pos ) == '/' || buffer.charAt( pos ) == '\\' )
int len = buffer.length();
for ( int pos = 0; pos < len; pos++ )
{
buffer.setCharAt( pos, File.separatorChar );
return true;
char ch = buffer.charAt( pos );
if( ch == '/' || ch == '\\' )
{
buffer.setCharAt( pos, File.separatorChar );
}
}
return false;
}

/**
* Splits a PATH (with : or ; as separators) into its parts.
*/
public static String[] translatePath( final File baseDirectory,
String source,
final Logger logger )
String source )
throws TaskException
{
final ArrayList result = new ArrayList();
if( source == null )
@@ -431,23 +430,13 @@ public class FileUtils
StringBuffer element = new StringBuffer();
for( int i = 0; i < elements.length; i++ )
{
// Resolve the file relative to the base directory
element.setLength( 0 );
final String pathElement = elements[ i ];
try
{
element.append( resolveFile( baseDirectory, pathElement ) );
}
catch( TaskException e )
{
final String message =
"Dropping path element " + pathElement + " as it is not valid relative to the project";
logger.debug( message );
}
element.append( resolveFile( baseDirectory, pathElement ) );

for( int j = 0; j < element.length(); j++ )
{
translateFileSep( element, j );
}
// Tidy up the separators
translateFileSep( element );
result.add( element.toString() );
}



Loading…
Cancel
Save