OSDN Git Service

copy from subversion repository r.23
[ginkgo/master.git] / org.ginkgo.gcov / src / org / ginkgo / gcov / builder / CoverageParser.java
diff --git a/org.ginkgo.gcov/src/org/ginkgo/gcov/builder/CoverageParser.java b/org.ginkgo.gcov/src/org/ginkgo/gcov/builder/CoverageParser.java
new file mode 100644 (file)
index 0000000..13165f7
--- /dev/null
@@ -0,0 +1,125 @@
+package org.ginkgo.gcov.builder;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.io.StringReader;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.regex.Matcher;
+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.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.QualifiedName;
+import org.eclipse.debug.core.DebugPlugin;
+import org.eclipse.debug.core.ILaunchManager;
+import org.eclipse.debug.core.IStreamListener;
+import org.eclipse.debug.core.Launch;
+import org.eclipse.debug.core.model.IProcess;
+import org.eclipse.debug.core.model.IStreamMonitor;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.ui.console.ConsolePlugin;
+import org.eclipse.ui.console.IConsole;
+import org.eclipse.ui.console.IConsoleManager;
+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.xml.sax.helpers.DefaultHandler;
+
+public class CoverageParser 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 MessageConsole getConsole() {
+               IConsoleManager manager = ConsolePlugin.getDefault().getConsoleManager();
+               IConsole[] consoles = manager.getConsoles();
+               MessageConsole messageConsole = null;
+               for (IConsole console : consoles) {
+                       if(console.getName().equals(consoleName)){
+                               messageConsole = (MessageConsole) console;
+                               break;
+                       }
+               }
+               if(messageConsole == null){
+                       messageConsole = new MessageConsole(consoleName, null);
+               }
+               manager.addConsoles(new IConsole[] {messageConsole});
+               return messageConsole;
+       }
+       public void parse(IFile file) {
+               String lineNum = null;
+               String execCount = null;
+               String line = null;
+               
+//             MessageConsole console = getConsole();
+//             MessageConsoleStream commandStream = console.newMessageStream();
+//             commandStream.setActivateOnWrite(true);
+               
+               IProject project = file.getProject();
+               IFile sourceFile = (IFile) project.findMember(file.getName().replaceAll("\\.gcov", "")); //;
+//             try {
+//                     sourceFile.refreshLocal(IResource.DEPTH_ZERO,null);
+//             } catch (CoreException e1) {
+//                     // TODO 自動生成された catch ブロック
+//                     e1.printStackTrace();
+//             }
+               deleteMarkers(sourceFile);
+               try {
+                       BufferedReader in = new BufferedReader(new InputStreamReader(file.getContents()));
+                       while((line = in.readLine())!=null){
+                               String[] s = line.split(":");
+//                             commandStream.println(line);
+//                             System.out.println(line);
+                               if(s.length ==3){
+                                       execCount = s[0].trim();
+                                       lineNum = s[1].trim();
+                                       if(execCount.equals("#####")){
+                                               Map attributes = new HashMap();
+                                               MarkerUtilities.setMessage(attributes,"Not Covered");
+                                               MarkerUtilities.setLineNumber(attributes, Integer.parseInt(lineNum));
+                                               MarkerUtilities.createMarker(sourceFile, attributes, UNCOVER_MARKER_TYPE);
+                                       }else if(execCount.equals("-")){
+
+                                       }else{
+                                               Map attributes = new HashMap();
+                                               MarkerUtilities.setMessage(attributes,execCount);
+                                               MarkerUtilities.setLineNumber(attributes, Integer.parseInt(lineNum));
+                                               MarkerUtilities.createMarker(sourceFile, attributes, COVER_MARKER_TYPE);
+                                       }
+                                       continue;
+                               }
+                       }
+//                     System.out.println("marker fin");                       
+               } catch (NumberFormatException e) {
+                       // TODO �����������ꂽ catch �u���b�N
+                       e.printStackTrace();
+               } catch (IOException e) {
+                       // TODO �����������ꂽ catch �u���b�N
+                       e.printStackTrace();
+               }
+               catch (CoreException e) {
+                       // TODO �����������ꂽ catch �u���b�N
+                       e.printStackTrace();
+               }
+       }
+       static void deleteMarkers(IFile file) {
+               try {
+                       file.deleteMarkers(COVER_MARKER_TYPE, true, IResource.DEPTH_ZERO);
+                       file.deleteMarkers(UNCOVER_MARKER_TYPE, true, IResource.DEPTH_ZERO);
+               } catch (CoreException ce) {
+               }
+       }
+
+
+}