001package org.clafer.ast; 002 003import org.clafer.common.Check; 004 005/** 006 * 007 * @author jimmy 008 */ 009public class AstUpcast implements AstSetExpr { 010 011 private final AstSetExpr base; 012 private final AstAbstractClafer target; 013 014 AstUpcast(AstSetExpr base, AstAbstractClafer target) { 015 this.base = Check.notNull(base); 016 this.target = Check.notNull(target); 017 } 018 019 public AstSetExpr getBase() { 020 return base; 021 } 022 023 public AstAbstractClafer getTarget() { 024 return target; 025 } 026 027 @Override 028 public <A, B> B accept(AstExprVisitor<A, B> visitor, A a) { 029 return visitor.visit(this, a); 030 } 031 032 @Override 033 public boolean equals(Object obj) { 034 if (obj instanceof AstUpcast) { 035 AstUpcast other = (AstUpcast) obj; 036 return base.equals(other.base) && target.equals(other.target); 037 } 038 return false; 039 } 040 041 @Override 042 public int hashCode() { 043 return 203 ^ base.hashCode() ^ target.hashCode(); 044 } 045 046 @Override 047 public String toString() { 048 return "(" + target + ") " + base; 049 } 050}