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> </zipfileset>
</jar> </jar>


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


</target> </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.excalibur.util.StringUtil;
import org.apache.avalon.framework.logger.AbstractLogEnabled; import org.apache.avalon.framework.logger.AbstractLogEnabled;
import org.apache.myrmidon.api.TaskException; 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.Javac;
import org.apache.tools.ant.taskdefs.exec.Execute2; import org.apache.tools.ant.taskdefs.exec.Execute2;
import org.apache.tools.ant.types.Commandline; import org.apache.tools.ant.types.Commandline;
import org.apache.tools.ant.types.Path; import org.apache.tools.ant.types.Path;
import org.apache.tools.ant.types.FileSet;


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


if( m_destDir != null ) 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; return classpath;
@@ -437,5 +416,41 @@ public abstract class DefaultCompilerAdapter


getLogger().debug( niceSourceList.toString() ); 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) // gcj doesn't support an extension dir (-extdir)
// so we'll emulate it for compatibility and convenience. // so we'll emulate it for compatibility and convenience.
classpath.addExtdirs( m_extdirs );
addExtdirs( classpath );


if( ( m_bootclasspath == null ) || ( m_bootclasspath.size() == 0 ) ) 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) // Jikes doesn't support an extension dir (-extdir)
// so we'll emulate it for compatibility and convenience. // so we'll emulate it for compatibility and convenience.
classpath.addExtdirs( m_extdirs );
addExtdirs( classpath );


if( ( m_bootclasspath == null ) || ( m_bootclasspath.size() == 0 ) ) 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) // jvc doesn't support an extension dir (-extdir)
// so we'll emulate it for compatibility and convenience. // so we'll emulate it for compatibility and convenience.
classpath.addExtdirs( m_extdirs );
addExtdirs( classpath );


if( ( m_bootclasspath == null ) || ( m_bootclasspath.size() == 0 ) ) 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 ) if( m_extdirs != null )
{ {
cp.addExtdirs( m_extdirs );
addExtdirs( cp );
} }


cp.append( classpath ); 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() ); cmd.setExecutable( getJavadocExecutableName() );


// ------------------------------------------------ general javadoc arguments // ------------------------------------------------ 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( "-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 ) if( m_version && m_doclet == null )
cmd.createArgument().setValue( "-version" ); 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.excalibur.util.StringUtil;
import org.apache.avalon.framework.logger.AbstractLogEnabled; import org.apache.avalon.framework.logger.AbstractLogEnabled;
import org.apache.myrmidon.api.TaskException; 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.Commandline;
import org.apache.tools.ant.types.Path; import org.apache.tools.ant.types.Path;


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


public class Javah public class Javah
extends AbstractLogEnabled
extends AbstractTask
{ {
private final static String FAIL_MSG = "Compile failed, messages should have been provided."; 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 String m_cls;
private File m_destDir; 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 ) if( m_bootclasspath == null )
{ {
@@ -76,7 +79,7 @@ public class Javah
} }
else else
{ {
m_bootclasspath.append( bootclasspath );
m_bootclasspath.addPath( bootclasspath );
} }
} }


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


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


