1 /** 2 * BSD-style license; for more info see http://pmd.sourceforge.net/license.html 3 */ 4 package net.sourceforge.pmd.renderers; 5 6 import net.sourceforge.pmd.IRuleViolation; 7 import net.sourceforge.pmd.PMD; 8 import net.sourceforge.pmd.Report; 9 10 import java.io.IOException; 11 import java.io.Writer; 12 import java.util.Iterator; 13 14 public class TextRenderer extends OnTheFlyRenderer { 15 16 private boolean empty; 17 18 public void start() throws IOException { 19 empty = true; 20 } 21 22 public void renderFileViolations(Iterator<IRuleViolation> violations) throws IOException { 23 Writer writer = getWriter(); 24 StringBuffer buf = new StringBuffer(); 25 26 empty = !violations.hasNext(); 27 while (violations.hasNext()) { 28 buf.setLength(0); 29 IRuleViolation rv = violations.next(); 30 buf.append(PMD.EOL).append(rv.getFilename()); 31 buf.append(':').append(Integer.toString(rv.getBeginLine())); 32 buf.append('\t').append(rv.getDescription()); 33 writer.write(buf.toString()); 34 } 35 } 36 37 public void end() throws IOException { 38 Writer writer = getWriter(); 39 StringBuffer buf = new StringBuffer(); 40 if (!errors.isEmpty()) { 41 empty = false; 42 43 for(Report.ProcessingError error: errors) { 44 buf.setLength(0); 45 buf.append(PMD.EOL).append(error.getFile()); 46 buf.append("\t-\t").append(error.getMsg()); 47 writer.write(buf.toString()); 48 } 49 } 50 51 for(Report.SuppressedViolation excluded: suppressed) { 52 buf.setLength(0); 53 buf.append(PMD.EOL); 54 buf.append(excluded.getRuleViolation().getRule().getName()); 55 buf.append(" rule violation suppressed by "); 56 buf.append(excluded.suppressedByNOPMD() ? "//NOPMD" : "Annotation"); 57 buf.append(" in ").append(excluded.getRuleViolation().getFilename()); 58 writer.write(buf.toString()); 59 } 60 61 if (empty) { 62 getWriter().write("No problems found!"); 63 } 64 } 65 66 }