aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-11-05 19:47:19 +0000
committerMichael Williamson <mike@zwobble.org>2023-11-05 19:47:19 +0000
commit5dbc2fc31b033cd1b9c51fea4326003a216bb686 (patch)
tree2ac9e39360e694eb2e8647e20811e0116e53b5ca /src/main/java
parent120b830cab1462d76761ee0d26cba7df783dc741 (diff)
Add builder for StructTypeInfo
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/types/FieldsInfo.java15
-rw-r--r--src/main/java/org/shedlang/compiler/types/StructTypeInfo.java20
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));
+ }
+ }
}