@@ -149,18 +155,6 @@ public class Javah
m_verbose = verbose; 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() public ClassArgument createClass()
{ {
final ClassArgument ga = new ClassArgument(); final ClassArgument ga = new ClassArgument();
@@ -169,18 +163,6 @@ public class Javah
return ga; 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. * Executes the task.
*/ */
@@ -188,12 +170,6 @@ public class Javah
throws TaskException throws TaskException
{ {
validate(); validate();

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

doClassicCompile(); 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 //classpath
//add at the end of the classpath //add at the end of the classpath
//the system classpath in order to find the tools.jar file //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.setFork( true );
execTask.createArg().setValue( "generateclient" ); 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() ); 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. * 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 ) private void executeEjbc( SAXParser saxParser )
throws TaskException throws TaskException
{ {
String classpath = null;
if( classpath != null )
{
classpath = this.classpath.toString();
}

IPlanetEjbc ejbc = new IPlanetEjbc( ejbdescriptor, IPlanetEjbc ejbc = new IPlanetEjbc( ejbdescriptor,
iasdescriptor, iasdescriptor,
dest, dest,
getClasspath().toString(),
classpath,
saxParser ); saxParser );
ejbc.setRetainSource( keepgenerated ); ejbc.setRetainSource( keepgenerated );
ejbc.setDebugOutput( debug ); 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.Argument;
import org.apache.tools.ant.types.CommandlineJava; import org.apache.tools.ant.types.CommandlineJava;
import org.apache.tools.ant.types.Path; import org.apache.tools.ant.types.Path;
import org.apache.tools.ant.types.PathElement;


/** /**
* Taskdef for the JJTree compiler compiler. * Taskdef for the JJTree compiler compiler.
@@ -175,10 +174,7 @@ public class JJTree extends Task
throw new TaskException( "Javacchome not set." ); throw new TaskException( "Javacchome not set." );
} }
final Path classpath = cmdl.createClasspath(); 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(); classpath.addJavaRuntime();


final Argument arg = cmdl.createVmArgument(); 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.Commandline;
import org.apache.tools.ant.types.CommandlineJava; import org.apache.tools.ant.types.CommandlineJava;
import org.apache.tools.ant.types.Path; import org.apache.tools.ant.types.Path;
import org.apache.tools.ant.types.PathElement;
import org.apache.avalon.excalibur.util.StringUtil; import org.apache.avalon.excalibur.util.StringUtil;


/** /**
@@ -229,10 +228,7 @@ public class JavaCC extends Task
throw new TaskException( "Javacchome not set." ); throw new TaskException( "Javacchome not set." );
} }
final Path classpath = cmdl.createClasspath(); 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(); classpath.addJavaRuntime();


final Argument arg = cmdl.createVmArgument(); 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 = new Path();
} }


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

String[] files = ds.getIncludedFiles(); String[] files = ds.getIncludedFiles();


//Weblogic.jspc calls System.exit() ... have to fork //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( "!" ); int pling = u.indexOf( "!" );
String jarName = u.substring( 9, pling ); String jarName = u.substring( 9, pling );
getLogger().debug( "Implicitly adding " + jarName + " to classpath" ); 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:" ) ) else if( u.startsWith( "file:" ) )
{ {
int tail = u.indexOf( resource ); int tail = u.indexOf( resource );
String dirName = u.substring( 5, tail ); String dirName = u.substring( 5, tail );
getLogger().debug( "Implicitly adding " + dirName + " to classpath" ); getLogger().debug( "Implicitly adding " + dirName + " to classpath" );
createClasspath().setLocation( new File( ( new File( dirName ) ).getAbsolutePath() ) );
createClasspath().addLocation( new File( dirName ) );
} }
else 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.CommandlineJava;
import org.apache.tools.ant.types.FileSet; import org.apache.tools.ant.types.FileSet;
import org.apache.tools.ant.types.Path; 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 * 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 // set the classpath as the jar file
File jar = getMetamataJar( m_metamataHome ); File jar = getMetamataJar( m_metamataHome );
final Path classPath = m_cmdl.createClasspath(); 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 // set the metamata.home property
final Argument vmArgs = m_cmdl.createVmArgument(); 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.Argument;
import org.apache.tools.ant.types.CommandlineJava; import org.apache.tools.ant.types.CommandlineJava;
import org.apache.tools.ant.types.Path; 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 * Simple Metamata MParse task based on the original written by <a
@@ -204,9 +203,7 @@ public class MParse
final Path classPath = m_cmdl.createClasspath(); final Path classPath = m_cmdl.createClasspath();
for( int i = 0; i < jars.length; i++ ) 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 // 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 // add dest dir to classpath so that previously compiled and
// untouched classes are on classpath // untouched classes are on classpath
Path classpath = new Path(); 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; 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(); pos += sysProperties.size();
} }
// classpath is a vm option too.. // 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++ ] = "-classpath";
result[ pos++ ] = fullClasspath.toString();
result[ pos++ ] = classpath.toString();
} }
// this is the classname to run as well as its arguments. // this is the classname to run as well as its arguments.
// in case of 'executeJar', the executable is a jar file. // 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(); int size = getActualVMCommand().size() + javaCommand.size() + sysProperties.size();
// classpath is "-classpath <classpath>" -> 2 args // 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; 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; 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.File;
import java.io.IOException; import java.io.IOException;
import java.net.URL; import java.net.URL;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Locale; 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 * 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> * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
*/ */
public class Path 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 * Invoked by IntrospectionHelper for <code>setXXX(Path p)</code> attribute
* setters. * setters.
*/ */
public Path( final String path ) public Path( final String path )
throws TaskException
{ {
this();
final PathElement pathElement = new PathElement(); final PathElement pathElement = new PathElement();
addPathElement( pathElement );
m_elements.add( pathElement );
pathElement.setPath( path ); pathElement.setPath( path );
} }


public 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(); 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 ] ); final File file = new File( list[ i ] );
if( file.exists() ) 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. * Creates a nested <code>&lt;path&gt;</code> element.
* *
@@ -338,16 +214,9 @@ public class Path
m_elements.add( 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. * Returns all path elements defined by this and nested path objects.
* The paths returned by this method are absolute.
*/ */
public String[] list() public String[] list()
throws TaskException throws TaskException
@@ -363,9 +232,8 @@ public class Path
} }
else if( o instanceof PathElement ) else if( o instanceof PathElement )
{ {
final File baseDirectory = getBaseDirectory();
final PathElement element = (PathElement)o; final PathElement element = (PathElement)o;
final String[] parts = element.getParts( baseDirectory, getLogger() );
final String[] parts = element.getParts( m_baseDirectory );
if( parts == null ) if( parts == null )
{ {
throw new NullPointerException( "You must either set location or path on <pathelement>" ); 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 java.io.File;
import org.apache.tools.ant.util.FileUtils; import org.apache.tools.ant.util.FileUtils;
import org.apache.avalon.framework.logger.Logger; 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; private String m_path;


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


public void setPath( String path ) public void setPath( String path )
@@ -28,8 +30,13 @@ public class PathElement
m_path = path; 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 ""; return "";


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

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


@@ -406,22 +402,25 @@ public class FileUtils
* @param pos Description of Parameter * @param pos Description of Parameter
* @return Description of the Returned Value * @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. * Splits a PATH (with : or ; as separators) into its parts.
*/ */
public static String[] translatePath( final File baseDirectory, public static String[] translatePath( final File baseDirectory,
String source,
final Logger logger )
String source )
throws TaskException
{ {
final ArrayList result = new ArrayList(); final ArrayList result = new ArrayList();
if( source == null ) if( source == null )
@@ -431,23 +430,13 @@ public class FileUtils
StringBuffer element = new StringBuffer(); StringBuffer element = new StringBuffer();
for( int i = 0; i < elements.length; i++ ) for( int i = 0; i < elements.length; i++ )
{ {
// Resolve the file relative to the base directory
element.setLength( 0 ); element.setLength( 0 );
final String pathElement = elements[ i ]; 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() ); result.add( element.toString() );
} }




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

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

<types> <types>
<task name="ant1-tasklib" classname="org.apache.myrmidon.libs.ant1.Ant1Tasklib" /> <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> </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> </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.excalibur.util.StringUtil;
import org.apache.avalon.framework.logger.AbstractLogEnabled; import org.apache.avalon.framework.logger.AbstractLogEnabled;
import org.apache.myrmidon.api.TaskException; 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.Javac;
import org.apache.tools.ant.taskdefs.exec.Execute2; import org.apache.tools.ant.taskdefs.exec.Execute2;
import org.apache.tools.ant.types.Commandline; import org.apache.tools.ant.types.Commandline;
import org.apache.tools.ant.types.Path; import org.apache.tools.ant.types.Path;
import org.apache.tools.ant.types.FileSet;


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


if( m_destDir != null ) 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; return classpath;
@@ -437,5 +416,41 @@ public abstract class DefaultCompilerAdapter


getLogger().debug( niceSourceList.toString() ); 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) // gcj doesn't support an extension dir (-extdir)
// so we'll emulate it for compatibility and convenience. // so we'll emulate it for compatibility and convenience.
classpath.addExtdirs( m_extdirs );
addExtdirs( classpath );


if( ( m_bootclasspath == null ) || ( m_bootclasspath.size() == 0 ) ) 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) // Jikes doesn't support an extension dir (-extdir)
// so we'll emulate it for compatibility and convenience. // so we'll emulate it for compatibility and convenience.
classpath.addExtdirs( m_extdirs );
addExtdirs( classpath );


if( ( m_bootclasspath == null ) || ( m_bootclasspath.size() == 0 ) ) 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) // jvc doesn't support an extension dir (-extdir)
// so we'll emulate it for compatibility and convenience. // so we'll emulate it for compatibility and convenience.
classpath.addExtdirs( m_extdirs );
addExtdirs( classpath );


if( ( m_bootclasspath == null ) || ( m_bootclasspath.size() == 0 ) ) 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 ) if( m_extdirs != null )
{ {
cp.addExtdirs( m_extdirs );
addExtdirs( cp );
} }


cp.append( classpath ); 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() ); cmd.setExecutable( getJavadocExecutableName() );


// ------------------------------------------------ general javadoc arguments // ------------------------------------------------ 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( "-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 ) if( m_version && m_doclet == null )
cmd.createArgument().setValue( "-version" ); 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.excalibur.util.StringUtil;
import org.apache.avalon.framework.logger.AbstractLogEnabled; import org.apache.avalon.framework.logger.AbstractLogEnabled;
import org.apache.myrmidon.api.TaskException; 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.Commandline;
import org.apache.tools.ant.types.Path; import org.apache.tools.ant.types.Path;


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


public class Javah public class Javah
extends AbstractLogEnabled
extends AbstractTask
{ {
private final static String FAIL_MSG = "Compile failed, messages should have been provided."; 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 String m_cls;
private File m_destDir; 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 ) if( m_bootclasspath == null )
{ {
@@ -76,7 +79,7 @@ public class Javah
} }
else else
{ {
m_bootclasspath.append( bootclasspath );
m_bootclasspath.addPath( bootclasspath );
} }
} }


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


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


