Class Stream

  • All Implemented Interfaces:
    java.lang.Comparable<Stream>

    public class Stream
    extends ResourceCreationPoint
    implements java.lang.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 Detail

      • Stream

        public Stream​(Location location,
                      java.lang.String streamClass,
                      java.lang.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 Detail

      • toString

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

        public Stream setInteresting​(java.lang.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 java.lang.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 java.lang.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)
      • hashCode

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

        public boolean equals​(java.lang.Object o)
        Overrides:
        equals in class java.lang.Object
      • compareTo

        public int compareTo​(Stream other)
        Specified by:
        compareTo in interface java.lang.Comparable<Stream>