1 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 21 public class CompleteCoverage { 22 23 private JavaClass jclass; 24 25 private Map lineCoverageMap = new HashMap(); 27 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 48 public String getReason(ISourceCodeLine lineNumber) { 49 return (String ) lineReasonMap.get(lineNumber); 50 } 51 52 public void addLine(ISourceCodeLine line, CoverageState coverage, String 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 toString() { 62 String result = Messages.getString("CompleteCoverage.0") + jclass.getClassName() + ": \n"; List sortedKeys = new LinkedList(lineCoverageMap.keySet()); 64 Collections.sort(sortedKeys); 65 String [] 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]); } 71 if (slines.length == 0) { 72 result += "\t \t\t"; } 74 result += "\t | " + lines[i-1] + "\n"; } 76 String 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 95 public synchronized boolean hasNextLine() { 96 initLineIterator(); 97 return lineIterator.hasNext(); 98 } 99 100 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 |