/**
* 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 abs.frontend.ast.Decl;
public abstract class ResolvedName {
public abstract KindedName getQualifiedName();
public String getQualifiedString() {
return getQualifiedName().getName();
}
public abstract ResolvedModuleName getModuleName();
public Decl getDecl() {
return null;
}
public KindedName.Kind getKind() {
if (getDecl().isDataConstructor())
return KindedName.Kind.DATA_CONSTRUCTOR;
else if (getDecl().isClass())
return KindedName.Kind.CLASS;
else if (getDecl().isFunction())
return KindedName.Kind.FUN;
else if(getDecl().isException())
return KindedName.Kind.EXCEPTION;
else
return KindedName.Kind.TYPE_DECL;
}
public KindedName getSimpleName() {
String s = getQualifiedString();
return new KindedName(getKind(), s.substring(s.lastIndexOf('.') + 1));
}
public boolean isModuleName() {
return false;
}
@Override
public boolean equals(Object obj) {
if (!(obj instanceof ResolvedName))
return false;
return ((ResolvedName) obj).getQualifiedString().equals(getQualifiedString());
}
@Override
public int hashCode() {
return getQualifiedString().hashCode();
}
}