1 19 20 package edu.umd.cs.findbugs; 21 22 import java.io.IOException ; 23 import java.util.Collection ; 24 import java.util.LinkedList ; 25 import java.util.SortedMap ; 26 import java.util.TreeMap ; 27 28 import edu.umd.cs.findbugs.xml.XMLOutput; 29 import edu.umd.cs.findbugs.xml.XMLWriteable; 30 31 37 public class PackageStats implements XMLWriteable { 38 39 public static class ClassStats implements XMLWriteable, Cloneable { 40 private String name; 41 private boolean isInterface; 42 private int[] nBugs = new int[] { 0, 0, 0, 0, 0 }; 44 private int size; 45 46 public ClassStats(String name) { 47 this.name = name; 48 } 49 50 @Override 51 public Object clone() { 52 try { 53 return super.clone(); 54 } catch (CloneNotSupportedException e) { 55 throw new AssertionError (e); 57 } 58 } 59 60 public void setInterface(boolean isInterface) { 61 this.isInterface = isInterface; 62 } 63 64 public void setSize(int size) { 65 this.size = size; 66 } 67 68 public void addError(BugInstance bug) { 69 ++nBugs[bug.getPriority()]; 70 ++nBugs[0]; 71 } 72 public int getTotalBugs() { 73 return nBugs[0]; 74 } 75 public int getBugsAtPriority(int p) { 76 return nBugs[p]; 77 } 78 public int size() { 79 return size; 80 } 81 public String getName() { 82 return name; 83 } 84 public void writeXML(XMLOutput xmlOutput) throws IOException { 85 xmlOutput.startTag("ClassStats"); 86 87 xmlOutput.addAttribute("class", name); 88 xmlOutput.addAttribute("interface", String.valueOf(isInterface)); 89 xmlOutput.addAttribute("size", String.valueOf(size)); 90 xmlOutput.addAttribute("bugs", String.valueOf(nBugs[0])); 91 writeBugPriorities(xmlOutput, nBugs); 92 93 xmlOutput.stopTag(true); 94 } 95 96 99 public void clearBugCounts() { 100 for(int i = 0; i < nBugs.length; i++) nBugs[i] = 0; 101 102 } 103 } 104 105 public static final String ELEMENT_NAME = "PackageStats"; 106 public static final int ALL_ERRORS = 0; 107 private final String packageName; 108 private int[] nBugs = new int[] { 0, 0, 0, 0, 0 }; 110 private int size; 111 112 115 private SortedMap <String , ClassStats> packageMembers = 117 new TreeMap <String , ClassStats>(); 118 119 public PackageStats(String packageName) { 120 this.packageName = packageName; 121 } 122 123 public Collection <ClassStats> getClassStats() { 124 return packageMembers.values(); 125 } 126 public int getTotalBugs() { 127 return nBugs[0]; 128 } 129 public int size() { 130 return size; 131 } 132 public int getBugsAtPriority(int p) { 133 return nBugs[p]; 134 } 135 private ClassStats getClassStats(String name) { 136 ClassStats result = packageMembers.get(name); 137 if ( result == null ) { 138 result = new ClassStats(name); 139 packageMembers.put(name, result); 140 } 141 142 return result; 143 } 144 145 public ClassStats getClassStatsOrNull(String name) { 146 ClassStats result = packageMembers.get(name); 147 return result; 148 } 149 public void addError(BugInstance bug) { 150 if (bug.getPriority() >= nBugs.length) return; 151 ++nBugs[bug.getPriority()]; 152 ++nBugs[0]; 153 154 getClassStats(bug.getPrimaryClass().getClassName()).addError(bug); 155 } 156 157 public void addClass(String name, boolean isInterface, int size) { 158 ClassStats classStats = getClassStats(name); 159 classStats.setInterface(isInterface); 160 classStats.setSize(size); 161 this.size += size; 162 } 163 164 public String getPackageName() { 165 return packageName; 166 } 167 168 public void writeXML(XMLOutput xmlOutput) throws IOException { 169 170 xmlOutput.startTag(ELEMENT_NAME); 171 172 xmlOutput.addAttribute("package", packageName); 173 xmlOutput.addAttribute("total_bugs", String.valueOf(nBugs[0])); 174 xmlOutput.addAttribute("total_types", 175 String.valueOf(packageMembers.size())); 176 xmlOutput.addAttribute("total_size", String.valueOf(size)); 177 writeBugPriorities(xmlOutput, nBugs); 178 179 xmlOutput.stopTag(false); 180 181 for (ClassStats classStats : packageMembers.values()) { 182 classStats.writeXML(xmlOutput); 183 } 184 185 xmlOutput.closeTag(ELEMENT_NAME); 186 } 187 188 199 public static void writeBugPriorities(XMLOutput xmlOutput, int[] bugs) throws IOException { 200 int i = bugs.length; 201 while ( --i > 0 ) { 202 if ( bugs[i] > 0 ) { 203 xmlOutput.addAttribute("priority_" + i, 204 String.valueOf(bugs[i])); 205 } 206 } 207 } 208 209 212 public void clearBugCounts() { 213 for(int i = 0; i < nBugs.length; i++) 214 nBugs[i] = 0; 215 216 for(ClassStats classStats : packageMembers.values()) { 217 classStats.clearBugCounts(); 218 } 219 220 } 221 } 222 223 | Popular Tags |