edu.umd.cs.findbugs
Class SourceLineAnnotation

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

public class SourceLineAnnotation
extends java.lang.Object
implements BugAnnotation

A BugAnnotation that records a range of source lines in a class.

Author:
David Hovemeyer
See Also:
BugAnnotation, Serialized Form

Field Summary
static java.lang.String UNKNOWN_SOURCE_FILE
          String returned if the source file is unknown.
 
Fields inherited from interface edu.umd.cs.findbugs.BugAnnotation
MESSAGE_TAG
 
Constructor Summary
SourceLineAnnotation(java.lang.String className, java.lang.String sourceFile, int startLine, int endLine, int startBytecode, int endBytecode)
          Constructor.
 
Method Summary
 void accept(BugAnnotationVisitor visitor)
          Accept a BugAnnotationVisitor.
 java.lang.Object clone()
           
 int compareTo(BugAnnotation o)
           
static SourceLineAnnotation createUnknown(java.lang.String className)
          Factory method to create an unknown source line annotation.
static SourceLineAnnotation createUnknown(java.lang.String className, java.lang.String sourceFile)
          Factory method to create an unknown source line annotation.
static SourceLineAnnotation createUnknown(java.lang.String className, java.lang.String sourceFile, int startBytecode, int endBytecode)
          Factory method to create an unknown source line annotation.
 boolean equals(java.lang.Object o)
           
static SourceLineAnnotation forEntireMethod(org.apache.bcel.classfile.JavaClass javaClass, org.apache.bcel.classfile.Method method)
          Create a SourceLineAnnotation covering an entire method.
static SourceLineAnnotation forEntireMethod(org.apache.bcel.classfile.JavaClass javaClass, XMethod xmethod)
          Create a SourceLineAnnotation covering an entire method.
static SourceLineAnnotation forEntireMethod(java.lang.String className, java.lang.String sourceFile, org.apache.bcel.classfile.LineNumberTable lineNumberTable, int codeSize)
          Create a SourceLineAnnotation covering an entire method.
 java.lang.String format(java.lang.String key)
          Format the annotation as a String.
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.
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.
static SourceLineAnnotation fromVisitedInstruction(ClassContext classContext, org.apache.bcel.generic.MethodGen methodGen, java.lang.String sourceFile, org.apache.bcel.generic.InstructionHandle handle)
          Factory method for creating a source line annotation describing the source line number for a visited instruction.
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.
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.
static SourceLineAnnotation fromVisitedInstructionRange(ClassContext classContext, org.apache.bcel.generic.MethodGen methodGen, java.lang.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.
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.
static SourceLineAnnotation fromVisitedMethod(org.apache.bcel.generic.MethodGen methodGen, java.lang.String sourceFile)
          Factory method for creating a source line annotation describing an entire method.
static SourceLineAnnotation fromVisitedMethod(PreorderVisitor visitor)
          Factory method for creating a source line annotation describing an entire method.
 java.lang.String getClassName()
          Get the class name.
 java.lang.String getDescription()
          Get a description of this bug annotation.
 int getEndBytecode()
          Get end bytecode (inclusive).
 int getEndLine()
          Get the ending line (inclusive).
 java.lang.String getPackageName()
          Get the package name.
 java.lang.String getSourceFile()
          Get the source file name.
 int getStartBytecode()
          Get start bytecode (inclusive).
 int getStartLine()
          Get the start line (inclusive).
 int hashCode()
           
 boolean isSourceFileKnown()
          Is the source file known?
 boolean isSynthetic()
           
 boolean isUnknown()
          Is this an unknown source line annotation?
 void setDescription(java.lang.String description)
          Set a description of this bug annotation.
 void setSourceFile(java.lang.String sourceFile)
          Set the source file name.
 void setSynthetic(boolean synthetic)
           
 java.lang.String toString()
           
 void writeXML(XMLOutput xmlOutput)
          Write this object to given XMLOutput.
 void writeXML(XMLOutput xmlOutput, boolean addMessages)
           
 
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
 

Field Detail

UNKNOWN_SOURCE_FILE

public static final java.lang.String UNKNOWN_SOURCE_FILE
String returned if the source file is unknown. This must match what BCEL uses when the source file is unknown.

See Also:
Constant Field Values
Constructor Detail

SourceLineAnnotation

public SourceLineAnnotation(java.lang.String className,
                            java.lang.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 Detail

clone

public java.lang.Object clone()
Specified by:
clone in interface BugAnnotation
Overrides:
clone in class java.lang.Object

createUnknown

public static SourceLineAnnotation createUnknown(java.lang.String className,
                                                 java.lang.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(java.lang.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

createUnknown

public static SourceLineAnnotation createUnknown(java.lang.String className,
                                                 java.lang.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,
                                                     java.lang.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(java.lang.String className,
                                                   java.lang.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,
                                                   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

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

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

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

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

public static SourceLineAnnotation fromVisitedInstruction(ClassContext classContext,
                                                          org.apache.bcel.generic.MethodGen methodGen,
                                                          java.lang.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,
                                                               java.lang.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

public java.lang.String getClassName()
Get the class name.


getSourceFile

public java.lang.String getSourceFile()
Get the source file name.


isSourceFileKnown

public boolean isSourceFileKnown()
Is the source file known?


setSourceFile

public void setSourceFile(java.lang.String sourceFile)
Set the source file name.

Parameters:
sourceFile - the source file name

getPackageName

public java.lang.String getPackageName()
Get the package name.


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 java.lang.String format(java.lang.String key)
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

getDescription

public java.lang.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(java.lang.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 java.lang.String toString()
Overrides:
toString in class java.lang.Object

compareTo

public int compareTo(BugAnnotation o)
Specified by:
compareTo in interface java.lang.Comparable<BugAnnotation>

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

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

writeXML

public void writeXML(XMLOutput xmlOutput,
                     boolean addMessages)
              throws java.io.IOException
Specified by:
writeXML in interface XMLWriteableWithMessages
Throws:
java.io.IOException

setSynthetic

public void setSynthetic(boolean synthetic)
Parameters:
synthetic - The synthetic to set.

isSynthetic

public boolean isSynthetic()
Returns:
Returns the synthetic.