Class FieldAccess

java.lang.Object
org.checkerframework.dataflow.expression.JavaExpression
org.checkerframework.dataflow.expression.FieldAccess

public class FieldAccess extends JavaExpression
A FieldAccess represents a field access. It does not represent a class literal such as SomeClass.class or int[].class.
  • Field Details

    • receiver

      protected final JavaExpression receiver
      The receiver of the field access.
    • field

      protected final VariableElement field
      The field being accessed.
  • Constructor Details

    • FieldAccess

      public FieldAccess(JavaExpression receiver, FieldAccessNode node)
      Create a FieldAccess.
      Parameters:
      receiver - receiver of the field access
      node - the FieldAccessNode
    • FieldAccess

      public FieldAccess(JavaExpression receiver, VariableElement fieldElement)
      Create a FieldAccess.
      Parameters:
      receiver - receiver of the field access
      fieldElement - element of the field
    • FieldAccess

      public FieldAccess(JavaExpression receiver, TypeMirror type, VariableElement fieldElement)
      Create a FieldAccess.
      Parameters:
      receiver - receiver of the field access
      type - type of the field
      fieldElement - element of the field
  • Method Details

    • getReceiver

      public JavaExpression getReceiver()
      Returns the receiver.
      Returns:
      the receiver
    • getField

      public VariableElement getField()
      Returns the field.
      Returns:
      the field
    • isFinal

      public boolean isFinal()
    • isStatic

      public boolean isStatic()
    • equals

      public boolean equals(@Nullable Object obj)
      Overrides:
      equals in class Object
    • hashCode

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

      public boolean syntacticEquals(JavaExpression je)
      Description copied from class: JavaExpression
      Returns true if and only if the two Java expressions are syntactically identical.

      This is a stricter test than Object.equals(java.lang.Object), which accommodates commutativity of operations.

      Specified by:
      syntacticEquals in class JavaExpression
      Parameters:
      je - the other Java expression to compare to this one
      Returns:
      true if and only if the two Java expressions are syntactically identical
    • containsSyntacticEqualJavaExpression

      public boolean containsSyntacticEqualJavaExpression(JavaExpression other)
      Description copied from class: JavaExpression
      Returns true if and only if this contains a JavaExpression that is syntactically equal to other.
      Specified by:
      containsSyntacticEqualJavaExpression in class JavaExpression
      Parameters:
      other - the JavaExpression to search for
      Returns:
      true if and only if this contains a JavaExpression that is syntactically equal to other
    • containsModifiableAliasOf

      public boolean containsModifiableAliasOf(Store<?> store, JavaExpression other)
      Description copied from class: JavaExpression
      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'.

      Overrides:
      containsModifiableAliasOf in class JavaExpression
    • toString

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

      public String toStringDebug()
      Description copied from class: JavaExpression
      Format this verbosely, for debugging.
      Overrides:
      toStringDebug in class JavaExpression
      Returns:
      a verbose string representation of this
    • containedOfClass

      public <T extends JavaExpression> @Nullable T containedOfClass(Class<T> clazz)
      Description copied from class: JavaExpression
      Returns the first subexpression whose class is the given class, or null.

      This is intended as a diagnostic aid; most clients will use JavaExpression.containsOfClass(java.lang.Class<? extends org.checkerframework.dataflow.expression.JavaExpression>).

      Specified by:
      containedOfClass in class JavaExpression
      Type Parameters:
      T - the type corresponding to clazz
      Parameters:
      clazz - the JavaExpression subclass to search for
      Returns:
      true if some subexpression whose class is the given class
    • isDeterministic

      public boolean isDeterministic(AnnotationProvider provider)
      Description copied from class: JavaExpression
      Returns true if the expression is deterministic.
      Specified by:
      isDeterministic in class JavaExpression
      Parameters:
      provider - an annotation provider (a type factory)
      Returns:
      true if this expression is deterministic
    • isAssignableByOtherCode

      public boolean isAssignableByOtherCode()
      Description copied from class: JavaExpression
      Returns true if some subexpression of this can be assigned to from outside the current method body.

      This is false for local variables, the self reference, final field accesses whose receiver is not JavaExpression.isAssignableByOtherCode(), and operations whose operands are all not JavaExpression.isModifiableByOtherCode().

      Specified by:
      isAssignableByOtherCode in class JavaExpression
      Returns:
      true if some subexpression of this can be assigned to from outside the current method body
      See Also:
    • isModifiableByOtherCode

      public boolean isModifiableByOtherCode()
      Description copied from class: JavaExpression
      Returns true if the abstract value of this expression can be changed by a method call; equivalently, if the abstract value can be changed by a side effect from outside the containing method.

      Approximately, this returns true if the expression is JavaExpression.isAssignableByOtherCode() or its type is mutable. (String is an immutable type.)

      Specified by:
      isModifiableByOtherCode in class JavaExpression
      Returns:
      true if the value of this expression can be changed from outside the current method body
      See Also:
    • accept

      public <R, P> R accept(JavaExpressionVisitor<R,P> visitor, P p)
      Description copied from class: JavaExpression
      Accept method of the visitor pattern.
      Specified by:
      accept in class JavaExpression
      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