/**
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
*/
package net.sourceforge.pmd;
import java.util.Comparator;
public class RuleViolation {
public static class RuleViolationComparator implements Comparator {
//
// Changed logic of Comparator so that rules in the same file
// get grouped together in the output report.
// DDP 7/11/2002
//
public int compare(Object o1, Object o2) {
RuleViolation r1 = (RuleViolation) o1;
RuleViolation r2 = (RuleViolation) o2;
if (!r1.getFilename().equals(r2.getFilename())) {
return r1.getFilename().compareTo(r2.getFilename());
}
if (r1.getLine() != r2.getLine())
return r1.getLine() - r2.getLine();
if (r1.getDescription() != null && r2.getDescription() != null && !r1.getDescription().equals(r2.getDescription())) {
return r1.getDescription().compareTo(r2.getDescription());
}
// line number diff maps nicely to compare()
return r1.getLine() - r2.getLine();
}
}
private int line;
private Rule rule;
private String description;
private String filename;
public RuleViolation(Rule rule, int line, RuleContext ctx) {
this(rule, line, rule.getMessage(), ctx);
}
public RuleViolation(Rule rule, int line, String specificDescription, RuleContext ctx) {
this.line = line;
this.rule = rule;
this.description = specificDescription;
this.filename = ctx.getSourceCodeFilename();
}
public Rule getRule() {
return rule;
}
public int getLine() {
return line;
}
public String getDescription() {
return description;
}
public String getFilename() {
return filename;
}
}