KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > de > uka > ipd > coverage > natures > CompleteCoverage


1 /*
2  * Created on 01.09.2004
3  *
4  * written by Matthias Kempka
5  */

6 package de.uka.ipd.coverage.natures;
7
8 import java.util.*;
9
10 import org.apache.bcel.classfile.JavaClass;
11
12 import de.uka.ipd.coverage.recording.CoverageState;
13 import de.uka.ipd.coverage.utils.ByteCodePrinter;
14
15 /**
16  * Created on 01.09.2004
17  * Contains a complete mapping from source line numbers to CoverageState objects
18  * for a tested class.
19  * @author Matthias Kempka
20  */

21 public class CompleteCoverage {
22     
23     private JavaClass jclass;
24     
25     // maps source line numbers (Integer) to coverage states (CoverageState)
26
private Map lineCoverageMap = new HashMap();
27     // maps source line numbers (Integer) to reason messages (String)
28
private Map lineReasonMap = new HashMap();
29
30     private Iterator lineIterator;
31     
32     public CompleteCoverage(JavaClass jclass) {
33         this.jclass = jclass;
34     }
35     
36     public CoverageState getCoverage(ISourceCodeLine line) {
37         if (lineCoverageMap.containsKey(line)) {
38             return (CoverageState) lineCoverageMap.get(line);
39         }
40         return CoverageState.NO_COVERAGE;
41     }
42     
43     /**
44      * @param lineNumber
45      * @return returns a human readable String that gives the reason for the
46      * CoverageState for the given lineNumber.
47      */

48     public String JavaDoc getReason(ISourceCodeLine lineNumber) {
49         return (String JavaDoc) lineReasonMap.get(lineNumber);
50     }
51     
52     public void addLine(ISourceCodeLine line, CoverageState coverage, String JavaDoc reason) {
53         lineCoverageMap.put(line, coverage);
54         lineReasonMap.put(line, reason);
55     }
56     
57     public JavaClass getJavaClass() {
58         return jclass;
59     }
60     
61     public String JavaDoc toString() {
62         String JavaDoc result = Messages.getString("CompleteCoverage.0") + jclass.getClassName() + ": \n"; //$NON-NLS-1$ //$NON-NLS-2$
63
List sortedKeys = new LinkedList(lineCoverageMap.keySet());
64         Collections.sort(sortedKeys);
65         String JavaDoc[] lines = ByteCodePrinter.openSource(jclass);
66         for (int i = 1; i < lines.length; i++) {
67             ISourceCodeLine[] slines = getKeysWithSourceLine(i);
68             for (int j = 0; j < slines.length; j++) {
69                 result += "\t" + i + " : " + getCoverage(slines[j]); //$NON-NLS-1$ //$NON-NLS-2$
70
}
71             if (slines.length == 0) {
72                 result += "\t \t\t"; //$NON-NLS-1$
73
}
74             result += "\t | " + lines[i-1] + "\n"; //$NON-NLS-1$ //$NON-NLS-2$
75
}
76         String JavaDoc a = "asdfasdfa";
77         return result;
78     }
79
80     private ISourceCodeLine[] getKeysWithSourceLine(int i) {
81         List resultList = new ArrayList(3);
82         for (Iterator iter = lineCoverageMap.keySet().iterator(); iter.hasNext();) {
83             ISourceCodeLine sline = (ISourceCodeLine) iter.next();
84             if (sline.getSourceCodeLine() == i) {
85                 resultList.add(sline);
86             }
87         }
88         return (ISourceCodeLine[]) resultList.toArray(new ISourceCodeLine[resultList.size()]);
89     }
90
91     /**
92      * @return boolean, indicates whether the next call to getNextLine() will
93      * return a number.
94      */

95     public synchronized boolean hasNextLine() {
96         initLineIterator();
97         return lineIterator.hasNext();
98     }
99
100     /**
101      * @return iterates over all lines that are listed in this class.
102      * @throws NoSuchElementException if there is no more line.
103      */

104     public synchronized ISourceCodeLine getNextLine() {
105         initLineIterator();
106         return ((ISourceCodeLine)lineIterator.next());
107     }
108     
109     private void initLineIterator() {
110         if (this.lineIterator == null) {
111             this.lineIterator = lineCoverageMap.keySet().iterator();
112         }
113     }
114
115     public synchronized void resetIterator() {
116         this.lineIterator = null;
117     }
118 }
119
Popular Tags