FindBugs™ 1.3.9

edu.umd.cs.findbugs.ba
Class ClassContext

java.lang.Object
  extended by edu.umd.cs.findbugs.ba.ClassContext

public class ClassContext
extends java.lang.Object

A ClassContext caches all of the auxiliary objects used to analyze the methods of a class. That way, these objects don't need to be created over and over again.

Author:
David Hovemeyer

Field Summary
static boolean DEBUG
           
static int depth
           
static boolean DUMP_DATAFLOW_ANALYSIS
           
static boolean TIME_ANALYSES
           
 
Constructor Summary
ClassContext(org.apache.bcel.classfile.JavaClass jclass, AnalysisContext analysisContext)
          Constructor.
 
Method Summary
 void dumpDataflowInformation(org.apache.bcel.classfile.Method method)
           
static void dumpDataflowInformation(org.apache.bcel.classfile.Method method, CFG cfg, ValueNumberDataflow vnd, IsNullValueDataflow inv, UnconditionalValueDerefDataflow dataflow, TypeDataflow typeDataflow)
           
static void dumpLiveLocalStoreDataflow(MethodDescriptor method, CFG cfg, LiveLocalStoreDataflow dataflow)
           
 void dumpSimpleDataflowInformation(org.apache.bcel.classfile.Method method)
           
static void dumpTypeDataflow(org.apache.bcel.classfile.Method method, CFG cfg, TypeDataflow typeDataflow)
           
 AnalysisContext getAnalysisContext()
          Get the AnalysisContext.
 AssertionMethods getAssertionMethods()
          Get AssertionMethods for class.
 BlockTypeDataflow getBlockTypeDataflow(org.apache.bcel.classfile.Method method)
          Get BlockType dataflow for given method.
static java.util.BitSet getBytecodeSet(org.apache.bcel.classfile.JavaClass clazz, org.apache.bcel.classfile.Method method)
          Get a BitSet representing the bytecodes that are used in the given method.
 java.util.BitSet getBytecodeSet(org.apache.bcel.classfile.Method method)
          Get a BitSet representing the bytecodes that are used in the given method.
 CallListDataflow getCallListDataflow(org.apache.bcel.classfile.Method method)
          Get CallListDataflow for method.
 CFG getCFG(org.apache.bcel.classfile.Method method)
          Get a CFG for given method.
 ClassDescriptor getClassDescriptor()
           
 CompactLocationNumbering getCompactLocationNumbering(org.apache.bcel.classfile.Method method)
          Get a CompactLocationNumbering for a method.
 ConstantDataflow getConstantDataflow(org.apache.bcel.classfile.Method method)
          Get ConstantDataflow for method.
 org.apache.bcel.generic.ConstantPoolGen getConstantPoolGen()
          Get the ConstantPoolGen used to create the MethodGens for this class.
 DefinitelyNullSetDataflow getDefinitelyNullSetDataflow(org.apache.bcel.classfile.Method method)
          Get DefinitelyNullSetDataflow for a method.
 DepthFirstSearch getDepthFirstSearch(org.apache.bcel.classfile.Method method)
          Get a DepthFirstSearch for given method.
 ExceptionSetFactory getExceptionSetFactory(org.apache.bcel.classfile.Method method)
          Get ExceptionSetFactory for given method.
 java.lang.String getFullyQualifiedMethodName(org.apache.bcel.classfile.Method method)
           
 IsNullValueDataflow getIsNullValueDataflow(org.apache.bcel.classfile.Method method)
          Get an IsNullValueDataflow for given method.
 org.apache.bcel.classfile.JavaClass getJavaClass()
          Get the JavaClass.
 LiveLocalStoreDataflow getLiveLocalStoreDataflow(org.apache.bcel.classfile.Method method)
          Get LiveLocalStoreAnalysis dataflow for given method.
 LoadDataflow getLoadDataflow(org.apache.bcel.classfile.Method method)
          Get load dataflow.
 LoadedFieldSet getLoadedFieldSet(org.apache.bcel.classfile.Method method)
          Get the set of fields loaded by given method.
 LockChecker getLockChecker(org.apache.bcel.classfile.Method method)
          Get LockChecker for method.
 LockDataflow getLockDataflow(org.apache.bcel.classfile.Method method)
          Get dataflow for LockAnalysis for given method.
 RepositoryLookupFailureCallback getLookupFailureCallback()
          Get the RepositoryLookupFailureCallback.
