package synthesijer.ast.type;
import synthesijer.ast.Type;
public class TypeGen {
private static final String ARRAY_TYPE = "ArrayType::";
private static final String ARRAY_REF_TYPE = "ArrayRef::";
private static final String COMPONENT_TYPE = "ComponentType::";
public static Type get(String key) throws Exception{
if(key.startsWith(ARRAY_TYPE)){
return new ArrayType(get(key.substring(ARRAY_TYPE.length())));
}else if(key.startsWith(ARRAY_REF_TYPE)){
return new ArrayRef((ArrayType)(get(key.substring(ARRAY_REF_TYPE.length()))));
}else if(key.startsWith(COMPONENT_TYPE)){
return new ComponentType(key.substring(COMPONENT_TYPE.length()));
}
switch(key){
case "BOOLEAN": return PrimitiveTypeKind.BOOLEAN;
case "BYTE" : return PrimitiveTypeKind.BYTE;
case "CHAR" : return PrimitiveTypeKind.CHAR;
case "INT" : return PrimitiveTypeKind.INT;
case "LONG" : return PrimitiveTypeKind.LONG;
case "SHORT" : return PrimitiveTypeKind.SHORT;
case "VOID" : return PrimitiveTypeKind.VOID;
case "OTHER" : return PrimitiveTypeKind.OTHER;
case "DECLARED" : return PrimitiveTypeKind.DECLARED;
case "ARRAY" : return PrimitiveTypeKind.ARRAY;
case "DOUBLE" : return PrimitiveTypeKind.DOUBLE;
case "ERROR" : return PrimitiveTypeKind.ERROR;
case "EXECUTABLE" : return PrimitiveTypeKind.EXECUTABLE;
case "FLOAT" : return PrimitiveTypeKind.FLOAT;
case "NONE" : return PrimitiveTypeKind.NONE;
case "NULL" : return PrimitiveTypeKind.NULL;
case "PACKAGE" : return PrimitiveTypeKind.PACKAGE;
case "TYPEVAR" : return PrimitiveTypeKind.TYPEVAR;
case "WILDCARD" : return PrimitiveTypeKind.WILDCARD;
case "UNDEFINED" : return PrimitiveTypeKind.UNDEFINED;
default:
throw new Exception("Unknown keyword: " + key);
}
}
}