MemberExpression.java
package org.sterling.runtime.expression;
import static org.sterling.runtime.expression.ExpressionFactory.SELF;
import static org.sterling.runtime.expression.ExpressionFactory.lambda;
import java.util.Objects;
import org.sterling.SterlingException;
public class MemberExpression extends Expression {
private final ObjectExpression owner;
private final Expression member;
public MemberExpression(ObjectExpression owner, Expression member) {
this.owner = owner;
this.member = member;
}
@Override
public Expression apply(Expression argument) throws SterlingException {
return reduce().apply(argument);
}
@Override
public Expression access(Expression member) throws SterlingException {
return reduce().access(member);
}
@Override
public boolean equals(Object o) {
return o == this || o instanceof MemberExpression && Objects.equals(member, ((MemberExpression) o).member);
}
@Override
public int hashCode() {
return Objects.hash(member);
}
@Override
public Expression reduce() throws SterlingException {
return lambda(SELF, member).apply(owner);
}
@Override
public String toString() {
return member.toString();
}
@Override
protected boolean isReducible() {
return true;
}
}