Interface Store<S extends Store<S>>

    • Nested Class Summary

      Nested Classes 
      Modifier and Type Interface Description
      static class  Store.FlowRule
      A flow rule describes how stores flow along one edge between basic blocks.
      static class  Store.Kind  
    • Method Summary

      All Methods Instance Methods Abstract Methods 
      Modifier and Type Method Description
      boolean canAlias​(JavaExpression a, JavaExpression b)
      Can the objects a and b be aliases? Returns a conservative answer (i.e., returns true if not enough information is available to determine aliasing).
      S copy()
      Returns an exact copy of this store.
      boolean equals​(@Nullable java.lang.Object o)
      Returns true if this is equal to the given argument.
      S leastUpperBound​(S other)
      Compute the least upper bound of two stores.
      java.lang.String visualize​(CFGVisualizer<?,​S,​?> viz)
      Delegate visualization responsibility to a visualizer.
      S widenedUpperBound​(S previous)
      Compute an upper bound of two stores that is wider than the least upper bound of the two stores.
    • Method Detail

      • copy

        S copy()
        Returns an exact copy of this store.
        Returns:
        an exact copy of this store
      • leastUpperBound

        S leastUpperBound​(S other)
        Compute the least upper bound of two stores.

        Important: This method must fulfill the following contract:

        • Does not change this.
        • Does not change other.
        • Returns a fresh object which is not aliased yet.
        • Returns an object of the same (dynamic) type as this, even if the signature is more permissive.
        • Is commutative.
      • widenedUpperBound

        S widenedUpperBound​(S previous)
        Compute an upper bound of two stores that is wider than the least upper bound of the two stores. Used to jump to a higher abstraction to allow faster termination of the fixed point computations in Analysis. previous must be the previous store.

        A particular analysis might not require widening and should implement this method by calling leastUpperBound.

        Important: This method must fulfill the following contract:

        • Does not change this.
        • Does not change previous.
        • Returns a fresh object which is not aliased yet.
        • Returns an object of the same (dynamic) type as this, even if the signature is more permissive.
        • Is commutative.
        Parameters:
        previous - must be the previous store
      • canAlias

        boolean canAlias​(JavaExpression a,
                         JavaExpression b)
        Can the objects a and b be aliases? Returns a conservative answer (i.e., returns true if not enough information is available to determine aliasing).
      • visualize

        java.lang.String visualize​(CFGVisualizer<?,​S,​?> viz)
        Delegate visualization responsibility to a visualizer.
        Parameters:
        viz - the visualizer to visualize this store
        Returns:
        the String representation of this store
      • equals

        boolean equals​(@Nullable java.lang.Object o)
        Returns true if this is equal to the given argument.
        Overrides:
        equals in class java.lang.Object
        Parameters:
        o - the object to compare against this
        Returns:
        true if this is equal to the given argument