From f79bc929ef4dd607e56da8639b60c09a3b64f8d1 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 23 Dec 2023 23:14:46 +0000 Subject: Convert if to when --- .../shedlang/compiler/typechecker/TypeChecker.java | 40 ++++++++++------------ 1 file changed, 19 insertions(+), 21 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java index c9d4f811..8ada73c2 100644 --- a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java +++ b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java @@ -572,27 +572,25 @@ public class TypeChecker { } private static Type fieldType(Type receiverType, String fieldName, Source source, TypeCheckerContext context) { - if (receiverType instanceof StructType receiverTypeStruct) { - var structTypeInfo = context.structTypeInfo(receiverTypeStruct, source); - - return structTypeInfo.fieldType(fieldName) - .orElseThrow(() -> new NoSuchFieldError(receiverTypeStruct, fieldName, source)); - } else if (receiverType instanceof NamespaceType receiverTypeNamespace) { - var namespaceTypeInfo = context.namespaceTypeInfo(receiverTypeNamespace, source); - - return namespaceTypeInfo.fieldType(fieldName) - .orElseThrow(() -> new NoSuchFieldError(receiverTypeNamespace, fieldName, source)); - } else if ( - receiverType instanceof TypeLevelValueType receiverTypeTypeLevelValue && - receiverTypeTypeLevelValue.value() instanceof UserDefinedEffect effect - ) { - var effectInfo = context.userDefinedEffectInfo(effect, source); - - return effectInfo.methodType(fieldName) - .orElseThrow(() -> new NoSuchFieldError(receiverType, fieldName, source)) - .withEffect(effect); - } else { - throw new NoSuchFieldError(receiverType, fieldName, source); + switch (receiverType) { + case StructType receiverTypeStruct -> { + var structTypeInfo = context.structTypeInfo(receiverTypeStruct, source); + return structTypeInfo.fieldType(fieldName) + .orElseThrow(() -> new NoSuchFieldError(receiverTypeStruct, fieldName, source)); + } + case NamespaceType receiverTypeNamespace -> { + var namespaceTypeInfo = context.namespaceTypeInfo(receiverTypeNamespace, source); + return namespaceTypeInfo.fieldType(fieldName) + .orElseThrow(() -> new NoSuchFieldError(receiverTypeNamespace, fieldName, source)); + } + case TypeLevelValueType receiverTypeTypeLevelValue when receiverTypeTypeLevelValue.value() instanceof UserDefinedEffect effect -> { + var effectInfo = context.userDefinedEffectInfo(effect, source); + return effectInfo.methodType(fieldName) + .orElseThrow(() -> new NoSuchFieldError(receiverType, fieldName, source)) + .withEffect(effect); + } + default -> + throw new NoSuchFieldError(receiverType, fieldName, source); } } -- cgit v1.2.3