diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-11-05 19:47:19 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-11-05 19:47:19 +0000 |
| commit | 5dbc2fc31b033cd1b9c51fea4326003a216bb686 (patch) | |
| tree | 2ac9e39360e694eb2e8647e20811e0116e53b5ca /src/main/java | |
| parent | 120b830cab1462d76761ee0d26cba7df783dc741 (diff) | |
Add builder for StructTypeInfo
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/org/shedlang/compiler/types/FieldsInfo.java | 15 | ||||
| -rw-r--r-- | src/main/java/org/shedlang/compiler/types/StructTypeInfo.java | 20 |
2 files changed, 29 insertions, 6 deletions
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<T extends Type>(POrderedMap<String, T> fields) { public Stream<Map.Entry<String, T>> stream() { return fields.entryStream(); } + + public static <T extends Type> Builder<T> builder() { + return new Builder<T>(P.orderedMap()); + } + + public record Builder<T extends Type>(POrderedMap<String, T> fields) { + public FieldsInfo<T> build() { + return new FieldsInfo<>(fields); + } + + public Builder<T> 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<Type> fields) { - public static StructTypeInfo fromFields(POrderedMap<String, Type> fields) { - return new StructTypeInfo(new FieldsInfo<>(fields)); - } - public int fieldCount() { return fields().fieldCount(); } @@ -20,4 +14,18 @@ public record StructTypeInfo(FieldsInfo<Type> fields) { public int fieldIndex(String fieldName) { return fields.fieldIndex(fieldName); } + + public static Builder builder() { + return new Builder(FieldsInfo.builder()); + } + + public record Builder(FieldsInfo.Builder<Type> fields) { + public StructTypeInfo build() { + return new StructTypeInfo(fields.build()); + } + + public Builder addField(String name, Type type) { + return new Builder(this.fields.addField(name, type)); + } + } } |