static java.util.Set<java.lang.Integer> getLoopExitBranches(org.apache.bcel.classfile.Method method, org.apache.bcel.generic.MethodGen methodGen)
           
 org.apache.bcel.classfile.Method getMethod(org.apache.bcel.generic.MethodGen methodGen)
          Look up the Method represented by given MethodGen.
 java.lang.Object getMethodAnalysis(java.lang.Class<?> analysisClass, MethodDescriptor methodDescriptor)
          Retrieve a method analysis object.
 org.apache.bcel.generic.MethodGen getMethodGen(org.apache.bcel.classfile.Method method)
          Get a MethodGen object for given method.
 java.util.List<org.apache.bcel.classfile.Method> getMethodsInCallOrder()
           
 DominatorsAnalysis getNonExceptionDominatorsAnalysis(org.apache.bcel.classfile.Method method)
          Get DominatorsAnalysis for given method, where exception edges are ignored.
 PostDominatorsAnalysis getNonExceptionPostDominatorsAnalysis(org.apache.bcel.classfile.Method method)
          Get PostDominatorsAnalysis for given method, where exception edges are ignored.
 PostDominatorsAnalysis getNonImplicitExceptionDominatorsAnalysis(org.apache.bcel.classfile.Method method)
          Get DominatorsAnalysis for given method, where implicit exception edges are ignored.
 java.util.Map<MethodDescriptor,java.lang.Object> getObjectMap(java.lang.Class<?> analysisClass)
           
 short[] getOffsetToOpcodeMap(org.apache.bcel.classfile.Method method)
          Get array mapping bytecode offsets to opcodes for given method.
 java.lang.String[] getParameterSignatureList(org.apache.bcel.classfile.Method method)
          Get array of type signatures of parameters for given method.
 ReturnPathDataflow getReturnPathDataflow(org.apache.bcel.classfile.Method method)
          Get ReturnPathDataflow for method.
 ReturnPathTypeDataflow getReturnPathTypeDataflow(org.apache.bcel.classfile.Method method)
          Get ReturnPathTypeDataflow for a method.
 ReverseDepthFirstSearch getReverseDepthFirstSearch(org.apache.bcel.classfile.Method method)
          Get a ReverseDepthFirstSearch for given method.
 StoreDataflow getStoreDataflow(org.apache.bcel.classfile.Method method)
          Get store dataflow.
 TypeDataflow getTypeDataflow(org.apache.bcel.classfile.Method method)
          Get a TypeDataflow for given method.
 UnconditionalValueDerefDataflow getUnconditionalValueDerefDataflow(org.apache.bcel.classfile.Method method)
          Get the UnconditionalValueDerefDataflow for a method.
 UsagesRequiringNonNullValues getUsagesRequiringNonNullValues(org.apache.bcel.classfile.Method method)
          Get a UsagesRequiringNonNullValues for given method.
 ValueNumberDataflow getValueNumberDataflow(org.apache.bcel.classfile.Method method)
          Get a ValueNumberDataflow for given method.
 XClass getXClass()
           
static void indent()
           
static java.util.BitSet linesMentionedMultipleTimes(org.apache.bcel.classfile.Method method)
           
 void purgeAllMethodAnalyses()
           
 void purgeMethodAnalyses(MethodDescriptor methodDescriptor)
          Purge all CFG-based method analyses for given method.
 void putMethodAnalysis(java.lang.Class<?> analysisClass, MethodDescriptor methodDescriptor, java.lang.Object object)
          Store a method analysis object.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

DEBUG

public static final boolean DEBUG

TIME_ANALYSES

public static final boolean TIME_ANALYSES

DUMP_DATAFLOW_ANALYSIS

public static final boolean DUMP_DATAFLOW_ANALYSIS

depth

public static int depth
Constructor Detail

ClassContext

