1 package org.ginkgo.gcov.parser;
3 import java.io.BufferedReader;
4 import java.io.IOException;
5 import java.io.InputStreamReader;
6 import java.util.HashMap;
9 import org.eclipse.core.resources.IFile;
10 import org.eclipse.core.resources.IProject;
11 import org.eclipse.core.resources.IResource;
12 import org.eclipse.core.resources.IResourceVisitor;
13 import org.eclipse.core.runtime.CoreException;
14 import org.eclipse.ui.console.ConsolePlugin;
15 import org.eclipse.ui.console.IConsole;
16 import org.eclipse.ui.console.IConsoleManager;
17 import org.eclipse.ui.console.MessageConsole;
18 import org.eclipse.ui.texteditor.MarkerUtilities;
20 public class LineCoverageParser implements IParser {
22 public static final String UNCOVER_MARKER_TYPE = "org.ginkgo.gcov.lineUnCoverMarker";
23 public static final String COVER_MARKER_TYPE = "org.ginkgo.gcov.lineCoverMarker";
24 public static final String COVERAGE_MARKER_TYPE = "org.ginkgo.gcov.CoverageMarker";
26 private String consoleName = "onsole";
27 private IFile sourceFile = null;
29 private class MyResourceVisitor implements IResourceVisitor{
30 private String sourceFileName;
32 private MyResourceVisitor(String FileName){
33 sourceFileName = FileName;
35 public boolean visit(IResource resource) throws CoreException {
36 if(resource.getName().equals(sourceFileName)){
37 sourceFile = (IFile)resource;
38 // System.out.println(sourceFile);
41 // System.out.println(resource);
42 // System.out.println(resource.getType());
48 private MessageConsole getConsole() {
49 IConsoleManager manager = ConsolePlugin.getDefault().getConsoleManager();
50 IConsole[] consoles = manager.getConsoles();
51 MessageConsole messageConsole = null;
52 for (IConsole console : consoles) {
53 if(console.getName().equals(consoleName)){
54 messageConsole = (MessageConsole) console;
58 if(messageConsole == null){
59 messageConsole = new MessageConsole(consoleName, null);
61 manager.addConsoles(new IConsole[] {messageConsole});
62 return messageConsole;
64 public void parse(IFile file) {
65 String lineNum = null;
66 String execCount = null;
69 // MessageConsole console = getConsole();
70 // MessageConsoleStream commandStream = console.newMessageStream();
71 // commandStream.setActivateOnWrite(true);
73 IProject project = file.getProject();
74 String sourceFileName = file.getName().replaceAll("\\.gcov", "");
76 project.accept(new MyResourceVisitor(sourceFileName));
77 } catch (CoreException e1) {
78 // TODO
\8e©
\93®
\90¶
\90¬
\82³
\82ê
\82½ catch
\83u
\83\8d\83b
\83N
81 // sourceFile = (IFile) project.findMember(); //;
83 // sourceFile.refreshLocal(IResource.DEPTH_ZERO,null);
84 // } catch (CoreException e1) {
86 // e1.printStackTrace();
88 System.out.println(sourceFile);
90 // System.out.println("null!!");
93 deleteMarkers(sourceFile);
95 BufferedReader in = new BufferedReader(new InputStreamReader(file.getContents()));
96 while((line = in.readLine())!=null){
97 String[] s = line.split(":");
98 // commandStream.println(line);
99 // System.out.println(line);
101 execCount = s[0].trim();
102 lineNum = s[1].trim();
103 if(execCount.equals("#####")){
104 Map attributes = new HashMap();
105 MarkerUtilities.setMessage(attributes,"Not Covered");
106 MarkerUtilities.setLineNumber(attributes, Integer.parseInt(lineNum));
107 MarkerUtilities.createMarker(sourceFile, attributes, UNCOVER_MARKER_TYPE);
108 }else if(execCount.equals("-")){
111 Map attributes = new HashMap();
112 MarkerUtilities.setMessage(attributes,execCount);
113 MarkerUtilities.setLineNumber(attributes, Integer.parseInt(lineNum));
114 MarkerUtilities.createMarker(sourceFile, attributes, COVER_MARKER_TYPE);
119 // System.out.println("marker fin");
120 } catch (NumberFormatException e) {
123 } catch (IOException e) {
127 catch (CoreException e) {
133 public static void deleteMarkers(IFile file) {
135 file.deleteMarkers(COVER_MARKER_TYPE, true, IResource.DEPTH_ZERO);
136 file.deleteMarkers(UNCOVER_MARKER_TYPE, true, IResource.DEPTH_ZERO);
137 } catch (CoreException ce) {