@Override
 public int hashCode() {
   int result = operator != null ? operator.hashCode() : 0;
   result = 31 * result + (left != null ? left.hashCode() : 0);
   result = 31 * result + (right != null ? right.hashCode() : 0);
   return result;
 }
  @Override
  public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;

    ComparisonExpression other = (ComparisonExpression) o;

    if (left != null ? !left.equals(other.left) : other.left != null) return false;
    if (operator != null ? !operator.equals(other.operator) : other.operator != null) return false;
    if (right != null ? !right.equals(other.right) : other.right != null) return false;

    return true;
  }
 public boolean equals(Object obj) {
   if (!super.equals(obj)) {
     return false;
   }
   ArrayAccessValue casted = (ArrayAccessValue) obj;
   return _index.equals(casted._index);
 }
 public int hashCode() {
   return super.hashCode() * 29 + _index.hashCode();
 }