public ClassContext(org.apache.bcel.classfile.JavaClass jclass,
                    AnalysisContext analysisContext)
Constructor.

Parameters:
jclass - the JavaClass
Method Detail

indent

public static void indent()

getObjectMap

public java.util.Map<MethodDescriptor,java.lang.Object> getObjectMap(java.lang.Class<?> analysisClass)

putMethodAnalysis

public void putMethodAnalysis(java.lang.Class<?> analysisClass,
                              MethodDescriptor methodDescriptor,
                              java.lang.Object object)
Store a method analysis object. Note that the cached analysis object could be a special value (indicating null or an exception).

Parameters:
analysisClass - class the method analysis object belongs to
methodDescriptor - method descriptor identifying the analyzed method
object - the analysis object to cache

getMethodAnalysis

public java.lang.Object getMethodAnalysis(java.lang.Class<?> analysisClass,
                                          MethodDescriptor methodDescriptor)
                                   throws CheckedAnalysisException
Retrieve a method analysis object.

Parameters:
analysisClass - class the method analysis object should belong to
methodDescriptor - method descriptor identifying the analyzed method
Returns:
the analysis object
Throws:
CheckedAnalysisException

purgeAllMethodAnalyses

public void purgeAllMethodAnalyses()

purgeMethodAnalyses

public void purgeMethodAnalyses(MethodDescriptor methodDescriptor)
Purge all CFG-based method analyses for given method.

Parameters:
methodDescriptor - method descriptor identifying method to purge

getJavaClass

public org.apache.bcel.classfile.JavaClass getJavaClass()
Get the JavaClass.


getXClass

public XClass getXClass()

getClassDescriptor

public ClassDescriptor getClassDescriptor()

getMethod

public org.apache.bcel.classfile.Method getMethod(org.apache.bcel.generic.MethodGen methodGen)
Look up the Method represented by given MethodGen.

Parameters:
methodGen - a MethodGen
Returns:
the Method represented by the MethodGen

getFullyQualifiedMethodName

public java.lang.String getFullyQualifiedMethodName(org.apache.bcel.classfile.Method method)

getMethodsInCallOrder

@NonNull
public java.util.List<org.apache.bcel.classfile.Method> getMethodsInCallOrder()

getAnalysisContext

public AnalysisContext getAnalysisContext()
Get the AnalysisContext.


getLookupFailureCallback

public RepositoryLookupFailureCallback getLookupFailureCallback()
Get the RepositoryLookupFailureCallback.

Returns:
the RepositoryLookupFailureCallback

getMethodGen

@CheckForNull
public org.apache.bcel.generic.MethodGen getMethodGen(org.apache.bcel.classfile.Method method)
Get a MethodGen object for given method.

Parameters:
method - the method
Returns:
the MethodGen object for the method, or null if the method has no Code attribute (and thus cannot be analyzed) or if the method seems unprofitable to analyze

getCFG

public CFG getCFG(org.apache.bcel.classfile.Method method)
           throws CFGBuilderException
Get a CFG for given method. If pruning options are in effect, pruning will be done. Because the CFG pruning can involve interprocedural analysis, it is done on a best-effort basis, so the CFG returned might not actually be pruned.

Parameters:
method - the method
Returns:
the CFG
Throws:
CFGBuilderException - if a CFG cannot be constructed for the method

getConstantPoolGen

@NonNull
public org.apache.bcel.generic.ConstantPoolGen getConstantPoolGen()
Get the ConstantPoolGen used to create the MethodGens for this class.

Returns:
the ConstantPoolGen

getUsagesRequiringNonNullValues

public UsagesRequiringNonNullValues getUsagesRequiringNonNullValues(org.apache.bcel.classfile.Method method)
                                                             throws DataflowAnalysisException,
                                                                    CFGBuilderException
Get a UsagesRequiringNonNullValues for given method.

Parameters:
method - the method
Returns:
the UsagesRequiringNonNullValues
Throws:
DataflowAnalysisException
CFGBuilderException

getValueNumberDataflow

public ValueNumberDataflow getValueNumberDataflow(org.apache.bcel.classfile.Method method)
                                           throws DataflowAnalysisException,
                                                  CFGBuilderException
