ant-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From dona...@apache.org
Subject cvs commit: jakarta-ant/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/metamata Violation.java AbstractMetamataTask.java MAudit.java MAuditStreamHandler.java MMetrics.java MMetricsStreamHandler.java MParse.java
Date Sun, 06 Jan 2002 02:29:20 GMT
donaldp     02/01/05 18:29:20

  Modified:    proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/metamata
                        AbstractMetamataTask.java MAudit.java
                        MAuditStreamHandler.java MMetrics.java
                        MMetricsStreamHandler.java MParse.java
  Added:       proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/metamata
                        Violation.java
  Log:
  Moved metamata tasks to using Execute2 functionality and generally cleaning up the tasks
  
  Revision  Changes    Path
  1.15      +83 -79    jakarta-ant/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/metamata/AbstractMetamataTask.java
  
  Index: AbstractMetamataTask.java
  ===================================================================
  RCS file: /home/cvs/jakarta-ant/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/metamata/AbstractMetamataTask.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- AbstractMetamataTask.java	1 Jan 2002 09:13:46 -0000	1.14
  +++ AbstractMetamataTask.java	6 Jan 2002 02:29:20 -0000	1.15
  @@ -15,10 +15,10 @@
   import java.util.Hashtable;
   import java.util.Iterator;
   import java.util.Random;
  +import org.apache.myrmidon.api.AbstractTask;
   import org.apache.myrmidon.api.TaskException;
   import org.apache.tools.ant.DirectoryScanner;
  -import org.apache.tools.ant.Task;
  -import org.apache.tools.ant.taskdefs.exec.Execute;
  +import org.apache.tools.ant.taskdefs.exec.Execute2;
   import org.apache.tools.ant.types.Argument;
   import org.apache.tools.ant.types.CommandlineJava;
   import org.apache.tools.ant.types.FileSet;
  @@ -31,48 +31,46 @@
    *
    * @author <a href="mailto:sbailliez@imediation.com">Stephane Bailliez</a>
    */
  -public abstract class AbstractMetamataTask extends Task
  +public abstract class AbstractMetamataTask
  +    extends AbstractTask
   {
  -
  -    //--------------------------- ATTRIBUTES -----------------------------------
  -
       /**
        * The user classpath to be provided. It matches the -classpath of the
        * command line. The classpath must includes both the <tt>.class</tt> and
        * the <tt>.java</tt> files for accurate audit.
        */
  -    protected Path classPath = null;
  +    private Path m_classPath;
   
       /**
        * the path to the source file
        */
  -    protected Path sourcePath = null;
  +    private Path m_sourcePath;
   
       /**
        * Metamata home directory. It will be passed as a <tt>metamata.home</tt>
        * property and should normally matches the environment property <tt>
        * META_HOME</tt> set by the Metamata installer.
        */
  -    protected File metamataHome = null;
  +    private File m_metamataHome;
   
       /**
        * the command line used to run MAudit
        */
  -    protected CommandlineJava cmdl = new CommandlineJava();
  +    private CommandlineJava m_cmdl = new CommandlineJava();
   
       /**
        * the set of files to be audited
        */
  -    protected ArrayList fileSets = new ArrayList();
  +    private ArrayList m_fileSets = new ArrayList();
   
       /**
        * the options file where are stored the command line options
        */
  -    protected File optionsFile = null;
  +    private File m_optionsFile;
   
       // this is used to keep track of which files were included. It will
       // be set when calling scanFileSets();
  -    protected Hashtable includedFiles = null;
  +    private Hashtable m_includedFiles;
   
       public AbstractMetamataTask()
       {
  @@ -85,8 +83,8 @@
        */
       protected AbstractMetamataTask( String className )
       {
  -        cmdl.setVm( "java" );
  -        cmdl.setClassname( className );
  +        m_cmdl.setVm( "java" );
  +        m_cmdl.setClassname( className );
       }
   
       /**
  @@ -123,60 +121,50 @@
   
       /**
        * the metamata.home property to run all tasks.
  -     *
  -     * @param metamataHome The new Metamatahome value
        */
       public void setMetamatahome( final File metamataHome )
       {
  -        this.metamataHome = metamataHome;
  +        this.m_metamataHome = metamataHome;
       }
   
       /**
        * The java files or directory to be audited
  -     *
  -     * @param fs The feature to be added to the FileSet attribute
        */
  -    public void addFileSet( FileSet fs )
  +    public void addFileSet( final FileSet fileSet )
       {
  -        fileSets.add( fs );
  +        m_fileSets.add( fileSet );
       }
   
       /**
        * user classpath
  -     *
  -     * @return Description of the Returned Value
        */
       public Path createClasspath()
       {
  -        if( classPath == null )
  +        if( m_classPath == null )
           {
  -            classPath = new Path();
  +            m_classPath = new Path();
           }
  -        return classPath;
  +        return m_classPath;
       }
   
       /**
        * Creates a nested jvmarg element.
  -     *
  -     * @return Description of the Returned Value
        */
       public Argument createJvmarg()
       {
  -        return cmdl.createVmArgument();
  +        return m_cmdl.createVmArgument();
       }
   
       /**
        * create the source path for this task
  -     *
  -     * @return Description of the Returned Value
        */
       public Path createSourcepath()
       {
  -        if( sourcePath == null )
  +        if( m_sourcePath == null )
           {
  -            sourcePath = new Path();
  +            m_sourcePath = new Path();
           }
  -        return sourcePath;
  +        return m_sourcePath;
       }
   
       /**
  @@ -198,44 +186,37 @@
           }
       }
   
  -    //--------------------- PRIVATE/PROTECTED METHODS --------------------------
  -
       /**
        * check the options and build the command line
  -     *
  -     * @exception TaskException Description of Exception
        */
       protected void setUp()
           throws TaskException
       {
  -        checkOptions();
  +        validate();
   
           // set the classpath as the jar file
  -        File jar = getMetamataJar( metamataHome );
  -        final Path classPath = cmdl.createClasspath( getProject() );
  +        File jar = getMetamataJar( m_metamataHome );
  +        final Path classPath = m_cmdl.createClasspath();
           classPath.createPathElement().setLocation( jar );
   
           // set the metamata.home property
  -        final Argument vmArgs = cmdl.createVmArgument();
  -        vmArgs.setValue( "-Dmetamata.home=" + metamataHome.getAbsolutePath() );
  +        final Argument vmArgs = m_cmdl.createVmArgument();
  +        vmArgs.setValue( "-Dmetamata.home=" + m_metamataHome.getAbsolutePath() );
   
           // retrieve all the files we want to scan
  -        includedFiles = scanFileSets();
  -        getLogger().debug( includedFiles.size() + " files added for audit" );
  +        m_includedFiles = scanFileSets();
  +        getLogger().debug( m_includedFiles.size() + " files added for audit" );
   
           // write all the options to a temp file and use it ro run the process
           ArrayList options = getOptions();
  -        optionsFile = createTmpFile();
  -        generateOptionsFile( optionsFile, options );
  -        Argument args = cmdl.createArgument();
  -        args.setLine( "-arguments " + optionsFile.getAbsolutePath() );
  +        m_optionsFile = createTmpFile();
  +        generateOptionsFile( m_optionsFile, options );
  +        Argument args = m_cmdl.createArgument();
  +        args.setLine( "-arguments " + m_optionsFile.getAbsolutePath() );
       }
   
       /**
        * return the location of the jar file used to run
  -     *
  -     * @param home Description of Parameter
  -     * @return The MetamataJar value
        */
       protected final File getMetamataJar( File home )
       {
  @@ -244,31 +225,30 @@
   
       protected Hashtable getFileMapping()
       {
  -        return includedFiles;
  +        return m_includedFiles;
       }
   
       /**
        * return all options of the command line as string elements
  -     *
  -     * @return The Options value
        */
  -    protected abstract ArrayList getOptions();
  +    protected abstract ArrayList getOptions()
  +        throws TaskException;
   
       /**
        * validate options set
        *
        * @exception TaskException Description of Exception
        */
  -    protected void checkOptions()
  +    protected void validate()
           throws TaskException
       {
           // do some validation first
  -        if( metamataHome == null || !metamataHome.exists() )
  +        if( m_metamataHome == null || !m_metamataHome.exists() )
           {
               throw new TaskException( "'metamatahome' must point to Metamata home directory." );
           }
  -        metamataHome = resolveFile( metamataHome.getPath() );
  -        File jar = getMetamataJar( metamataHome );
  +        m_metamataHome = resolveFile( m_metamataHome.getPath() );
  +        File jar = getMetamataJar( m_metamataHome );
           if( !jar.exists() )
           {
               throw new TaskException( jar + " does not exist. Check your metamata installation." );
  @@ -279,23 +259,16 @@
        * clean up all the mess that we did with temporary objects
        */
       protected void cleanUp()
  +        throws TaskException
       {
  -        if( optionsFile != null )
  +        if( m_optionsFile != null )
           {
  -            optionsFile.delete();
  -            optionsFile = null;
  +            m_optionsFile.delete();
  +            m_optionsFile = null;
           }
       }
   
       /**
  -     * create a stream handler that will be used to get the output since
  -     * metamata tools do not report with convenient files such as XML.
  -     *
  -     * @return Description of the Returned Value
  -     */
  -    protected abstract void setupStreamHandler( Execute exe );
  -
  -    /**
        * execute the process with a specific handler
        *
        * @param handler Description of Parameter
  @@ -304,13 +277,13 @@
       protected void execute0()
           throws TaskException
       {
  -        final Execute exe = new Execute();
  -        setupStreamHandler( exe );
  -        getLogger().debug( cmdl.toString() );
  -        exe.setCommandline( cmdl.getCommandline() );
  +        final Execute2 exe = new Execute2();
  +        setupLogger( exe );
  +        getLogger().debug( m_cmdl.toString() );
  +        exe.setCommandline( m_cmdl.getCommandline() );
           try
           {
  -            if( exe.execute() != 0 )
  +            if( 0 != exe.execute() )
               {
                   throw new TaskException( "Metamata task failed." );
               }
  @@ -360,11 +333,12 @@
        *      audited.
        */
       protected Hashtable scanFileSets()
  +        throws TaskException
       {
           Hashtable files = new Hashtable();
  -        for( int i = 0; i < fileSets.size(); i++ )
  +        for( int i = 0; i < m_fileSets.size(); i++ )
           {
  -            FileSet fs = (FileSet)fileSets.get( i );
  +            FileSet fs = (FileSet)m_fileSets.get( i );
               DirectoryScanner ds = fs.getDirectoryScanner();
               ds.scan();
               String[] f = ds.getIncludedFiles();
  @@ -383,6 +357,36 @@
               }
           }
           return files;
  +    }
  +
  +    protected ArrayList getFileSets()
  +    {
  +        return m_fileSets;
  +    }
  +
  +    protected Hashtable getIncludedFiles()
  +    {
  +        return m_includedFiles;
  +    }
  +
  +    protected Path getClassPath()
  +    {
  +        return m_classPath;
  +    }
  +
  +    protected void setClassPath( Path classPath )
  +    {
  +        m_classPath = classPath;
  +    }
  +
  +    protected Path getSourcePath()
  +    {
  +        return m_sourcePath;
  +    }
  +
  +    protected void setSourcePath( Path sourcePath )
  +    {
  +        m_sourcePath = sourcePath;
       }
   
   }
  
  
  
  1.12      +36 -100   jakarta-ant/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/metamata/MAudit.java
  
  Index: MAudit.java
  ===================================================================
  RCS file: /home/cvs/jakarta-ant/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/metamata/MAudit.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- MAudit.java	30 Dec 2001 10:46:59 -0000	1.11
  +++ MAudit.java	6 Jan 2002 02:29:20 -0000	1.12
  @@ -8,13 +8,8 @@
   package org.apache.tools.ant.taskdefs.optional.metamata;
   
   import java.io.File;
  -import java.io.FileOutputStream;
  -import java.io.IOException;
  -import java.io.OutputStream;
   import java.util.ArrayList;
   import org.apache.myrmidon.api.TaskException;
  -import org.apache.tools.ant.taskdefs.exec.Execute;
  -import org.apache.tools.ant.taskdefs.exec.LogOutputStream;
   import org.apache.tools.ant.types.Path;
   
   /**
  @@ -32,9 +27,9 @@
    *
    * @author <a href="mailto:sbailliez@imediation.com">Stephane Bailliez</a>
    */
  -public class MAudit extends AbstractMetamataTask
  +public class MAudit
  +    extends AbstractMetamataTask
   {
  -
       /*
        * As of Metamata 2.0, the command line of MAudit is as follows:
        * Usage
  @@ -72,15 +67,11 @@
       // (?:file:)?((?#filepath).+):((?#line)\\d+)\\s*:\\s+((?#message).*)
       final static String AUDIT_PATTERN = "(?:file:)?(.+):(\\d+)\\s*:\\s+(.*)";
   
  -    protected File outFile = null;
  -
  -    protected Path searchPath = null;
  -
  -    protected boolean fix = false;
  -
  -    protected boolean list = false;
  -
  -    protected boolean unused = false;
  +    private File m_outFile;
  +    private Path m_searchPath;
  +    private boolean m_fix;
  +    private boolean m_list;
  +    private boolean m_unused;
   
       /**
        * default constructor
  @@ -90,78 +81,62 @@
           super( "com.metamata.gui.rc.MAudit" );
       }
   
  -    /**
  -     * handy factory to create a violation
  -     *
  -     * @param line Description of Parameter
  -     * @param msg Description of Parameter
  -     * @return Description of the Returned Value
  -     */
  -    final static Violation createViolation( int line, String msg )
  +    public void setFix( final boolean fix )
       {
  -        Violation violation = new Violation();
  -        violation.line = line;
  -        violation.error = msg;
  -        return violation;
  +        m_fix = fix;
       }
   
  -    public void setFix( boolean flag )
  +    public void setList( final boolean list )
       {
  -        this.fix = flag;
  -    }
  -
  -    public void setList( boolean flag )
  -    {
  -        this.list = flag;
  +        m_list = list;
       }
   
       /**
        * set the destination file which should be an xml file
  -     *
  -     * @param outFile The new Tofile value
        */
  -    public void setTofile( File outFile )
  +    public void setTofile( final File outFile )
       {
  -        this.outFile = outFile;
  +        m_outFile = outFile;
       }
   
  -    public void setUnused( boolean flag )
  +    public void setUnused( final boolean unused )
       {
  -        this.unused = flag;
  +        m_unused = unused;
       }
   
       public Path createSearchpath()
       {
  -        if( searchPath == null )
  +        if( m_searchPath == null )
           {
  -            searchPath = new Path();
  +            m_searchPath = new Path();
           }
  -        return searchPath;
  +        return m_searchPath;
       }
   
       protected ArrayList getOptions()
  +        throws TaskException
       {
           ArrayList options = new ArrayList( 512 );
           // there is a bug in Metamata 2.0 build 37. The sourcepath argument does
           // not work. So we will use the sourcepath prepended to classpath. (order
           // is important since Metamata looks at .class and .java)
  -        if( sourcePath != null )
  +        if( getSourcePath() != null )
           {
  -            sourcePath.append( classPath );// srcpath is prepended
  -            classPath = sourcePath;
  -            sourcePath = null;// prevent from using -sourcepath
  +            getSourcePath().append( getClassPath() );// srcpath is prepended
  +            setClassPath( getSourcePath() );
  +            setSourcePath( null );// prevent from using -sourcepath
           }
   
           // don't forget to modify the pattern if you change the options reporting
  -        if( classPath != null )
  +        if( getClassPath() != null )
           {
               options.add( "-classpath" );
  -            options.add( classPath.toString() );
  +            options.add( getClassPath().toString() );
           }
           // suppress copyright msg when running, we will let it so that this
           // will be the only output to the console if in xml mode
           //      options.add("-quiet");
  -        if( fix )
  +        if( m_fix )
           {
               options.add( "-fix" );
           }
  @@ -170,34 +145,34 @@
           // generate .maudit files much more detailed than the report
           // I don't like it very much, I think it could be interesting
           // to get all .maudit files and include them in the XML.
  -        if( list )
  +        if( m_list )
           {
               options.add( "-list" );
           }
  -        if( sourcePath != null )
  +        if( getSourcePath() != null )
           {
               options.add( "-sourcepath" );
  -            options.add( sourcePath.toString() );
  +            options.add( getSourcePath().toString() );
           }
   
  -        if( unused )
  +        if( m_unused )
           {
               options.add( "-unused" );
  -            options.add( searchPath.toString() );
  +            options.add( m_searchPath.toString() );
           }
  -        addAllArrayList( options, includedFiles.keySet().iterator() );
  +        addAllArrayList( options, getIncludedFiles().keySet().iterator() );
           return options;
       }
   
  -    protected void checkOptions()
  +    protected void validate()
           throws TaskException
       {
  -        super.checkOptions();
  -        if( unused && searchPath == null )
  +        super.validate();
  +        if( m_unused && m_searchPath == null )
           {
               throw new TaskException( "'searchpath' element must be set when looking for 'unused' declarations." );
           }
  -        if( !unused && searchPath != null )
  +        if( !m_unused && m_searchPath != null )
           {
               getLogger().warn( "'searchpath' element ignored. 'unused' attribute is disabled." );
           }
  @@ -218,44 +193,5 @@
            * }
            */
       }
  -
  -    protected void setupStreamHandler( final Execute exe )
  -        throws TaskException
  -    {
  -        // if we didn't specify a file, then use a screen report
  -        if( outFile == null )
  -        {
  -            exe.setOutput( new LogOutputStream( getLogger(), false ) );
  -            exe.setError( new LogOutputStream( getLogger(), true ) );
  -        }
  -        else
  -        {
  -            try
  -            {
  -                //XXX
  -                OutputStream out = new FileOutputStream( outFile );
  -                //handler = new MAuditStreamHandler( this, out );
  -                //FIXME: should behave like in Ant1.x
  -                exe.setOutput( out );
  -                exe.setError( out );
  -            }
  -            catch( IOException e )
  -            {
  -                throw new TaskException( "Error", e );
  -            }
  -        }
  -    }
  -
  -    /**
  -     * the inner class used to report violation information
  -     *
  -     * @author RT
  -     */
  -    final static class Violation
  -    {
  -        String error;
  -        int line;
  -    }
  -
   }
   
  
  
  
  1.9       +86 -102   jakarta-ant/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/metamata/MAuditStreamHandler.java
  
  Index: MAuditStreamHandler.java
  ===================================================================
  RCS file: /home/cvs/jakarta-ant/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/metamata/MAuditStreamHandler.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- MAuditStreamHandler.java	23 Dec 2001 14:22:46 -0000	1.8
  +++ MAuditStreamHandler.java	6 Jan 2002 02:29:20 -0000	1.9
  @@ -7,10 +7,8 @@
    */
   package org.apache.tools.ant.taskdefs.optional.metamata;
   
  -import java.io.BufferedReader;
   import java.io.IOException;
   import java.io.InputStream;
  -import java.io.InputStreamReader;
   import java.io.OutputStream;
   import java.io.OutputStreamWriter;
   import java.io.Writer;
  @@ -19,6 +17,10 @@
   import java.util.Iterator;
   import javax.xml.parsers.DocumentBuilder;
   import javax.xml.parsers.DocumentBuilderFactory;
  +import javax.xml.parsers.ParserConfigurationException;
  +import org.apache.avalon.framework.logger.AbstractLogEnabled;
  +import org.apache.myrmidon.api.TaskException;
  +import org.apache.myrmidon.framework.exec.ExecOutputHandler;
   import org.apache.tools.ant.taskdefs.exec.ExecuteStreamHandler;
   import org.apache.tools.ant.util.DOMElementWriter;
   import org.apache.tools.ant.util.regexp.RegexpMatcher;
  @@ -43,98 +45,74 @@
    *
    * @author <a href="sbailliez@imediation.com">Stephane Bailliez</a>
    */
  -class MAuditStreamHandler implements ExecuteStreamHandler
  +class MAuditStreamHandler
  +    extends AbstractLogEnabled
  +    implements ExecuteStreamHandler, ExecOutputHandler
   {
  +    public void setProcessInputStream( OutputStream os )
  +        throws IOException
  +    {
  +    }
  +
  +    public void setProcessErrorStream( InputStream is )
  +        throws IOException
  +    {
  +    }
  +
  +    public void setProcessOutputStream( InputStream is )
  +        throws TaskException, IOException
  +    {
  +    }
  +
  +    public void start()
  +        throws IOException
  +    {
  +    }
   
       /**
        * this is where the XML output will go, should mostly be a file the caller
        * is responsible for flushing and closing this stream
        */
  -    protected OutputStream xmlOut = null;
  +    private OutputStream m_xmlOut;
   
       /**
        * the multimap. The key in the map is the filepath that caused the audit
        * error and the value is a vector of MAudit.Violation entries.
        */
  -    protected Hashtable auditedFiles = new Hashtable();
  -
  -    /**
  -     * reader for stdout
  -     */
  -    protected BufferedReader br;
  +    private Hashtable m_auditedFiles = new Hashtable();
   
       /**
        * matcher that will be used to extract the info from the line
        */
  -    protected RegexpMatcher matcher;
  +    private RegexpMatcher m_matcher;
   
  -    protected MAudit task;
  +    private Hashtable m_fileMapping;
   
  -    MAuditStreamHandler( MAudit task, OutputStream xmlOut )
  +    MAuditStreamHandler( Hashtable fileMapping, OutputStream xmlOut )
  +        throws TaskException
       {
  -        this.task = task;
  -        this.xmlOut = xmlOut;
  +        m_fileMapping = fileMapping;
  +        m_xmlOut = xmlOut;
           /**
            * the matcher should be the Oro one. I don't know about the other one
            */
  -        matcher = ( new RegexpMatcherFactory() ).newRegexpMatcher();
  -        matcher.setPattern( MAudit.AUDIT_PATTERN );
  +        m_matcher = ( new RegexpMatcherFactory() ).newRegexpMatcher();
  +        m_matcher.setPattern( MAudit.AUDIT_PATTERN );
       }
   
  -    protected static DocumentBuilder getDocumentBuilder()
  +    private static final DocumentBuilder getDocumentBuilder()
       {
           try
           {
               return DocumentBuilderFactory.newInstance().newDocumentBuilder();
           }
  -        catch( Exception exc )
  +        catch( ParserConfigurationException pce )
           {
  -            throw new ExceptionInInitializerError( exc );
  +            throw new ExceptionInInitializerError( pce );
           }
       }
   
       /**
  -     * Ignore.
  -     *
  -     * @param is The new ProcessErrorStream value
  -     */
  -    public void setProcessErrorStream( InputStream is )
  -    {
  -    }
  -
  -    /**
  -     * Ignore.
  -     *
  -     * @param os The new ProcessInputStream value
  -     */
  -    public void setProcessInputStream( OutputStream os )
  -    {
  -    }
  -
  -    /**
  -     * Set the inputstream
  -     *
  -     * @param is The new ProcessOutputStream value
  -     * @exception IOException Description of Exception
  -     */
  -    public void setProcessOutputStream( InputStream is )
  -        throws IOException
  -    {
  -        br = new BufferedReader( new InputStreamReader( is ) );
  -    }
  -
  -    /**
  -     * Invokes parseOutput. This will block until the end :-(
  -     *
  -     * @exception IOException Description of Exception
  -     */
  -    public void start()
  -        throws IOException
  -    {
  -        parseOutput( br );
  -    }
  -
  -    /**
        * Pretty dangerous business here. It serializes what was extracted from the
        * MAudit output and write it to the output.
        */
  @@ -144,19 +122,18 @@
           // this is the only code that could be needed to be overrided
           Document doc = getDocumentBuilder().newDocument();
           Element rootElement = doc.createElement( "classes" );
  -        Iterator keys = auditedFiles.keys();
  -        Hashtable filemapping = task.getFileMapping();
  -        rootElement.setAttribute( "audited", String.valueOf( filemapping.size() ) );
  -        rootElement.setAttribute( "reported", String.valueOf( auditedFiles.size() ) );
  +        final Iterator keys = m_auditedFiles.keySet().iterator();
  +        rootElement.setAttribute( "audited", String.valueOf( m_fileMapping.size() ) );
  +        rootElement.setAttribute( "reported", String.valueOf( m_auditedFiles.size() ) );
           int errors = 0;
           while( keys.hasNext() )
           {
               String filepath = (String)keys.next();
  -            ArrayList v = (ArrayList)auditedFiles.get( filepath );
  -            String fullclassname = (String)filemapping.get( filepath );
  +            ArrayList v = (ArrayList)m_auditedFiles.get( filepath );
  +            String fullclassname = (String)m_fileMapping.get( filepath );
               if( fullclassname == null )
               {
  -                task.getLogger().warn( "Could not find class mapping for " + filepath );
  +                getLogger().warn( "Could not find class mapping for " + filepath );
                   continue;
               }
               int pos = fullclassname.lastIndexOf( '.' );
  @@ -169,10 +146,10 @@
               errors += v.size();
               for( int i = 0; i < v.size(); i++ )
               {
  -                MAudit.Violation violation = (MAudit.Violation)v.get( i );
  +                Violation violation = (Violation)v.get( i );
                   Element error = doc.createElement( "violation" );
  -                error.setAttribute( "line", String.valueOf( violation.line ) );
  -                error.setAttribute( "message", violation.error );
  +                error.setAttribute( "line", String.valueOf( violation.getLine() ) );
  +                error.setAttribute( "message", violation.getError() );
                   clazz.appendChild( error );
               }
               rootElement.appendChild( clazz );
  @@ -180,23 +157,23 @@
           rootElement.setAttribute( "violations", String.valueOf( errors ) );
   
           // now write it to the outputstream, not very nice code
  -        if( xmlOut != null )
  +        if( m_xmlOut != null )
           {
               Writer wri = null;
               try
               {
  -                wri = new OutputStreamWriter( xmlOut, "UTF-8" );
  +                wri = new OutputStreamWriter( m_xmlOut, "UTF-8" );
                   wri.write( "<?xml version=\"1.0\"?>\n" );
                   ( new DOMElementWriter() ).write( rootElement, wri, 0, "  " );
                   wri.flush();
               }
               catch( IOException exc )
               {
  -                task.getLogger().error( "Unable to write log file" );
  +                getLogger().error( "Unable to write log file" );
               }
               finally
               {
  -                if( xmlOut != System.out && xmlOut != System.err )
  +                if( m_xmlOut != System.out && m_xmlOut != System.err )
                   {
                       if( wri != null )
                       {
  @@ -216,56 +193,63 @@
   
       /**
        * add a violation entry for the file
  -     *
  -     * @param file The feature to be added to the ViolationEntry attribute
  -     * @param entry The feature to be added to the ViolationEntry attribute
        */
  -    protected void addViolationEntry( String file, MAudit.Violation entry )
  +    protected void addViolationEntry( String file, Violation entry )
       {
  -        ArrayList violations = (ArrayList)auditedFiles.get( file );
  -        // if there is no decl for this file yet, create it.
  +        ArrayList violations = (ArrayList)m_auditedFiles.get( file );
           if( violations == null )
           {
  +            // if there is no decl for this file yet, create it.
               violations = new ArrayList();
  -            auditedFiles.put( file, violations );
  +            m_auditedFiles.put( file, violations );
           }
           violations.add( entry );
       }
   
       /**
  -     * read each line and process it
  -     *
  -     * @param br Description of Parameter
  -     * @exception IOException Description of Exception
  +     * Receive notification about the process writing
  +     * to standard error.
        */
  -    protected void parseOutput( BufferedReader br )
  -        throws IOException
  +    public void stderr( String line )
       {
  -        String line = null;
  -        while( ( line = br.readLine() ) != null )
  -        {
  -            processLine( line );
  -        }
       }
   
  -    // we suppose here that there is only one report / line.
  -    // There will obviouslly be a problem if the message is on several lines...
  -    protected void processLine( String line )
  +    /**
  +     * Receive notification about the process writing
  +     * to standard output.
  +     */
  +    public void stdout( final String line )
       {
  -        ArrayList matches = matcher.getGroups( line );
  +        // we suppose here that there is only one report / line.
  +        // There will obviouslly be a problem if the message is on several lines...
  +
  +        final ArrayList matches = getGroups( line );
           if( matches != null )
           {
  -            String file = (String)matches.get( 1 );
  -            int lineNum = Integer.parseInt( (String)matches.get( 2 ) );
  -            String msg = (String)matches.get( 3 );
  -            addViolationEntry( file, MAudit.createViolation( lineNum, msg ) );
  +            final String file = (String)matches.get( 1 );
  +            final int lineNum = Integer.parseInt( (String)matches.get( 2 ) );
  +            final String msg = (String)matches.get( 3 );
  +            final Violation violation = new Violation( msg, lineNum );
  +            addViolationEntry( file, violation );
           }
           else
           {
               // this doesn't match..report it as info, it could be
               // either the copyright, summary or a multiline message (damn !)
  -            task.getLogger().info( line );
  +            getLogger().info( line );
           }
       }
   
  +    private ArrayList getGroups( final String line )
  +    {
  +        try
  +        {
  +            return m_matcher.getGroups( line );
  +        }
  +        catch( final TaskException te )
  +        {
  +            getLogger().error( "Failed to process matcher", te );
  +            return new ArrayList();
  +        }
  +    }
   }
  
  
  
  1.10      +17 -31    jakarta-ant/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/metamata/MMetrics.java
  
  Index: MMetrics.java
  ===================================================================
  RCS file: /home/cvs/jakarta-ant/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/metamata/MMetrics.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- MMetrics.java	30 Dec 2001 10:46:59 -0000	1.9
  +++ MMetrics.java	6 Jan 2002 02:29:20 -0000	1.10
  @@ -13,9 +13,7 @@
   import java.io.IOException;
   import java.util.ArrayList;
   import org.apache.myrmidon.api.TaskException;
  -import org.apache.tools.ant.taskdefs.exec.Execute;
   import org.apache.tools.ant.taskdefs.exec.ExecuteStreamHandler;
  -import org.apache.tools.ant.taskdefs.exec.LogOutputStream;
   import org.apache.tools.ant.types.Path;
   
   /**
  @@ -119,23 +117,24 @@
       }
   
       protected ArrayList getOptions()
  +        throws TaskException
       {
           ArrayList options = new ArrayList( 512 );
           // there is a bug in Metamata 2.0 build 37. The sourcepath argument does
           // not work. So we will use the sourcepath prepended to classpath. (order
           // is important since Metamata looks at .class and .java)
  -        if( sourcePath != null )
  +        if( getSourcePath() != null )
           {
  -            sourcePath.append( classPath );// srcpath is prepended
  -            classPath = sourcePath;
  -            sourcePath = null;// prevent from using -sourcepath
  +            getSourcePath().append( getClassPath() );// srcpath is prepended
  +            setClassPath( getSourcePath() );
  +            setSourcePath( null );// prevent from using -sourcepath
           }
   
           // don't forget to modify the pattern if you change the options reporting
  -        if( classPath != null )
  +        if( getClassPath() != null )
           {
               options.add( "-classpath" );
  -            options.add( classPath );
  +            options.add( getClassPath() );
           }
           options.add( "-output" );
           options.add( tmpFile.toString() );
  @@ -155,13 +154,13 @@
           options.add( "/" );
   
           // directories
  -        String[] dirs = path.list();
  +        final String[] dirs = path.list();
           for( int i = 0; i < dirs.length; i++ )
           {
               options.add( dirs[ i ] );
           }
           // files next.
  -        addAllArrayList( options, includedFiles.keySet().iterator() );
  +        addAllArrayList( options, getIncludedFiles().keySet().iterator() );
           return options;
       }
   
  @@ -169,10 +168,10 @@
   
   
       // check for existing options and outfile, all other are optional
  -    protected void checkOptions()
  +    protected void validate()
           throws TaskException
       {
  -        super.checkOptions();
  +        super.validate();
   
           if( !"files".equals( granularity ) && !"methods".equals( granularity )
               && !"types".equals( granularity ) )
  @@ -183,12 +182,12 @@
           {
               throw new TaskException( "Output XML file must be set via 'tofile' attribute." );
           }
  -        if( path == null && fileSets.size() == 0 )
  +        if( path == null && getFileSets().size() == 0 )
           {
               throw new TaskException( "Must set either paths (path element) or files (fileset element)" );
           }
           // I don't accept dirs and files at the same time, I cannot recognize the semantic in the result
  -        if( path != null && fileSets.size() > 0 )
  +        if( path != null && getFileSets().size() > 0 )
           {
               throw new TaskException( "Cannot set paths (path element) and files (fileset element) at the same time" );
           }
  @@ -216,23 +215,10 @@
           }
       }
   
  -    /**
  -     * if the report is transform via a temporary txt file we should use a a
  -     * normal logger here, otherwise we could use the metrics handler directly
  -     * to capture and transform the output on stdout to XML.
  -     *
  -     * @return Description of the Returned Value
  -     */
  -    protected void setupStreamHandler( final Execute exe )
  -    {
  -        exe.setOutput( new LogOutputStream( getLogger(), false ) );
  -        exe.setError( new LogOutputStream( getLogger(), false ) );
  -    }
  -
  -    protected void execute0( ExecuteStreamHandler handler )
  +    protected void execute0()
           throws TaskException
       {
  -        super.execute0( handler );
  +        super.execute0();
           transformFile();
       }
   
  @@ -260,7 +246,8 @@
           try
           {
               xmlStream = new FileOutputStream( outFile );
  -            ExecuteStreamHandler xmlHandler = new MMetricsStreamHandler( this, xmlStream );
  +            ExecuteStreamHandler xmlHandler = new MMetricsStreamHandler( xmlStream );
  +            setupLogger( xmlHandler );
               xmlHandler.setProcessOutputStream( tmpStream );
               xmlHandler.start();
               xmlHandler.stop();
  @@ -293,5 +280,4 @@
               }
           }
       }
  -
   }
  
  
  
  1.8       +6 -17     jakarta-ant/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/metamata/MMetricsStreamHandler.java
  
  Index: MMetricsStreamHandler.java
  ===================================================================
  RCS file: /home/cvs/jakarta-ant/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/metamata/MMetricsStreamHandler.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- MMetricsStreamHandler.java	23 Dec 2001 14:22:46 -0000	1.7
  +++ MMetricsStreamHandler.java	6 Jan 2002 02:29:20 -0000	1.8
  @@ -26,7 +26,7 @@
   import javax.xml.transform.sax.SAXTransformerFactory;
   import javax.xml.transform.sax.TransformerHandler;
   import javax.xml.transform.stream.StreamResult;
  -import org.apache.tools.ant.Task;
  +import org.apache.avalon.framework.logger.AbstractLogEnabled;
   import org.apache.tools.ant.taskdefs.exec.ExecuteStreamHandler;
   import org.xml.sax.Attributes;
   import org.xml.sax.SAXException;
  @@ -42,9 +42,10 @@
    *
    * @author <a href="mailto:sbailliez@imediation.com">Stephane Bailliez</a>
    */
  -public class MMetricsStreamHandler implements ExecuteStreamHandler
  +public class MMetricsStreamHandler
  +    extends AbstractLogEnabled
  +    implements ExecuteStreamHandler
   {
  -
       /**
        * CLASS construct, it should be named something like 'MyClass'
        */
  @@ -88,25 +89,13 @@
       protected InputStream metricsOutput;
   
       /**
  -     * the task
  -     */
  -    protected Task task;
  -
  -    /**
        * this is where the XML output will go, should mostly be a file the caller
        * is responsible for flushing and closing this stream
        */
       protected OutputStream xmlOutputStream;
   
  -    /**
  -     * initialize this handler
  -     *
  -     * @param task Description of Parameter
  -     * @param xmlOut Description of Parameter
  -     */
  -    MMetricsStreamHandler( Task task, OutputStream xmlOut )
  +    MMetricsStreamHandler( OutputStream xmlOut )
       {
  -        this.task = task;
           this.xmlOutputStream = xmlOut;
       }
   
  @@ -322,7 +311,7 @@
           {
               e.printStackTrace();
               // invalid lines are sent to the output as information, it might be anything,
  -            task.getLogger().info( line );
  +            getLogger().info( line );
           }
       }
   
  
  
  
  1.15      +70 -92    jakarta-ant/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/metamata/MParse.java
  
  Index: MParse.java
  ===================================================================
  RCS file: /home/cvs/jakarta-ant/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/metamata/MParse.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- MParse.java	30 Dec 2001 01:14:59 -0000	1.14
  +++ MParse.java	6 Jan 2002 02:29:20 -0000	1.15
  @@ -15,10 +15,7 @@
   import java.util.Random;
   import org.apache.myrmidon.api.TaskException;
   import org.apache.tools.ant.Task;
  -import org.apache.tools.ant.taskdefs.exec.Execute;
  -import org.apache.tools.ant.taskdefs.exec.ExecuteStreamHandler;
  -import org.apache.tools.ant.taskdefs.exec.LogOutputStream;
  -import org.apache.tools.ant.taskdefs.exec.LogStreamHandler;
  +import org.apache.tools.ant.taskdefs.exec.Execute2;
   import org.apache.tools.ant.types.Argument;
   import org.apache.tools.ant.types.CommandlineJava;
   import org.apache.tools.ant.types.Path;
  @@ -31,24 +28,24 @@
    *
    * @author <a href="mailto:sbailliez@imediation.com">Stephane Bailliez</a>
    */
  -public class MParse extends Task
  +public class MParse
  +    extends Task
   {
  -
  -    private Path classpath = null;
  -    private Path sourcepath = null;
  -    private File metahome = null;
  -    private File target = null;
  -    private boolean verbose = false;
  -    private boolean debugparser = false;
  -    private boolean debugscanner = false;
  -    private boolean cleanup = false;
  -    private CommandlineJava cmdl = new CommandlineJava();
  -    private File optionsFile = null;
  +    private Path m_classpath;
  +    private Path m_sourcepath;
  +    private File m_metahome;
  +    private File m_target;
  +    private boolean m_verbose;
  +    private boolean m_debugparser;
  +    private boolean m_debugscanner;
  +    private boolean m_cleanup;
  +    private CommandlineJava m_cmdl = new CommandlineJava();
  +    private File m_optionsFile;
   
       public MParse()
       {
  -        cmdl.setVm( "java" );
  -        cmdl.setClassname( "com.metamata.jj.MParse" );
  +        m_cmdl.setVm( "java" );
  +        m_cmdl.setClassname( "com.metamata.jj.MParse" );
       }
   
       /**
  @@ -71,7 +68,7 @@
        */
       public void setCleanup( boolean value )
       {
  -        cleanup = value;
  +        m_cleanup = value;
       }
   
       /**
  @@ -81,7 +78,7 @@
        */
       public void setDebugparser( boolean flag )
       {
  -        debugparser = flag;
  +        m_debugparser = flag;
       }
   
       /**
  @@ -91,7 +88,7 @@
        */
       public void setDebugscanner( boolean flag )
       {
  -        debugscanner = flag;
  +        m_debugscanner = flag;
       }
   
       /**
  @@ -111,7 +108,7 @@
        */
       public void setMetamatahome( File metamatahome )
       {
  -        this.metahome = metamatahome;
  +        this.m_metahome = metamatahome;
       }
   
       /**
  @@ -121,7 +118,7 @@
        */
       public void setTarget( File target )
       {
  -        this.target = target;
  +        this.m_target = target;
       }
   
       /**
  @@ -131,7 +128,7 @@
        */
       public void setVerbose( boolean flag )
       {
  -        verbose = flag;
  +        m_verbose = flag;
       }
   
       /**
  @@ -141,11 +138,11 @@
        */
       public Path createClasspath()
       {
  -        if( classpath == null )
  +        if( m_classpath == null )
           {
  -            classpath = new Path();
  +            m_classpath = new Path();
           }
  -        return classpath;
  +        return m_classpath;
       }
   
       /**
  @@ -155,7 +152,7 @@
        */
       public Argument createJvmarg()
       {
  -        return cmdl.createVmArgument();
  +        return m_cmdl.createVmArgument();
       }
   
       /**
  @@ -165,11 +162,11 @@
        */
       public Path createSourcepath()
       {
  -        if( sourcepath == null )
  +        if( m_sourcepath == null )
           {
  -            sourcepath = new Path();
  +            m_sourcepath = new Path();
           }
  -        return sourcepath;
  +        return m_sourcepath;
       }
   
       /**
  @@ -183,8 +180,7 @@
           try
           {
               setUp();
  -            ExecuteStreamHandler handler = createStreamHandler();
  -            _execute( handler );
  +            doExecute();
           }
           finally
           {
  @@ -204,22 +200,22 @@
   
           // set the classpath as the jar files
           File[] jars = getMetamataLibs();
  -        final Path classPath = cmdl.createClasspath( getProject() );
  +        final Path classPath = m_cmdl.createClasspath();
           for( int i = 0; i < jars.length; i++ )
           {
               classPath.createPathElement().setLocation( jars[ i ] );
           }
   
           // set the metamata.home property
  -        final Argument vmArgs = cmdl.createVmArgument();
  -        vmArgs.setValue( "-Dmetamata.home=" + metahome.getAbsolutePath() );
  +        final Argument vmArgs = m_cmdl.createVmArgument();
  +        vmArgs.setValue( "-Dmetamata.home=" + m_metahome.getAbsolutePath() );
   
           // write all the options to a temp file and use it ro run the process
           String[] options = getOptions();
  -        optionsFile = createTmpFile();
  -        generateOptionsFile( optionsFile, options );
  -        Argument args = cmdl.createArgument();
  -        args.setLine( "-arguments " + optionsFile.getAbsolutePath() );
  +        m_optionsFile = createTmpFile();
  +        generateOptionsFile( m_optionsFile, options );
  +        Argument args = m_cmdl.createArgument();
  +        args.setLine( "-arguments " + m_optionsFile.getAbsolutePath() );
       }
   
       /**
  @@ -231,13 +227,11 @@
        */
       protected File[] getMetamataLibs()
       {
  -        ArrayList files = new ArrayList();
  -        files.add( new File( metahome, "lib/metamata.jar" ) );
  -        files.add( new File( metahome, "bin/lib/JavaCC.zip" ) );
  -
  -        File[] array = new File[ files.size() ];
  -        files.copyInto( array );
  -        return array;
  +        final ArrayList files = new ArrayList();
  +        files.add( new File( m_metahome, "lib/metamata.jar" ) );
  +        files.add( new File( m_metahome, "bin/lib/JavaCC.zip" ) );
  +
  +        return (File[])files.toArray( new File[ files.size() ] );
       }
   
       /**
  @@ -248,62 +242,58 @@
       protected String[] getOptions()
       {
           ArrayList options = new ArrayList();
  -        if( verbose )
  +        if( m_verbose )
           {
               options.add( "-verbose" );
           }
  -        if( debugscanner )
  +        if( m_debugscanner )
           {
               options.add( "-ds" );
           }
  -        if( debugparser )
  +        if( m_debugparser )
           {
               options.add( "-dp" );
           }
  -        if( classpath != null )
  +        if( m_classpath != null )
           {
               options.add( "-classpath" );
  -            options.add( classpath.toString() );
  +            options.add( m_classpath.toString() );
           }
  -        if( sourcepath != null )
  +        if( m_sourcepath != null )
           {
               options.add( "-sourcepath" );
  -            options.add( sourcepath.toString() );
  +            options.add( m_sourcepath.toString() );
           }
  -        options.add( target.getAbsolutePath() );
  +        options.add( m_target.getAbsolutePath() );
   
  -        String[] array = new String[ options.size() ];
  -        options.copyInto( array );
  -        return array;
  +        return (String[])options.toArray( new String[ options.size() ] );
       }
   
       /**
        * execute the process with a specific handler
  -     *
  -     * @param handler Description of Parameter
  -     * @exception TaskException Description of Exception
        */
  -    protected void _execute( ExecuteStreamHandler handler )
  +    protected void doExecute()
           throws TaskException
       {
           // target has been checked as a .jj, see if there is a matching
           // java file and if it is needed to run to process the grammar
  -        String pathname = target.getAbsolutePath();
  +        String pathname = m_target.getAbsolutePath();
           int pos = pathname.length() - ".jj".length();
           pathname = pathname.substring( 0, pos ) + ".java";
           File javaFile = new File( pathname );
  -        if( javaFile.exists() && target.lastModified() < javaFile.lastModified() )
  +        if( javaFile.exists() && m_target.lastModified() < javaFile.lastModified() )
           {
  -            getLogger().info( "Target is already build - skipping (" + target + ")" );
  +            getLogger().info( "Target is already build - skipping (" + m_target + ")" );
               return;
           }
   
  -        final Execute process = new Execute( handler );
  -        getLogger().debug( cmdl.toString() );
  -        process.setCommandline( cmdl.getCommandline() );
  +        final Execute2 exe = new Execute2();
  +        setupLogger( exe );
  +        getLogger().debug( m_cmdl.toString() );
  +        exe.setCommandline( m_cmdl.getCommandline() );
           try
           {
  -            if( process.execute() != 0 )
  +            if( exe.execute() != 0 )
               {
                   throw new TaskException( "Metamata task failed." );
               }
  @@ -323,11 +313,11 @@
           throws TaskException
       {
           // check that the home is ok.
  -        if( metahome == null || !metahome.exists() )
  +        if( m_metahome == null || !m_metahome.exists() )
           {
               throw new TaskException( "'metamatahome' must point to Metamata home directory." );
           }
  -        metahome = resolveFile( metahome.getPath() );
  +        m_metahome = resolveFile( m_metahome.getPath() );
   
           // check that the needed jar exists.
           File[] jars = getMetamataLibs();
  @@ -340,11 +330,11 @@
           }
   
           // check that the target is ok and resolve it.
  -        if( target == null || !target.isFile() || !target.getName().endsWith( ".jj" ) )
  +        if( m_target == null || !m_target.isFile() || !m_target.getName().endsWith( ".jj" ) )
           {
  -            throw new TaskException( "Invalid target: " + target );
  +            throw new TaskException( "Invalid target: " + m_target );
           }
  -        target = resolveFile( target.getPath() );
  +        m_target = resolveFile( m_target.getPath() );
       }
   
       /**
  @@ -352,35 +342,23 @@
        */
       protected void cleanUp()
       {
  -        if( optionsFile != null )
  +        if( m_optionsFile != null )
           {
  -            optionsFile.delete();
  -            optionsFile = null;
  +            m_optionsFile.delete();
  +            m_optionsFile = null;
           }
  -        if( cleanup )
  +        if( m_cleanup )
           {
  -            String name = target.getName();
  +            String name = m_target.getName();
               int pos = name.length() - ".jj".length();
               name = "__jj" + name.substring( 0, pos ) + ".sunjj";
  -            final File sunjj = new File( target.getParent(), name );
  +            final File sunjj = new File( m_target.getParent(), name );
               if( sunjj.exists() )
               {
                   getLogger().info( "Removing stale file: " + sunjj.getName() );
                   sunjj.delete();
               }
           }
  -    }
  -
  -    /**
  -     * return the default stream handler for this task
  -     *
  -     * @return Description of the Returned Value
  -     */
  -    protected ExecuteStreamHandler createStreamHandler()
  -    {
  -        final LogOutputStream output = new LogOutputStream( getLogger(), false );
  -        final LogOutputStream error = new LogOutputStream( getLogger(), false );
  -        return new LogStreamHandler( output, error );
       }
   
       /**
  
  
  
  1.1                  jakarta-ant/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/metamata/Violation.java
  
  Index: Violation.java
  ===================================================================
  /*
   * 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.metamata;
  
  /**
   * the class used to report violation information
   */
  final class Violation
  {
      private final String m_error;
      private final int m_line;
  
      public Violation( final String error, final int line )
      {
          m_error = error;
          m_line = line;
      }
  
      protected String getError()
      {
          return m_error;
      }
  
      protected int getLine()
      {
          return m_line;
      }
  }
  
  
  

--
To unsubscribe, e-mail:   <mailto:ant-dev-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:ant-dev-help@jakarta.apache.org>


Mime
View raw message