Browse Source

Cleanup class and move ClassArgument to top level class

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@270580 13f79535-47bb-0310-9956-ffa450edef68
master
Peter Donald 24 years ago
parent
commit
450b3303ea
4 changed files with 240 additions and 352 deletions
  1. +27
    -0
      proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/ClassArgument.java
  2. +93
    -176
      proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/Javah.java
  3. +27
    -0
      proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/optional/ClassArgument.java
  4. +93
    -176
      proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/optional/Javah.java

+ 27
- 0
proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/ClassArgument.java View File

@@ -0,0 +1,27 @@
/*
* 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.taskdefs.optional;

import org.apache.avalon.framework.logger.AbstractLogEnabled;

public class ClassArgument
extends AbstractLogEnabled
{
private String m_name;

public void setName( String name )
{
m_name = name;
getLogger().info( "ClassArgument.name=" + name );
}

public String getName()
{
return m_name;
}
}

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

@@ -12,12 +12,10 @@ import java.util.ArrayList;
import java.util.Iterator;
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.framework.JavaVersion;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.types.Commandline;
import org.apache.tools.ant.types.Path;
import org.apache.tools.ant.types.Reference;

/**
* Task to generate JNI header files using javah. This task can take the
@@ -53,267 +51,209 @@ import org.apache.tools.ant.types.Reference;
* richard.beton@physics.org</a>
*/

