Class JavaExpression

    • Field Detail

      • type

        protected final javax.lang.model.type.TypeMirror type
        The type of this expression.
    • Constructor Detail

      • JavaExpression

        protected JavaExpression​(javax.lang.model.type.TypeMirror type)
        Create a JavaExpression.
        Parameters:
        type - the type of the expression
    • Method Detail

      • getType

        public javax.lang.model.type.TypeMirror getType()
      • containsOfClass

        public abstract boolean containsOfClass​(java.lang.Class<? extends JavaExpression> clazz)
      • containsUnknown

        public boolean containsUnknown()
      • isDeterministic

        public abstract boolean isDeterministic​(AnnotationProvider provider)
        Returns true if the expression is deterministic.
        Parameters:
        provider - an annotation provider (a type factory)
        Returns:
        true if this expression is deterministic
      • listIsDeterministic

        public static boolean listIsDeterministic​(java.util.List<? extends @Nullable JavaExpression> list,
                                                  AnnotationProvider provider)
        Returns true if all the expressions in the list are deterministic.
        Parameters:
        list - the list whose elements to test
        provider - an annotation provider (a type factory)
        Returns:
        true if all the expressions in the list are deterministic
      • isUnassignableByOtherCode

        public abstract boolean isUnassignableByOtherCode()
        Returns true if and only if the value this expression stands for cannot be changed (with respect to ==) by a method call. This is the case for local variables, the self reference, final field accesses whose receiver is isUnassignableByOtherCode(), and operations whose operands are all isUnmodifiableByOtherCode().
        See Also:
        isUnmodifiableByOtherCode()
      • isUnmodifiableByOtherCode

        public abstract boolean isUnmodifiableByOtherCode()
        Returns true if and only if the value this expression stands for cannot be changed by a method call, including changes to any of its fields.

        Approximately, this returns true if the expression is isUnassignableByOtherCode() and its type is immutable.

        See Also:
        isUnassignableByOtherCode()
      • containsSyntacticEqualJavaExpression

        public abstract boolean containsSyntacticEqualJavaExpression​(JavaExpression other)
        Returns true if and only if this contains a JavaExpression that is syntactically equal to other.
        Parameters:
        other - the JavaExpression to search for
        Returns:
        true if and only if this contains a JavaExpression that is syntactically equal to other
      • listContainsSyntacticEqualJavaExpression

        public static boolean listContainsSyntacticEqualJavaExpression​(java.util.List<? extends @Nullable JavaExpression> list,
                                                                       JavaExpression other)
        Returns true if the given list contains a JavaExpression that is syntactically equal to other.
        Parameters:
        list - the list in which to search for a match
        other - the JavaExpression to search for
        Returns:
        true if and only if the list contains a JavaExpression that is syntactically equal to other
      • containsModifiableAliasOf

        public boolean containsModifiableAliasOf​(Store<?> store,
                                                 JavaExpression other)
        Returns true if and only if other appears anywhere in this or an expression appears in this such that other might alias this expression, and that expression is modifiable.

        This is always true, except for cases where the Java type information prevents aliasing and none of the subexpressions can alias 'other'.

      • toStringDebug

        public java.lang.String toStringDebug()
        Format this verbosely, for debugging.
        Returns:
        a verbose string representation of this
      • fromNode

        public static JavaExpression fromNode​(Node receiverNode)
        We ignore operations such as widening and narrowing when computing the internal representation.
        Parameters:
        receiverNode - a node to convert to a JavaExpression
        Returns:
        the internal representation of the given node. Might contain Unknown.
      • fromTree

        public static JavaExpression fromTree​(com.sun.source.tree.ExpressionTree tree)
        Converts a javac ExpressionTree to a CF JavaExpression. The result might contain Unknown.

        We ignore operations such as widening and narrowing when computing the JavaExpression.

        Parameters:
        tree - a javac tree
        Returns:
        a JavaExpression for the given javac tree
      • fromVariableTree

        public static JavaExpression fromVariableTree​(com.sun.source.tree.VariableTree tree)
        Returns the Java expression corresponding to the given variable tree tree.
        Parameters:
        tree - a variable tree
        Returns:
        a JavaExpression for tree
      • getParametersAsLocalVariables

        public static java.util.List<JavaExpression> getParametersAsLocalVariables​(javax.lang.model.element.ExecutableElement methodEle)
        Returns the parameters of methodEle as LocalVariables.
        Parameters:
        methodEle - the method element
        Returns:
        list of parameters as LocalVariables
      • getFormalParameters

        public static java.util.List<FormalParameter> getFormalParameters​(javax.lang.model.element.ExecutableElement methodEle)
        Returns the parameters of methodEle as FormalParameters.
        Parameters:
        methodEle - the method element
        Returns:
        list of parameters as FormalParameters
      • getReceiver

        public static JavaExpression getReceiver​(com.sun.source.tree.ExpressionTree accessTree)
        Returns the receiver of the given invocation.
        Parameters:
        accessTree - a method or constructor invocation
        Returns:
        the receiver of the given invocation
      • getImplicitReceiver

        public static JavaExpression getImplicitReceiver​(javax.lang.model.element.Element ele)
        Returns the implicit receiver of ele.

        Returns either a new ClassName or a new ThisReference depending on whether ele is static or not. The passed element must be a field, method, or class.

        When this returns a ThisReference, its type is the class that declares ele, which is not necessarily the type of this at the invocation site.

        Parameters:
        ele - a field, method, or class
        Returns:
        either a new ClassName or a new ThisReference depending on whether ele is static or not
      • getPseudoReceiver

        public static JavaExpression getPseudoReceiver​(com.sun.source.util.TreePath path,
                                                       javax.lang.model.type.TypeMirror enclosingType)
        Returns either a new ClassName or ThisReference JavaExpression object for the enclosingType.

        The Tree should be an expression or a statement that does not have a receiver or an implicit receiver. For example, a local variable declaration.

        Parameters:
        path - a tree path
        enclosingType - type of the enclosing type
        Returns:
        a new ClassName or ThisReference that is a JavaExpression object for the enclosingType
      • accept

        public abstract <R,​P> R accept​(JavaExpressionVisitor<R,​P> visitor,
                                             P p)
        Accept method of the visitor pattern.
        Type Parameters:
        R - result type of the operation
        P - parameter type
        Parameters:
        visitor - the visitor to be applied to this JavaExpression
        p - the parameter for this operation
        Returns:
        the result of visiting this
      • atFieldAccess

        public JavaExpression atFieldAccess​(JavaExpression receiver)
        Viewpoint-adapts this to a field access with receiver receiver.
        Parameters:
        receiver - receiver of the field access
        Returns:
        viewpoint-adapted version of this
      • atMethodBody

        public final JavaExpression atMethodBody​(com.sun.source.tree.MethodTree methodTree)
        Viewpoint-adapts this to the methodTree by converting any FormalParameter into LocalVariables.
        Parameters:
        methodTree - method declaration tree
        Returns:
        viewpoint-adapted version of this
      • atMethodInvocation

        public final JavaExpression atMethodInvocation​(com.sun.source.tree.MethodInvocationTree methodInvocationTree)
        Viewpoint-adapts this to the methodInvocationTree.
        Parameters:
        methodInvocationTree - method invocation
        Returns:
        viewpoint-adapted version of this
      • atMethodInvocation

        public final JavaExpression atMethodInvocation​(MethodInvocationNode invocationNode)
        Viewpoint-adapts this to the invocationNode.
        Parameters:
        invocationNode - method invocation
        Returns:
        viewpoint-adapted version of this
      • atConstructorInvocation

        public JavaExpression atConstructorInvocation​(com.sun.source.tree.NewClassTree newClassTree)
        Viewpoint-adapts this to the newClassTree.
        Parameters:
        newClassTree - constructor invocation
        Returns:
        viewpoint-adapted version of this