Class FuzzyBugComparator

  • All Implemented Interfaces:
    WarningComparator, java.io.Serializable, java.util.Comparator<BugInstance>

    public class FuzzyBugComparator
    extends java.lang.Object
    implements WarningComparator
    A slightly more intellegent way of comparing BugInstances from two versions to see if they are the "same". Uses class and method hashes to try to handle renamings, at least for simple cases. (Hashes disabled for the time being.) Uses opcode context to try to identify code that is the same, even if it moves within the method. Also compares by bug abbreviation rather than bug type, since the "same" bug can change type if the context changes (e.g., "definitely null" to "null on simple path" for a null pointer dereference). Also, we often change bug types between different versions of FindBugs.
    See Also:
    BugInstance, VersionInsensitiveBugComparator, Serialized Form
    • Field Detail

      • bugCollectionMap

        private final java.util.IdentityHashMap<BugInstance,​BugCollection> bugCollectionMap
        Keep track of which BugCollections the various BugInstances have come from.
      • significantDescriptionSet

        @StaticConstant
        private static final java.util.HashSet<java.lang.String> significantDescriptionSet
    • Constructor Detail

      • FuzzyBugComparator

        public FuzzyBugComparator()
        Map of class hashes to canonicate class names used for comparison purposes.
    • Method Detail

      • registerBugCollection

        public void registerBugCollection​(BugCollection bugCollection)
        Register a BugCollection. This allows us to find the class and method hashes for BugInstances to be compared.
        Parameters:
        bugCollection - a BugCollection
      • compareNullElements

        private static int compareNullElements​(java.lang.Object a,
                                               java.lang.Object b)
      • compareClassesByName

        public int compareClassesByName​(BugCollection lhsCollection,
                                        BugCollection rhsCollection,
                                        java.lang.String lhsClassName,
                                        java.lang.String rhsClassName)
      • rewriteClassName

        private java.lang.String rewriteClassName​(java.lang.String className)
        Parameters:
        className -
        Returns:
        the rewritten class name
      • compareSourceLines

        public int compareSourceLines​(BugCollection lhsCollection,
                                      BugCollection rhsCollection,
                                      SourceLineAnnotation lhs,
                                      SourceLineAnnotation rhs)
        Compare source line annotations.
        Parameters:
        rhsCollection - lhs BugCollection
        lhsCollection - rhs BugCollection
        lhs - a SourceLineAnnotation
        rhs - another SourceLineAnnotation
        Returns:
        comparison of lhs and rhs
      • ignore

        public static boolean ignore​(BugAnnotation annotation)