| 1 19 20 package edu.umd.cs.findbugs; 21 22 import java.io.BufferedOutputStream ; 23 import java.io.FileOutputStream ; 24 import java.util.HashSet ; 25 import java.util.Iterator ; 26 import java.util.Set ; 27 28 import org.dom4j.Document; 29 import org.dom4j.Element; 30 import org.dom4j.io.OutputFormat; 31 import org.dom4j.io.XMLWriter; 32 33 import edu.umd.cs.findbugs.annotations.SuppressWarnings; 34 35 43 public class AddMessages { 44 private BugCollection bugCollection; 45 private Document document; 46 47 53 public AddMessages(BugCollection bugCollection, Document document) { 54 this.bugCollection = bugCollection; 55 this.document = document; 56 } 57 58 61 public void execute() { 62 Iterator <Element> elementIter = document.selectNodes("/BugCollection/BugInstance").iterator(); 63 Iterator <BugInstance> bugInstanceIter = bugCollection.iterator(); 64 65 Set <String > bugTypeSet = new HashSet <String >(); 66 Set <String > bugCategorySet = new HashSet <String >(); 67 Set <String > bugCodeSet = new HashSet <String >(); 68 69 while (elementIter.hasNext() && bugInstanceIter.hasNext()) { 73 Element element = elementIter.next(); 74 BugInstance bugInstance = bugInstanceIter.next(); 75 76 String bugType = bugInstance.getType(); 77 bugTypeSet.add(bugType); 78 79 BugPattern bugPattern = bugInstance.getBugPattern(); 80 81 bugCategorySet.add(bugPattern.getCategory()); 82 bugCodeSet.add(bugPattern.getAbbrev()); 83 84 element.addElement("ShortMessage").addText( 85 bugPattern.getShortDescription()); 86 element.addElement("LongMessage").addText(bugInstance.getMessage()); 87 88 Iterator <Element> annElementIter = element.elements().iterator(); 91 Iterator <BugAnnotation> annIter = bugInstance.annotationIterator(); 92 while (annElementIter.hasNext() && annIter.hasNext()) { 93 Element annElement = annElementIter.next(); 94 BugAnnotation ann = annIter.next(); 95 annElement.addElement("Message").addText(ann.toString()); 96 } 97 } 98 99 addBugCategories(bugCategorySet); 101 addBugPatterns(bugTypeSet); 102 addBugCodes(bugCodeSet); 103 } 104 105 110 private void addBugCategories(Set <String > bugCategorySet) { 111 Element root = document.getRootElement(); 112 for (String category : bugCategorySet) { 113 Element element = root.addElement("BugCategory"); 114 element.addAttribute("category", category); 115 Element description = element.addElement("Description"); 116 description.setText(I18N.instance().getBugCategoryDescription(category)); 117 118 BugCategory bc = I18N.instance().getBugCategory(category); 119 if (bc != null) { String s = bc.getAbbrev(); 121 if (s != null) { 122 Element abbrev = element.addElement("Abbreviation"); 123 abbrev.setText(s); 124 } 125 s = bc.getDetailText(); 126 if (s != null) { 127 Element details = element.addElement("Details"); 128 details.setText(s); 129 } 130 } 131 } 132 } 133 134 139 private void addBugCodes(Set <String > bugCodeSet) { 140 Element root = document.getRootElement(); 141 for (String bugCode : bugCodeSet) { 142 Element element = root.addElement("BugCode"); 143 element.addAttribute("abbrev", bugCode); 144 Element description = element.addElement("Description"); 145 description.setText(I18N.instance().getBugTypeDescription(bugCode)); 146 } 147 } 148 149 private void addBugPatterns(Set <String > bugTypeSet) { 150 Element root = document.getRootElement(); 151 for (String bugType : bugTypeSet) { 152 BugPattern bugPattern = I18N.instance().lookupBugPattern(bugType); 153 if (bugPattern == null) 154 continue; 155 Element details = root.addElement("BugPattern"); 156 details 157 .addAttribute("type", bugType) 158 .addAttribute("abbrev", bugPattern.getAbbrev()) 159 .addAttribute("category", bugPattern.getCategory()); 160 details 161 .addElement("ShortDescription") 162 .addText(bugPattern.getShortDescription()); 163 details 164 .addElement("Details") 165 .addCDATA(bugPattern.getDetailText()); 166 } 167 } 168 169 @SuppressWarnings ("DM_EXIT") 170 public static void main(String [] args) throws Exception { 171 if (args.length != 2) { 172 System.err.println("Usage: " + AddMessages.class.getName() + " <input collection> <output collection>"); 173 System.exit(1); 174 } 175 176 DetectorFactoryCollection.instance(); 178 179 String inputFile = args[0]; 180 String outputFile = args[1]; 181 Project project = new Project(); 182 183 SortedBugCollection inputCollection = new SortedBugCollection(); 184 inputCollection.readXML(inputFile, project); 185 186 Document document = inputCollection.toDocument(project); 187 188 AddMessages addMessages = new AddMessages(inputCollection, document); 189 addMessages.execute(); 190 191 XMLWriter writer = new XMLWriter(new BufferedOutputStream (new FileOutputStream (outputFile)), 192 OutputFormat.createPrettyPrint()); 193 writer.write(document); 194 writer.close(); 195 } 196 } 197 198 | Popular Tags |