Class Stream

All Implemented Interfaces:
Comparable<Stream>

public class Stream extends ResourceCreationPoint implements Comparable<Stream>

A Stream object marks the location in the code where a stream is created. It also is responsible for determining some aspects of how the stream state is tracked by the ResourceValueAnalysis, such as when the stream is opened or closed, and whether implicit exception edges are significant.

TODO: change streamClass and streamBase to ObjectType

TODO: isStreamOpen() and isStreamClose() should probably be abstract, so we can customize how they work for different kinds of streams

  • Constructor Details

    • Stream

      public Stream(Location location, String streamClass, String streamBase)
      Constructor. By default, Stream objects are marked as uninteresting. setInteresting("BUG_TYPE") must be called explicitly to mark the Stream as interesting.
      Parameters:
      location - where the stream is created
      streamClass - type of Stream
      streamBase - highest class in the class hierarchy through which stream's close() method could be called
  • Method Details

    • toString

      public String toString()
      Overrides:
      toString in class Object
    • setInteresting

      public Stream setInteresting(String bugType)
      Mark this Stream as interesting.
      Parameters:
      bugType - the bug type that should be reported if the stream is not closed on all paths out of the method
    • setIgnoreImplicitExceptions

      public Stream setIgnoreImplicitExceptions(boolean enable)
      Mark whether or not implicit exception edges should be ignored by ResourceValueAnalysis when determining whether or not stream is closed on all paths out of method.
    • setIsOpenOnCreation

      public Stream setIsOpenOnCreation(boolean enable)
      Mark whether or not Stream is open as soon as it is created, or whether a later method or constructor must explicitly open it.
    • setInstanceParam

      public void setInstanceParam(int instanceParam)
      Set the number of the parameter which passes the stream instance.
      Parameters:
      instanceParam - number of the parameter passing the stream instance
    • setClosed

      public void setClosed()
      Set this Stream has having been closed on all paths out of the method.
    • getStreamBase

      public String getStreamBase()
    • isUninteresting

      public boolean isUninteresting()
    • isOpenOnCreation

      public boolean isOpenOnCreation()
    • setOpenLocation

      public void setOpenLocation(Location openLocation)
    • getOpenLocation

      public Location getOpenLocation()
    • ignoreImplicitExceptions

      public boolean ignoreImplicitExceptions()
    • getInstanceParam

      public int getInstanceParam()
    • getBugType

      public String getBugType()
    • isClosed

      public boolean isClosed()
      Return whether or not the Stream is closed on all paths out of the method.
    • isStreamOpen

      public boolean isStreamOpen(BasicBlock basicBlock, org.apache.bcel.generic.InstructionHandle handle, org.apache.bcel.generic.ConstantPoolGen cpg, ResourceValueFrame frame)
    • mightCloseStream

      public static boolean mightCloseStream(BasicBlock basicBlock, org.apache.bcel.generic.InstructionHandle handle, org.apache.bcel.generic.ConstantPoolGen cpg)
    • isStreamClose

      public boolean isStreamClose(BasicBlock basicBlock, org.apache.bcel.generic.InstructionHandle handle, org.apache.bcel.generic.ConstantPoolGen cpg, ResourceValueFrame frame, RepositoryLookupFailureCallback lookupFailureCallback)
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object
    • equals

      public boolean equals(Object o)
      Overrides:
      equals in class Object
    • compareTo

      public int compareTo(Stream other)
      Specified by:
      compareTo in interface Comparable<Stream>