<?xml version="1.0" encoding="UTF-8"?>
<classpath>
- <classpathentry kind="src" path="src"/>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
<classpathentry kind="output" path="bin"/>
</classpath>
Bundle-ManifestVersion: 2
Bundle-Name: Gcov プラグイン
Bundle-SymbolicName: org.ginkgo.gcov; singleton:=true
-Bundle-Version: 0.2.0
-Bundle-Activator: org.ginkgo.gcov.Activator
+Bundle-Version: 0.2.2
+Bundle-Activator: org.ginkgo.gcov.GcovPlugin
Require-Bundle: org.eclipse.ui,
org.eclipse.core.runtime,
org.eclipse.core.resources,
org.eclipse.cdt.ui,
org.eclipse.cdt.core
Eclipse-LazyStart: true
-Export-Package: org.ginkgo.gcov.builder
+Export-Package: org.ginkgo.gcov,
+ org.ginkgo.gcov.builder;
+ uses:="org.eclipse.core.runtime,
+ org.eclipse.core.resources,
+ org.ginkgo.gcov.model,
+ org.ginkgo.gcov.parser",
+ org.ginkgo.gcov.model,
+ org.ginkgo.gcov.navigator;uses:="org.eclipse.ui.navigator,org.eclipse.jface.viewers,org.eclipse.swt.widgets"
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
<builder
hasNature="true">
<run
- class="org.ginkgo.gcov.builder.MarkerBuilder">
+ class="org.ginkgo.gcov.builder.LineCoverageBuilder">
</run>
</builder>
</extension>
<builder
hasNature="true">
<run
- class="org.ginkgo.gcov.builder.SampleBuilder">
+ class="org.ginkgo.gcov.builder.CoverageSummaryBuilder">
</run>
</builder>
</extension>
class="org.ginkgo.gcov.builder.CoverageLister">
</provider>
</extension>
+ <extension
+ point="org.eclipse.ui.popupMenus">
+ <objectContribution
+ id="org.ginkgo.gcov.contribution1"
+ objectClass="org.eclipse.core.resources.IProject">
+ <menu
+ id="org.ginkgo.gcov.menu1"
+ label="C/C++ Coverage"
+ path="additions">
+ <separator
+ name="group1">
+ </separator>
+ </menu>
+ <action
+ class="org.ginkgo.gcov.popup.actions.Action"
+ enablesFor="1"
+ id="org.ginkgo.gcov.newAction"
+ label="output coverage as html"
+ menubarPath="org.ginkgo.gcov.menu1/group1">
+ </action>
+ <visibility>
+ <or>
+ <objectState
+ name="projectNature"
+ value="org.eclipse.cdt.managedbuilder.core.managedBuildNature">
+ </objectState>
+ <objectState
+ name="projectNature"
+ value="org.eclipse.cdt.make.core.makeNature">
+ </objectState>
+ </or>
+ </visibility>
+ </objectContribution>
+ </extension>
</plugin>
package org.ginkgo.gcov;
+import java.util.ArrayList;
+
+import org.eclipse.core.runtime.Preferences.IPropertyChangeListener;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;
/**
* The activator class controls the plug-in life cycle
*/
-public class Activator extends AbstractUIPlugin {
+public class GcovPlugin extends AbstractUIPlugin {
// The plug-in ID
public static final String PLUGIN_ID = "org.ginkgo.gcov";
// The shared instance
- private static Activator plugin;
-
+ private static GcovPlugin plugin;
+ private ArrayList myListeners;
/**
* The constructor
*/
- public Activator() {
+ public GcovPlugin() {
+ myListeners=new ArrayList();
}
/*
*
* @return the shared instance
*/
- public static Activator getDefault() {
+ public static GcovPlugin getDefault() {
return plugin;
}
public static ImageDescriptor getImageDescriptor(String path) {
return imageDescriptorFromPlugin(PLUGIN_ID, path);
}
+ // A public method that allows listener registration
+ public void addPropertyChangeListener(IPropertyChangeListener listener) {
+ if(!myListeners.contains(listener))
+ myListeners.add(listener);
+ }
+
+ // A public method that allows listener registration
+ public void removePropertyChangeListener(IPropertyChangeListener listener) {
+ myListeners.remove(listener);
+ }
+ public ArrayList getMyListeners() {
+ return myListeners;
+ }
}
import org.eclipse.core.resources.IncrementalProjectBuilder;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
+import org.ginkgo.gcov.parser.LineCoverageParser;
+import org.ginkgo.gcov.parser.IParser;
import org.xml.sax.SAXException;
-import sun.misc.Regexp;
-
public abstract class Builder extends IncrementalProjectBuilder {
class SampleResourceVisitor implements IResourceVisitor {
public boolean visit(IResource resource) {
if (resource instanceof IFile ) {
String name = resource.getName();
- if(name.endsWith(".c")){
+ if(name.endsWith(".c")||name.endsWith(".cpp")){
// IFile file = (IFile) resource;
deleteMarkers((IFile) resource);
}else if(name.endsWith(".gcda")||name.endsWith(".gcno")||name.endsWith(".gcov")){
try {
- resource.delete(true, null);
+ resource.delete(IResource.FORCE, null);
+// resource.delete(true, null);
} catch (CoreException e) {
// TODO \8e©\93®\90¶\90¬\82³\82ê\82½ catch \83u\83\8d\83b\83N
e.printStackTrace();
if (resource instanceof IFile) {
IFile file = (IFile) resource;
String name = file.getName();
- if(name.endsWith(".c")){
+ if(name.endsWith(".c")||name.endsWith(".cpp")){
// deleteMarkers(file);
String body = name.replaceFirst("\\.c$", "");
IProject project = file.getProject();
}
private void deleteMarkers(IFile file) {
try {
- file.deleteMarkers(CoverageParser.COVER_MARKER_TYPE, true, IResource.DEPTH_ZERO);
- file.deleteMarkers(CoverageParser.UNCOVER_MARKER_TYPE, true, IResource.DEPTH_ZERO);
+ file.deleteMarkers(LineCoverageParser.COVER_MARKER_TYPE, true, IResource.DEPTH_ZERO);
+ file.deleteMarkers(LineCoverageParser.UNCOVER_MARKER_TYPE, true, IResource.DEPTH_ZERO);
} catch (CoreException e) {
// TODO \8e©\93®\90¶\90¬\82³\82ê\82½ catch \83u\83\8d\83b\83N
e.printStackTrace();
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.QualifiedName;
+import org.ginkgo.gcov.model.CoverageData;
public class CoverageLister implements ICoverageListener {
/* (\94ñ Javadoc)
+ * coverageSummaryListener
* @see org.ginkgo.gcov.builder.ICoverageListener#addData(org.eclipse.core.resources.IProject, org.ginkgo.gcov.builder.CoverageData)
*/
- public void addData(IProject project, CoverageData cov)
+ public void addCoverageData(IProject project, CoverageData cov)
throws CoreException {
- if(cov.elementType.equals("File")){
- project.setPersistentProperty(new QualifiedName(cov.elementName,"persent"), cov.persent);//(elementName + "persent", persent);
- project.setPersistentProperty(new QualifiedName(cov.elementName,"totalLine"), cov.totalLine);
- }else if(cov.elementType.equals("Function")){
- project.setPersistentProperty(new QualifiedName(cov.elementName,"persent"), cov.persent);//(elementName + "persent", persent);
- project.setPersistentProperty(new QualifiedName(cov.elementName,"totalLine"), cov.totalLine);
+ if(cov.getElementType().equals("File")){
+ project.setPersistentProperty(new QualifiedName(cov.getElementName(),"persent"), cov.getPersent());//(elementName + "persent", persent);
+ project.setPersistentProperty(new QualifiedName(cov.getElementName(),"totalLine"), cov.getTotalLine());
+ }else if(cov.getElementType().equals("Function")){
+ project.setPersistentProperty(new QualifiedName(cov.getElementName(),"persent"), cov.getPersent());//(elementName + "persent", persent);
+ project.setPersistentProperty(new QualifiedName(cov.getElementName(),"totalLine"), cov.getTotalLine());
}
}
}
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IProjectNature;
import org.eclipse.core.resources.IResource;
+import org.ginkgo.gcov.parser.IParser;
+import org.ginkgo.gcov.parser.LineCoverageParser;
+import org.ginkgo.gcov.parser.CoverageSummaryParser;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import org.xml.sax.helpers.DefaultHandler;
-public class SampleBuilder extends Builder{
+public class CoverageSummaryBuilder extends Builder{
private IParser gcovParser;
public static final String BUILDER_ID = "org.ginkgo.gcov.sampleBuilder";
public void checkXML(IResource resource) {
if (resource instanceof IFile && resource.getName().endsWith(".gcda")) {
IFile file = (IFile) resource;
- CoverageParser.deleteMarkers(file);
+ LineCoverageParser.deleteMarkers(file);
// XMLErrorHandler reporter = new XMLErrorHandler(file);
try {
getParser().parse(file);
IParser getParser() throws ParserConfigurationException,
SAXException {
if (gcovParser == null){
- gcovParser = new GcovParser();
+ gcovParser = new CoverageSummaryParser();
}
return gcovParser;
}
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
+import org.ginkgo.gcov.model.CoverageData;
public interface ICoverageListener {
- public abstract void addData(IProject project, CoverageData cov)
+ public abstract void addCoverageData(IProject project, CoverageData cov)
throws CoreException;
}
\ No newline at end of file
import org.eclipse.core.resources.IncrementalProjectBuilder;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
+import org.ginkgo.gcov.parser.IParser;
+import org.ginkgo.gcov.parser.LineCoverageParser;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import org.xml.sax.helpers.DefaultHandler;
-public class MarkerBuilder extends Builder {
-
+public class LineCoverageBuilder extends Builder {
+ private IParser gcovParser;
public static final String BUILDER_ID = "org.ginkgo.gcov.markerBuilder";
- private CoverageParser gcovParser;
-
public void checkXML(IResource resource) {
if (resource instanceof IFile && resource.getName().endsWith(".gcov")) {
IFile file = (IFile) resource;
- CoverageParser.deleteMarkers(file);
+ LineCoverageParser.deleteMarkers(file);
// XMLErrorHandler reporter = new XMLErrorHandler(file);
try {
getParser().parse(file);
}
}
}
- CoverageParser getParser() throws ParserConfigurationException,
+ IParser getParser() throws ParserConfigurationException,
SAXException {
if (gcovParser == null){
- gcovParser = new CoverageParser();
+ gcovParser = new LineCoverageParser();
}
return gcovParser;
}
* @see org.eclipse.core.resources.IProjectNature#configure()
*/
public void configure() throws CoreException {
- configureBuilder(SampleBuilder.BUILDER_ID);
- configureBuilder(MarkerBuilder.BUILDER_ID);
+ configureBuilder(CoverageSummaryBuilder.BUILDER_ID);
+ configureBuilder(LineCoverageBuilder.BUILDER_ID);
}
private void configureBuilder(String builderID) throws CoreException {
IProjectDescription desc = project.getDescription();
IProjectDescription description = getProject().getDescription();
ICommand[] commands = description.getBuildSpec();
- deconfigureBuilder(commands,description,SampleBuilder.BUILDER_ID);
+ deconfigureBuilder(commands,description,CoverageSummaryBuilder.BUILDER_ID);
commands = description.getBuildSpec();
- deconfigureBuilder(commands,description,MarkerBuilder.BUILDER_ID);
+ deconfigureBuilder(commands,description,LineCoverageBuilder.BUILDER_ID);
}
-package org.ginkgo.gcov.builder;
+package org.ginkgo.gcov.model;
+
+import java.sql.Timestamp;
public class CoverageData {
String elementType = null;
String elementName = null;
String persent = null;
String totalLine = null;
+ Timestamp timeStamp = null;
public String getElementType() {
return elementType;
}
public String getTotalLine() {
return totalLine;
}
+ public void setElementType(String elementType) {
+ this.elementType = elementType;
+ }
+ public void setElementName(String elementName) {
+ this.elementName = elementName;
+ }
+ public void setPersent(String persent) {
+ this.persent = persent;
+ }
+ public void setTotalLine(String totalLine) {
+ this.totalLine = totalLine;
+ }
+ public Timestamp getTimeStamp() {
+ return timeStamp;
+ }
+ public void setTimeStamp(Timestamp timeStamp) {
+ this.timeStamp = timeStamp;
+ }
+ public String toString(){
+ return this.getTimeStamp().toString();// + " " + this.getPersent();
+ }
}
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.OwnerDrawLabelProvider;
+import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.TreeViewerColumn;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
public class CoverageLabelProvider extends OwnerDrawLabelProvider {
private TreeViewerColumn column;
- private CommonViewer viewer;
+ private TreeViewer viewer;
- public CoverageLabelProvider(TreeViewerColumn column2, CommonViewer commonViewer) {
+ public CoverageLabelProvider(TreeViewerColumn column2, TreeViewer commonViewer) {
column = column2;
viewer = commonViewer;
}
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.QualifiedName;
+import org.eclipse.jface.layout.TreeColumnLayout;
import org.eclipse.jface.viewers.ColumnLabelProvider;
+import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.OwnerDrawLabelProvider;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.TreeViewerColumn;
public void createPartControl(Composite parent) {
super.createPartControl(parent);
CommonViewer aViewer = getCommonViewer();
- createColumn(aViewer);
+ TreeColumnLayout ad = new TreeColumnLayout();
+ parent.setLayout(ad);
+ createColumn(aViewer,ad);
+// createColumn(aViewer);
}
- private CommonViewer createColumn(CommonViewer aViewer) {
+// private CommonViewer createColumn(CommonViewer aViewer) {
+// TreeColumn column =new TreeColumn(aViewer.getTree(),SWT.NONE);
+// TreeColumn b = column;
+// b.setWidth(200);
+// b.setText("Column 1");
+//
+// final TreeViewerColumn column2 = new TreeViewerColumn(aViewer,SWT.NONE);
+// column2.getColumn().setWidth(200);
+// column2.getColumn().setText("Column 2");
+//
+// column2.setLabelProvider(new CoverageLabelProvider(column2,aViewer));
+//
+// aViewer.getTree().setHeaderVisible(true);
+// OwnerDrawLabelProvider.setUpOwnerDraw(getCommonViewer());
+// return aViewer;
+// }
+ /*copy from coverage history SampleView*/
+ private TreeViewer createColumn(TreeViewer aViewer, TreeColumnLayout ad) {
+
TreeColumn column =new TreeColumn(aViewer.getTree(),SWT.NONE);
- TreeColumn b = column;
- b.setWidth(200);
- b.setText("Column 1");
+ column.setWidth(200);
+ column.setText("Column 1");
+ ad.setColumnData(column, new ColumnWeightData(50, 100));
- final TreeViewerColumn column2 = new TreeViewerColumn(aViewer,SWT.NONE);
- column2.getColumn().setWidth(200);
- column2.getColumn().setText("Column 2");
+ TreeViewerColumn viewerColumn2 = new TreeViewerColumn(aViewer,SWT.NONE);
+ viewerColumn2.setLabelProvider(new CoverageLabelProvider(viewerColumn2,aViewer));
- column2.setLabelProvider(new CoverageLabelProvider(column2,getCommonViewer()));
+ TreeColumn column2 = viewerColumn2.getColumn();
+ column2.setWidth(200);
+ column2.setText("Column 2");
+ ad.setColumnData(column2,new ColumnWeightData(50, 100));
aViewer.getTree().setHeaderVisible(true);
- OwnerDrawLabelProvider.setUpOwnerDraw(getCommonViewer());
+ OwnerDrawLabelProvider.setUpOwnerDraw(aViewer);
return aViewer;
}
-
public Navigator() {
// TODO \8e©\93®\90¶\90¬\82³\82ê\82½\83R\83\93\83X\83g\83\89\83N\83^\81[\81E\83X\83^\83u
}
-package org.ginkgo.gcov.builder;
+package org.ginkgo.gcov.parser;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.StringReader;
+import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.ui.console.MessageConsoleStream;
import org.eclipse.ui.internal.Workbench;
import org.eclipse.ui.texteditor.MarkerUtilities;
-import org.ginkgo.gcov.Activator;
+//import org.ginkgo.gcov.Activator;
+import org.ginkgo.gcov.GcovPlugin;
+import org.ginkgo.gcov.builder.ICoverageListener;
+import org.ginkgo.gcov.model.CoverageData;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import org.xml.sax.helpers.DefaultHandler;
-public class GcovParser implements IParser {
+public class CoverageSummaryParser implements IParser {
private Pattern funcPattern;
private Pattern filePattern;
private String consoleName = "gcov console";
ArrayList<ICoverageListener> listeners = null;
- public GcovParser() {
+ public CoverageSummaryParser() {
funcPattern = Pattern.compile("Function `(.+)'");
filePattern = Pattern.compile("File `(.+)'");
coveragePattern = Pattern.compile("Lines executed:(.+)% of (.+)$");
String outputText = process.getStreamsProxy().getOutputStreamMonitor().getContents();
printOutput(console, outputText);
- parseString(outputText,file.getProject());
+ parseString(outputText,file.getProject(),file.getLocalTimeStamp());
}
private void printOutput(MessageConsole console, String outputText) {
commandStream.print(">");
commandStream.println(cmd);
}
- private void parseString(String outputText, IProject project) {
+ private void parseString(String outputText, IProject project, long timeStamp) {
BufferedReader in = new BufferedReader(new StringReader(outputText));
String line = null;
CoverageData cov = new CoverageData();
+ cov.setTimeStamp(new Timestamp(timeStamp));
try {
while((line = in.readLine())!=null){
Matcher matcher = funcPattern.matcher(line);
if(matcher.find()){
- cov.elementType = "Function";
- cov.elementName = matcher.group(1);
+ cov.setElementType("Function");
+ cov.setElementName(matcher.group(1));
continue;
}
matcher = filePattern.matcher(line);
if(matcher.find()){
- cov.elementType = "File";
- String[] ps = matcher.group(1).split("\\\\");
- cov.elementName = ps[ps.length-1];
+ cov.setElementType("File");
+ String[] ps = matcher.group(1).split("/");
+ String a = ps[ps.length-1];
+ cov.setElementName(ps[ps.length-1]);
continue;
}
matcher = coveragePattern.matcher(line);
if(matcher.find()){
- cov.persent = matcher.group(1);
- cov.totalLine = matcher.group(2);
+ cov.setPersent(matcher.group(1));
+ cov.setTotalLine(matcher.group(2));
continue;
}
if(line.equals("")){
ArrayList<ICoverageListener> a;
a = getListeners();
for(int i=0;i<a.size();i++){
- a.get(i).addData(project, cov);
+ a.get(i).addCoverageData(project, cov);
}
}
// System.out.println("print fin");
// \8ag\92£\83|\83C\83\93\83g\82ð\8eæ\93¾
IExtensionPoint point = registry.getExtensionPoint(
- Activator.getDefault().getBundle().getSymbolicName() + ".listeners");
+ GcovPlugin.getDefault().getBundle().getSymbolicName() + ".listeners");
// \83R\83\93\83g\83\8a\83r\83\85\81[\83g\82³\82ê\82½\8ag\92£\82ð\8eæ\93¾
IExtension[] extensions = point.getExtensions();
-package org.ginkgo.gcov.builder;
+package org.ginkgo.gcov.parser;
import org.eclipse.core.resources.IFile;
-package org.ginkgo.gcov.builder;
+package org.ginkgo.gcov.parser;
import java.io.BufferedReader;
import java.io.File;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceVisitor;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.QualifiedName;
import org.eclipse.ui.texteditor.MarkerUtilities;
import org.xml.sax.helpers.DefaultHandler;
-public class CoverageParser implements IParser {
-
+public class LineCoverageParser implements IParser {
+
public static final String UNCOVER_MARKER_TYPE = "org.ginkgo.gcov.lineUnCoverMarker";
public static final String COVER_MARKER_TYPE = "org.ginkgo.gcov.lineCoverMarker";
public static final String COVERAGE_MARKER_TYPE = "org.ginkgo.gcov.CoverageMarker";
private String consoleName = "onsole";
+ private IFile sourceFile = null;
+
+ private class MyResourceVisitor implements IResourceVisitor{
+ private String sourceFileName;
+
+ private MyResourceVisitor(String FileName){
+ sourceFileName = FileName;
+ }
+ public boolean visit(IResource resource) throws CoreException {
+ if(resource.getName().equals(sourceFileName)){
+ sourceFile = (IFile)resource;
+// System.out.println(sourceFile);
+ return false;
+ }else{
+// System.out.println(resource);
+ return true;
+ }
+ }
+
+ }
private MessageConsole getConsole() {
IConsoleManager manager = ConsolePlugin.getDefault().getConsoleManager();
IConsole[] consoles = manager.getConsoles();
String lineNum = null;
String execCount = null;
String line = null;
-
+ sourceFile = null;
// MessageConsole console = getConsole();
// MessageConsoleStream commandStream = console.newMessageStream();
// commandStream.setActivateOnWrite(true);
IProject project = file.getProject();
- IFile sourceFile = (IFile) project.findMember(file.getName().replaceAll("\\.gcov", "")); //;
+ String sourceFileName = file.getName().replaceAll("\\.gcov", "");
+ try {
+ project.accept(new MyResourceVisitor(sourceFileName));
+ } catch (CoreException e1) {
+ // TODO \8e©\93®\90¶\90¬\82³\82ê\82½ catch \83u\83\8d\83b\83N
+ e1.printStackTrace();
+ }
+// sourceFile = (IFile) project.findMember(); //;
// try {
// sourceFile.refreshLocal(IResource.DEPTH_ZERO,null);
// } catch (CoreException e1) {
-// // TODO 自動生成された catch ブロック
+// // TODO
// e1.printStackTrace();
// }
+ System.out.println(sourceFile);
+ if(sourceFile==null){
+ System.out.println("null!!");
+ return;
+ }
deleteMarkers(sourceFile);
try {
BufferedReader in = new BufferedReader(new InputStreamReader(file.getContents()));
}
// System.out.println("marker fin");
} catch (NumberFormatException e) {
- // TODO �����������ꂽ catch �u���b�N
+ // TODO
e.printStackTrace();
} catch (IOException e) {
- // TODO �����������ꂽ catch �u���b�N
+ // TODO
e.printStackTrace();
}
catch (CoreException e) {
- // TODO �����������ꂽ catch �u���b�N
+ // TODO
e.printStackTrace();
}
}
- static void deleteMarkers(IFile file) {
+
+ public static void deleteMarkers(IFile file) {
try {
file.deleteMarkers(COVER_MARKER_TYPE, true, IResource.DEPTH_ZERO);
file.deleteMarkers(UNCOVER_MARKER_TYPE, true, IResource.DEPTH_ZERO);
--- /dev/null
+package org.ginkgo.gcov.popup.actions;
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.cdt.core.model.ICProject;
+import org.eclipse.cdt.internal.core.model.CProject;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.debug.core.DebugPlugin;
+import org.eclipse.debug.core.ILaunchManager;
+import org.eclipse.debug.core.Launch;
+import org.eclipse.debug.core.model.IProcess;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IObjectActionDelegate;
+import org.eclipse.ui.IWorkbenchPart;
+
+public class Action implements IObjectActionDelegate {
+
+ private Shell shell;
+ private IProject project;
+ /**
+ * Constructor for Action1.
+ */
+ public Action() {
+ super();
+ }
+
+ /**
+ * @see IObjectActionDelegate#setActivePart(IAction, IWorkbenchPart)
+ */
+ public void setActivePart(IAction action, IWorkbenchPart targetPart) {
+ shell = targetPart.getSite().getShell();
+ }
+
+ /**
+ * @see IActionDelegate#run(IAction)
+ */
+ public void run(IAction action) {
+ parse(null);
+ parse2(null);
+ }
+
+ /**
+ * @see IActionDelegate#selectionChanged(IAction, ISelection)
+ */
+ public void selectionChanged(IAction action, ISelection selection) {
+ if(selection == null){
+ return;
+ }
+ IStructuredSelection ss = (IStructuredSelection)selection;
+ Object o = ss.getFirstElement();
+ if (o instanceof IProject) {
+ project = (IProject) o;
+ }else if(o instanceof ICProject){
+ project = (IProject)((ICProject)o).getAdapter(IProject.class);
+ }
+ }
+ /* copy from CoverageSummaryParser */
+ public void parse(IFile file1) {
+
+// String[] cmdLine = {"pwd"};
+ /*********/
+ String[] cmdLine = {"lcov","-c","-d",".","-o","app.info"};
+ IPath workingDirectory = project.getLocation();
+ /*********/
+ File workingDir = null;
+ if(workingDirectory != null){
+ workingDir = workingDirectory.toFile();
+ }
+ String[] envp = null;
+// String[] envp = DebugPlugin.getDefault().getLaunchManager().getEnvironment(configuration);
+
+ Process p = null;
+ try {
+ p = DebugPlugin.exec(cmdLine, workingDir, envp);
+ } catch (CoreException e) {
+ e.printStackTrace();
+ }
+ IProcess process = null;
+
+ String programName = cmdLine[0];
+ Map processAttributes = new HashMap();
+ processAttributes.put(IProcess.ATTR_PROCESS_TYPE, programName);
+
+ if (p != null) {
+// monitor.beginTask(NLS.bind(ExternalToolsProgramMessages.ProgramLaunchDelegate_3, new String[] {configuration.getName()}), IProgressMonitor.UNKNOWN);
+ process = DebugPlugin.newProcess(new Launch(null,ILaunchManager.RUN_MODE,null), p, programName, processAttributes);
+ //process = DebugPlugin.newProcess(launch, p, location.toOSString(), processAttributes);
+ if (process == null) {
+ p.destroy();
+// throw new CoreException(new Status(IStatus.ERROR, IExternalToolConstants.PLUGIN_ID, IExternalToolConstants.ERR_INTERNAL_ERROR, ExternalToolsProgramMessages.ProgramLaunchDelegate_4, null));
+ }
+
+ }
+ while (!process.isTerminated()) {
+ try {
+ Thread.sleep(50);
+ } catch (InterruptedException e) {
+ }
+ }
+ try {
+ project.refreshLocal(IResource.DEPTH_INFINITE, null);
+ } catch (CoreException e) {
+ e.printStackTrace();
+ }
+
+ String errorText = process.getStreamsProxy().getErrorStreamMonitor().getContents();
+ System.out.println(errorText);
+
+ String outputText = process.getStreamsProxy().getOutputStreamMonitor().getContents();
+ System.out.println(outputText);
+ }
+ public void parse2(IFile file1) {
+
+// String[] cmdLine = {"pwd"};
+ /*********/
+ String[] cmdLine = {"genhtml","-o","doc","-p","`pwd`","--num-space","4","-f","app.info"};
+ IPath workingDirectory = project.getLocation();
+ /*********/
+ File workingDir = null;
+ if(workingDirectory != null){
+ workingDir = workingDirectory.toFile();
+ }
+ String[] envp = null;
+// String[] envp = DebugPlugin.getDefault().getLaunchManager().getEnvironment(configuration);
+
+ Process p = null;
+ try {
+ p = DebugPlugin.exec(cmdLine, workingDir, envp);
+ } catch (CoreException e) {
+ e.printStackTrace();
+ }
+ IProcess process = null;
+
+ String programName = cmdLine[0];
+ Map processAttributes = new HashMap();
+ processAttributes.put(IProcess.ATTR_PROCESS_TYPE, programName);
+
+ if (p != null) {
+// monitor.beginTask(NLS.bind(ExternalToolsProgramMessages.ProgramLaunchDelegate_3, new String[] {configuration.getName()}), IProgressMonitor.UNKNOWN);
+ process = DebugPlugin.newProcess(new Launch(null,ILaunchManager.RUN_MODE,null), p, programName, processAttributes);
+ //process = DebugPlugin.newProcess(launch, p, location.toOSString(), processAttributes);
+ if (process == null) {
+ p.destroy();
+// throw new CoreException(new Status(IStatus.ERROR, IExternalToolConstants.PLUGIN_ID, IExternalToolConstants.ERR_INTERNAL_ERROR, ExternalToolsProgramMessages.ProgramLaunchDelegate_4, null));
+ }
+
+ }
+ while (!process.isTerminated()) {
+ try {
+ Thread.sleep(50);
+ } catch (InterruptedException e) {
+ }
+ }
+ try {
+ /*********/
+ project.refreshLocal(IResource.DEPTH_INFINITE, null);
+ /*********/
+ } catch (CoreException e) {
+ e.printStackTrace();
+ }
+
+ String errorText = process.getStreamsProxy().getErrorStreamMonitor().getContents();
+ System.out.println(errorText);
+
+ String outputText = process.getStreamsProxy().getOutputStreamMonitor().getContents();
+ System.out.println(outputText);
+ }
+
+}
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IProjectDescription;
import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
check = new Button(composite,SWT.CHECK);
check.setText("Activate nature");
- IProject project = (IProject) getElement();
+ IAdaptable element = getElement();
+ IProject project = (IProject)element.getAdapter(IProject.class);
try {
check.setSelection(project.hasNature(SampleNature.NATURE_ID));
} catch (CoreException e) {
}
private void addNature() throws CoreException {
- IProject project = (IProject) getElement();
+ IAdaptable element = getElement();
+ IProject project = (IProject)element.getAdapter(IProject.class);
IProjectDescription description = project.getDescription();
String[] natures = description.getNatureIds();
// has nature?
project.setDescription(description, null);
}
private void removeNature() throws CoreException {
- IProject project = (IProject) getElement();
+ IAdaptable element = getElement();
+ IProject project = (IProject)element.getAdapter(IProject.class);
IProjectDescription description = project.getDescription();
String[] natures = description.getNatureIds();
for (int i = 0; i < natures.length; i++) {