aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2024-01-12 17:42:11 +0000
committerMichael Williamson <mike@zwobble.org>2024-01-12 17:42:11 +0000
commit89a63ebdd727c099b74d6ffc7be60656decfbeeb (patch)
tree678eac21116c29e773363dc3f4758eb853256d82 /src/main/java
parent22b9cdfb83afc9b3e7e2ddb1de3e4cdd380858a1 (diff)
Extract TypeSubstitutionMap.from()
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/types/ConstructedType.java11
-rw-r--r--src/main/java/org/shedlang/compiler/types/TypeSubstitutionMap.java17
2 files changed, 18 insertions, 10 deletions
diff --git a/src/main/java/org/shedlang/compiler/types/ConstructedType.java b/src/main/java/org/shedlang/compiler/types/ConstructedType.java
index b56e6a85..4a3d941e 100644
--- a/src/main/java/org/shedlang/compiler/types/ConstructedType.java
+++ b/src/main/java/org/shedlang/compiler/types/ConstructedType.java
@@ -1,6 +1,5 @@
package org.shedlang.compiler.types;
-import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;
@@ -21,14 +20,6 @@ public sealed interface ConstructedType<T extends ConstructibleType> extends Typ
}
default TypeSubstitutionMap typeSubstitutionMap() {
- var map = new HashMap<TypeParam, Type>();
-
- for (var argIndex = 0; argIndex < args().size(); argIndex++) {
- var param = constructor().params().get(argIndex);
- var arg = args().get(argIndex);
- map.put(param, arg);
- }
-
- return new TypeSubstitutionMap(map);
+ return TypeSubstitutionMap.from(constructor().params(), args());
}
}
diff --git a/src/main/java/org/shedlang/compiler/types/TypeSubstitutionMap.java b/src/main/java/org/shedlang/compiler/types/TypeSubstitutionMap.java
index 69cc2dba..6e6bd03a 100644
--- a/src/main/java/org/shedlang/compiler/types/TypeSubstitutionMap.java
+++ b/src/main/java/org/shedlang/compiler/types/TypeSubstitutionMap.java
@@ -1,5 +1,7 @@
package org.shedlang.compiler.types;
+import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -9,6 +11,21 @@ public class TypeSubstitutionMap {
return new TypeSubstitutionMap(Map.ofEntries(map));
}
+ public static TypeSubstitutionMap from(
+ List<TypeParam> params,
+ List<? extends Type> args
+ ) {
+ var map = new HashMap<TypeParam, Type>();
+
+ for (var argIndex = 0; argIndex < args.size(); argIndex++) {
+ var param = params.get(argIndex);
+ var arg = args.get(argIndex);
+ map.put(param, arg);
+ }
+
+ return new TypeSubstitutionMap(map);
+ }
+
private final Map<TypeParam, Type> map;
public TypeSubstitutionMap(Map<TypeParam, Type> map) {