edu.umd.cs.findbugs.ba

Interface ResourceTracker<Resource>

public interface ResourceTracker<Resource>

A ResourceTracker is used with ResourceValueAnalysis to determine where in a method a certain kind of resource is created, and to model the effect of instructions on the state of that resource.

Author: David Hovemeyer

See Also: ResourceValueAnalysis

Method Summary
ResourceValueFrameModelingVisitorcreateVisitor(Resource resource, ConstantPoolGen cpg)
Create a ResourceValueFrameModelingVisitor to model the effect of instructions on the state of the resource.
booleanignoreExceptionEdge(Edge edge, Resource resource, ConstantPoolGen cpg)
Determine whether the analysis should ignore given exception edge.
booleanignoreImplicitExceptions(Resource resource)
Determine whether the analysis should ignore exception edges on which only implicit exceptions are propagated.
booleanisParamInstance(Resource resource, int slot)
Return if the given parameter slot contains the resource instance upon entry to the method.
booleanisResourceClose(BasicBlock basicBlock, InstructionHandle handle, ConstantPoolGen cpg, Resource resource, ResourceValueFrame frame)
Determine if the given instruction is the site where a resource is closed.
ResourceisResourceCreation(BasicBlock basicBlock, InstructionHandle handle, ConstantPoolGen cpg)
Determine if the given instruction is the site where a resource is created.

Method Detail

createVisitor

public ResourceValueFrameModelingVisitor createVisitor(Resource resource, ConstantPoolGen cpg)
Create a ResourceValueFrameModelingVisitor to model the effect of instructions on the state of the resource.

Parameters: resource the resource we are tracking cpg the ConstantPoolGen of the method

Returns: a ResourceValueFrameModelingVisitor

ignoreExceptionEdge

public boolean ignoreExceptionEdge(Edge edge, Resource resource, ConstantPoolGen cpg)
Determine whether the analysis should ignore given exception edge. This allows the analysis to customize which kinds of exceptions are significant.

Parameters: edge the exception edge resource the resource cpg the ConstantPoolGen

Returns: true if exception edge should be ignored, false if it should be considered

ignoreImplicitExceptions

public boolean ignoreImplicitExceptions(Resource resource)
Determine 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.

Parameters: resource the resource being tracked

Returns: true if implicit exceptions are significant, false if they should be ignore

isParamInstance

public boolean isParamInstance(Resource resource, int slot)
Return if the given parameter slot contains the resource instance upon entry to the method. This is for resources passed as parameters.

Parameters: resource the resource slot the local variable slot

Returns: true if the slot contains the resource instance, false otherwise

isResourceClose

public boolean isResourceClose(BasicBlock basicBlock, InstructionHandle handle, ConstantPoolGen cpg, Resource resource, ResourceValueFrame frame)
Determine if the given instruction is the site where a resource is closed.

Parameters: basicBlock basic block containing the instruction handle the instruction cpg the ConstantPoolGen for the method resource 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

isResourceCreation

public Resource isResourceCreation(BasicBlock basicBlock, InstructionHandle handle, ConstantPoolGen cpg)
Determine if the given instruction is the site where a resource is created.

Parameters: basicBlock basic block containing the instruction handle the instruction cpg 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

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