Class SourceLineAnnotation

java.lang.Object
edu.umd.cs.findbugs.SourceLineAnnotation
All Implemented Interfaces:
BugAnnotation, XMLWriteable, XMLWriteableWithMessages, Serializable, Cloneable, Comparable<BugAnnotation>

public class SourceLineAnnotation extends Object implements BugAnnotation
A BugAnnotation that records a range of source lines in a class.
Author:
David Hovemeyer
See Also:
  • Field Details

  • Constructor Details

    • SourceLineAnnotation

      public SourceLineAnnotation(@Nonnull @DottedClassName String className, @Nonnull String sourceFile, int startLine, int endLine, int startBytecode, int endBytecode)
      Constructor.
      Parameters:
      className - the class to which the line number(s) refer
      sourceFile - the name of the source file
      startLine - the first line (inclusive)
      endLine - the ending line (inclusive)
      startBytecode - the first bytecode offset (inclusive)
      endBytecode - the end bytecode offset (inclusive)
  • Method Details

    • clone

      public Object clone()
      Specified by:
      clone in interface BugAnnotation
      Overrides:
      clone in class Object
    • createUnknown

      public static SourceLineAnnotation createUnknown(@DottedClassName String className, String sourceFile)
      Factory method to create an unknown source line annotation.
      Parameters:
      className - the class name
      sourceFile - the source file name
      Returns:
      the SourceLineAnnotation
    • createUnknown

      public static SourceLineAnnotation createUnknown(@DottedClassName String className)
      Factory method to create an unknown source line annotation. This variant looks up the source filename automatically based on the class using best effort.
      Parameters:
      className - the class name
      Returns:
      the SourceLineAnnotation
    • createReallyUnknown

      public static SourceLineAnnotation createReallyUnknown(@DottedClassName String className)
      Factory method to create an unknown source line annotation. This doesn't use the analysis context.
      Parameters:
      className - the class name
      Returns:
      the SourceLineAnnotation
    • createUnknown

      @Nonnull public static SourceLineAnnotation createUnknown(@DottedClassName String className, String sourceFile, int startBytecode, int endBytecode)
      Factory method to create an unknown source line annotation. This variant is used when bytecode offsets are known, but not source lines.
      Parameters:
      className - the class name
      sourceFile - the source file name
      Returns:
      the SourceLineAnnotation
    • fromVisitedMethod

      public static SourceLineAnnotation fromVisitedMethod(PreorderVisitor visitor)
      Factory method for creating a source line annotation describing an entire method.
      Parameters:
      visitor - a BetterVisitor which is visiting the method
      Returns:
      the SourceLineAnnotation
    • fromVisitedMethod

      public static SourceLineAnnotation fromVisitedMethod(org.apache.bcel.generic.MethodGen methodGen, String sourceFile)
      Factory method for creating a source line annotation describing an entire method.
      Parameters:
      methodGen - the method being visited
      Returns:
      the SourceLineAnnotation, or null if we do not have line number information for the method
    • forEntireMethod

      public static SourceLineAnnotation forEntireMethod(@DottedClassName String className, String sourceFile, org.apache.bcel.classfile.LineNumberTable lineNumberTable, int codeSize)
      Create a SourceLineAnnotation covering an entire method.
      Parameters:
      className - name of the class the method is in
      sourceFile - source file containing the method
      lineNumberTable - the method's LineNumberTable
      codeSize - size in bytes of the method's code
      Returns:
      a SourceLineAnnotation covering the entire method
    • forEntireMethod

      public static SourceLineAnnotation forEntireMethod(org.apache.bcel.classfile.JavaClass javaClass, @CheckForNull org.apache.bcel.classfile.Method method)
      Create a SourceLineAnnotation covering an entire method.
      Parameters:
      javaClass - JavaClass containing the method
      method - the method
      Returns:
      a SourceLineAnnotation for the entire method
    • forEntireMethod

      public static SourceLineAnnotation forEntireMethod(org.apache.bcel.classfile.JavaClass javaClass, XMethod xmethod)
      Create a SourceLineAnnotation covering an entire method.
      Parameters:
      javaClass - JavaClass containing the method
      xmethod - the method
      Returns:
      a SourceLineAnnotation for the entire method
    • forFirstLineOfMethod

      public static SourceLineAnnotation forFirstLineOfMethod(MethodDescriptor methodDescriptor)
      Make a best-effort attempt to create a SourceLineAnnotation for the first line of a method.
      Parameters:
      methodDescriptor - a method
      Returns:
      SourceLineAnnotation describing the first line of the method (insofar as we can actually figure that out from the bytecode)
    • fromVisitedInstruction

      public static SourceLineAnnotation fromVisitedInstruction(BytecodeScanningDetector visitor, int pc)
      Factory method for creating a source line annotation describing the source line number for the instruction being visited by given visitor.
      Parameters:
      visitor - a BetterVisitor which is visiting the method
      pc - the bytecode offset of the instruction in the method
      Returns:
      the SourceLineAnnotation, or null if we do not have line number information for the instruction
    • fromVisitedInstruction

      public static SourceLineAnnotation fromVisitedInstruction(ClassContext classContext, PreorderVisitor visitor, int pc)
      Factory method for creating a source line annotation describing the source line number for the instruction being visited by given visitor.
      Parameters:
      classContext - the ClassContext
      visitor - a BetterVisitor which is visiting the method
      pc - the bytecode offset of the instruction in the method
      Returns:
      the SourceLineAnnotation, or null if we do not have line number information for the instruction
    • fromVisitedInstruction

      public static SourceLineAnnotation fromVisitedInstruction(ClassContext classContext, org.apache.bcel.classfile.Method method, Location loc)
      Create from Method and Location in a visited class.
      Parameters:
      classContext - ClassContext of visited class
      method - Method in visited class
      loc - Location in visited class
      Returns:
      SourceLineAnnotation describing visited Location
    • fromVisitedInstruction

      public static SourceLineAnnotation fromVisitedInstruction(ClassContext classContext, org.apache.bcel.classfile.Method method, org.apache.bcel.generic.InstructionHandle handle)
      Create from Method and InstructionHandle in a visited class.
      Parameters:
      classContext - ClassContext of visited class
      method - Method in visited class
      handle - InstructionHandle in visited class
      Returns:
      SourceLineAnnotation describing visited instruction
    • fromVisitedInstruction

      public static SourceLineAnnotation fromVisitedInstruction(MethodDescriptor methodDescriptor, Location location)
      Create from MethodDescriptor and Location of visited instruction.
      Parameters:
      methodDescriptor - MethodDescriptor identifying analyzed method
      location - Location of instruction within analyed method
      Returns:
      SourceLineAnnotation describing visited instruction
    • fromVisitedInstruction

      public static SourceLineAnnotation fromVisitedInstruction(MethodDescriptor methodDescriptor, int position)
    • fromVisitedInstruction

      public static SourceLineAnnotation fromVisitedInstruction(ClassContext classContext, org.apache.bcel.classfile.Method method, int pc)
      Create from Method and bytecode offset in a visited class.
      Parameters:
      classContext - ClassContext of visited class
      method - Method in visited class
      pc - bytecode offset in visited method
      Returns:
      SourceLineAnnotation describing visited instruction
    • fromVisitedInstruction

      public static SourceLineAnnotation fromVisitedInstruction(org.apache.bcel.classfile.JavaClass jclass, org.apache.bcel.classfile.Method method, int pc)
      Create from Method and bytecode offset in a visited class.
      Parameters:
      jclass - JavaClass of visited class
      method - Method in visited class
      pc - bytecode offset in visited method
      Returns:
      SourceLineAnnotation describing visited instruction
    • fromVisitedInstructionRange

      public static SourceLineAnnotation fromVisitedInstructionRange(BytecodeScanningDetector visitor, int startPC, int endPC)
      Factory method for creating a source line annotation describing the source line numbers for a range of instructions in the method being visited by the given visitor.
      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:
      the SourceLineAnnotation, or null if we do not have line number information for the instruction
    • fromVisitedInstructionRange

      @Nonnull public static SourceLineAnnotation fromVisitedInstructionRange(ClassContext classContext, PreorderVisitor visitor, int startPC, int endPC)
      Factory method for creating a source line annotation describing the source line numbers for a range of instructions in the method being visited by the given visitor.
      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:
      the SourceLineAnnotation, or null if we do not have line number information for the instruction
    • fromRawData

      public static SourceLineAnnotation fromRawData(String className, String sourceFile, int startLine, int endLine, int startPC, int endPC)
    • fromVisitedInstruction

      public static SourceLineAnnotation fromVisitedInstruction(BytecodeScanningDetector visitor)
      Factory method for creating a source line annotation describing the source line number for the instruction being visited by given visitor.
      Parameters:
      visitor - a DismantleBytecode visitor which is visiting the method
      Returns:
      the SourceLineAnnotation, or null if we do not have line number information for the instruction
    • fromVisitedInstruction

      @Nonnull public static SourceLineAnnotation fromVisitedInstruction(ClassContext classContext, org.apache.bcel.generic.MethodGen methodGen, String sourceFile, @Nonnull org.apache.bcel.generic.InstructionHandle handle)
      Factory method for creating a source line annotation describing the source line number for a visited instruction.
      Parameters:
      classContext - the ClassContext
      methodGen - the MethodGen object representing the method
      handle - the InstructionHandle containing the visited instruction
      Returns:
      the SourceLineAnnotation, or null if we do not have line number information for the instruction
    • fromVisitedInstructionRange

      public static SourceLineAnnotation fromVisitedInstructionRange(ClassContext classContext, org.apache.bcel.generic.MethodGen methodGen, String sourceFile, org.apache.bcel.generic.InstructionHandle start, org.apache.bcel.generic.InstructionHandle end)
      Factory method for creating a source line annotation describing the source line numbers for a range of instruction in a method.
      Parameters:
      classContext - theClassContext
      methodGen - the method
      start - the start instruction
      end - the end instruction (inclusive)
    • getClassName

      @Nonnull @DottedClassName public String getClassName()
    • getSourceFile

      @Nonnull public String getSourceFile()
      Get the source file name.
    • isSourceFileKnown

      public boolean isSourceFileKnown()
      Is the source file known?
    • setSourceFile

      public void setSourceFile(String sourceFile)
      Set the source file name.
      Parameters:
      sourceFile - the source file name
    • getSimpleClassName

      public String getSimpleClassName()
      Get the simple class name (the part of the name after the dot)
    • getPackageName

      public String getPackageName()
    • getStartLine

      public int getStartLine()
      Get the start line (inclusive).
    • getEndLine

      public int getEndLine()
      Get the ending line (inclusive).
    • getStartBytecode

      public int getStartBytecode()
      Get start bytecode (inclusive).
    • getEndBytecode

      public int getEndBytecode()
      Get end bytecode (inclusive).
    • isUnknown

      public boolean isUnknown()
      Is this an unknown source line annotation?
    • accept

      public void accept(BugAnnotationVisitor visitor)
      Description copied from interface: BugAnnotation
      Accept a BugAnnotationVisitor.
      Specified by:
      accept in interface BugAnnotation
      Parameters:
      visitor - the visitor to accept
    • format

      public String format(String key, ClassAnnotation primaryClass)
      Description copied from interface: BugAnnotation
      Format the annotation as a String. The given key specifies additional information about how the annotation should be formatted. If the key is empty, then the "default" format will be used.
      Specified by:
      format in interface BugAnnotation
      Parameters:
      key - how the annotation should be formatted
      primaryClass - The primary class for the bug; some bug annotation format msgs are simplified in relation to that class.
    • getDescription

      public String getDescription()
      Description copied from interface: BugAnnotation
      Get a description of this bug annotation. The description is a key for the FindBugsAnnotationDescriptions resource bundle.
      Specified by:
      getDescription in interface BugAnnotation
    • setDescription

      public void setDescription(String description)
      Description copied from interface: BugAnnotation
      Set a description of this bug annotation. The description is a key for the FindBugsAnnotationDescriptions resource bundle.
      Specified by:
      setDescription in interface BugAnnotation
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • compareTo

      public int compareTo(BugAnnotation o)
      Specified by:
      compareTo in interface Comparable<BugAnnotation>
    • hashCode

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

      public boolean equals(Object o)
      Overrides:
      equals 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
    • generateRelativeSource

      public static void generateRelativeSource(File relativeSourceBase, Project project)
    • clearGenerateRelativeSource

      public static void clearGenerateRelativeSource()
    • writeXML

      public void writeXML(XMLOutput xmlOutput, boolean addMessages, boolean isPrimary) throws IOException
      Specified by:
      writeXML in interface XMLWriteableWithMessages
      Throws:
      IOException
    • getSourcePath

      public String getSourcePath()
    • getRealSourcePath

      public String getRealSourcePath()
      Returns the complete path of the source file the analyzed class has been generated from, if this information is available to the current AnalysisContext, otherwise falls back to getSourcePath().
      Returns:
      the complete path of the source file the analyzed class has been generated from, otherwise falls back to getSourcePath().
    • setSynthetic

      public void setSynthetic(boolean synthetic)
    • isSynthetic

      public boolean isSynthetic()
    • isSignificant

      public boolean isSignificant()
      Description copied from interface: BugAnnotation
      Is this annotation used to compute instance hashes or match bug instances across versions
      Specified by:
      isSignificant in interface BugAnnotation
      Returns:
      true if significant
    • toString

      public String toString(ClassAnnotation primaryClass)
      Specified by:
      toString in interface BugAnnotation