1import software.amazon.awssdk.annotations.SdkInternalApi; 2 3/** 4 * A reference to a field. 5 */ 6@SdkInternalApi 7public class Ref extends Expr { 8 private final Identifier name; 9 10 public Ref(Identifier name) { 11 this.name = name; 12 } 13 14 @Override 15 public <R> R accept(ExprVisitor<R> visitor) { 16 return visitor.visitRef(this); 17 } 18 19 public Identifier getName() { 20 return name; 21 } 22 23 @Override 24 public boolean equals(Object o) { 25 if (this == o) { 26 return true; 27 } 28 if (o == null || getClass() != o.getClass()) { 29 return false; 30 } 31 Ref ref = (Ref) o; 32 return name.equals(ref.name); 33 } 34 35 @Override 36 public String template() { 37 return String.format("{%s}", name); 38 } 39 40 @Override 41 public String toString() { 42 return name.asString(); 43 } 44 45 @Override 46 public int hashCode() { 47 return name != null ? name.hashCode() : 0; 48 } 49 50 @Override 51 public Value eval(Scope<Value> scope) { 52 return scope.getValue(this.name).orElse(new Value.None()); 53 } 54}