From 784de38fe0e07d827d6abf3f85ca34f441768a1c Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Fri, 5 Jan 2024 21:05:07 +0000 Subject: Add commonSubtype() --- src/main/java/org/shedlang/compiler/types/Types.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'src/main/java') diff --git a/src/main/java/org/shedlang/compiler/types/Types.java b/src/main/java/org/shedlang/compiler/types/Types.java index 9ab5c634..ab48f77e 100644 --- a/src/main/java/org/shedlang/compiler/types/Types.java +++ b/src/main/java/org/shedlang/compiler/types/Types.java @@ -89,4 +89,18 @@ public class Types { return TOP; } } + + public static Type commonSubtype(List supertypes) { + var uniqueSubtypes = supertypes.stream() + .filter(subtype -> subtype != Types.TOP) + .collect(Collectors.toSet()); + + if (uniqueSubtypes.isEmpty()) { + return TOP; + } else if (uniqueSubtypes.size() == 1) { + return uniqueSubtypes.iterator().next(); + } else { + return BOTTOM; + } + } } -- cgit v1.2.3