OSDN Git Service

copy from subversion repository r.68 0.2.2
authoryuuki arisawa <uk-ar@users.sourceforge.jp>
Mon, 15 Dec 2008 14:17:21 +0000 (23:17 +0900)
committeryuuki arisawa <uk-ar@users.sourceforge.jp>
Mon, 15 Dec 2008 14:17:21 +0000 (23:17 +0900)
*support for C++ project

Signed-off-by: yuuki arisawa <uk-ar@users.sourceforge.jp>
19 files changed:
org.ginkgo.gcov/.classpath
org.ginkgo.gcov/META-INF/MANIFEST.MF
org.ginkgo.gcov/icons/sample_decorator.gif [new file with mode: 0644]
org.ginkgo.gcov/plugin.xml
org.ginkgo.gcov/src/org/ginkgo/gcov/GcovPlugin.java
org.ginkgo.gcov/src/org/ginkgo/gcov/builder/Builder.java
org.ginkgo.gcov/src/org/ginkgo/gcov/builder/CoverageLister.java
org.ginkgo.gcov/src/org/ginkgo/gcov/builder/CoverageSummaryBuilder.java
org.ginkgo.gcov/src/org/ginkgo/gcov/builder/ICoverageListener.java
org.ginkgo.gcov/src/org/ginkgo/gcov/builder/LineCoverageBuilder.java
org.ginkgo.gcov/src/org/ginkgo/gcov/builder/SampleNature.java
org.ginkgo.gcov/src/org/ginkgo/gcov/model/CoverageData.java
org.ginkgo.gcov/src/org/ginkgo/gcov/navigator/CoverageLabelProvider.java
org.ginkgo.gcov/src/org/ginkgo/gcov/navigator/Navigator.java
org.ginkgo.gcov/src/org/ginkgo/gcov/parser/CoverageSummaryParser.java
org.ginkgo.gcov/src/org/ginkgo/gcov/parser/IParser.java
org.ginkgo.gcov/src/org/ginkgo/gcov/parser/LineCoverageParser.java
org.ginkgo.gcov/src/org/ginkgo/gcov/popup/actions/Action.java [new file with mode: 0644]
org.ginkgo.gcov/src/org/ginkgo/gcov/properties/WorkbenchPropertyPage1.java

index 751c8f2..64c5e31 100644 (file)
@@ -1,7 +1,7 @@
 <?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>
index 6ed1d58..8a86148 100644 (file)
@@ -2,8 +2,8 @@ Manifest-Version: 1.0
 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,
@@ -15,4 +15,12 @@ Require-Bundle: org.eclipse.ui,
  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
diff --git a/org.ginkgo.gcov/icons/sample_decorator.gif b/org.ginkgo.gcov/icons/sample_decorator.gif
new file mode 100644 (file)
index 0000000..b51281b
Binary files /dev/null and b/org.ginkgo.gcov/icons/sample_decorator.gif differ
index 1e3d87a..63e0e52 100644 (file)
@@ -9,7 +9,7 @@
       <builder
             hasNature="true">
          <run
-               class="org.ginkgo.gcov.builder.MarkerBuilder">
+               class="org.ginkgo.gcov.builder.LineCoverageBuilder">
          </run>
       </builder>
    </extension>
@@ -21,7 +21,7 @@
       <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>
index b1cb60b..7631dfa 100644 (file)
@@ -1,5 +1,8 @@
 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;
@@ -7,18 +10,19 @@ 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();
        }
 
        /*
@@ -44,7 +48,7 @@ public class Activator extends AbstractUIPlugin {
         *
         * @return the shared instance
         */
-       public static Activator getDefault() {
+       public static GcovPlugin getDefault() {
                return plugin;
        }
 
@@ -58,4 +62,17 @@ public class Activator extends AbstractUIPlugin {
        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;
+       }
 }
index beabb1c..01b674b 100644 (file)
@@ -13,10 +13,10 @@ import org.eclipse.core.resources.IResourceVisitor;
 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 {
 
@@ -30,12 +30,13 @@ public abstract class Builder extends IncrementalProjectBuilder {
                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();
@@ -80,7 +81,7 @@ public abstract class Builder extends IncrementalProjectBuilder {
                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();
@@ -113,8 +114,8 @@ public abstract class Builder extends IncrementalProjectBuilder {
        }
        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();
index 0f8ebd1..6e4485c 100644 (file)
@@ -3,19 +3,21 @@ package org.ginkgo.gcov.builder;
 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());
                }
        }
 }
