@Override public Type getFieldTypes() { if (hasFieldNames()) { return TypeFactory.getInstance().tupleType(fKeyType, fKeyLabel, fValueType, fValueLabel); } else { return TypeFactory.getInstance().tupleType(fKeyType, fValueType); } }
@Override public Type instantiate(Map<Type, Type> bindings) { if (fKeyLabel != null) { return TypeFactory.getInstance() .mapType( getKeyType().instantiate(bindings), fKeyLabel, getValueType().instantiate(bindings), fValueLabel); } else { return TypeFactory.getInstance() .mapType(getKeyType().instantiate(bindings), getValueType().instantiate(bindings)); } }
@Override public Type getTypeParameters() { return TypeFactory.getInstance().voidType(); }
/** For encoding an external value as an ADT we need a representative type */ public Type asAbstractDataType() { return TypeFactory.getInstance().abstractDataType(store, getName()); }
@Override public Type carrier() { TypeFactory tf = TypeFactory.getInstance(); return tf.setType(fKeyType.lub(fValueType)); }
@Override public Type select(String... names) { return TypeFactory.getInstance().setType(getFieldTypes().select(names)); }
@Override public Type select(int... fields) { return TypeFactory.getInstance().setType(getFieldTypes().select(fields)); }