Get a ValueNumberDataflow for given method.

Parameters:
method - the method
Returns:
the ValueNumberDataflow
Throws:
DataflowAnalysisException
CFGBuilderException

getIsNullValueDataflow

public IsNullValueDataflow getIsNullValueDataflow(org.apache.bcel.classfile.Method method)
                                           throws DataflowAnalysisException,
                                                  CFGBuilderException
Get an IsNullValueDataflow for given method.

Parameters:
method - the method
Returns:
the IsNullValueDataflow
Throws:
DataflowAnalysisException
CFGBuilderException

getTypeDataflow

public TypeDataflow getTypeDataflow(org.apache.bcel.classfile.Method method)
                             throws DataflowAnalysisException,
                                    CFGBuilderException
Get a TypeDataflow for given method.

Parameters:
method - the method
Returns:
the TypeDataflow
Throws:
DataflowAnalysisException
CFGBuilderException

getDepthFirstSearch

public DepthFirstSearch getDepthFirstSearch(org.apache.bcel.classfile.Method method)
                                     throws CFGBuilderException
Get a DepthFirstSearch for given method.

Parameters:
method - the method
Returns:
the DepthFirstSearch
Throws:
CFGBuilderException

getReverseDepthFirstSearch

public ReverseDepthFirstSearch getReverseDepthFirstSearch(org.apache.bcel.classfile.Method method)
                                                   throws CFGBuilderException
Get a ReverseDepthFirstSearch for given method.

Parameters:
method - the method
Returns:
the ReverseDepthFirstSearch
Throws:
CFGBuilderException

getBytecodeSet

@CheckForNull
public java.util.BitSet getBytecodeSet(org.apache.bcel.classfile.Method method)
Get a BitSet representing the bytecodes that are used in the given method. This is useful for prescreening a method for the existence of particular instructions. Because this step doesn't require building a MethodGen, it is very fast and memory-efficient. It may allow a Detector to avoid some very expensive analysis, which is a Big Win for the user.

Parameters:
method - the method
Returns:
the BitSet containing the opcodes which appear in the method, or null if the method has no code

getBytecodeSet

@CheckForNull
public static java.util.BitSet getBytecodeSet(org.apache.bcel.classfile.JavaClass clazz,
                                                           org.apache.bcel.classfile.Method method)
Get a BitSet representing the bytecodes that are used in the given method. This is useful for prescreening a method for the existence of particular instructions. Because this step doesn't require building a MethodGen, it is very fast and memory-efficient. It may allow a Detector to avoid some very expensive analysis, which is a Big Win for the user.

Parameters:
method - the method
Returns:
the BitSet containing the opcodes which appear in the method, or null if the method has no code

getLoopExitBranches

@NonNull
public static java.util.Set<java.lang.Integer> getLoopExitBranches(org.apache.bcel.classfile.Method method,
                                                                           org.apache.bcel.generic.MethodGen methodGen)

getOffsetToOpcodeMap

public short[] getOffsetToOpcodeMap(org.apache.bcel.classfile.Method method)
Get array mapping bytecode offsets to opcodes for given method. Array elements containing zero are either not valid instruction offsets, or contain a NOP instruction. (It is convenient not to distinguish these cases.)

Parameters:
method - the method
Returns:
map of bytecode offsets to opcodes, or null if the method has no code

getLockDataflow

public LockDataflow getLockDataflow(org.apache.bcel.classfile.Method method)
                             throws CFGBuilderException,
                                    DataflowAnalysisException
Get dataflow for LockAnalysis for given method.

Parameters:
method - the method
Returns:
the LockDataflow
Throws:
CFGBuilderException
DataflowAnalysisException

getLockChecker

public LockChecker getLockChecker(org.apache.bcel.classfile.Method method)
                           throws CFGBuilderException,
                                  DataflowAnalysisException
Get LockChecker for method. This is like LockDataflow, but may be able to avoid performing the actual dataflow analyses if the method doesn't contain explicit monitorenter/monitorexit instructions.

Parameters:
method - the method
Returns:
the LockChecker
Throws:
CFGBuilderException
DataflowAnalysisException

