Package edu.umd.cs.findbugs
Class FuzzyBugComparator
- java.lang.Object
-
- edu.umd.cs.findbugs.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.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static classFuzzyBugComparator.FilteringBugAnnotationIteratorFilter ignored BugAnnotations from given Iterator.
-
Field Summary
Fields Modifier and Type Field Description private java.util.IdentityHashMap<BugInstance,BugCollection>bugCollectionMapKeep track of which BugCollections the various BugInstances have come from.private ClassNameRewriterclassNameRewriterprivate static booleanDEBUGprivate static java.util.Set<java.lang.String>significantDescriptionSet
-
Constructor Summary
Constructors Constructor Description FuzzyBugComparator()Map of class hashes to canonical class names used for comparison purposes.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description intcompare(BugInstance lhs, BugInstance rhs)intcompareClasses(BugCollection lhsCollection, BugCollection rhsCollection, ClassAnnotation lhsClass, ClassAnnotation rhsClass)intcompareClassesByName(BugCollection lhsCollection, BugCollection rhsCollection, java.lang.String lhsClassName, java.lang.String rhsClassName)intcompareMethods(BugCollection lhsCollection, BugCollection rhsCollection, MethodAnnotation lhsMethod, MethodAnnotation rhsMethod)private static intcompareNullElements(java.lang.Object a, java.lang.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 java.lang.StringrewriteClassName(java.lang.String className)voidsetClassNameRewriter(ClassNameRewriter classNameRewriter)
-
-
-
Field Detail
-
DEBUG
private static final boolean DEBUG
- See Also:
- Constant Field Values
-
bugCollectionMap
private final java.util.IdentityHashMap<BugInstance,BugCollection> bugCollectionMap
Keep track of which BugCollections the various BugInstances have come from.
-
classNameRewriter
private ClassNameRewriter classNameRewriter
-
significantDescriptionSet
@StaticConstant private static final java.util.Set<java.lang.String> significantDescriptionSet
-
-
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
-
setClassNameRewriter
public void setClassNameRewriter(ClassNameRewriter classNameRewriter)
- Specified by:
setClassNameRewriterin interfaceWarningComparator
-
compare
public int compare(BugInstance lhs, BugInstance rhs)
- Specified by:
comparein interfacejava.util.Comparator<BugInstance>- Specified by:
comparein interfaceWarningComparator
-
compareNullElements
private static int compareNullElements(java.lang.Object a, java.lang.Object b)
-
compareClasses
public int compareClasses(BugCollection lhsCollection, BugCollection rhsCollection, ClassAnnotation lhsClass, ClassAnnotation rhsClass)
-
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
-
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:
rhsCollection- lhs BugCollectionlhsCollection- rhs BugCollectionlhs- a SourceLineAnnotationrhs- another SourceLineAnnotation- Returns:
- comparison of lhs and rhs
-
ignore
public static boolean ignore(BugAnnotation annotation)
-
-