Class BugInstance

java.lang.Object
edu.umd.cs.findbugs.BugInstance
All Implemented Interfaces:
XMLWriteable, Cloneable, Comparable<BugInstance>

public class BugInstance extends Object implements Comparable<BugInstance>, XMLWriteable, Cloneable

An instance of a bug pattern. A BugInstance consists of several parts:

  • the type, which is a string indicating what kind of bug it is; used as a key for the FindBugsMessages resource bundle
  • the priority; how likely this instance is to actually be a bug
  • a list of annotations

The annotations describe classes, methods, fields, source locations, and other relevant context information about the bug instance. Every BugInstance must have at least one ClassAnnotation, which describes the class in which the instance was found. This is the "primary class annotation".

BugInstance objects are built up by calling a string of add methods. (These methods all "return this", so they can be chained). Some of the add methods are specialized to get information automatically from a BetterVisitor or DismantleBytecode object.

Author:
David Hovemeyer
See Also:
  • Constructor Details

    • BugInstance

      public BugInstance(String type, int priority)
      Constructor.
      Parameters:
      type - the bug type
      priority - the bug priority
    • BugInstance

      public BugInstance(Detector detector, String type, int priority)
      Create a new BugInstance. This is the constructor that should be used by Detectors.
      Parameters:
      detector - the Detector that is reporting the BugInstance
      type - the bug type
      priority - the bug priority
    • BugInstance

      public BugInstance(Detector2 detector, String type, int priority)
      Create a new BugInstance. This is the constructor that should be used by Detectors.
      Parameters:
      detector - the Detector2 that is reporting the BugInstance
      type - the bug type
      priority - the bug priority
  • Method Details

    • firstSeenXMLFormat

      public static DateFormat firstSeenXMLFormat()
    • clone

      public Object clone()
      Overrides:
      clone in class Object
    • adjustForDetector

      public void adjustForDetector(String detectorName)
      Parameters:
      detectorName -
    • setAdjustExperimental

      public static void setAdjustExperimental(boolean adjust)
    • getType

      public String getType()
      Get the bug pattern name (e.g., IL_INFINITE_RECURSIVE_LOOP)
    • getBugPattern

      @Nonnull public BugPattern getBugPattern()
      Get the BugPattern.
    • getPriority

      public int getPriority()
      Get the bug priority.
    • getBugRank

      public int getBugRank()
    • getBugRankCategory

      public BugRankCategory getBugRankCategory()
    • getPriorityTypeString

      public String getPriorityTypeString()
      Get a string describing the bug priority and type. e.g. "High Priority Correctness"
      Returns:
      a string describing the bug priority and type
    • getPriorityTypeAbbreviation

      public String getPriorityTypeAbbreviation()
    • getCategoryAbbrev

      public String getCategoryAbbrev()
    • getPriorityString

      public String getPriorityString()
    • getPriorityAbbreviation

      public String getPriorityAbbreviation()
    • setPriority

      public void setPriority(int p)
      Set the bug priority.
    • raisePriority

      public void raisePriority()
    • lowerPriority

      public void lowerPriority()
    • lowerPriorityALot

      public void lowerPriorityALot()
    • isExperimental

      public boolean isExperimental()
      Is this bug instance the result of an experimental detector?
    • getPrimaryClass

      public ClassAnnotation getPrimaryClass()
      Get the primary class annotation, which indicates where the bug occurs.
    • getPrimaryType

      @CheckForNull public TypeAnnotation getPrimaryType()
      Get the primary type annotation, which indicates where the bug occurs.
    • getPrimaryMethod

      @CheckForNull public MethodAnnotation getPrimaryMethod()
      Get the primary method annotation, which indicates where the bug occurs.
    • getPrimaryField

      @CheckForNull public FieldAnnotation getPrimaryField()
      Get the primary field annotation, which indicates where the bug occurs.
    • lowerPriorityIfDeprecated

      @Nonnull public BugInstance lowerPriorityIfDeprecated()
    • getPrimaryLocalVariableAnnotation

      public LocalVariableAnnotation getPrimaryLocalVariableAnnotation()
    • getPrimarySourceLineAnnotation

      @Nonnull public SourceLineAnnotation getPrimarySourceLineAnnotation()
      Get the primary source line annotation. There is guaranteed to be one (unless some Detector constructed an invalid BugInstance).
      Returns:
      the source line annotation
    • getAnotherInstanceSourceLineAnnotations

      public Collection<? extends SourceLineAnnotation> getAnotherInstanceSourceLineAnnotations()
    • getInstanceKey

      public String getInstanceKey()
    • annotationIterator

      public Iterator<BugAnnotation> annotationIterator()
      Get an Iterator over all bug annotations.
    • getAnnotations

      public List<? extends BugAnnotation> getAnnotations()
      Get an Iterator over all bug annotations.
    • getAnnotationWithRole

      @CheckForNull public <A extends BugAnnotation> A getAnnotationWithRole(Class<A> c, String role)
      Get the first bug annotation with the specified class and role; return null if no such annotation exists;
    • getAbbrev

      public String getAbbrev()
      Get the abbreviation of this bug instance's BugPattern. This is the same abbreviation used by the BugCode which the BugPattern is a particular species of.
    • getProperty

      public String getProperty(String name)
      Get value of given property.
      Parameters:
      name - name of the property to get
      Returns:
      the value of the named property, or null if the property has not been set
    • getProperty

      public String getProperty(String name, String defaultValue)
      Get value of given property, returning given default value if the property has not been set.
      Parameters:
      name - name of the property to get
      defaultValue - default value to return if propery is not set
      Returns:
      the value of the named property, or the default value if the property has not been set
    • propertyIterator

      public Iterator<BugProperty> propertyIterator()
      Get an Iterator over the properties defined in this BugInstance.
      Returns:
      Iterator over properties
    • setProperty

      @Nonnull public BugInstance setProperty(String name, String value)
      Set value of given property.
      Parameters:
      name - name of the property to set
      value - the value of the property
      Returns:
      this object, so calls can be chained
    • lookupProperty

      public BugProperty lookupProperty(String name)
      Look up a property by name.
      Parameters:
      name - name of the property to look for
      Returns:
      the BugProperty with the given name, or null if the property has not been set
    • deleteProperty

      public boolean deleteProperty(String name)
      Delete property with given name.
      Parameters:
      name - name of the property to delete
      Returns:
      true if a property with that name was deleted, or false if there is no such property
    • addAnnotations

      @Nonnull public BugInstance addAnnotations(Collection<? extends BugAnnotation> annotationCollection)
      Add a Collection of BugAnnotations.
      Parameters:
      annotationCollection - Collection of BugAnnotations
    • addClassAndMethod

      @Nonnull public BugInstance addClassAndMethod(MethodDescriptor methodDescriptor)
    • addClassAndMethod

      public BugInstance addClassAndMethod(XMethod xMethod)
    • addClassAndMethod

      @Nonnull public BugInstance addClassAndMethod(PreorderVisitor visitor)
      Add a class annotation and a method annotation for the class and method which the given visitor is currently visiting.
      Parameters:
      visitor - the BetterVisitor
      Returns:
      this object
    • addClassAndMethod

      @Nonnull public BugInstance addClassAndMethod(MethodAnnotation methodAnnotation)
      Add class and method annotations for given method.
      Parameters:
      methodAnnotation - the method
      Returns:
      this object
    • addClassAndMethod

      @Nonnull public BugInstance addClassAndMethod(org.apache.bcel.generic.MethodGen methodGen, String sourceFile)
      Add class and method annotations for given method.
      Parameters:
      methodGen - the method
      sourceFile - source file the method is defined in
      Returns:
      this object
    • addClassAndMethod

      @Nonnull public BugInstance addClassAndMethod(org.apache.bcel.classfile.JavaClass javaClass, org.apache.bcel.classfile.Method method)
      Add class and method annotations for given class and method.
      Parameters:
      javaClass - the class
      method - the method
      Returns:
      this object
    • addClass

      @Nonnull public BugInstance addClass(String className, String sourceFileName)
      Add a class annotation. If this is the first class annotation added, it becomes the primary class annotation.
      Parameters:
      className - the name of the class
      sourceFileName - the source file of the class
      Returns:
      this object
    • addClass

      @Nonnull public BugInstance addClass(@SlashedClassName(when=UNKNOWN) String className)
      Add a class annotation. If this is the first class annotation added, it becomes the primary class annotation.
      Parameters:
      className - the name of the class
      Returns:
      this object
    • addClass

      @Nonnull public BugInstance addClass(org.objectweb.asm.tree.ClassNode classNode)
      Add a class annotation for the classNode.
      Parameters:
      classNode - the ASM visitor
      Returns:
      this object
    • addClass

      @Nonnull public BugInstance addClass(ClassDescriptor classDescriptor)
      Add a class annotation. If this is the first class annotation added, it becomes the primary class annotation.
      Parameters:
      classDescriptor - the class to add
      Returns:
      this object
    • addClass

      @Nonnull public BugInstance addClass(org.apache.bcel.classfile.JavaClass jclass)
      Add a class annotation. If this is the first class annotation added, it becomes the primary class annotation.
      Parameters:
      jclass - the JavaClass object for the class
      Returns:
      this object
    • addClass

      @Nonnull public BugInstance addClass(PreorderVisitor visitor)
      Add a class annotation for the class that the visitor is currently visiting.
      Parameters:
      visitor - the BetterVisitor
      Returns:
      this object
    • addSuperclass

      @Nonnull public BugInstance addSuperclass(PreorderVisitor visitor)
      Add a class annotation for the superclass of the class the visitor is currently visiting.
      Parameters:
      visitor - the BetterVisitor
      Returns:
      this object
    • addType

      @Nonnull public BugInstance addType(String typeDescriptor)
      Add a type annotation. Handy for referring to array types.

      For information on type descriptors,
      see http://java.sun.com/docs/books/vmspec/2nd-edition/html/ClassFile.doc. html#14152
      or http://www.murrayc.com/learning/java/java_classfileformat.shtml# TypeDescriptors

      Parameters:
      typeDescriptor - a jvm type descriptor, such as "[I"
      Returns:
      this object
    • addType

      @Nonnull public BugInstance addType(org.apache.bcel.generic.Type type)
    • addFoundAndExpectedType

      @Nonnull public BugInstance addFoundAndExpectedType(org.apache.bcel.generic.Type foundType, org.apache.bcel.generic.Type expectedType)
    • addFoundAndExpectedType

      @Nonnull public BugInstance addFoundAndExpectedType(String foundType, String expectedType)
    • addEqualsMethodUsed

      @Nonnull public BugInstance addEqualsMethodUsed(ClassDescriptor expectedClass)
    • addEqualsMethodUsed

      @Nonnull public BugInstance addEqualsMethodUsed(@CheckForNull Collection<XMethod> equalsMethods)
    • addTypeOfNamedClass

      @Nonnull public BugInstance addTypeOfNamedClass(@DottedClassName String typeName)
    • addType

      @Nonnull public BugInstance addType(ClassDescriptor c)
    • addField

      @Nonnull public BugInstance addField(String className, String fieldName, String fieldSig, boolean isStatic)
      Add a field annotation.
      Parameters:
      className - name of the class containing the field
      fieldName - the name of the field
      fieldSig - type signature of the field
      isStatic - whether or not the field is static
      Returns:
      this object
    • addField

      @Nonnull public BugInstance addField(String className, String fieldName, String fieldSig, int accessFlags)
      Add a field annotation.
      Parameters:
      className - name of the class containing the field
      fieldName - the name of the field
      fieldSig - type signature of the field
      accessFlags - access flags for the field
      Returns:
      this object
    • addField

      @Nonnull public BugInstance addField(PreorderVisitor visitor)
    • addField

      @Nonnull public BugInstance addField(FieldAnnotation fieldAnnotation)
      Add a field annotation
      Parameters:
      fieldAnnotation - the field annotation
      Returns:
      this object
    • addField

      @Nonnull public BugInstance addField(FieldVariable field)
      Add a field annotation for a FieldVariable matched in a ByteCodePattern.
      Parameters:
      field - the FieldVariable
      Returns:
      this object
    • addOptionalField

      @Nonnull public BugInstance addOptionalField(@CheckForNull XField xfield)
      Add a field annotation for an XField.
      Parameters:
      xfield - the XField
      Returns:
      this object
    • addField

      @Nonnull public BugInstance addField(XField xfield)
      Add a field annotation for an XField.
      Parameters:
      xfield - the XField
      Returns:
      this object
    • addField

      @Nonnull public BugInstance addField(FieldDescriptor fieldDescriptor)
      Add a field annotation for a FieldDescriptor.
      Parameters:
      fieldDescriptor - the FieldDescriptor
      Returns:
      this object
    • addReferencedField

      @Nonnull public BugInstance addReferencedField(DismantleBytecode visitor)
      Add a field annotation for the field which has just been accessed by the method currently being visited by given visitor. Assumes that a getfield/putfield or getstatic/putstatic has just been seen.
      Parameters:
      visitor - the DismantleBytecode object
      Returns:
      this object
    • addReferencedField

      @Nonnull public BugInstance addReferencedField(FieldAnnotation fa)
      Add a field annotation for the field referenced by the FieldAnnotation parameter
    • addVisitedField

      @Nonnull public BugInstance addVisitedField(PreorderVisitor visitor)
      Add a field annotation for the field which is being visited by given visitor.
      Parameters:
      visitor - the visitor
      Returns:
      this object
    • addOptionalLocalVariable

      @Nonnull public BugInstance addOptionalLocalVariable(DismantleBytecode dbc, OpcodeStack.Item item)
      Local variable adders
    • addMethod

      @Nonnull public BugInstance addMethod(String className, String methodName, String methodSig, boolean isStatic)
      Add a method annotation. If this is the first method annotation added, it becomes the primary method annotation.
      Parameters:
      className - name of the class containing the method
      methodName - name of the method
      methodSig - type signature of the method
      isStatic - true if the method is static, false otherwise
      Returns:
      this object
    • addMethod

      @Nonnull public BugInstance addMethod(@SlashedClassName String className, String methodName, String methodSig, int accessFlags)
      Add a method annotation. If this is the first method annotation added, it becomes the primary method annotation.
      Parameters:
      className - name of the class containing the method
      methodName - name of the method
      methodSig - type signature of the method
      accessFlags - accessFlags for the method
      Returns:
      this object
    • addMethod

      @Nonnull public BugInstance addMethod(org.apache.bcel.generic.MethodGen methodGen, String sourceFile)
      Add a method annotation. If this is the first method annotation added, it becomes the primary method annotation. If the method has source line information, then a SourceLineAnnotation is added to the method.
      Parameters:
      methodGen - the MethodGen object for the method
      sourceFile - source file method is defined in
      Returns:
      this object
    • addMethod

      @Nonnull public BugInstance addMethod(org.apache.bcel.classfile.JavaClass javaClass, org.apache.bcel.classfile.Method method)
      Add a method annotation. If this is the first method annotation added, it becomes the primary method annotation. If the method has source line information, then a SourceLineAnnotation is added to the method.
      Parameters:
      javaClass - the class the method is defined in
      method - the method
      Returns:
      this object
    • addMethod

      @Nonnull public BugInstance addMethod(JavaClassAndMethod classAndMethod)
      Add a method annotation. If this is the first method annotation added, it becomes the primary method annotation. If the method has source line information, then a SourceLineAnnotation is added to the method.
      Parameters:
      classAndMethod - JavaClassAndMethod identifying the method to add
      Returns:
      this object
    • addMethod

      @Nonnull public BugInstance addMethod(PreorderVisitor visitor)
      Add a method annotation for the method which the given visitor is currently visiting. If the method has source line information, then a SourceLineAnnotation is added to the method.
      Parameters:
      visitor - the BetterVisitor
      Returns:
      this object
    • addCalledMethod

      @Nonnull public BugInstance addCalledMethod(DismantleBytecode visitor)
      Add a method annotation for the method which has been called by the method currently being visited by given visitor. Assumes that the visitor has just looked at an invoke instruction of some kind.
      Parameters:
      visitor - the DismantleBytecode object
      Returns:
      this object
    • addCalledMethod

      @Nonnull public BugInstance addCalledMethod(XMethod m)
    • addCalledMethod

      @Nonnull public BugInstance addCalledMethod(String className, String methodName, String methodSig, boolean isStatic)
      Add a method annotation.
      Parameters:
      className - name of class containing called method
      methodName - name of called method
      methodSig - signature of called method
      isStatic - true if called method is static, false if not
      Returns:
      this object
    • addCalledMethod

      @Nonnull public BugInstance addCalledMethod(org.apache.bcel.generic.ConstantPoolGen cpg, org.apache.bcel.generic.InvokeInstruction inv)
      Add a method annotation for the method which is called by given instruction.
      Parameters:
      cpg - the constant pool for the method containing the call
      inv - the InvokeInstruction
      Returns:
      this object
    • addCalledMethod

      @Nonnull public BugInstance addCalledMethod(org.apache.bcel.generic.MethodGen methodGen, org.apache.bcel.generic.InvokeInstruction inv)
      Add a method annotation for the method which is called by given instruction.
      Parameters:
      methodGen - the method containing the call
      inv - the InvokeInstruction
      Returns:
      this object
    • addMethod

      @Nonnull public BugInstance addMethod(XMethod xmethod)
      Add a MethodAnnotation from an XMethod.
      Parameters:
      xmethod - the XMethod
      Returns:
      this object
    • addMethod

      @Nonnull public BugInstance addMethod(MethodDescriptor method)
      Add a MethodAnnotation from an MethodDescriptor.
      Parameters:
      method - the method
      Returns:
      this object
    • addMethod

      @Nonnull public BugInstance addMethod(MethodAnnotation methodAnnotation)
      Add a method annotation. If this is the first method annotation added, it becomes the primary method annotation.
      Parameters:
      methodAnnotation - the method annotation
      Returns:
      this object
    • addInt

      @Nonnull public BugInstance addInt(int value)
      Add an integer annotation.
      Parameters:
      value - the integer value
      Returns:
      this object
    • addParameterAnnotation

      @Nonnull public BugInstance addParameterAnnotation(int index, String role)
      Add an annotation about a parameter
      Parameters:
      index - parameter index, starting from 0
      role - the role used to describe the parameter
    • addString

      @Nonnull public BugInstance addString(String value)
      Add a String annotation.
      Parameters:
      value - the String value
      Returns:
      this object
    • addString

      @Nonnull public BugInstance addString(char c)
      Add a String annotation.
      Parameters:
      c - the char value
      Returns:
      this object
    • addSourceLine

      @Nonnull public BugInstance addSourceLine(SourceLineAnnotation sourceLine)
      Add a source line annotation.
      Parameters:
      sourceLine - the source line annotation
      Returns:
      this object
    • addSourceLine

      @Nonnull public BugInstance addSourceLine(BytecodeScanningDetector visitor, int pc)
      Add a source line annotation for instruction whose PC is given in the method that the given visitor is currently visiting. Note that if the method does not have line number information, then no source line annotation will be added.
      Parameters:
      visitor - a BytecodeScanningDetector that is currently visiting the method
      pc - bytecode offset of the instruction
      Returns:
      this object
    • addSourceLine

      @Nonnull public BugInstance addSourceLine(ClassContext classContext, PreorderVisitor visitor, int pc)
      Add a source line annotation for instruction whose PC is given in the method that the given visitor is currently visiting. Note that if the method does not have line number information, then no source line annotation will be added.
      Parameters:
      classContext - the ClassContext
      visitor - a PreorderVisitor that is currently visiting the method
      pc - bytecode offset of the instruction
      Returns:
      this object
    • addSourceLine

      @Nonnull public BugInstance addSourceLine(ClassContext classContext, org.apache.bcel.generic.MethodGen methodGen, String sourceFile, @Nonnull org.apache.bcel.generic.InstructionHandle handle)
      Add a source line annotation for the given instruction in the given method. Note that if the method does not have line number information, then no source line annotation will be added.
      Parameters:
      classContext - the ClassContext
      methodGen - the method being visited
      sourceFile - source file the method is defined in
      handle - the InstructionHandle containing the visited instruction
      Returns:
      this object
    • addSourceLine

      @Nonnull public BugInstance addSourceLine(ClassContext classContext, org.apache.bcel.generic.MethodGen methodGen, String sourceFile, org.apache.bcel.generic.InstructionHandle start, org.apache.bcel.generic.InstructionHandle end)
      Add a source line annotation describing a range of instructions.
      Parameters:
      classContext - the ClassContext
      methodGen - the method
      sourceFile - source file the method is defined in
      start - the start instruction in the range
      end - the end instruction in the range (inclusive)
      Returns:
      this object
    • addSourceLine

      @Nonnull public BugInstance addSourceLine(ClassContext classContext, org.apache.bcel.classfile.Method method, Location location)
      Add source line annotation for given Location in a method.
      Parameters:
      classContext - the ClassContext
      method - the Method
      location - the Location in the method
      Returns:
      this BugInstance
    • addSourceLine

      @Nonnull public BugInstance addSourceLine(MethodDescriptor methodDescriptor, Location location)
      Add source line annotation for given Location in a method.
      Parameters:
      methodDescriptor - the method
      location - the Location in the method
      Returns:
      this BugInstance
    • addSourceLine

      @Nonnull public BugInstance addSourceLine(ClassContext classContext, org.apache.bcel.classfile.Method method, org.apache.bcel.generic.InstructionHandle handle)
      Add source line annotation for given Location in a method.
      Parameters:
      classContext - the ClassContext
      method - the Method
      handle - InstructionHandle of an instruction in the method
      Returns:
      this BugInstance
    • addSourceLineRange

      @Nonnull public BugInstance addSourceLineRange(BytecodeScanningDetector visitor, int startPC, int endPC)
      Add a source line annotation describing the source line numbers for a range of instructions in the method being visited by the given visitor. Note that if the method does not have line number information, then no source line annotation will be added.
      Parameters:
      visitor - a BetterVisitor which is visiting the method
      startPC - the bytecode offset of the start instruction in the range
      endPC - the bytecode offset of the end instruction in the range
      Returns:
      this object
    • addSourceLineRange

      @Nonnull public BugInstance addSourceLineRange(ClassContext classContext, PreorderVisitor visitor, int startPC, int endPC)
      Add a source line annotation describing the source line numbers for a range of instructions in the method being visited by the given visitor. Note that if the method does not have line number information, then no source line annotation will be added.
      Parameters:
      classContext - the ClassContext
      visitor - a BetterVisitor which is visiting the method
      startPC - the bytecode offset of the start instruction in the range
      endPC - the bytecode offset of the end instruction in the range
      Returns:
      this object
    • addSourceLine

      @Nonnull public BugInstance addSourceLine(BytecodeScanningDetector visitor)
      Add a source line annotation for instruction currently being visited by given visitor. Note that if the method does not have line number information, then no source line annotation will be added.
      Parameters:
      visitor - a BytecodeScanningDetector visitor that is currently visiting the instruction
      Returns:
      this object
    • addUnknownSourceLine

      @Nonnull public BugInstance addUnknownSourceLine(String className, String sourceFile)
      Add a non-specific source line annotation. This will result in the entire source file being displayed.
      Parameters:
      className - the class name
      sourceFile - the source file name
      Returns:
      this object
    • getMessageWithoutPrefix

      @Nonnull public String getMessageWithoutPrefix()
      Format a string describing this bug instance.
      Returns:
      the description
    • getAbridgedMessage

      public String getAbridgedMessage()
    • getMessage

      public String getMessage()
      Format a string describing this bug instance.
      Returns:
      the description
    • getMessageWithPriorityType

      public String getMessageWithPriorityType()
      Format a string describing this bug pattern, with the priority and type at the beginning. e.g. "(High Priority Correctness) Guaranteed null pointer dereference..."
    • getMessageWithPriorityTypeAbbreviation

      public String getMessageWithPriorityTypeAbbreviation()
    • describe

      @Nonnull public BugInstance describe(String description)
      Add a description to the most recently added bug annotation.
      Parameters:
      description - the description to add
      Returns:
      this object
    • toString

      public String toString()
      Convert to String. This method returns the "short" message describing the bug, as opposed to the longer format returned by getMessage(). The short format is appropriate for the tree view in a GUI, where the annotations are listed separately as part of the overall bug instance.
      Overrides:
      toString in class Object
    • writeXML

      public void writeXML(XMLOutput xmlOutput) throws IOException
      Description copied from interface: XMLWriteable
      Write this object to given XMLOutput.
      Specified by:
      writeXML in interface XMLWriteable
      Parameters:
      xmlOutput - the XMLOutput for the document
      Throws:
      IOException
    • getCWEid

      public int getCWEid()
    • writeXML

      public void writeXML(XMLOutput xmlOutput, BugCollection bugCollection, boolean addMessages) throws IOException
      Throws:
      IOException
    • addOptionalAnnotation

      public BugInstance addOptionalAnnotation(@CheckForNull BugAnnotation annotation)
    • addOptionalAnnotation

      public BugInstance addOptionalAnnotation(@CheckForNull BugAnnotation annotation, String role)
    • add

      public BugInstance add(@Nonnull BugAnnotation annotation)
    • addSomeSourceForTopTwoStackValues

      public BugInstance addSomeSourceForTopTwoStackValues(ClassContext classContext, org.apache.bcel.classfile.Method method, Location location)
    • addSourceForTopStackValue

      public BugInstance addSourceForTopStackValue(ClassContext classContext, org.apache.bcel.classfile.Method method, Location location)
    • getSourceForTopStackValue

      @CheckForNull public static BugAnnotation getSourceForTopStackValue(ClassContext classContext, org.apache.bcel.classfile.Method method, Location location)
    • getSourceForStackValue

      @CheckForNull public static BugAnnotation getSourceForStackValue(ClassContext classContext, org.apache.bcel.classfile.Method method, Location location, int depth)
    • getSomeSource

      @CheckForNull public static BugAnnotation getSomeSource(ClassContext classContext, org.apache.bcel.classfile.Method method, Location location, OpcodeStack stack, int stackPos)
    • getValueSource

      @CheckForNull public static BugAnnotation getValueSource(OpcodeStack.Item item, org.apache.bcel.classfile.Method method, int pc)
    • addValueSource

      public BugInstance addValueSource(@CheckForNull OpcodeStack.Item item, DismantleBytecode dbc)
    • addValueSource

      public BugInstance addValueSource(OpcodeStack.Item item, org.apache.bcel.classfile.Method method, int pc)
    • addFieldOrMethodValueSource

      public BugInstance addFieldOrMethodValueSource(OpcodeStack.Item item)
    • addOptionalUniqueAnnotations

      public BugInstance addOptionalUniqueAnnotations(BugAnnotation... annotations)
    • tryAddingOptionalUniqueAnnotations

      public boolean tryAddingOptionalUniqueAnnotations(BugAnnotation... annotations)
    • addOptionalUniqueAnnotationsWithFallback

      public BugInstance addOptionalUniqueAnnotationsWithFallback(BugAnnotation fallback, BugAnnotation... annotations)
    • getFieldOrMethodValueSource

      @CheckForNull public static BugAnnotation getFieldOrMethodValueSource(@CheckForNull OpcodeStack.Item item)
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object
    • equals

      public boolean equals(Object o)
      Overrides:
      equals in class Object
    • compareTo

      public int compareTo(BugInstance other)
      Specified by:
      compareTo in interface Comparable<BugInstance>
    • setFirstVersion

      public void setFirstVersion(long firstVersion)
    • clearHistory

      public void clearHistory()
    • getFirstVersion

      public long getFirstVersion()
    • setHistory

      public void setHistory(BugInstance from)
    • setLastVersion

      public void setLastVersion(long lastVersion)
    • setLive

      public void setLive()
      Mark the bug instance is being alive (still present in the last version)
    • getLastVersion

      public long getLastVersion()
    • isDead

      public boolean isDead()
    • setIntroducedByChangeOfExistingClass

      public void setIntroducedByChangeOfExistingClass(boolean introducedByChangeOfExistingClass)
    • isIntroducedByChangeOfExistingClass

      public boolean isIntroducedByChangeOfExistingClass()
    • setRemovedByChangeOfPersistingClass

      public void setRemovedByChangeOfPersistingClass(boolean removedByChangeOfPersistingClass)
    • isRemovedByChangeOfPersistingClass

      public boolean isRemovedByChangeOfPersistingClass()
    • setInstanceHash

      public void setInstanceHash(String instanceHash)
    • setOldInstanceHash

      public void setOldInstanceHash(String oldInstanceHash)
    • getInstanceHash

      public String getInstanceHash()
    • isInstanceHashConsistent

      public boolean isInstanceHashConsistent()
    • setInstanceOccurrenceNum

      public void setInstanceOccurrenceNum(int instanceOccurrenceNum)
    • getInstanceOccurrenceNum

      public int getInstanceOccurrenceNum()
    • setInstanceOccurrenceMax

      public void setInstanceOccurrenceMax(int instanceOccurrenceMax)
    • getInstanceOccurrenceMax

      public int getInstanceOccurrenceMax()
    • getDetectorFactory

      @CheckForNull public DetectorFactory getDetectorFactory()
    • getAnnotationsForMessage

      public List<BugAnnotation> getAnnotationsForMessage(boolean showContext)