From 89a63ebdd727c099b74d6ffc7be60656decfbeeb Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Fri, 12 Jan 2024 17:42:11 +0000 Subject: Extract TypeSubstitutionMap.from() --- .../org/shedlang/compiler/types/ConstructedType.java | 11 +---------- .../shedlang/compiler/types/TypeSubstitutionMap.java | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 10 deletions(-) (limited to 'src/main/java') 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 extends Typ } default TypeSubstitutionMap typeSubstitutionMap() { - var map = new HashMap(); - - 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 params, + List args + ) { + var map = new HashMap(); + + 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 map; public TypeSubstitutionMap(Map map) { -- cgit v1.2.3