/** * Copyright (c) 2009-2011, The HATS Consortium. All rights reserved. * This file is licensed under the terms of the Modified BSD License. */ package abs.frontend.typechecker; import java.util.Map; import abs.frontend.ast.Annotation; import abs.frontend.ast.List; import abs.frontend.ast.TypeParameterDecl; import abs.frontend.ast.TypeParameterUse; public class TypeParameter extends Type { private final TypeParameterDecl decl; public TypeParameter(TypeParameterDecl decl) { this.decl = decl; } public TypeParameterDecl getDecl() { return decl; } @Override public boolean equals(Object o) { if (!(o instanceof Type)) return false; Type t = (Type) o; if (t.canBeBoundTo(this)) return true; if (!(t instanceof TypeParameter)) return false; TypeParameter tp = (TypeParameter) t; return tp.decl.equals(this.decl); } @Override public int hashCode() { return decl.hashCode(); } @Override public String toString() { return decl.getName(); } @Override public boolean isTypeParameter() { return true; } @Override public String getSimpleName() { return getDecl().getName(); } @Override public Type copy() { return new TypeParameter(decl); } @Override public Type applyBinding(Map<TypeParameter, Type> binding) { Type res = binding.get(this); if (res == null) return new BoundedType(); else return res; } @Override public TypeParameterUse toUse() { return new TypeParameterUse(getQualifiedName(), new List<Annotation>()); } }