package org.seqcode.gsebricks.types;
public class ClassType implements EchoType {
private Class internalClass;
private String name;
public ClassType(Class c) {
internalClass = c;
String cn = c.getName();
String[] array = cn.split("\\.");
name = array[array.length-1];
}
public Class getInternalClass() { return internalClass; }
public String getName() {
return name;
}
public boolean isSubType(EchoType et) {
if(et instanceof GeneralType) { return true; }
if(!(et instanceof ClassType)) { return false; }
Class oc = ((ClassType)et).getInternalClass();
return isSubclass(internalClass, oc);
}
public static boolean isSubclass(Class subc, Class superc) {
return superc.isAssignableFrom(subc);
}
public boolean isParameterSubstitute(EchoType paramType) {
return isSubType(paramType);
}
public boolean isReturnSubstitute(EchoType retType) {
return retType.isSubType(this);
}
public int hashCode() {
int code = 17;
code += internalClass.hashCode(); code *= 37;
return code;
}
public boolean equals(Object o) {
if(!(o instanceof ClassType)) { return false; }
ClassType ct = (ClassType)o;
if(!ct.internalClass.equals(internalClass)) { return false; }
return true;
}
}