View Javadoc

    1   /**
    2    * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
    3    */
    4   package net.sourceforge.pmd;
    5
    6   import java.util.Comparator;
    7
    8   /**
    9    * Compares RuleViolations using the following criteria:
    10   * <ol>
    11   *    <li>Source file name</li>
    12   *    <li>Begin line</li>
    13   *    <li>Description</li>
    14   *    <li>Begin column</li>
    15   *    <li>End line</li>
    16   *    <li>End column</li>
    17   *    <li>Rule name</li>
    18   * </ol>
    19   */
    20  public final class RuleViolationComparator implements Comparator<RuleViolation> {
    21
    22      public static final RuleViolationComparator INSTANCE = new RuleViolationComparator();
    23
    24      private RuleViolationComparator() {
    25      }
    26
    27      public int compare(final RuleViolation r1, final RuleViolation r2) {
    28  	int cmp = r1.getFilename().compareTo(r2.getFilename());
    29  	if (cmp == 0) {
    30  	    cmp = r1.getBeginLine() - r2.getBeginLine();
    31  	    if (cmp == 0) {
    32  		cmp = compare(r1.getDescription(), r2.getDescription());
    33  		if (cmp == 0) {
    34  		    cmp = r1.getBeginColumn() - r2.getBeginColumn();
    35  		    if (cmp == 0) {
    36  			cmp = r1.getEndLine() - r2.getEndLine();
    37  			if (cmp == 0) {
    38  			    cmp = r1.getEndColumn() - r2.getEndColumn();
    39  			    if (cmp == 0) {
    40  				cmp = r1.getRule().getName().compareTo(r2.getRule().getName());
    41  			    }
    42  			}
    43  		    }
    44  		}
    45  	    }
    46  	}
    47  	return cmp;
    48      }
    49
    50      private static int compare(final String s1, final String s2) {
    51  	// Treat null as larger
    52  	if (s1 == null) {
    53  	    return 1;
    54  	} else if (s2 == null) {
    55  	    return -1;
    56  	} else {
    57  	    return s1.compareTo(s2);
    58  	}
    59      }
    60  }