index bb7eece..b4f43c8 100644 (file)
@@ -9,18 +9,21 @@ import org.eclipse.core.resources.IFile;
 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);
@@ -31,7 +34,7 @@ public class SampleBuilder extends Builder{
        IParser getParser() throws ParserConfigurationException,
        SAXException {
        if (gcovParser == null){
-               gcovParser = new GcovParser(); 
+               gcovParser = new CoverageSummaryParser(); 
        }
        return gcovParser;
        }
index 31fed45..406f025 100644 (file)
@@ -2,10 +2,11 @@ package org.ginkgo.gcov.builder;
 
 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
index 05ae8d3..9c5aa6e 100644 (file)
@@ -14,20 +14,20 @@ import org.eclipse.core.resources.IResourceDeltaVisitor;
 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);
@@ -35,10 +35,10 @@ public class MarkerBuilder extends Builder {
                        }
                }
        }
-       CoverageParser getParser() throws ParserConfigurationException,
+       IParser getParser() throws ParserConfigurationException,
        SAXException {
        if (gcovParser == null){
-               gcovParser = new CoverageParser(); 
+               gcovParser = new LineCoverageParser(); 
        }
        return gcovParser;
        }
index 0dfa380..b60329c 100644 (file)
@@ -21,8 +21,8 @@ public class SampleNature implements IProjectNature {
         * @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();
@@ -51,10 +51,10 @@ public class SampleNature implements IProjectNature {
                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);
 
        }
 
index 1c5a8e5..36d7957 100644 (file)
@@ -1,10 +1,13 @@
-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;
        }
@@ -17,4 +20,25 @@ public class CoverageData {
        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();
+       }
 }
index ac52fc6..7b894c8 100644 (file)
@@ -7,6 +7,7 @@ import org.eclipse.core.runtime.QualifiedName;
 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;
@@ -19,9 +20,9 @@ import org.eclipse.ui.navigator.CommonViewer;
 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;
        }
index 5ebaf22..7fded80 100644 (file)
@@ -5,7 +5,9 @@ import org.eclipse.cdt.internal.ui.cview.CView;
 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;
@@ -31,25 +33,47 @@ public class Navigator extends CommonNavigator {
        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
        }
index 4674a07..da48837 100644 (file)
@@ -1,9 +1,10 @@
-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;
@@ -40,12 +41,15 @@ import org.eclipse.ui.console.MessageConsole;
 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;
@@ -53,7 +57,7 @@ public class GcovParser implements IParser {
        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 (.+)$");
@@ -132,7 +136,7 @@ public class GcovParser implements IParser {
                
                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) {
@@ -161,36 +165,38 @@ public class GcovParser implements IParser {
                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");
@@ -216,7 +222,7 @@ public class GcovParser implements IParser {
                        
                        // \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();
index 198d8ad..46600af 100644 (file)
@@ -1,4 +1,4 @@
-package org.ginkgo.gcov.builder;
+package org.ginkgo.gcov.parser;
 
 import org.eclipse.core.resources.IFile;
 
index 13165f7..cf4ccf2 100644 (file)
@@ -1,4 +1,4 @@
-package org.ginkgo.gcov.builder;
+package org.ginkgo.gcov.parser;
 
 import java.io.BufferedReader;
 import java.io.File;
@@ -15,6 +15,7 @@ import java.util.regex.Pattern;
 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;
@@ -34,13 +35,33 @@ import org.eclipse.ui.internal.Workbench;
 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();
@@ -61,19 +82,31 @@ public class CoverageParser implements IParser {
                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()));
@@ -102,18 +135,19 @@ public class CoverageParser implements IParser {
                        }
 //                     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);
diff --git a/org.ginkgo.gcov/src/org/ginkgo/gcov/popup/actions/Action.java b/org.ginkgo.gcov/src/org/ginkgo/gcov/popup/actions/Action.java
new file mode 100644 (file)
index 0000000..cc5875b
--- /dev/null
@@ -0,0 +1,179 @@
+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);
+       }
+
+}
index ee76b61..cb3e470 100644 (file)
@@ -3,6 +3,7 @@ package org.ginkgo.gcov.properties;
 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;
@@ -34,7 +35,8 @@ public class WorkbenchPropertyPage1 extends PropertyPage implements
                
                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) {
@@ -60,7 +62,8 @@ public class WorkbenchPropertyPage1 extends PropertyPage implements
                
        }
        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?
@@ -76,7 +79,8 @@ public class WorkbenchPropertyPage1 extends PropertyPage implements
                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++) {