Package edu.umd.cs.findbugs.detect
Class FindUnreleasedLock.LockResourceTracker
- java.lang.Object
-
- edu.umd.cs.findbugs.detect.FindUnreleasedLock.LockResourceTracker
-
- All Implemented Interfaces:
ResourceTracker<Lock>
- Enclosing class:
- FindUnreleasedLock
class FindUnreleasedLock.LockResourceTracker extends java.lang.Object implements ResourceTracker<Lock>
-
-
Field Summary
Fields Modifier and Type Field Description private CFGcfgprivate IsNullValueDataflowisNullDataflowprivate RepositoryLookupFailureCallbacklookupFailureCallbackprivate ValueNumberDataflowvnaDataflow
-
Constructor Summary
Constructors Constructor Description LockResourceTracker(RepositoryLookupFailureCallback lookupFailureCallback, CFG cfg, ValueNumberDataflow vnaDataflow, IsNullValueDataflow isNullDataflow)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description ResourceValueFrameModelingVisitorcreateVisitor(Lock resource, org.apache.bcel.generic.ConstantPoolGen cpg)Create a ResourceValueFrameModelingVisitor to model the effect of instructions on the state of the resource.booleanignoreExceptionEdge(Edge edge, Lock resource, org.apache.bcel.generic.ConstantPoolGen cpg)Determine whether the analysis should ignore given exception edge.booleanignoreImplicitExceptions(Lock resource)Determine whether the analysis should ignore exception edges on which only implicit exceptions are propagated.booleanisParamInstance(Lock resource, int slot)Return if the given parameter slot contains the resource instance upon entry to the method.booleanisResourceClose(BasicBlock basicBlock, org.apache.bcel.generic.InstructionHandle handle, org.apache.bcel.generic.ConstantPoolGen cpg, Lock resource, ResourceValueFrame frame)Determine if the given instruction is the site where a resource is closed.LockisResourceCreation(BasicBlock basicBlock, org.apache.bcel.generic.InstructionHandle handle, org.apache.bcel.generic.ConstantPoolGen cpg)Determine if the given instruction is the site where a resource is created.booleanmightCloseResource(BasicBlock basicBlock, org.apache.bcel.generic.InstructionHandle handle, org.apache.bcel.generic.ConstantPoolGen cpg)Determine if the given instruction is the site where a resource is closed.private org.apache.bcel.generic.InvokeInstructiontoInvokeInstruction(org.apache.bcel.generic.Instruction ins)
-
-
-
Field Detail
-
lookupFailureCallback
private final RepositoryLookupFailureCallback lookupFailureCallback
-
cfg
private final CFG cfg
-
vnaDataflow
private final ValueNumberDataflow vnaDataflow
-
isNullDataflow
private final IsNullValueDataflow isNullDataflow
-
-
Constructor Detail
-
LockResourceTracker
public LockResourceTracker(RepositoryLookupFailureCallback lookupFailureCallback, CFG cfg, ValueNumberDataflow vnaDataflow, IsNullValueDataflow isNullDataflow)
-
-
Method Detail
-
isResourceCreation
public Lock isResourceCreation(BasicBlock basicBlock, org.apache.bcel.generic.InstructionHandle handle, org.apache.bcel.generic.ConstantPoolGen cpg) throws DataflowAnalysisException
Description copied from interface:ResourceTrackerDetermine if the given instruction is the site where a resource is created.- Specified by:
isResourceCreationin interfaceResourceTracker<Lock>- Parameters:
basicBlock- basic block containing the instructionhandle- the instructioncpg- the ConstantPoolGen for the method- Returns:
- an opaque Resource object if it is a creation site, or null if it is not a creation site
- Throws:
DataflowAnalysisException
-
mightCloseResource
public boolean mightCloseResource(BasicBlock basicBlock, org.apache.bcel.generic.InstructionHandle handle, org.apache.bcel.generic.ConstantPoolGen cpg)
Description copied from interface:ResourceTrackerDetermine if the given instruction is the site where a resource is closed.- Specified by:
mightCloseResourcein interfaceResourceTracker<Lock>- Parameters:
basicBlock- basic block containing the instructionhandle- the instructioncpg- the ConstantPoolGen for the method- Returns:
- true if the resource is closed here, false otherwise
-
isResourceClose
public boolean isResourceClose(BasicBlock basicBlock, org.apache.bcel.generic.InstructionHandle handle, org.apache.bcel.generic.ConstantPoolGen cpg, Lock resource, ResourceValueFrame frame) throws DataflowAnalysisException
Description copied from interface:ResourceTrackerDetermine if the given instruction is the site where a resource is closed.- Specified by:
isResourceClosein interfaceResourceTracker<Lock>- Parameters:
basicBlock- basic block containing the instructionhandle- the instructioncpg- the ConstantPoolGen for the methodresource- the resource, as returned by isResourceCreation()frame- the ResourceValueFrame representing the stack prior to executing the instruction- Returns:
- true if the resource is closed here, false otherwise
- Throws:
DataflowAnalysisException
-
createVisitor
public ResourceValueFrameModelingVisitor createVisitor(Lock resource, org.apache.bcel.generic.ConstantPoolGen cpg)
Description copied from interface:ResourceTrackerCreate a ResourceValueFrameModelingVisitor to model the effect of instructions on the state of the resource.- Specified by:
createVisitorin interfaceResourceTracker<Lock>- Parameters:
resource- the resource we are trackingcpg- the ConstantPoolGen of the method- Returns:
- a ResourceValueFrameModelingVisitor
-
ignoreImplicitExceptions
public boolean ignoreImplicitExceptions(Lock resource)
Description copied from interface:ResourceTrackerDetermine whether the analysis should ignore exception edges on which only implicit exceptions are propagated. This allows different resource types to be tracked with varying precision. For example, we might want to ignore implicit exceptions for stream objects, but treat them as significant for database resources.- Specified by:
ignoreImplicitExceptionsin interfaceResourceTracker<Lock>- Parameters:
resource- the resource being tracked- Returns:
- true if implicit exceptions are significant, false if they should be ignore
-
ignoreExceptionEdge
public boolean ignoreExceptionEdge(Edge edge, Lock resource, org.apache.bcel.generic.ConstantPoolGen cpg)
Description copied from interface:ResourceTrackerDetermine whether the analysis should ignore given exception edge. This allows the analysis to customize which kinds of exceptions are significant.- Specified by:
ignoreExceptionEdgein interfaceResourceTracker<Lock>- Parameters:
edge- the exception edgeresource- the resourcecpg- the ConstantPoolGen- Returns:
- true if exception edge should be ignored, false if it should be considered
-
isParamInstance
public boolean isParamInstance(Lock resource, int slot)
Description copied from interface:ResourceTrackerReturn if the given parameter slot contains the resource instance upon entry to the method. This is for resources passed as parameters.- Specified by:
isParamInstancein interfaceResourceTracker<Lock>- Parameters:
resource- the resourceslot- the local variable slot- Returns:
- true if the slot contains the resource instance, false otherwise
-
toInvokeInstruction
private org.apache.bcel.generic.InvokeInstruction toInvokeInstruction(org.apache.bcel.generic.Instruction ins)
-
-