edu.umd.cs.findbugs.detect

Class StreamResourceTracker

  • All Implemented Interfaces:
    ResourceTracker<Stream>


    public class StreamResourceTracker
    extends Object
    implements ResourceTracker<Stream>
    Resource tracker which determines where streams are created, and how they are used within the method.
    Author:
    David Hovemeyer
    • Constructor Detail

      • StreamResourceTracker

        public StreamResourceTracker(StreamFactory[] streamFactoryList,
                             RepositoryLookupFailureCallback lookupFailureCallback)
        Constructor.
        Parameters:
        streamFactoryList - array of StreamFactory objects which determine where streams are created
        lookupFailureCallback - used when class hierarchy lookups fail
    • Method Detail

      • setResourceCollection

        public void setResourceCollection(ResourceCollection<Stream> resourceCollection)
        Set the precomputed ResourceCollection for the method.
      • addStreamEscape

        public void addStreamEscape(Stream source,
                           Location target)
        Indicate that a stream escapes at the given target Location.
        Parameters:
        source - the Stream that is escaping
        target - the target Location (where the stream escapes)
      • markTransitiveUninterestingStreamEscapes

        public void markTransitiveUninterestingStreamEscapes()
        Transitively mark all streams into which uninteresting streams (such as System.out) escape. This handles the rule that wrapping an uninteresting stream makes the wrapper uninteresting as well.
      • isUninterestingStreamEscape

        public boolean isUninterestingStreamEscape(Stream stream)
        Determine if an uninteresting stream escapes at given location. markTransitiveUninterestingStreamEscapes() should be called first.
        Parameters:
        stream - the stream
        Returns:
        true if an uninteresting stream escapes at the location
      • addStreamOpenLocation

        public void addStreamOpenLocation(Location streamOpenLocation,
                                 Stream stream)
        Indicate that a stream is constructed at this Location.
        Parameters:
        streamOpenLocation - the Location
        stream - the Stream opened at this Location
      • getStreamEquivalenceClass

        public StreamEquivalenceClass getStreamEquivalenceClass(Stream stream)
        Get the equivalence class for given stream. May only be called if markTransitiveUninterestingStreamEscapes() has been called.
        Parameters:
        stream - the stream
        Returns:
        the set containing the equivalence class for the given stream
      • isResourceCreation

        public Stream isResourceCreation(BasicBlock basicBlock,
                                org.apache.bcel.generic.InstructionHandle handle,
                                org.apache.bcel.generic.ConstantPoolGen cpg)
        Description copied from interface: ResourceTracker
        Determine if the given instruction is the site where a resource is created.
        Specified by:
        isResourceCreation in interface ResourceTracker<Stream>
        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
      • isResourceOpen

        public boolean isResourceOpen(BasicBlock basicBlock,
                             org.apache.bcel.generic.InstructionHandle handle,
                             org.apache.bcel.generic.ConstantPoolGen cpg,
                             Stream resource,
                             ResourceValueFrame frame)
      • isResourceClose

        public boolean isResourceClose(BasicBlock basicBlock,
                              org.apache.bcel.generic.InstructionHandle handle,
                              org.apache.bcel.generic.ConstantPoolGen cpg,
                              Stream resource,
                              ResourceValueFrame frame)
        Description copied from interface: ResourceTracker
        Determine if the given instruction is the site where a resource is closed.
        Specified by:
        isResourceClose in interface ResourceTracker<Stream>
        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
      • mightCloseResource

        public boolean mightCloseResource(BasicBlock basicBlock,
                                 org.apache.bcel.generic.InstructionHandle handle,
                                 org.apache.bcel.generic.ConstantPoolGen cpg)
                                   throws DataflowAnalysisException
        Description copied from interface: ResourceTracker
        Determine if the given instruction is the site where a resource is closed.
        Specified by:
        mightCloseResource in interface ResourceTracker<Stream>
        Parameters:
        basicBlock - basic block containing the instruction
        handle - the instruction
        cpg - the ConstantPoolGen for the method
        Returns:
        true if the resource is closed here, false otherwise
        Throws:
        DataflowAnalysisException
      • createVisitor

        public ResourceValueFrameModelingVisitor createVisitor(Stream resource,
                                                      org.apache.bcel.generic.ConstantPoolGen cpg)
        Description copied from interface: ResourceTracker
        Create a ResourceValueFrameModelingVisitor to model the effect of instructions on the state of the resource.
        Specified by:
        createVisitor in interface ResourceTracker<Stream>
        Parameters:
        resource - the resource we are tracking
        cpg - the ConstantPoolGen of the method
        Returns:
        a ResourceValueFrameModelingVisitor
      • ignoreImplicitExceptions

        public boolean ignoreImplicitExceptions(Stream resource)
        Description copied from interface: ResourceTracker
        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.
        Specified by:
        ignoreImplicitExceptions in interface ResourceTracker<Stream>
        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,
                                  Stream resource,
                                  org.apache.bcel.generic.ConstantPoolGen cpg)
        Description copied from interface: ResourceTracker
        Determine whether the analysis should ignore given exception edge. This allows the analysis to customize which kinds of exceptions are significant.
        Specified by:
        ignoreExceptionEdge in interface ResourceTracker<Stream>
        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
      • isParamInstance

        public boolean isParamInstance(Stream resource,
                              int slot)
        Description copied from interface: ResourceTracker
        Return if the given parameter slot contains the resource instance upon entry to the method. This is for resources passed as parameters.
        Specified by:
        isParamInstance in interface ResourceTracker<Stream>
        Parameters:
        resource - the resource
        slot - the local variable slot
        Returns:
        true if the slot contains the resource instance, false otherwise

Copyright © 2003–2015. All rights reserved.