From 5dbc2fc31b033cd1b9c51fea4326003a216bb686 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 5 Nov 2023 19:47:19 +0000 Subject: Add builder for StructTypeInfo --- .../java/org/shedlang/compiler/types/FieldsInfo.java | 15 +++++++++++++++ .../org/shedlang/compiler/types/StructTypeInfo.java | 20 ++++++++++++++------ 2 files changed, 29 insertions(+), 6 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/org/shedlang/compiler/types/FieldsInfo.java b/src/main/java/org/shedlang/compiler/types/FieldsInfo.java index 867e09ac..afe76757 100644 --- a/src/main/java/org/shedlang/compiler/types/FieldsInfo.java +++ b/src/main/java/org/shedlang/compiler/types/FieldsInfo.java @@ -1,5 +1,6 @@ package org.shedlang.compiler.types; +import org.shedlang.compiler.util.P; import org.shedlang.compiler.util.POrderedMap; import java.util.Map; @@ -29,4 +30,18 @@ public record FieldsInfo(POrderedMap fields) { public Stream> stream() { return fields.entryStream(); } + + public static Builder builder() { + return new Builder(P.orderedMap()); + } + + public record Builder(POrderedMap fields) { + public FieldsInfo build() { + return new FieldsInfo<>(fields); + } + + public Builder addField(String name, T type) { + return new Builder<>(fields.plus(name, type)); + } + } } diff --git a/src/main/java/org/shedlang/compiler/types/StructTypeInfo.java b/src/main/java/org/shedlang/compiler/types/StructTypeInfo.java index 15338cd6..1970b72e 100644 --- a/src/main/java/org/shedlang/compiler/types/StructTypeInfo.java +++ b/src/main/java/org/shedlang/compiler/types/StructTypeInfo.java @@ -1,14 +1,8 @@ package org.shedlang.compiler.types; -import org.shedlang.compiler.util.POrderedMap; - import java.util.Optional; public record StructTypeInfo(FieldsInfo fields) { - public static StructTypeInfo fromFields(POrderedMap fields) { - return new StructTypeInfo(new FieldsInfo<>(fields)); - } - public int fieldCount() { return fields().fieldCount(); } @@ -20,4 +14,18 @@ public record StructTypeInfo(FieldsInfo fields) { public int fieldIndex(String fieldName) { return fields.fieldIndex(fieldName); } + + public static Builder builder() { + return new Builder(FieldsInfo.builder()); + } + + public record Builder(FieldsInfo.Builder fields) { + public StructTypeInfo build() { + return new StructTypeInfo(fields.build()); + } + + public Builder addField(String name, Type type) { + return new Builder(this.fields.addField(name, type)); + } + } } -- cgit v1.2.3