Class BugInstance

  • All Implemented Interfaces:
    XMLWriteable, java.lang.Cloneable, java.lang.Comparable<BugInstance>

    public class BugInstance
    extends java.lang.Object
    implements java.lang.Comparable<BugInstance>, XMLWriteable, java.lang.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:
    BugAnnotation
    • Constructor Detail

      • BugInstance

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

        public BugInstance​(Detector detector,
                           java.lang.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,
                           java.lang.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 Detail

      • firstSeenXMLFormat

        public static java.text.DateFormat firstSeenXMLFormat()
      • clone

        public java.lang.Object clone()
        Overrides:
        clone in class java.lang.Object
      • adjustForDetector

        public void adjustForDetector​(java.lang.String detectorName)
        Parameters:
        detectorName -
      • setAdjustExperimental

        public static void setAdjustExperimental​(boolean adjust)
      • getType

        public java.lang.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()
      • getPriorityTypeString

        public java.lang.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 java.lang.String getPriorityTypeAbbreviation()
      • getCategoryAbbrev

        public java.lang.String getCategoryAbbrev()
      • getPriorityString

        public java.lang.String getPriorityString()
      • getPriorityAbbreviation

        public java.lang.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()
      • 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 java.util.Collection<? extends SourceLineAnnotation> getAnotherInstanceSourceLineAnnotations()
      • getInstanceKey

        public java.lang.String getInstanceKey()
      • annotationIterator

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

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

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

        public java.lang.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 java.lang.String getProperty​(java.lang.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 java.lang.String getProperty​(java.lang.String name,
                                            java.lang.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 java.util.Iterator<BugProperty> propertyIterator()
        Get an Iterator over the properties defined in this BugInstance.
        Returns:
        Iterator over properties
      • setProperty

        @Nonnull
        public BugInstance setProperty​(java.lang.String name,
                                       java.lang.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​(java.lang.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​(java.lang.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​(java.util.Collection<? extends BugAnnotation> annotationCollection)
        Add a Collection of BugAnnotations.
        Parameters:
        annotationCollection - Collection of BugAnnotations
      • 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,
                                             java.lang.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​(java.lang.String className,
                                    java.lang.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)
                                    java.lang.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​(java.lang.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​(java.lang.String foundType,
                                                   java.lang.String expectedType)
      • addEqualsMethodUsed

        @Nonnull
        public BugInstance addEqualsMethodUsed​(@CheckForNull
                                               java.util.Collection<XMethod> equalsMethods)
      • addField

        @Nonnull
        public BugInstance addField​(java.lang.String className,
                                    java.lang.String fieldName,
                                    java.lang.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​(java.lang.String className,
                                    java.lang.String fieldName,
                                    java.lang.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​(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
      • addMethod

        @Nonnull
        public BugInstance addMethod​(java.lang.String className,
                                     java.lang.String methodName,
                                     java.lang.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
                                     java.lang.String className,
                                     java.lang.String methodName,
                                     java.lang.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,
                                     java.lang.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​(java.lang.String className,
                                           java.lang.String methodName,
                                           java.lang.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,
                                                  java.lang.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​(java.lang.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,
                                         java.lang.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,
                                         java.lang.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​(java.lang.String className,
                                                java.lang.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 java.lang.String getMessageWithoutPrefix()
        Format a string describing this bug instance.
        Returns:
        the description
      • getAbridgedMessage

        public java.lang.String getAbridgedMessage()
      • getMessage

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

        public java.lang.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 java.lang.String getMessageWithPriorityTypeAbbreviation()
      • describe

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

        public java.lang.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 java.lang.Object
      • writeXML

        public void writeXML​(XMLOutput xmlOutput)
                      throws java.io.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:
        java.io.IOException
      • getCWEid

        public int getCWEid()
      • writeXML

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

        public BugInstance addOptionalAnnotation​(@CheckForNull
                                                 BugAnnotation annotation,
                                                 java.lang.String role)
      • 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)
      • getValueSource

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

        public boolean tryAddingOptionalUniqueAnnotations​(BugAnnotation... annotations)
      • hashCode

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

        public boolean equals​(java.lang.Object o)
        Overrides:
        equals in class java.lang.Object
      • compareTo

        public int compareTo​(BugInstance other)
        Specified by:
        compareTo in interface java.lang.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​(java.lang.String instanceHash)
      • setOldInstanceHash

        public void setOldInstanceHash​(java.lang.String oldInstanceHash)
      • getInstanceHash

        public java.lang.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 java.util.List<BugAnnotation> getAnnotationsForMessage​(boolean showContext)