getReturnPathDataflow

public ReturnPathDataflow getReturnPathDataflow(org.apache.bcel.classfile.Method method)
                                         throws CFGBuilderException,
                                                DataflowAnalysisException
Get ReturnPathDataflow for method.

Parameters:
method - the method
Returns:
the ReturnPathDataflow
Throws:
CFGBuilderException
DataflowAnalysisException

getNonExceptionDominatorsAnalysis

public DominatorsAnalysis getNonExceptionDominatorsAnalysis(org.apache.bcel.classfile.Method method)
                                                     throws CFGBuilderException,
                                                            DataflowAnalysisException
Get DominatorsAnalysis for given method, where exception edges are ignored.

Parameters:
method - the method
Returns:
the DominatorsAnalysis
Throws:
CFGBuilderException
DataflowAnalysisException

getNonImplicitExceptionDominatorsAnalysis

public PostDominatorsAnalysis getNonImplicitExceptionDominatorsAnalysis(org.apache.bcel.classfile.Method method)
                                                                 throws CFGBuilderException,
                                                                        DataflowAnalysisException
Get DominatorsAnalysis for given method, where implicit exception edges are ignored.

Parameters:
method - the method
Returns:
the DominatorsAnalysis
Throws:
CFGBuilderException
DataflowAnalysisException

getNonExceptionPostDominatorsAnalysis

public PostDominatorsAnalysis getNonExceptionPostDominatorsAnalysis(org.apache.bcel.classfile.Method method)
                                                             throws CFGBuilderException,
                                                                    DataflowAnalysisException
Get PostDominatorsAnalysis for given method, where exception edges are ignored.

Parameters:
method - the method
Returns:
the PostDominatorsAnalysis
Throws:
CFGBuilderException
DataflowAnalysisException

getExceptionSetFactory

public ExceptionSetFactory getExceptionSetFactory(org.apache.bcel.classfile.Method method)
Get ExceptionSetFactory for given method.

Parameters:
method - the method
Returns:
the ExceptionSetFactory

getParameterSignatureList

public java.lang.String[] getParameterSignatureList(org.apache.bcel.classfile.Method method)
Get array of type signatures of parameters for given method.

Parameters:
method - the method
Returns:
an array of type signatures indicating the types of the method's parameters

getLoadedFieldSet

public LoadedFieldSet getLoadedFieldSet(org.apache.bcel.classfile.Method method)
Get the set of fields loaded by given method.

Parameters:
method - the method
Returns:
the set of fields loaded by the method

getLiveLocalStoreDataflow

public LiveLocalStoreDataflow getLiveLocalStoreDataflow(org.apache.bcel.classfile.Method method)
                                                 throws DataflowAnalysisException,
                                                        CFGBuilderException
Get LiveLocalStoreAnalysis dataflow for given method.

Parameters:
method - the method
Returns:
the Dataflow object for LiveLocalStoreAnalysis on the method
Throws:
DataflowAnalysisException
CFGBuilderException

getBlockTypeDataflow

public BlockTypeDataflow getBlockTypeDataflow(org.apache.bcel.classfile.Method method)
                                       throws DataflowAnalysisException,
                                              CFGBuilderException
Get BlockType dataflow for given method.

Parameters:
method - the method
Returns:
the Dataflow object for BlockTypeAnalysis on the method
Throws:
DataflowAnalysisException
CFGBuilderException

getAssertionMethods

public AssertionMethods getAssertionMethods()
Get AssertionMethods for class.

Returns:
the AssertionMethods

getConstantDataflow

public ConstantDataflow getConstantDataflow(org.apache.bcel.classfile.Method method)
                                     throws CFGBuilderException,
                                            DataflowAnalysisException
Get ConstantDataflow for method.

Parameters:
method - the method
Returns:
the ConstantDataflow
Throws:
CFGBuilderException
DataflowAnalysisException

getLoadDataflow

public LoadDataflow getLoadDataflow(org.apache.bcel.classfile.Method method)
                             throws CFGBuilderException,
                                    DataflowAnalysisException
Get load dataflow.