public class Javah extends Task
public class Javah
extends AbstractLogEnabled
{

private final static String FAIL_MSG = "Compile failed, messages should have been provided.";

private ArrayList classes = new ArrayList( 2 );
private Path classpath = null;
private File outputFile = null;
private boolean verbose = false;
private boolean force = false;
private boolean old = false;
private boolean stubs = false;
private Path bootclasspath;
private String cls;
private File destDir;

/**
* Adds a reference to a CLASSPATH defined elsewhere.
*
* @param r The new BootClasspathRef value
*/
public void setBootClasspathRef( Reference r )
{
createBootclasspath().setRefid( r );
}

public void setBootclasspath( Path src )
private ArrayList m_classes = new ArrayList( 2 );
private Path m_classpath;
private File m_outputFile;
private boolean m_verbose;
private boolean m_force;
private boolean m_old;
private boolean m_stubs;
private Path m_bootclasspath;
private String m_cls;
private File m_destDir;

public void setBootclasspath( final Path bootclasspath )
throws TaskException
{
if( bootclasspath == null )
if( m_bootclasspath == null )
{
bootclasspath = src;
m_bootclasspath = bootclasspath;
}
else
{
bootclasspath.append( src );
m_bootclasspath.append( bootclasspath );
}
}

public void setClass( String cls )
public void setClass( final String cls )
{
this.cls = cls;
m_cls = cls;
}

public void setClasspath( Path src )
public void setClasspath( final Path classpath )
throws TaskException
{
if( classpath == null )
if( m_classpath == null )
{
classpath = src;
m_classpath = classpath;
}
else
{
classpath.append( src );
m_classpath.append( classpath );
}
}

/**
* Adds a reference to a CLASSPATH defined elsewhere.
*
* @param r The new ClasspathRef value
*/
public void setClasspathRef( Reference r )
{
createClasspath().setRefid( r );
}

/**
* Set the destination directory into which the Java source files should be
* compiled.
*
* @param destDir The new Destdir value
*/
public void setDestdir( File destDir )
public void setDestdir( final File destDir )
{
this.destDir = destDir;
m_destDir = destDir;
}

/**
* Set the force-write flag.
*
* @param force The new Force value
*/
public void setForce( boolean force )
public void setForce( final boolean force )
{
this.force = force;
m_force = force;
}

/**
* Set the old flag.
*
* @param old The new Old value
*/
public void setOld( boolean old )
public void setOld( final boolean old )
{
this.old = old;
m_old = old;
}

///**
// * Sets the extension directories that will be used during the
// * compilation.
// */
//public void setExtdirs(Path extdirs) {
// if (this.extdirs == null) {
// this.extdirs = extdirs;
// } else {
// this.extdirs.append(extdirs);
// }
//}

///**
// * Maybe creates a nested classpath element.
// */
//public Path createExtdirs() {
// if (extdirs == null) {
// extdirs = new Path(project);
// }
// return extdirs.createPath();
//}

/**
* Set the output file name.
*
* @param outputFile The new OutputFile value
*/
public void setOutputFile( File outputFile )
public void setOutputFile( final File outputFile )
{
this.outputFile = outputFile;
m_outputFile = outputFile;
}

/**
* Set the stubs flag.
*
* @param stubs The new Stubs value
*/
public void setStubs( boolean stubs )
public void setStubs( final boolean stubs )
{
this.stubs = stubs;
m_stubs = stubs;
}

/**
* Set the verbose flag.
*
* @param verbose The new Verbose value
*/
public void setVerbose( boolean verbose )
public void setVerbose( final boolean verbose )
{
this.verbose = verbose;
m_verbose = verbose;
}

public Path createBootclasspath()
{
if( bootclasspath == null )
if( m_bootclasspath == null )
{
bootclasspath = new Path();
m_bootclasspath = new Path();
}
return bootclasspath.createPath();
return m_bootclasspath.createPath();
}

public ClassArgument createClass()
{
ClassArgument ga = new ClassArgument();
classes.add( ga );
final ClassArgument ga = new ClassArgument();
setupLogger( ga );
m_classes.add( ga );
return ga;
}

public Path createClasspath()
{
if( classpath == null )
if( m_classpath == null )
{
classpath = new Path();
m_classpath = new Path();
}
return classpath.createPath();
return m_classpath.createPath();
}

/**
* Executes the task.
*
* @exception TaskException Description of Exception
*/
public void execute()
throws TaskException
{
// first off, make sure that we've got a srcdir
validate();

if( ( cls == null ) && ( classes.size() == 0 ) )
if( m_classpath == null )
{
throw new TaskException( "class attribute must be set!" );
m_classpath = Path.systemClasspath;
}

if( ( cls != null ) && ( classes.size() > 0 ) )
{
throw new TaskException( "set class attribute or class element, not both." );
}
doClassicCompile();
}

if( destDir != null )
private void validate() throws TaskException
{
if( ( m_cls == null ) && ( m_classes.size() == 0 ) )
{
if( !destDir.isDirectory() )
{
throw new TaskException( "destination directory \"" + destDir + "\" does not exist or is not a directory" );
}
if( outputFile != null )
{
throw new TaskException( "destdir and outputFile are mutually exclusive" );
}
final String message = "class attribute must be set!";
throw new TaskException( message );
}

if( classpath == null )
if( ( m_cls != null ) && ( m_classes.size() > 0 ) )
{
classpath = Path.systemClasspath;
final String message = "set class attribute or class element, not both.";
throw new TaskException( message );
}

String compiler = getProject().getProperty( "build.compiler" );
if( compiler == null )
if( m_destDir != null )
{
if( JavaVersion.JAVA1_2 != JavaVersion.getCurrentJavaVersion() )
if( !m_destDir.isDirectory() )
{
compiler = "modern";
final String message = "destination directory \"" + m_destDir +
"\" does not exist or is not a directory";
throw new TaskException( message );
}
else
if( m_outputFile != null )
{
compiler = "classic";
final String message = "destdir and outputFile are mutually exclusive";
throw new TaskException( message );
}
}

doClassicCompile();
}

/**
* Logs the compilation parameters, adds the files to compile and logs the
* &qout;niceSourceList&quot;
*
* @param cmd Description of Parameter
*/
protected void logAndAddFilesToCompile( Commandline cmd )
private void logAndAddFilesToCompile( final Commandline cmd )
{
int n = 0;
getLogger().debug( "Compilation args: " + cmd.toString() );

StringBuffer niceClassList = new StringBuffer();
if( cls != null )
if( m_cls != null )
{
StringTokenizer tok = new StringTokenizer( cls, ",", false );
final StringTokenizer tok = new StringTokenizer( m_cls, ",", false );
while( tok.hasMoreTokens() )
{
String aClass = tok.nextToken().trim();
final String aClass = tok.nextToken().trim();
cmd.createArgument().setValue( aClass );
niceClassList.append( " " + aClass + StringUtil.LINE_SEPARATOR );
n++;
}
}

Iterator enum = classes.iterator();
final Iterator enum = m_classes.iterator();
while( enum.hasNext() )
{
ClassArgument arg = (ClassArgument)enum.next();
String aClass = arg.getName();
final ClassArgument arg = (ClassArgument)enum.next();
final String aClass = arg.getName();
cmd.createArgument().setValue( aClass );
niceClassList.append( " " + aClass + StringUtil.LINE_SEPARATOR );
n++;
}

StringBuffer prefix = new StringBuffer( "Class" );
final StringBuffer prefix = new StringBuffer( "Class" );
if( n > 1 )
{
prefix.append( "es" );
@@ -326,65 +266,62 @@ public class Javah extends Task

/**
* Does the command line argument processing common to classic and modern.
*
* @return Description of the Returned Value
*/
private Commandline setupJavahCommand()
throws TaskException
{
Commandline cmd = new Commandline();
final Commandline cmd = new Commandline();

if( destDir != null )
if( m_destDir != null )
{
cmd.createArgument().setValue( "-d" );
cmd.createArgument().setFile( destDir );
cmd.createArgument().setFile( m_destDir );
}

if( outputFile != null )
if( m_outputFile != null )
{
cmd.createArgument().setValue( "-o" );
cmd.createArgument().setFile( outputFile );
cmd.createArgument().setFile( m_outputFile );
}

if( classpath != null )
if( m_classpath != null )
{
cmd.createArgument().setValue( "-classpath" );
cmd.createArgument().setPath( classpath );
cmd.createArgument().setPath( m_classpath );
}

if( verbose )
if( m_verbose )
{
cmd.createArgument().setValue( "-verbose" );
}
if( old )
if( m_old )
{
cmd.createArgument().setValue( "-old" );
}
if( force )
if( m_force )
{
cmd.createArgument().setValue( "-force" );
}

if( stubs )
if( m_stubs )
{
if( !old )
if( !m_old )
{
throw new TaskException( "stubs only available in old mode." );
final String message = "stubs only available in old mode.";
throw new TaskException( message );
}
cmd.createArgument().setValue( "-stubs" );
}
if( bootclasspath != null )
if( m_bootclasspath != null )
{
cmd.createArgument().setValue( "-bootclasspath" );
cmd.createArgument().setPath( bootclasspath );
cmd.createArgument().setPath( m_bootclasspath );
}

logAndAddFilesToCompile( cmd );
return cmd;
}

// XXX
// we need a way to not use the current classpath.

/**
* Peforms a compile using the classic compiler that shipped with JDK 1.1
* and 1.2.
@@ -433,25 +370,5 @@ public class Javah extends Task
}
}
}

public class ClassArgument
{
private String name;

public ClassArgument()
{
}

public void setName( String name )
{
this.name = name;
getLogger().info( "ClassArgument.name=" + name );
}

public String getName()
{
return name;
}
}
}


+ 27
- 0
proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/optional/ClassArgument.java View File

@@ -0,0 +1,27 @@
/*
* 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.taskdefs.optional;

import org.apache.avalon.framework.logger.AbstractLogEnabled;

public class ClassArgument
extends AbstractLogEnabled
{
private String m_name;

public void setName( String name )
{
m_name = name;
getLogger().info( "ClassArgument.name=" + name );
}

public String getName()
{
return m_name;
}
}

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

@@ -12,12 +12,10 @@ import java.util.ArrayList;
import java.util.Iterator;
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.framework.JavaVersion;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.types.Commandline;
import org.apache.tools.ant.types.Path;
import org.apache.tools.ant.types.Reference;

/**
* Task to generate JNI header files using javah. This task can take the
@@ -53,267 +51,209 @@ import org.apache.tools.ant.types.Reference;
* richard.beton@physics.org</a>
*/

public class Javah extends Task
public class Javah
extends AbstractLogEnabled
{

private final static String FAIL_MSG = "Compile failed, messages should have been provided.";

private ArrayList classes = new ArrayList( 2 );
private Path classpath = null;
private File outputFile = null;
private boolean verbose = false;
private boolean force = false;
private boolean old = false;
private boolean stubs = false;
private Path bootclasspath;
private String cls;
private File destDir;

/**
* Adds a reference to a CLASSPATH defined elsewhere.
*
* @param r The new BootClasspathRef value
*/
public void setBootClasspathRef( Reference r )
{
createBootclasspath().setRefid( r );
}

public void setBootclasspath( Path src )
private ArrayList m_classes = new ArrayList( 2 );
private Path m_classpath;
private File m_outputFile;
private boolean m_verbose;
private boolean m_force;
private boolean m_old;
private boolean m_stubs;
private Path m_bootclasspath;
private String m_cls;
private File m_destDir;

public void setBootclasspath( final Path bootclasspath )
throws TaskException
{
if( bootclasspath == null )
if( m_bootclasspath == null )
{
bootclasspath = src;
m_bootclasspath = bootclasspath;
}
else
{
bootclasspath.append( src );
m_bootclasspath.append( bootclasspath );
}
}

public void setClass( String cls )
public void setClass( final String cls )
{
this.cls = cls;
m_cls = cls;
}

public void setClasspath( Path src )
public void setClasspath( final Path classpath )
throws TaskException
{
if( classpath == null )
if( m_classpath == null )
{
classpath = src;
m_classpath = classpath;
}
else
{
classpath.append( src );
m_classpath.append( classpath );
}
}

/**
* Adds a reference to a CLASSPATH defined elsewhere.
*
* @param r The new ClasspathRef value
*/
public void setClasspathRef( Reference r )
{
createClasspath().setRefid( r );
}

/**
* Set the destination directory into which the Java source files should be
* compiled.
*
* @param destDir The new Destdir value
*/
public void setDestdir( File destDir )
public void setDestdir( final File destDir )
{
this.destDir = destDir;
m_destDir = destDir;
}

/**
* Set the force-write flag.
*
* @param force The new Force value
*/
public void setForce( boolean force )
public void setForce( final boolean force )
{
this.force = force;
m_force = force;
}

/**
* Set the old flag.
*
* @param old The new Old value
*/
public void setOld( boolean old )
public void setOld( final boolean old )
{
this.old = old;
m_old = old;
}

///**
// * Sets the extension directories that will be used during the
// * compilation.
// */
//public void setExtdirs(Path extdirs) {
// if (this.extdirs == null) {
// this.extdirs = extdirs;
// } else {
// this.extdirs.append(extdirs);
// }
//}

///**
// * Maybe creates a nested classpath element.
// */
//public Path createExtdirs() {
// if (extdirs == null) {
// extdirs = new Path(project);
// }
// return extdirs.createPath();
//}

/**
* Set the output file name.
*
* @param outputFile The new OutputFile value
*/
public void setOutputFile( File outputFile )
public void setOutputFile( final File outputFile )
{
this.outputFile = outputFile;
m_outputFile = outputFile;
}

/**
* Set the stubs flag.
*
* @param stubs The new Stubs value
*/
public void setStubs( boolean stubs )
public void setStubs( final boolean stubs )
{
this.stubs = stubs;
m_stubs = stubs;
}

/**
* Set the verbose flag.
*
* @param verbose The new Verbose value
*/
public void setVerbose( boolean verbose )
public void setVerbose( final boolean verbose )
{
this.verbose = verbose;
m_verbose = verbose;
}

public Path createBootclasspath()
{
if( bootclasspath == null )
if( m_bootclasspath == null )
{
bootclasspath = new Path();
m_bootclasspath = new Path();
}
return bootclasspath.createPath();
return m_bootclasspath.createPath();
}

public ClassArgument createClass()
{
ClassArgument ga = new ClassArgument();
classes.add( ga );
final ClassArgument ga = new ClassArgument();
setupLogger( ga );
m_classes.add( ga );
return ga;
}

public Path createClasspath()
{
if( classpath == null )
if( m_classpath == null )
{
classpath = new Path();
m_classpath = new Path();
}
return classpath.createPath();
return m_classpath.createPath();
}

/**
* Executes the task.
*
* @exception TaskException Description of Exception
*/
public void execute()
throws TaskException
{
// first off, make sure that we've got a srcdir
validate();

if( ( cls == null ) && ( classes.size() == 0 ) )
if( m_classpath == null )
{
throw new TaskException( "class attribute must be set!" );
m_classpath = Path.systemClasspath;
}

if( ( cls != null ) && ( classes.size() > 0 ) )
{
throw new TaskException( "set class attribute or class element, not both." );
}
doClassicCompile();
}

if( destDir != null )
private void validate() throws TaskException
{
if( ( m_cls == null ) && ( m_classes.size() == 0 ) )
{
if( !destDir.isDirectory() )
{
throw new TaskException( "destination directory \"" + destDir + "\" does not exist or is not a directory" );
}
if( outputFile != null )
{
throw new TaskException( "destdir and outputFile are mutually exclusive" );
}
final String message = "class attribute must be set!";
throw new TaskException( message );
}

if( classpath == null )
if( ( m_cls != null ) && ( m_classes.size() > 0 ) )
{
classpath = Path.systemClasspath;
final String message = "set class attribute or class element, not both.";
throw new TaskException( message );
}

String compiler = getProject().getProperty( "build.compiler" );
if( compiler == null )
if( m_destDir != null )
{
if( JavaVersion.JAVA1_2 != JavaVersion.getCurrentJavaVersion() )
if( !m_destDir.isDirectory() )
{
compiler = "modern";
final String message = "destination directory \"" + m_destDir +
"\" does not exist or is not a directory";
throw new TaskException( message );
}
else
if( m_outputFile != null )
{
compiler = "classic";
final String message = "destdir and outputFile are mutually exclusive";
throw new TaskException( message );
}
}

doClassicCompile();
}

/**
* Logs the compilation parameters, adds the files to compile and logs the
* &qout;niceSourceList&quot;
*
* @param cmd Description of Parameter
*/
protected void logAndAddFilesToCompile( Commandline cmd )
private void logAndAddFilesToCompile( final Commandline cmd )
{
int n = 0;
getLogger().debug( "Compilation args: " + cmd.toString() );

StringBuffer niceClassList = new StringBuffer();
if( cls != null )
if( m_cls != null )
{
StringTokenizer tok = new StringTokenizer( cls, ",", false );
final StringTokenizer tok = new StringTokenizer( m_cls, ",", false );
while( tok.hasMoreTokens() )
{
String aClass = tok.nextToken().trim();
final String aClass = tok.nextToken().trim();
cmd.createArgument().setValue( aClass );
niceClassList.append( " " + aClass + StringUtil.LINE_SEPARATOR );
n++;
}
}

Iterator enum = classes.iterator();
final Iterator enum = m_classes.iterator();
while( enum.hasNext() )
{
ClassArgument arg = (ClassArgument)enum.next();
String aClass = arg.getName();
final ClassArgument arg = (ClassArgument)enum.next();
final String aClass = arg.getName();
cmd.createArgument().setValue( aClass );
niceClassList.append( " " + aClass + StringUtil.LINE_SEPARATOR );
n++;
}

StringBuffer prefix = new StringBuffer( "Class" );
final StringBuffer prefix = new StringBuffer( "Class" );
if( n > 1 )
{
prefix.append( "es" );
@@ -326,65 +266,62 @@ public class Javah extends Task

/**
* Does the command line argument processing common to classic and modern.
*
* @return Description of the Returned Value
*/
private Commandline setupJavahCommand()
throws TaskException
{
Commandline cmd = new Commandline();
final Commandline cmd = new Commandline();

if( destDir != null )
if( m_destDir != null )
{
cmd.createArgument().setValue( "-d" );
cmd.createArgument().setFile( destDir );
cmd.createArgument().setFile( m_destDir );
}

if( outputFile != null )
if( m_outputFile != null )
{
cmd.createArgument().setValue( "-o" );
cmd.createArgument().setFile( outputFile );
cmd.createArgument().setFile( m_outputFile );
}

if( classpath != null )
if( m_classpath != null )
{
cmd.createArgument().setValue( "-classpath" );
cmd.createArgument().setPath( classpath );
cmd.createArgument().setPath( m_classpath );
}

if( verbose )
if( m_verbose )
{
cmd.createArgument().setValue( "-verbose" );
}
if( old )
if( m_old )
{
cmd.createArgument().setValue( "-old" );
}
if( force )
if( m_force )
{
cmd.createArgument().setValue( "-force" );
}

if( stubs )
if( m_stubs )
{
if( !old )
if( !m_old )
{
throw new TaskException( "stubs only available in old mode." );
final String message = "stubs only available in old mode.";
throw new TaskException( message );
}
cmd.createArgument().setValue( "-stubs" );
}
if( bootclasspath != null )
if( m_bootclasspath != null )
{
cmd.createArgument().setValue( "-bootclasspath" );
cmd.createArgument().setPath( bootclasspath );
cmd.createArgument().setPath( m_bootclasspath );
}

logAndAddFilesToCompile( cmd );
return cmd;
}

// XXX
// we need a way to not use the current classpath.

/**
* Peforms a compile using the classic compiler that shipped with JDK 1.1
* and 1.2.
@@ -433,25 +370,5 @@ public class Javah extends Task
}
}
}

public class ClassArgument
{
private String name;

public ClassArgument()
{
}

public void setName( String name )
{
this.name = name;
getLogger().info( "ClassArgument.name=" + name );
}

public String getName()
{
return name;
}
}
}


Loading…
Cancel
Save