git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@270480 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -10,11 +10,9 @@ package org.apache.tools.ant.taskdefs.optional.sitraka; | |||||
| import java.io.File; | import java.io.File; | ||||
| import java.io.FileWriter; | import java.io.FileWriter; | ||||
| import java.io.IOException; | import java.io.IOException; | ||||
| import java.io.OutputStream; | |||||
| import java.io.PrintWriter; | import java.io.PrintWriter; | ||||
| import java.io.StringWriter; | import java.io.StringWriter; | ||||
| import java.util.ArrayList; | import java.util.ArrayList; | ||||
| import java.util.Random; | |||||
| import org.apache.myrmidon.api.TaskException; | import org.apache.myrmidon.api.TaskException; | ||||
| import org.apache.tools.ant.Task; | import org.apache.tools.ant.Task; | ||||
| import org.apache.tools.ant.taskdefs.exec.Execute; | import org.apache.tools.ant.taskdefs.exec.Execute; | ||||
| @@ -23,7 +21,6 @@ import org.apache.tools.ant.taskdefs.exec.LogStreamHandler; | |||||
| import org.apache.tools.ant.types.Argument; | 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.EnumeratedAttribute; | |||||
| 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; | ||||
| @@ -38,68 +35,32 @@ import org.apache.tools.ant.types.Path; | |||||
| * | * | ||||
| * @author <a href="sbailliez@imediation.com">Stephane Bailliez</a> | * @author <a href="sbailliez@imediation.com">Stephane Bailliez</a> | ||||
| */ | */ | ||||
| public class Coverage extends Task | |||||
| public class Coverage | |||||
| extends Task | |||||
| { | { | ||||
| protected Commandline cmdl = new Commandline(); | protected Commandline cmdl = new Commandline(); | ||||
| protected CommandlineJava cmdlJava = new CommandlineJava(); | protected CommandlineJava cmdlJava = new CommandlineJava(); | ||||
| protected String function = "coverage"; | |||||
| protected boolean applet = false; | |||||
| /** | /** | ||||
| * this is a somewhat annoying thing, set it to never | * this is a somewhat annoying thing, set it to never | ||||
| */ | */ | ||||
| protected String exitPrompt = "never"; | |||||
| protected Filters filters = new Filters(); | |||||
| protected String finalSnapshot = "coverage"; | |||||
| protected String recordFromStart = "coverage"; | |||||
| protected boolean trackNatives = false; | |||||
| protected int warnLevel = 0; | |||||
| protected ArrayList filesets = new ArrayList(); | |||||
| protected File home; | |||||
| protected File inputFile; | |||||
| protected File javaExe; | |||||
| protected String seedName; | |||||
| protected File snapshotDir; | |||||
| protected Socket socket; | |||||
| protected Triggers triggers; | |||||
| protected String vm; | |||||
| protected File workingDir; | |||||
| //---------------- the tedious job begins here | |||||
| public Coverage() | |||||
| { | |||||
| } | |||||
| /** | |||||
| * default to false unless file is htm or html | |||||
| * | |||||
| * @param value The new Applet value | |||||
| */ | |||||
| public void setApplet( boolean value ) | |||||
| { | |||||
| applet = value; | |||||
| } | |||||
| private String m_exitPrompt = "never"; | |||||
| private Filters m_filters = new Filters(); | |||||
| private String m_finalSnapshot = "coverage"; | |||||
| private String m_recordFromStart = "coverage"; | |||||
| private boolean m_trackNatives; | |||||
| private int m_warnLevel = 0; | |||||
| private ArrayList m_filesets = new ArrayList(); | |||||
| private File m_home; | |||||
| private File m_inputFile; | |||||
| private File m_javaExe; | |||||
| private String m_seedName; | |||||
| private File m_snapshotDir; | |||||
| private Socket m_socket; | |||||
| private Triggers m_triggers; | |||||
| private String m_vm; | |||||
| private File m_workingDir; | |||||
| /** | /** | ||||
| * classname to run as standalone or runner for filesets | * classname to run as standalone or runner for filesets | ||||
| @@ -118,7 +79,7 @@ public class Coverage extends Task | |||||
| */ | */ | ||||
| public void setExitprompt( String value ) | public void setExitprompt( String value ) | ||||
| { | { | ||||
| exitPrompt = value; | |||||
| m_exitPrompt = value; | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -128,11 +89,9 @@ public class Coverage extends Task | |||||
| */ | */ | ||||
| public void setFinalsnapshot( String value ) | public void setFinalsnapshot( String value ) | ||||
| { | { | ||||
| finalSnapshot = value; | |||||
| m_finalSnapshot = value; | |||||
| } | } | ||||
| //--------- setters used via reflection -- | |||||
| /** | /** | ||||
| * set the coverage home directory where are libraries, jars and jplauncher | * set the coverage home directory where are libraries, jars and jplauncher | ||||
| * | * | ||||
| @@ -140,17 +99,17 @@ public class Coverage extends Task | |||||
| */ | */ | ||||
| public void setHome( File value ) | public void setHome( File value ) | ||||
| { | { | ||||
| home = value; | |||||
| m_home = value; | |||||
| } | } | ||||
| public void setInputfile( File value ) | public void setInputfile( File value ) | ||||
| { | { | ||||
| inputFile = value; | |||||
| m_inputFile = value; | |||||
| } | } | ||||
| public void setJavaexe( File value ) | public void setJavaexe( File value ) | ||||
| { | { | ||||
| javaExe = value; | |||||
| m_javaExe = value; | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -160,7 +119,7 @@ public class Coverage extends Task | |||||
| */ | */ | ||||
| public void setRecordfromstart( Recordfromstart value ) | public void setRecordfromstart( Recordfromstart value ) | ||||
| { | { | ||||
| recordFromStart = value.getValue(); | |||||
| m_recordFromStart = value.getValue(); | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -170,17 +129,17 @@ public class Coverage extends Task | |||||
| */ | */ | ||||
| public void setSeedname( String value ) | public void setSeedname( String value ) | ||||
| { | { | ||||
| seedName = value; | |||||
| m_seedName = value; | |||||
| } | } | ||||
| public void setSnapshotdir( File value ) | public void setSnapshotdir( File value ) | ||||
| { | { | ||||
| snapshotDir = value; | |||||
| m_snapshotDir = value; | |||||
| } | } | ||||
| public void setTracknatives( boolean value ) | public void setTracknatives( boolean value ) | ||||
| { | { | ||||
| trackNatives = value; | |||||
| m_trackNatives = value; | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -190,17 +149,17 @@ public class Coverage extends Task | |||||
| */ | */ | ||||
| public void setVm( Javavm value ) | public void setVm( Javavm value ) | ||||
| { | { | ||||
| vm = value.getValue(); | |||||
| m_vm = value.getValue(); | |||||
| } | } | ||||
| public void setWarnlevel( Integer value ) | public void setWarnlevel( Integer value ) | ||||
| { | { | ||||
| warnLevel = value.intValue(); | |||||
| m_warnLevel = value.intValue(); | |||||
| } | } | ||||
| public void setWorkingdir( File value ) | public void setWorkingdir( File value ) | ||||
| { | { | ||||
| workingDir = value; | |||||
| m_workingDir = value; | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -210,7 +169,7 @@ public class Coverage extends Task | |||||
| */ | */ | ||||
| public void addFileset( FileSet fs ) | public void addFileset( FileSet fs ) | ||||
| { | { | ||||
| filesets.add( fs ); | |||||
| m_filesets.add( fs ); | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -235,11 +194,9 @@ public class Coverage extends Task | |||||
| public Filters createFilters() | public Filters createFilters() | ||||
| { | { | ||||
| return filters; | |||||
| return m_filters; | |||||
| } | } | ||||
| // | |||||
| /** | /** | ||||
| * the jvm arguments | * the jvm arguments | ||||
| * | * | ||||
| @@ -252,20 +209,20 @@ public class Coverage extends Task | |||||
| public Socket createSocket() | public Socket createSocket() | ||||
| { | { | ||||
| if( socket == null ) | |||||
| if( m_socket == null ) | |||||
| { | { | ||||
| socket = new Socket(); | |||||
| m_socket = new Socket(); | |||||
| } | } | ||||
| return socket; | |||||
| return m_socket; | |||||
| } | } | ||||
| public Triggers createTriggers() | public Triggers createTriggers() | ||||
| { | { | ||||
| if( triggers == null ) | |||||
| if( m_triggers == null ) | |||||
| { | { | ||||
| triggers = new Triggers(); | |||||
| m_triggers = new Triggers(); | |||||
| } | } | ||||
| return triggers; | |||||
| return m_triggers; | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -278,19 +235,19 @@ public class Coverage extends Task | |||||
| { | { | ||||
| File paramfile = null; | File paramfile = null; | ||||
| // if an input file is used, all other options are ignored... | // if an input file is used, all other options are ignored... | ||||
| if( inputFile == null ) | |||||
| if( m_inputFile == null ) | |||||
| { | { | ||||
| checkOptions(); | checkOptions(); | ||||
| paramfile = createParamFile(); | paramfile = createParamFile(); | ||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| paramfile = inputFile; | |||||
| paramfile = m_inputFile; | |||||
| } | } | ||||
| try | try | ||||
| { | { | ||||
| // we need to run Coverage from his directory due to dll/jar issues | // we need to run Coverage from his directory due to dll/jar issues | ||||
| cmdl.setExecutable( new File( home, "jplauncher" ).getAbsolutePath() ); | |||||
| cmdl.setExecutable( new File( m_home, "jplauncher" ).getAbsolutePath() ); | |||||
| cmdl.createArgument().setValue( "-jp_input=" + paramfile.getAbsolutePath() ); | cmdl.createArgument().setValue( "-jp_input=" + paramfile.getAbsolutePath() ); | ||||
| // use the custom handler for stdin issues | // use the custom handler for stdin issues | ||||
| @@ -313,7 +270,7 @@ public class Coverage extends Task | |||||
| finally | finally | ||||
| { | { | ||||
| //@todo should be removed once switched to JDK1.2 | //@todo should be removed once switched to JDK1.2 | ||||
| if( inputFile == null && paramfile != null ) | |||||
| if( m_inputFile == null && paramfile != null ) | |||||
| { | { | ||||
| paramfile.delete(); | paramfile.delete(); | ||||
| } | } | ||||
| @@ -331,35 +288,35 @@ public class Coverage extends Task | |||||
| throws TaskException | throws TaskException | ||||
| { | { | ||||
| ArrayList params = new ArrayList(); | ArrayList params = new ArrayList(); | ||||
| params.add( "-jp_function=" + function ); | |||||
| if( vm != null ) | |||||
| params.add( "-jp_function=coverage" ); | |||||
| if( m_vm != null ) | |||||
| { | { | ||||
| params.add( "-jp_vm=" + vm ); | |||||
| params.add( "-jp_vm=" + m_vm ); | |||||
| } | } | ||||
| if( javaExe != null ) | |||||
| if( m_javaExe != null ) | |||||
| { | { | ||||
| params.add( "-jp_java_exe=" + resolveFile( javaExe.getPath() ) ); | |||||
| params.add( "-jp_java_exe=" + resolveFile( m_javaExe.getPath() ) ); | |||||
| } | } | ||||
| params.add( "-jp_working_dir=" + workingDir.getPath() ); | |||||
| params.add( "-jp_snapshot_dir=" + snapshotDir.getPath() ); | |||||
| params.add( "-jp_record_from_start=" + recordFromStart ); | |||||
| params.add( "-jp_warn=" + warnLevel ); | |||||
| if( seedName != null ) | |||||
| params.add( "-jp_working_dir=" + m_workingDir.getPath() ); | |||||
| params.add( "-jp_snapshot_dir=" + m_snapshotDir.getPath() ); | |||||
| params.add( "-jp_record_from_start=" + m_recordFromStart ); | |||||
| params.add( "-jp_warn=" + m_warnLevel ); | |||||
| if( m_seedName != null ) | |||||
| { | { | ||||
| params.add( "-jp_output_file=" + seedName ); | |||||
| params.add( "-jp_output_file=" + m_seedName ); | |||||
| } | } | ||||
| params.add( "-jp_filter=" + filters.toString() ); | |||||
| if( triggers != null ) | |||||
| params.add( "-jp_filter=" + m_filters.toString() ); | |||||
| if( m_triggers != null ) | |||||
| { | { | ||||
| params.add( "-jp_trigger=" + triggers.toString() ); | |||||
| params.add( "-jp_trigger=" + m_triggers.toString() ); | |||||
| } | } | ||||
| if( finalSnapshot != null ) | |||||
| if( m_finalSnapshot != null ) | |||||
| { | { | ||||
| params.add( "-jp_final_snapshot=" + finalSnapshot ); | |||||
| params.add( "-jp_final_snapshot=" + m_finalSnapshot ); | |||||
| } | } | ||||
| params.add( "-jp_exit_prompt=" + exitPrompt ); | |||||
| params.add( "-jp_exit_prompt=" + m_exitPrompt ); | |||||
| //params.add("-jp_append=" + append); | //params.add("-jp_append=" + append); | ||||
| params.add( "-jp_track_natives=" + trackNatives ); | |||||
| params.add( "-jp_track_natives=" + m_trackNatives ); | |||||
| //.... now the jvm | //.... now the jvm | ||||
| // arguments | // arguments | ||||
| String[] vmargs = cmdlJava.getVmCommand().getArguments(); | String[] vmargs = cmdlJava.getVmCommand().getArguments(); | ||||
| @@ -397,50 +354,50 @@ public class Coverage extends Task | |||||
| throws TaskException | throws TaskException | ||||
| { | { | ||||
| // check coverage home | // check coverage home | ||||
| if( home == null || !home.isDirectory() ) | |||||
| if( m_home == null || !m_home.isDirectory() ) | |||||
| { | { | ||||
| throw new TaskException( "Invalid home directory. Must point to JProbe home directory" ); | throw new TaskException( "Invalid home directory. Must point to JProbe home directory" ); | ||||
| } | } | ||||
| home = new File( home, "coverage" ); | |||||
| File jar = new File( home, "coverage.jar" ); | |||||
| m_home = new File( m_home, "coverage" ); | |||||
| File jar = new File( m_home, "coverage.jar" ); | |||||
| if( !jar.exists() ) | if( !jar.exists() ) | ||||
| { | { | ||||
| throw new TaskException( "Cannot find Coverage directory: " + home ); | |||||
| throw new TaskException( "Cannot find Coverage directory: " + m_home ); | |||||
| } | } | ||||
| // make sure snapshot dir exists and is resolved | // make sure snapshot dir exists and is resolved | ||||
| if( snapshotDir == null ) | |||||
| if( m_snapshotDir == null ) | |||||
| { | { | ||||
| snapshotDir = new File( "." ); | |||||
| m_snapshotDir = new File( "." ); | |||||
| } | } | ||||
| snapshotDir = resolveFile( snapshotDir.getPath() ); | |||||
| if( !snapshotDir.isDirectory() || !snapshotDir.exists() ) | |||||
| m_snapshotDir = resolveFile( m_snapshotDir.getPath() ); | |||||
| if( !m_snapshotDir.isDirectory() || !m_snapshotDir.exists() ) | |||||
| { | { | ||||
| throw new TaskException( "Snapshot directory does not exists :" + snapshotDir ); | |||||
| throw new TaskException( "Snapshot directory does not exists :" + m_snapshotDir ); | |||||
| } | } | ||||
| if( workingDir == null ) | |||||
| if( m_workingDir == null ) | |||||
| { | { | ||||
| workingDir = new File( "." ); | |||||
| m_workingDir = new File( "." ); | |||||
| } | } | ||||
| workingDir = resolveFile( workingDir.getPath() ); | |||||
| m_workingDir = resolveFile( m_workingDir.getPath() ); | |||||
| // check for info, do your best to select the java executable. | // check for info, do your best to select the java executable. | ||||
| // JProbe 3.0 fails if there is no javaexe option. So | // JProbe 3.0 fails if there is no javaexe option. So | ||||
| if( javaExe == null && ( vm == null || "java2".equals( vm ) ) ) | |||||
| if( m_javaExe == null && ( m_vm == null || "java2".equals( m_vm ) ) ) | |||||
| { | { | ||||
| String version = System.getProperty( "java.version" ); | String version = System.getProperty( "java.version" ); | ||||
| // make we are using 1.2+, if it is, then do your best to | // make we are using 1.2+, if it is, then do your best to | ||||
| // get a javaexe | // get a javaexe | ||||
| if( !version.startsWith( "1.1" ) ) | if( !version.startsWith( "1.1" ) ) | ||||
| { | { | ||||
| if( vm == null ) | |||||
| if( m_vm == null ) | |||||
| { | { | ||||
| vm = "java2"; | |||||
| m_vm = "java2"; | |||||
| } | } | ||||
| // if we are here obviously it is java2 | // if we are here obviously it is java2 | ||||
| String home = System.getProperty( "java.home" ); | String home = System.getProperty( "java.home" ); | ||||
| boolean isUnix = File.separatorChar == '/'; | boolean isUnix = File.separatorChar == '/'; | ||||
| javaExe = isUnix ? new File( home, "bin/java" ) : new File( home, "/bin/java.exe" ); | |||||
| m_javaExe = isUnix ? new File( home, "bin/java" ) : new File( home, "/bin/java.exe" ); | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| @@ -458,7 +415,7 @@ public class Coverage extends Task | |||||
| throws TaskException | throws TaskException | ||||
| { | { | ||||
| //@todo change this when switching to JDK 1.2 and use File.createTmpFile() | //@todo change this when switching to JDK 1.2 and use File.createTmpFile() | ||||
| File file = createTmpFile(); | |||||
| File file = File.createTempFile( "jpcoverage", "tmp" ); | |||||
| getLogger().debug( "Creating parameter file: " + file ); | getLogger().debug( "Creating parameter file: " + file ); | ||||
| // options need to be one per line in the parameter file | // options need to be one per line in the parameter file | ||||
| @@ -500,72 +457,4 @@ public class Coverage extends Task | |||||
| } | } | ||||
| return file; | return file; | ||||
| } | } | ||||
| /** | |||||
| * create a temporary file in the current dir (For JDK1.1 support) | |||||
| * | |||||
| * @return Description of the Returned Value | |||||
| */ | |||||
| protected File createTmpFile() | |||||
| { | |||||
| final long rand = ( new Random( System.currentTimeMillis() ) ).nextLong(); | |||||
| File file = new File( "jpcoverage" + rand + ".tmp" ); | |||||
| return file; | |||||
| } | |||||
| public static class Finalsnapshot extends EnumeratedAttribute | |||||
| { | |||||
| public String[] getValues() | |||||
| { | |||||
| return new String[]{"coverage", "none", "all"}; | |||||
| } | |||||
| } | |||||
| public static class Javavm extends EnumeratedAttribute | |||||
| { | |||||
| public String[] getValues() | |||||
| { | |||||
| return new String[]{"java2", "jdk118", "jdk117"}; | |||||
| } | |||||
| } | |||||
| public static class Recordfromstart extends EnumeratedAttribute | |||||
| { | |||||
| public String[] getValues() | |||||
| { | |||||
| return new String[]{"coverage", "none", "all"}; | |||||
| } | |||||
| } | |||||
| /** | |||||
| * specific pumper to avoid those nasty stdin issues | |||||
| */ | |||||
| static class CoverageStreamHandler | |||||
| extends LogStreamHandler | |||||
| { | |||||
| CoverageStreamHandler( OutputStream output, OutputStream error ) | |||||
| { | |||||
| super( output, error ); | |||||
| } | |||||
| /** | |||||
| * there are some issues concerning all JProbe executable In our case a | |||||
| * 'Press ENTER to close this window..." will be displayed in the | |||||
| * current window waiting for enter. So I'm closing the stream right | |||||
| * away to avoid problems. | |||||
| * | |||||
| * @param os The new ProcessInputStream value | |||||
| */ | |||||
| public void setProcessInputStream( OutputStream os ) | |||||
| { | |||||
| try | |||||
| { | |||||
| os.close(); | |||||
| } | |||||
| catch( IOException ignored ) | |||||
| { | |||||
| } | |||||
| } | |||||
| } | |||||
| } | } | ||||
| @@ -0,0 +1,43 @@ | |||||
| /* | |||||
| * 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.sitraka; | |||||
| import org.apache.tools.ant.taskdefs.exec.LogStreamHandler; | |||||
| import java.io.OutputStream; | |||||
| import java.io.IOException; | |||||
| /** | |||||
| * specific pumper to avoid those nasty stdin issues | |||||
| */ | |||||
| class CoverageStreamHandler | |||||
| extends LogStreamHandler | |||||
| { | |||||
| CoverageStreamHandler( OutputStream output, OutputStream error ) | |||||
| { | |||||
| super( output, error ); | |||||
| } | |||||
| /** | |||||
| * there are some issues concerning all JProbe executable In our case a | |||||
| * 'Press ENTER to close this window..." will be displayed in the | |||||
| * current window waiting for enter. So I'm closing the stream right | |||||
| * away to avoid problems. | |||||
| * | |||||
| * @param os The new ProcessInputStream value | |||||
| */ | |||||
| public void setProcessInputStream( OutputStream os ) | |||||
| { | |||||
| try | |||||
| { | |||||
| os.close(); | |||||
| } | |||||
| catch( IOException ignored ) | |||||
| { | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,19 @@ | |||||
| /* | |||||
| * 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.sitraka; | |||||
| import org.apache.tools.ant.types.EnumeratedAttribute; | |||||
| public class Finalsnapshot | |||||
| extends EnumeratedAttribute | |||||
| { | |||||
| public String[] getValues() | |||||
| { | |||||
| return new String[]{"coverage", "none", "all"}; | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,19 @@ | |||||
| /* | |||||
| * 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.sitraka; | |||||
| import org.apache.tools.ant.types.EnumeratedAttribute; | |||||
| public class Javavm | |||||
| extends EnumeratedAttribute | |||||
| { | |||||
| public String[] getValues() | |||||
| { | |||||
| return new String[]{"java2", "jdk118", "jdk117"}; | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,19 @@ | |||||
| /* | |||||
| * 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.sitraka; | |||||
| import org.apache.tools.ant.types.EnumeratedAttribute; | |||||
| public class Recordfromstart | |||||
| extends EnumeratedAttribute | |||||
| { | |||||
| public String[] getValues() | |||||
| { | |||||
| return new String[]{"coverage", "none", "all"}; | |||||
| } | |||||
| } | |||||
| @@ -10,11 +10,9 @@ package org.apache.tools.ant.taskdefs.optional.sitraka; | |||||
| import java.io.File; | import java.io.File; | ||||
| import java.io.FileWriter; | import java.io.FileWriter; | ||||
| import java.io.IOException; | import java.io.IOException; | ||||
| import java.io.OutputStream; | |||||
| import java.io.PrintWriter; | import java.io.PrintWriter; | ||||
| import java.io.StringWriter; | import java.io.StringWriter; | ||||
| import java.util.ArrayList; | import java.util.ArrayList; | ||||
| import java.util.Random; | |||||
| import org.apache.myrmidon.api.TaskException; | import org.apache.myrmidon.api.TaskException; | ||||
| import org.apache.tools.ant.Task; | import org.apache.tools.ant.Task; | ||||
| import org.apache.tools.ant.taskdefs.exec.Execute; | import org.apache.tools.ant.taskdefs.exec.Execute; | ||||
| @@ -23,7 +21,6 @@ import org.apache.tools.ant.taskdefs.exec.LogStreamHandler; | |||||
| import org.apache.tools.ant.types.Argument; | 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.EnumeratedAttribute; | |||||
| 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; | ||||
| @@ -38,68 +35,32 @@ import org.apache.tools.ant.types.Path; | |||||
| * | * | ||||
| * @author <a href="sbailliez@imediation.com">Stephane Bailliez</a> | * @author <a href="sbailliez@imediation.com">Stephane Bailliez</a> | ||||
| */ | */ | ||||
| public class Coverage extends Task | |||||
| public class Coverage | |||||
| extends Task | |||||
| { | { | ||||
| protected Commandline cmdl = new Commandline(); | protected Commandline cmdl = new Commandline(); | ||||
| protected CommandlineJava cmdlJava = new CommandlineJava(); | protected CommandlineJava cmdlJava = new CommandlineJava(); | ||||
| protected String function = "coverage"; | |||||
| protected boolean applet = false; | |||||
| /** | /** | ||||
| * this is a somewhat annoying thing, set it to never | * this is a somewhat annoying thing, set it to never | ||||
| */ | */ | ||||
| protected String exitPrompt = "never"; | |||||
| protected Filters filters = new Filters(); | |||||
| protected String finalSnapshot = "coverage"; | |||||
| protected String recordFromStart = "coverage"; | |||||
| protected boolean trackNatives = false; | |||||
| protected int warnLevel = 0; | |||||
| protected ArrayList filesets = new ArrayList(); | |||||
| protected File home; | |||||
| protected File inputFile; | |||||
| protected File javaExe; | |||||
| protected String seedName; | |||||
| protected File snapshotDir; | |||||
| protected Socket socket; | |||||
| protected Triggers triggers; | |||||
| protected String vm; | |||||
| protected File workingDir; | |||||
| //---------------- the tedious job begins here | |||||
| public Coverage() | |||||
| { | |||||
| } | |||||
| /** | |||||
| * default to false unless file is htm or html | |||||
| * | |||||
| * @param value The new Applet value | |||||
| */ | |||||
| public void setApplet( boolean value ) | |||||
| { | |||||
| applet = value; | |||||
| } | |||||
| private String m_exitPrompt = "never"; | |||||
| private Filters m_filters = new Filters(); | |||||
| private String m_finalSnapshot = "coverage"; | |||||
| private String m_recordFromStart = "coverage"; | |||||
| private boolean m_trackNatives; | |||||
| private int m_warnLevel = 0; | |||||
| private ArrayList m_filesets = new ArrayList(); | |||||
| private File m_home; | |||||
| private File m_inputFile; | |||||
| private File m_javaExe; | |||||
| private String m_seedName; | |||||
| private File m_snapshotDir; | |||||
| private Socket m_socket; | |||||
| private Triggers m_triggers; | |||||
| private String m_vm; | |||||
| private File m_workingDir; | |||||
| /** | /** | ||||
| * classname to run as standalone or runner for filesets | * classname to run as standalone or runner for filesets | ||||
| @@ -118,7 +79,7 @@ public class Coverage extends Task | |||||
| */ | */ | ||||
| public void setExitprompt( String value ) | public void setExitprompt( String value ) | ||||
| { | { | ||||
| exitPrompt = value; | |||||
| m_exitPrompt = value; | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -128,11 +89,9 @@ public class Coverage extends Task | |||||
| */ | */ | ||||
| public void setFinalsnapshot( String value ) | public void setFinalsnapshot( String value ) | ||||
| { | { | ||||
| finalSnapshot = value; | |||||
| m_finalSnapshot = value; | |||||
| } | } | ||||
| //--------- setters used via reflection -- | |||||
| /** | /** | ||||
| * set the coverage home directory where are libraries, jars and jplauncher | * set the coverage home directory where are libraries, jars and jplauncher | ||||
| * | * | ||||
| @@ -140,17 +99,17 @@ public class Coverage extends Task | |||||
| */ | */ | ||||
| public void setHome( File value ) | public void setHome( File value ) | ||||
| { | { | ||||
| home = value; | |||||
| m_home = value; | |||||
| } | } | ||||
| public void setInputfile( File value ) | public void setInputfile( File value ) | ||||
| { | { | ||||
| inputFile = value; | |||||
| m_inputFile = value; | |||||
| } | } | ||||
| public void setJavaexe( File value ) | public void setJavaexe( File value ) | ||||
| { | { | ||||
| javaExe = value; | |||||
| m_javaExe = value; | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -160,7 +119,7 @@ public class Coverage extends Task | |||||
| */ | */ | ||||
| public void setRecordfromstart( Recordfromstart value ) | public void setRecordfromstart( Recordfromstart value ) | ||||
| { | { | ||||
| recordFromStart = value.getValue(); | |||||
| m_recordFromStart = value.getValue(); | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -170,17 +129,17 @@ public class Coverage extends Task | |||||
| */ | */ | ||||
| public void setSeedname( String value ) | public void setSeedname( String value ) | ||||
| { | { | ||||
| seedName = value; | |||||
| m_seedName = value; | |||||
| } | } | ||||
| public void setSnapshotdir( File value ) | public void setSnapshotdir( File value ) | ||||
| { | { | ||||
| snapshotDir = value; | |||||
| m_snapshotDir = value; | |||||
| } | } | ||||
| public void setTracknatives( boolean value ) | public void setTracknatives( boolean value ) | ||||
| { | { | ||||
| trackNatives = value; | |||||
| m_trackNatives = value; | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -190,17 +149,17 @@ public class Coverage extends Task | |||||
| */ | */ | ||||
| public void setVm( Javavm value ) | public void setVm( Javavm value ) | ||||
| { | { | ||||
| vm = value.getValue(); | |||||
| m_vm = value.getValue(); | |||||
| } | } | ||||
| public void setWarnlevel( Integer value ) | public void setWarnlevel( Integer value ) | ||||
| { | { | ||||
| warnLevel = value.intValue(); | |||||
| m_warnLevel = value.intValue(); | |||||
| } | } | ||||
| public void setWorkingdir( File value ) | public void setWorkingdir( File value ) | ||||
| { | { | ||||
| workingDir = value; | |||||
| m_workingDir = value; | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -210,7 +169,7 @@ public class Coverage extends Task | |||||
| */ | */ | ||||
| public void addFileset( FileSet fs ) | public void addFileset( FileSet fs ) | ||||
| { | { | ||||
| filesets.add( fs ); | |||||
| m_filesets.add( fs ); | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -235,11 +194,9 @@ public class Coverage extends Task | |||||
| public Filters createFilters() | public Filters createFilters() | ||||
| { | { | ||||
| return filters; | |||||
| return m_filters; | |||||
| } | } | ||||
| // | |||||
| /** | /** | ||||
| * the jvm arguments | * the jvm arguments | ||||
| * | * | ||||
| @@ -252,20 +209,20 @@ public class Coverage extends Task | |||||
| public Socket createSocket() | public Socket createSocket() | ||||
| { | { | ||||
| if( socket == null ) | |||||
| if( m_socket == null ) | |||||
| { | { | ||||
| socket = new Socket(); | |||||
| m_socket = new Socket(); | |||||
| } | } | ||||
| return socket; | |||||
| return m_socket; | |||||
| } | } | ||||
| public Triggers createTriggers() | public Triggers createTriggers() | ||||
| { | { | ||||
| if( triggers == null ) | |||||
| if( m_triggers == null ) | |||||
| { | { | ||||
| triggers = new Triggers(); | |||||
| m_triggers = new Triggers(); | |||||
| } | } | ||||
| return triggers; | |||||
| return m_triggers; | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -278,19 +235,19 @@ public class Coverage extends Task | |||||
| { | { | ||||
| File paramfile = null; | File paramfile = null; | ||||
| // if an input file is used, all other options are ignored... | // if an input file is used, all other options are ignored... | ||||
| if( inputFile == null ) | |||||
| if( m_inputFile == null ) | |||||
| { | { | ||||
| checkOptions(); | checkOptions(); | ||||
| paramfile = createParamFile(); | paramfile = createParamFile(); | ||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| paramfile = inputFile; | |||||
| paramfile = m_inputFile; | |||||
| } | } | ||||
| try | try | ||||
| { | { | ||||
| // we need to run Coverage from his directory due to dll/jar issues | // we need to run Coverage from his directory due to dll/jar issues | ||||
| cmdl.setExecutable( new File( home, "jplauncher" ).getAbsolutePath() ); | |||||
| cmdl.setExecutable( new File( m_home, "jplauncher" ).getAbsolutePath() ); | |||||
| cmdl.createArgument().setValue( "-jp_input=" + paramfile.getAbsolutePath() ); | cmdl.createArgument().setValue( "-jp_input=" + paramfile.getAbsolutePath() ); | ||||
| // use the custom handler for stdin issues | // use the custom handler for stdin issues | ||||
| @@ -313,7 +270,7 @@ public class Coverage extends Task | |||||
| finally | finally | ||||
| { | { | ||||
| //@todo should be removed once switched to JDK1.2 | //@todo should be removed once switched to JDK1.2 | ||||
| if( inputFile == null && paramfile != null ) | |||||
| if( m_inputFile == null && paramfile != null ) | |||||
| { | { | ||||
| paramfile.delete(); | paramfile.delete(); | ||||
| } | } | ||||
| @@ -331,35 +288,35 @@ public class Coverage extends Task | |||||
| throws TaskException | throws TaskException | ||||
| { | { | ||||
| ArrayList params = new ArrayList(); | ArrayList params = new ArrayList(); | ||||
| params.add( "-jp_function=" + function ); | |||||
| if( vm != null ) | |||||
| params.add( "-jp_function=coverage" ); | |||||
| if( m_vm != null ) | |||||
| { | { | ||||
| params.add( "-jp_vm=" + vm ); | |||||
| params.add( "-jp_vm=" + m_vm ); | |||||
| } | } | ||||
| if( javaExe != null ) | |||||
| if( m_javaExe != null ) | |||||
| { | { | ||||
| params.add( "-jp_java_exe=" + resolveFile( javaExe.getPath() ) ); | |||||
| params.add( "-jp_java_exe=" + resolveFile( m_javaExe.getPath() ) ); | |||||
| } | } | ||||
| params.add( "-jp_working_dir=" + workingDir.getPath() ); | |||||
| params.add( "-jp_snapshot_dir=" + snapshotDir.getPath() ); | |||||
| params.add( "-jp_record_from_start=" + recordFromStart ); | |||||
| params.add( "-jp_warn=" + warnLevel ); | |||||
| if( seedName != null ) | |||||
| params.add( "-jp_working_dir=" + m_workingDir.getPath() ); | |||||
| params.add( "-jp_snapshot_dir=" + m_snapshotDir.getPath() ); | |||||
| params.add( "-jp_record_from_start=" + m_recordFromStart ); | |||||
| params.add( "-jp_warn=" + m_warnLevel ); | |||||
| if( m_seedName != null ) | |||||
| { | { | ||||
| params.add( "-jp_output_file=" + seedName ); | |||||
| params.add( "-jp_output_file=" + m_seedName ); | |||||
| } | } | ||||
| params.add( "-jp_filter=" + filters.toString() ); | |||||
| if( triggers != null ) | |||||
| params.add( "-jp_filter=" + m_filters.toString() ); | |||||
| if( m_triggers != null ) | |||||
| { | { | ||||
| params.add( "-jp_trigger=" + triggers.toString() ); | |||||
| params.add( "-jp_trigger=" + m_triggers.toString() ); | |||||
| } | } | ||||
| if( finalSnapshot != null ) | |||||
| if( m_finalSnapshot != null ) | |||||
| { | { | ||||
| params.add( "-jp_final_snapshot=" + finalSnapshot ); | |||||
| params.add( "-jp_final_snapshot=" + m_finalSnapshot ); | |||||
| } | } | ||||
| params.add( "-jp_exit_prompt=" + exitPrompt ); | |||||
| params.add( "-jp_exit_prompt=" + m_exitPrompt ); | |||||
| //params.add("-jp_append=" + append); | //params.add("-jp_append=" + append); | ||||
| params.add( "-jp_track_natives=" + trackNatives ); | |||||
| params.add( "-jp_track_natives=" + m_trackNatives ); | |||||
| //.... now the jvm | //.... now the jvm | ||||
| // arguments | // arguments | ||||
| String[] vmargs = cmdlJava.getVmCommand().getArguments(); | String[] vmargs = cmdlJava.getVmCommand().getArguments(); | ||||
| @@ -397,50 +354,50 @@ public class Coverage extends Task | |||||
| throws TaskException | throws TaskException | ||||
| { | { | ||||
| // check coverage home | // check coverage home | ||||
| if( home == null || !home.isDirectory() ) | |||||
| if( m_home == null || !m_home.isDirectory() ) | |||||
| { | { | ||||
| throw new TaskException( "Invalid home directory. Must point to JProbe home directory" ); | throw new TaskException( "Invalid home directory. Must point to JProbe home directory" ); | ||||
| } | } | ||||
| home = new File( home, "coverage" ); | |||||
| File jar = new File( home, "coverage.jar" ); | |||||
| m_home = new File( m_home, "coverage" ); | |||||
| File jar = new File( m_home, "coverage.jar" ); | |||||
| if( !jar.exists() ) | if( !jar.exists() ) | ||||
| { | { | ||||
| throw new TaskException( "Cannot find Coverage directory: " + home ); | |||||
| throw new TaskException( "Cannot find Coverage directory: " + m_home ); | |||||
| } | } | ||||
| // make sure snapshot dir exists and is resolved | // make sure snapshot dir exists and is resolved | ||||
| if( snapshotDir == null ) | |||||
| if( m_snapshotDir == null ) | |||||
| { | { | ||||
| snapshotDir = new File( "." ); | |||||
| m_snapshotDir = new File( "." ); | |||||
| } | } | ||||
| snapshotDir = resolveFile( snapshotDir.getPath() ); | |||||
| if( !snapshotDir.isDirectory() || !snapshotDir.exists() ) | |||||
| m_snapshotDir = resolveFile( m_snapshotDir.getPath() ); | |||||
| if( !m_snapshotDir.isDirectory() || !m_snapshotDir.exists() ) | |||||
| { | { | ||||
| throw new TaskException( "Snapshot directory does not exists :" + snapshotDir ); | |||||
| throw new TaskException( "Snapshot directory does not exists :" + m_snapshotDir ); | |||||
| } | } | ||||
| if( workingDir == null ) | |||||
| if( m_workingDir == null ) | |||||
| { | { | ||||
| workingDir = new File( "." ); | |||||
| m_workingDir = new File( "." ); | |||||
| } | } | ||||
| workingDir = resolveFile( workingDir.getPath() ); | |||||
| m_workingDir = resolveFile( m_workingDir.getPath() ); | |||||
| // check for info, do your best to select the java executable. | // check for info, do your best to select the java executable. | ||||
| // JProbe 3.0 fails if there is no javaexe option. So | // JProbe 3.0 fails if there is no javaexe option. So | ||||
| if( javaExe == null && ( vm == null || "java2".equals( vm ) ) ) | |||||
| if( m_javaExe == null && ( m_vm == null || "java2".equals( m_vm ) ) ) | |||||
| { | { | ||||
| String version = System.getProperty( "java.version" ); | String version = System.getProperty( "java.version" ); | ||||
| // make we are using 1.2+, if it is, then do your best to | // make we are using 1.2+, if it is, then do your best to | ||||
| // get a javaexe | // get a javaexe | ||||
| if( !version.startsWith( "1.1" ) ) | if( !version.startsWith( "1.1" ) ) | ||||
| { | { | ||||
| if( vm == null ) | |||||
| if( m_vm == null ) | |||||
| { | { | ||||
| vm = "java2"; | |||||
| m_vm = "java2"; | |||||
| } | } | ||||
| // if we are here obviously it is java2 | // if we are here obviously it is java2 | ||||
| String home = System.getProperty( "java.home" ); | String home = System.getProperty( "java.home" ); | ||||
| boolean isUnix = File.separatorChar == '/'; | boolean isUnix = File.separatorChar == '/'; | ||||
| javaExe = isUnix ? new File( home, "bin/java" ) : new File( home, "/bin/java.exe" ); | |||||
| m_javaExe = isUnix ? new File( home, "bin/java" ) : new File( home, "/bin/java.exe" ); | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| @@ -458,7 +415,7 @@ public class Coverage extends Task | |||||
| throws TaskException | throws TaskException | ||||
| { | { | ||||
| //@todo change this when switching to JDK 1.2 and use File.createTmpFile() | //@todo change this when switching to JDK 1.2 and use File.createTmpFile() | ||||
| File file = createTmpFile(); | |||||
| File file = File.createTempFile( "jpcoverage", "tmp" ); | |||||
| getLogger().debug( "Creating parameter file: " + file ); | getLogger().debug( "Creating parameter file: " + file ); | ||||
| // options need to be one per line in the parameter file | // options need to be one per line in the parameter file | ||||
| @@ -500,72 +457,4 @@ public class Coverage extends Task | |||||
| } | } | ||||
| return file; | return file; | ||||
| } | } | ||||
| /** | |||||
| * create a temporary file in the current dir (For JDK1.1 support) | |||||
| * | |||||
| * @return Description of the Returned Value | |||||
| */ | |||||
| protected File createTmpFile() | |||||
| { | |||||
| final long rand = ( new Random( System.currentTimeMillis() ) ).nextLong(); | |||||
| File file = new File( "jpcoverage" + rand + ".tmp" ); | |||||
| return file; | |||||
| } | |||||
| public static class Finalsnapshot extends EnumeratedAttribute | |||||
| { | |||||
| public String[] getValues() | |||||
| { | |||||
| return new String[]{"coverage", "none", "all"}; | |||||
| } | |||||
| } | |||||
| public static class Javavm extends EnumeratedAttribute | |||||
| { | |||||
| public String[] getValues() | |||||
| { | |||||
| return new String[]{"java2", "jdk118", "jdk117"}; | |||||
| } | |||||
| } | |||||
| public static class Recordfromstart extends EnumeratedAttribute | |||||
| { | |||||
| public String[] getValues() | |||||
| { | |||||
| return new String[]{"coverage", "none", "all"}; | |||||
| } | |||||
| } | |||||
| /** | |||||
| * specific pumper to avoid those nasty stdin issues | |||||
| */ | |||||
| static class CoverageStreamHandler | |||||
| extends LogStreamHandler | |||||
| { | |||||
| CoverageStreamHandler( OutputStream output, OutputStream error ) | |||||
| { | |||||
| super( output, error ); | |||||
| } | |||||
| /** | |||||
| * there are some issues concerning all JProbe executable In our case a | |||||
| * 'Press ENTER to close this window..." will be displayed in the | |||||
| * current window waiting for enter. So I'm closing the stream right | |||||
| * away to avoid problems. | |||||
| * | |||||
| * @param os The new ProcessInputStream value | |||||
| */ | |||||
| public void setProcessInputStream( OutputStream os ) | |||||
| { | |||||
| try | |||||
| { | |||||
| os.close(); | |||||
| } | |||||
| catch( IOException ignored ) | |||||
| { | |||||
| } | |||||
| } | |||||
| } | |||||
| } | } | ||||
| @@ -0,0 +1,43 @@ | |||||
| /* | |||||
| * 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.sitraka; | |||||
| import org.apache.tools.ant.taskdefs.exec.LogStreamHandler; | |||||
| import java.io.OutputStream; | |||||
| import java.io.IOException; | |||||
| /** | |||||
| * specific pumper to avoid those nasty stdin issues | |||||
| */ | |||||
| class CoverageStreamHandler | |||||
| extends LogStreamHandler | |||||
| { | |||||
| CoverageStreamHandler( OutputStream output, OutputStream error ) | |||||
| { | |||||
| super( output, error ); | |||||
| } | |||||
| /** | |||||
| * there are some issues concerning all JProbe executable In our case a | |||||
| * 'Press ENTER to close this window..." will be displayed in the | |||||
| * current window waiting for enter. So I'm closing the stream right | |||||
| * away to avoid problems. | |||||
| * | |||||
| * @param os The new ProcessInputStream value | |||||
| */ | |||||
| public void setProcessInputStream( OutputStream os ) | |||||
| { | |||||
| try | |||||
| { | |||||
| os.close(); | |||||
| } | |||||
| catch( IOException ignored ) | |||||
| { | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,19 @@ | |||||
| /* | |||||
| * 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.sitraka; | |||||
| import org.apache.tools.ant.types.EnumeratedAttribute; | |||||
| public class Finalsnapshot | |||||
| extends EnumeratedAttribute | |||||
| { | |||||
| public String[] getValues() | |||||
| { | |||||
| return new String[]{"coverage", "none", "all"}; | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,19 @@ | |||||
| /* | |||||
| * 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.sitraka; | |||||
| import org.apache.tools.ant.types.EnumeratedAttribute; | |||||
| public class Javavm | |||||
| extends EnumeratedAttribute | |||||
| { | |||||
| public String[] getValues() | |||||
| { | |||||
| return new String[]{"java2", "jdk118", "jdk117"}; | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,19 @@ | |||||
| /* | |||||
| * 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.sitraka; | |||||
| import org.apache.tools.ant.types.EnumeratedAttribute; | |||||
| public class Recordfromstart | |||||
| extends EnumeratedAttribute | |||||
| { | |||||
| public String[] getValues() | |||||
| { | |||||
| return new String[]{"coverage", "none", "all"}; | |||||
| } | |||||
| } | |||||