/**
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
*/
package net.sourceforge.pmd.renderers;
import java.io.IOException;
import java.io.Writer;
import java.util.Iterator;
import net.sourceforge.pmd.PMD;
import net.sourceforge.pmd.RuleViolation;
/**
* <p>
* A Renderer for running PMD via a TextPad 'tool'.
* <a href="http://www.textpad.com">TextPad</a> is a text editor by Helios
* Software Solutions.
* </p>
* <p>
* Output lines are in the form:
* </p>
* <p>
* <CODE>pathtojavafile(line#, NameOfRule): Specific rule violation message</CODE>
* </p>
* <p>
* For example:
* </p>
* <p>
* <CODE>D:\java\pmd\src\src\net\sourceforge\pmd\renderers\TextPadRenderer.java(24, AtLeastOneConstructor): Each class should declare at least one constructor
* <br>D:\java\pmd\src\src\net\sourceforge\pmd\renderers\TextPadRenderer.java(26, VariableNamingConventionsRule): Variables should start with a lowercase character
* <br>D:\java\pmd\src\src\net\sourceforge\pmd\renderers\TextPadRenderer.java(31, ShortVariable): Avoid variables with short names</CODE>
* </p>
*
* @author Jeff Epstein, based upon
* <a href="EmacsRenderer.html">EmacsRenderer</a>, Tuesday, September
* 23, 2003
*/
public class TextPadRenderer extends AbstractIncrementingRenderer {
public static final String NAME = "textpad";
public TextPadRenderer() {
super(NAME, "TextPad integration.");
}
@Override
public String defaultFileExtension() {
return "txt";
}
/**
* {@inheritDoc}
*/
@Override
public void renderFileViolations(Iterator<RuleViolation> violations) throws IOException {
Writer writer = getWriter();
StringBuffer buf = new StringBuffer();
while (violations.hasNext()) {
RuleViolation rv = violations.next();
buf.setLength(0);
// Filename
buf.append(rv.getFilename() + "(");
// Line number
buf.append(Integer.toString(rv.getBeginLine())).append(", ");
// Name of violated rule
buf.append(rv.getRule().getName()).append("): ");
// Specific violation message
buf.append(rv.getDescription()).append(PMD.EOL);
writer.write(buf.toString());
}
}
}