@Override public Type createType(TypeManager typeManager, List<TypeParameter> parameters) { checkArgument(!parameters.isEmpty(), "Row type must have at least one parameter"); checkArgument( parameters.stream().allMatch(parameter -> parameter.getKind() == ParameterKind.NAMED_TYPE), "Expected only named types as a parameters, got %s", parameters); List<TypeSignatureParameter> typeSignatureParameters = parameters.stream() .map(TypeParameter::getNamedType) .map(parameter -> TypeSignatureParameter.of(new NamedTypeSignature(parameter.getName(), parameter.getType().getTypeSignature()))) .collect(toList()); List<RowType.Field> fields = parameters.stream() .map(TypeParameter::getNamedType) .map(parameter -> new RowType.Field(parameter.getName().map(RowFieldName::getName), parameter.getType())) .collect(toList()); return RowType.createWithTypeSignature(new TypeSignature(StandardTypes.ROW, typeSignatureParameters), fields); } }