| /* 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 |
| // ---------------------------------------------------------------------------- |