blob: 30c9f3d2fa121a9d9c0ecfc8dee74d6a3dff88d5 [file] [log] [blame]
/* Copyright (C) 2003 Vladimir Roubtsov. All rights reserved.
*
* This program and the accompanying materials are made available under
* the terms of the Common Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/cpl-v10.html
*
* $Id: instrTask.java,v 1.1.1.1.2.1 2004/07/08 10:52:12 vlad_r Exp $
*/
package com.vladium.emma.instr;
import java.io.File;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.types.EnumeratedAttribute;
import org.apache.tools.ant.types.Path;
import org.apache.tools.ant.types.Reference;
import com.vladium.util.asserts.$assert;
import com.vladium.emma.ant.FilterTask;
import com.vladium.emma.ant.SuppressableTask;
// ----------------------------------------------------------------------------
/**
* @author Vlad Roubtsov, (C) 2003
*/
public
final class instrTask extends FilterTask
{
// public: ................................................................
public static final class ModeAttribute extends EnumeratedAttribute
{
public String [] getValues ()
{
return VALUES;
}
private static final String [] VALUES = new String [] {"copy", "overwrite", "fullcopy"};
} // end of nested class
public instrTask (final SuppressableTask parent)
{
super (parent);
m_outMode = InstrProcessor.OutMode.OUT_MODE_COPY; // default
}
public void execute () throws BuildException
{
if (isEnabled ())
{
if (m_instrpath == null)
throw (BuildException) newBuildException (getTaskName ()
+ ": instrumentation path must be specified", location).fillInStackTrace ();
if ((m_outMode != InstrProcessor.OutMode.OUT_MODE_OVERWRITE) && (m_outDir == null))
throw (BuildException) newBuildException (getTaskName ()
+ ": output directory must be specified for '" + m_outMode + "' output mode", location).fillInStackTrace ();
InstrProcessor processor = InstrProcessor.create ();
$assert.ASSERT (m_instrpath != null, "m_instrpath not set");
processor.setInstrPath (m_instrpath.list (), true); // TODO: an option to set 'canonical'?
// processor.setDependsMode ()
processor.setInclExclFilter (getFilterSpecs ());
$assert.ASSERT (m_outMode != null, "m_outMode not set");
processor.setOutMode (m_outMode);
processor.setInstrOutDir (m_outDir != null ? m_outDir.getAbsolutePath () : null);
processor.setMetaOutFile (m_outFile != null ? m_outFile.getAbsolutePath () : null);
processor.setMetaOutMerge (m_outFileMerge);
processor.setPropertyOverrides (getTaskSettings ());
processor.run ();
}
}
// instrpath attribute/element:
public void setInstrpath (final Path path)
{
if (m_instrpath == null)
m_instrpath = path;
else
m_instrpath.append (path);
}
public void setInstrpathRef (final Reference ref)
{
createInstrpath ().setRefid (ref);
}
public Path createInstrpath ()
{
if (m_instrpath == null)
m_instrpath = new Path (project);
return m_instrpath.createPath ();
}
// outdir|destdir attribute:
public void setOutdir (final File dir)
{
if (m_outDir != null)
throw (BuildException) newBuildException (getTaskName ()
+ ": outdir|destdir attribute already set", location).fillInStackTrace ();
m_outDir = dir;
}
public void setDestdir (final File dir)
{
if (m_outDir != null)
throw (BuildException) newBuildException (getTaskName ()
+ ": outdir|destdir attribute already set", location).fillInStackTrace ();
m_outDir = dir;
}
// metadatafile|outfile attribute:
public void setMetadatafile (final File file)
{
if (m_outFile != null)
throw (BuildException) newBuildException (getTaskName ()
+ ": metadata file attribute already set", location).fillInStackTrace ();
m_outFile = file;
}
public void setOutfile (final File file)
{
if (m_outFile != null)
throw (BuildException) newBuildException (getTaskName ()
+ ": metadata file attribute already set", location).fillInStackTrace ();
m_outFile = file;
}
// merge attribute:
public void setMerge (final boolean merge)
{
m_outFileMerge = merge ? Boolean.TRUE : Boolean.FALSE;
}
// mode attribute:
public void setMode (final ModeAttribute mode)
{
final InstrProcessor.OutMode outMode = InstrProcessor.OutMode.nameToMode (mode.getValue ());
if (outMode == null)
throw (BuildException) newBuildException (getTaskName ()
+ ": invalid output mode: " + mode.getValue (), location).fillInStackTrace ();
m_outMode = outMode;
}
// protected: .............................................................
// package: ...............................................................
// private: ...............................................................
private Path m_instrpath;
private InstrProcessor.OutMode m_outMode;
private File m_outDir;
private File m_outFile;
private Boolean m_outFileMerge;
} // end of class
// ----------------------------------------------------------------------------