@@ -149,18 +155,6 @@ public class Javah
m_verbose = verbose; 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() public ClassArgument createClass()
{ {
final ClassArgument ga = new ClassArgument(); final ClassArgument ga = new ClassArgument();
@@ -169,18 +163,6 @@ public class Javah
return ga; 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. * Executes the task.
*/ */
@@ -188,12 +170,6 @@ public class Javah
throws TaskException throws TaskException
{ {
validate(); validate();

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

doClassicCompile(); 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 //classpath
//add at the end of the classpath //add at the end of the classpath
//the system classpath in order to find the tools.jar file //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.setFork( true );
execTask.createArg().setValue( "generateclient" ); 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() ); 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. * 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 ) private void executeEjbc( SAXParser saxParser )
throws TaskException throws TaskException
{ {
String classpath = null;
if( classpath != null )
{
classpath = this.classpath.toString();
}

IPlanetEjbc ejbc = new IPlanetEjbc( ejbdescriptor, IPlanetEjbc ejbc = new IPlanetEjbc( ejbdescriptor,
iasdescriptor, iasdescriptor,
dest, dest,
getClasspath().toString(),
classpath,
saxParser ); saxParser );
ejbc.setRetainSource( keepgenerated ); ejbc.setRetainSource( keepgenerated );
ejbc.setDebugOutput( debug ); 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.Argument;
import org.apache.tools.ant.types.CommandlineJava; import org.apache.tools.ant.types.CommandlineJava;
import org.apache.tools.ant.types.Path; import org.apache.tools.ant.types.Path;
import org.apache.tools.ant.types.PathElement;


/** /**
* Taskdef for the JJTree compiler compiler. * Taskdef for the JJTree compiler compiler.
@@ -175,10 +174,7 @@ public class JJTree extends Task
throw new TaskException( "Javacchome not set." ); throw new TaskException( "Javacchome not set." );
} }
final Path classpath = cmdl.createClasspath(); 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(); classpath.addJavaRuntime();


final Argument arg = cmdl.createVmArgument(); 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.Commandline;
import org.apache.tools.ant.types.CommandlineJava; import org.apache.tools.ant.types.CommandlineJava;
import org.apache.tools.ant.types.Path; import org.apache.tools.ant.types.Path;
import org.apache.tools.ant.types.PathElement;
import org.apache.avalon.excalibur.util.StringUtil; import org.apache.avalon.excalibur.util.StringUtil;


/** /**
@@ -229,10 +228,7 @@ public class JavaCC extends Task
throw new TaskException( "Javacchome not set." ); throw new TaskException( "Javacchome not set." );
} }
final Path classpath = cmdl.createClasspath(); 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(); classpath.addJavaRuntime();


final Argument arg = cmdl.createVmArgument(); 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 = new Path();
} }


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

String[] files = ds.getIncludedFiles(); String[] files = ds.getIncludedFiles();


//Weblogic.jspc calls System.exit() ... have to fork //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( "!" ); int pling = u.indexOf( "!" );
String jarName = u.substring( 9, pling ); String jarName = u.substring( 9, pling );
getLogger().debug( "Implicitly adding " + jarName + " to classpath" ); 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:" ) ) else if( u.startsWith( "file:" ) )
{ {
int tail = u.indexOf( resource ); int tail = u.indexOf( resource );
String dirName = u.substring( 5, tail ); String dirName = u.substring( 5, tail );
getLogger().debug( "Implicitly adding " + dirName + " to classpath" ); getLogger().debug( "Implicitly adding " + dirName + " to classpath" );
createClasspath().setLocation( new File( ( new File( dirName ) ).getAbsolutePath() ) );
createClasspath().addLocation( new File( dirName ) );
} }
else 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.CommandlineJava;
import org.apache.tools.ant.types.FileSet; import org.apache.tools.ant.types.FileSet;
import org.apache.tools.ant.types.Path; 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 * 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 // set the classpath as the jar file
File jar = getMetamataJar( m_metamataHome ); File jar = getMetamataJar( m_metamataHome );
final Path classPath = m_cmdl.createClasspath(); 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 // set the metamata.home property
final Argument vmArgs = m_cmdl.createVmArgument(); 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.Argument;
import org.apache.tools.ant.types.CommandlineJava; import org.apache.tools.ant.types.CommandlineJava;
import org.apache.tools.ant.types.Path; 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 * Simple Metamata MParse task based on the original written by <a
@@ -204,9 +203,7 @@ public class MParse
final Path classPath = m_cmdl.createClasspath(); final Path classPath = m_cmdl.createClasspath();
for( int i = 0; i < jars.length; i++ ) 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 // 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 // add dest dir to classpath so that previously compiled and
// untouched classes are on classpath // untouched classes are on classpath
Path classpath = new Path(); 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; 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(); pos += sysProperties.size();
} }
// classpath is a vm option too.. // 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++ ] = "-classpath";
result[ pos++ ] = fullClasspath.toString();
result[ pos++ ] = classpath.toString();
} }
// this is the classname to run as well as its arguments. // this is the classname to run as well as its arguments.
// in case of 'executeJar', the executable is a jar file. // 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(); int size = getActualVMCommand().size() + javaCommand.size() + sysProperties.size();
// classpath is "-classpath <classpath>" -> 2 args // 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; 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; 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.File;
import java.io.IOException; import java.io.IOException;
import java.net.URL; import java.net.URL;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Locale; 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 * 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> * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
*/ */
public class Path 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 * Invoked by IntrospectionHelper for <code>setXXX(Path p)</code> attribute
* setters. * setters.
*/ */
public Path( final String path ) public Path( final String path )
throws TaskException
{ {
this();
final PathElement pathElement = new PathElement(); final PathElement pathElement = new PathElement();
addPathElement( pathElement );
m_elements.add( pathElement );
pathElement.setPath( path ); pathElement.setPath( path );
} }


public 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(); 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 ] ); final File file = new File( list[ i ] );
if( file.exists() ) 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. * Creates a nested <code>&lt;path&gt;</code> element.
* *
@@ -338,16 +214,9 @@ public class Path
m_elements.add( 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. * Returns all path elements defined by this and nested path objects.
* The paths returned by this method are absolute.
*/ */
public String[] list() public String[] list()
throws TaskException throws TaskException
@@ -363,9 +232,8 @@ public class Path
} }
else if( o instanceof PathElement ) else if( o instanceof PathElement )
{ {
final File baseDirectory = getBaseDirectory();
final PathElement element = (PathElement)o; final PathElement element = (PathElement)o;
final String[] parts = element.getParts( baseDirectory, getLogger() );
final String[] parts = element.getParts( m_baseDirectory );
if( parts == null ) if( parts == null )
{ {
throw new NullPointerException( "You must either set location or path on <pathelement>" ); 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 java.io.File;
import org.apache.tools.ant.util.FileUtils; import org.apache.tools.ant.util.FileUtils;
import org.apache.avalon.framework.logger.Logger; 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; private String m_path;


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


public void setPath( String path ) public void setPath( String path )
@@ -28,8 +30,13 @@ public class PathElement
m_path = path; 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 ""; return "";


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

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


@@ -406,22 +402,25 @@ public class FileUtils
* @param pos Description of Parameter * @param pos Description of Parameter
* @return Description of the Returned Value * @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. * Splits a PATH (with : or ; as separators) into its parts.
*/ */
public static String[] translatePath( final File baseDirectory, public static String[] translatePath( final File baseDirectory,
String source,
final Logger logger )
String source )
throws TaskException
{ {
final ArrayList result = new ArrayList(); final ArrayList result = new ArrayList();
if( source == null ) if( source == null )
@@ -431,23 +430,13 @@ public class FileUtils
StringBuffer element = new StringBuffer(); StringBuffer element = new StringBuffer();
for( int i = 0; i < elements.length; i++ ) for( int i = 0; i < elements.length; i++ )
{ {
// Resolve the file relative to the base directory
element.setLength( 0 ); element.setLength( 0 );
final String pathElement = elements[ i ]; 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() ); result.add( element.toString() );
} }




Loading…
Cancel
Save