Class PropertyAccess

java.lang.Object
nz.org.riskscape.rl.ast.PropertyAccess
All Implemented Interfaces:
Expression

public final class PropertyAccess extends Object

Property access represents an indexing of the scope or another expression, e.g. foo, foo.bar or foo().bar are all property access expressions.

PropertyAccess can also be a 'select-all' style property, which can be used within a StructDeclaration to select all of the output members or another expression in to a struct, e.g {foo.*} or {foo().*}.

  • Constructor Details

  • Method Details

    • of

      public static PropertyAccess of(String... identifiers)
    • of

      public static PropertyAccess of(List<String> identifiers)
    • and

      public PropertyAccess and(String additionalPath)
    • appendSource

      protected void appendSource(StringBuilder appendTo)

      Implementers extend this to append their source to the given string builder. Done via string builder to encourage a more efficient implementation than is possible with concatenating multiple toString calls that typically contruct a string builder anyway.

    • getAccessString

      public String getAccessString()
    • getFirstIdentifier

      public Token getFirstIdentifier()
      Returns:
      the first token from this PropertyAccess objects list of identifiers, e.g. return foo from foo.bar.baz
    • getLastIdentifier

      public Token getLastIdentifier()
      Returns:
      the last token from this PropertyAccess objects list of identifiers, e.g. return baz from foo.bar.baz. Returns the same as getFirstIdentifier() if only one identifier exists.
    • isSingleIdentifier

      public boolean isSingleIdentifier()
      Returns:
      true if this is the most basic of property access expressions, e.g. just identifies a property, e.g foo but not foo.bar and not bar().foo
    • accept

      public <T, R> R accept(ExpressionVisitor<T,R> visitor, T data)
    • getBoundary

      public Optional<Pair<Token,Token>> getBoundary()
      Returns:
      a pair of tokens that represent the start and end of this expression, to be used when giving users information about where errors have occurred. If the expression has been rebuilt then the boundary may be empty or it may be from the original expression. Intended for use in problems to trace errors back to their source.
    • isTrailingSelectAll

      public boolean isTrailingSelectAll()
      Returns:
      true if this expression has a trailing select-all, e.g. foo.bar.*
    • isReceiverSelectAll

      public boolean isReceiverSelectAll()
      Returns:
      true if the expression is in the form EXPRESSION INDEX ASTERISK, e.g foo().*`
    • equals

      public boolean equals(Object o)
    • canEqual

      protected boolean canEqual(Object other)
    • hashCode

      public int hashCode()
    • getReceiver

      public Optional<Expression> getReceiver()

      If here, this is the thing that is being accessed, e.g. in foo(bar).baz then foo(bar) is the receiver. Without this, the property is looked up against the scope, which is usually a struct.

    • getIdentifiers

      public List<Token> getIdentifiers()
    • toString

      public final String toString()
      Overrides:
      toString in class Object
      Returns:
      the source, surrounded by the class name to make it easier to discern from a plane string among other debug output
    • toSource

      public final String toSource()
      Specified by:
      toSource in interface Expression
      Returns:
      a normalized version of the AST that can be parsed to be exactly the same AST as this