Parameters:
method - the method
Returns:
the LoadDataflow
Throws:
CFGBuilderException
DataflowAnalysisException

getStoreDataflow

public StoreDataflow getStoreDataflow(org.apache.bcel.classfile.Method method)
                               throws CFGBuilderException,
                                      DataflowAnalysisException
Get store dataflow.

Parameters:
method - the method
Returns:
the StoreDataflow
Throws:
CFGBuilderException
DataflowAnalysisException

getCallListDataflow

public CallListDataflow getCallListDataflow(org.apache.bcel.classfile.Method method)
                                     throws CFGBuilderException,
                                            DataflowAnalysisException
Get CallListDataflow for method.

Parameters:
method - the method
Returns:
the CallListDataflow
Throws:
CFGBuilderException
DataflowAnalysisException

linesMentionedMultipleTimes

public static java.util.BitSet linesMentionedMultipleTimes(org.apache.bcel.classfile.Method method)

getUnconditionalValueDerefDataflow

public UnconditionalValueDerefDataflow getUnconditionalValueDerefDataflow(org.apache.bcel.classfile.Method method)
                                                                   throws CFGBuilderException,
                                                                          DataflowAnalysisException
Get the UnconditionalValueDerefDataflow for a method.

Parameters:
method - the method
Returns:
the UnconditionalValueDerefDataflow
Throws:
CFGBuilderException
DataflowAnalysisException

getCompactLocationNumbering

public CompactLocationNumbering getCompactLocationNumbering(org.apache.bcel.classfile.Method method)
                                                     throws CFGBuilderException
Get a CompactLocationNumbering for a method.

Parameters:
method - a method
Returns:
the CompactLocationNumbering for the method
Throws:
CFGBuilderException

getDefinitelyNullSetDataflow

public DefinitelyNullSetDataflow getDefinitelyNullSetDataflow(org.apache.bcel.classfile.Method method)
                                                       throws CFGBuilderException,
                                                              DataflowAnalysisException
Get DefinitelyNullSetDataflow for a method.

Parameters:
method - a method
Returns:
the DefinitelyNullSetDataflow for the method
Throws:
DataflowAnalysisException
CFGBuilderException

getReturnPathTypeDataflow

public ReturnPathTypeDataflow getReturnPathTypeDataflow(org.apache.bcel.classfile.Method method)
                                                 throws CFGBuilderException,
                                                        DataflowAnalysisException
Get ReturnPathTypeDataflow for a method.

Parameters:
method - the method
Returns:
the ReturnPathTypeDataflow for the method
Throws:
CFGBuilderException
DataflowAnalysisException

dumpSimpleDataflowInformation

public void dumpSimpleDataflowInformation(org.apache.bcel.classfile.Method method)

dumpDataflowInformation

public void dumpDataflowInformation(org.apache.bcel.classfile.Method method)

dumpDataflowInformation

public static void dumpDataflowInformation(org.apache.bcel.classfile.Method method,
                                           CFG cfg,
                                           ValueNumberDataflow vnd,
                                           IsNullValueDataflow inv,
                                           @CheckForNull
                                           UnconditionalValueDerefDataflow dataflow,
                                           @CheckForNull
                                           TypeDataflow typeDataflow)
                                    throws DataflowAnalysisException
Parameters:
method -
cfg -
vnd -
inv -
dataflow -
typeDataflow - TODO
Throws:
DataflowAnalysisException

dumpTypeDataflow

public static void dumpTypeDataflow(org.apache.bcel.classfile.Method method,
                                    CFG cfg,
                                    TypeDataflow typeDataflow)
                             throws DataflowAnalysisException
Parameters:
method -
cfg -
typeDataflow -
Throws:
DataflowAnalysisException

dumpLiveLocalStoreDataflow

public static void dumpLiveLocalStoreDataflow(MethodDescriptor method,
                                              CFG cfg,
                                              LiveLocalStoreDataflow dataflow)
                                       throws DataflowAnalysisException
Parameters:
method -
cfg -
typeDataflow -
Throws:
DataflowAnalysisException

FindBugs™ 1.3.9

FindBugs™ is licenced under the LGPL. Copyright © 2006 University of Maryland.