Class FuzzyBugComparator
java.lang.Object
edu.umd.cs.findbugs.FuzzyBugComparator
- All Implemented Interfaces:
WarningComparator, Serializable, Comparator<BugInstance>
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:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate static classFilter ignored BugAnnotations from given Iterator. -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final IdentityHashMap<BugInstance, BugCollection> Keep track of which BugCollections the various BugInstances have come from.private ClassNameRewriterprivate static final boolean -
Constructor Summary
ConstructorsConstructorDescriptionMap of class hashes to canonical class names used for comparison purposes. -
Method Summary
Modifier and TypeMethodDescriptionintcompare(BugInstance lhs, BugInstance rhs) intcompareClasses(BugCollection lhsCollection, BugCollection rhsCollection, ClassAnnotation lhsClass, ClassAnnotation rhsClass) intcompareClassesByName(BugCollection lhsCollection, BugCollection rhsCollection, String lhsClassName, String rhsClassName) intcompareMethods(BugCollection lhsCollection, BugCollection rhsCollection, MethodAnnotation lhsMethod, MethodAnnotation rhsMethod) private static intcompareNullElements(Object a, Object b) intcompareSourceLines(BugCollection lhsCollection, BugCollection rhsCollection, SourceLineAnnotation lhs, SourceLineAnnotation rhs) Compare source line annotations.static booleanignore(BugAnnotation annotation) voidregisterBugCollection(BugCollection bugCollection) Register a BugCollection.private StringrewriteClassName(String className) voidsetClassNameRewriter(ClassNameRewriter classNameRewriter) Methods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface Comparator
equals, reversed, thenComparing, thenComparing, thenComparing, thenComparingDouble, thenComparingInt, thenComparingLong
-
Field Details
-
DEBUG
private static final boolean DEBUG- See Also:
-
bugCollectionMap
Keep track of which BugCollections the various BugInstances have come from. -
classNameRewriter
-
significantDescriptionSet
-
-
Constructor Details
-
FuzzyBugComparator
public FuzzyBugComparator()Map of class hashes to canonical class names used for comparison purposes.
-
-
Method Details
-
registerBugCollection
Register a BugCollection. This allows us to find the class and method hashes for BugInstances to be compared.- Parameters:
bugCollection- a BugCollection
-
setClassNameRewriter
- Specified by:
setClassNameRewriterin interfaceWarningComparator
-
compare
- Specified by:
comparein interfaceComparator<BugInstance>- Specified by:
comparein interfaceWarningComparator
-
compareNullElements
-
compareClasses
public int compareClasses(BugCollection lhsCollection, BugCollection rhsCollection, ClassAnnotation lhsClass, ClassAnnotation rhsClass) -
compareClassesByName
public int compareClassesByName(BugCollection lhsCollection, BugCollection rhsCollection, String lhsClassName, String rhsClassName) -
rewriteClassName
-
compareMethods
public int compareMethods(BugCollection lhsCollection, BugCollection rhsCollection, MethodAnnotation lhsMethod, MethodAnnotation rhsMethod) -
compareSourceLines
public int compareSourceLines(BugCollection lhsCollection, BugCollection rhsCollection, SourceLineAnnotation lhs, SourceLineAnnotation rhs) Compare source line annotations.- Parameters:
lhsCollection- rhs BugCollectionrhsCollection- lhs BugCollectionlhs- a SourceLineAnnotationrhs- another SourceLineAnnotation- Returns:
- comparison of lhs and rhs
-
ignore
-