From 30e339a2d7296e3f61ad9c7abc063881a6adf045 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Fri, 10 Jan 2020 15:03:30 +0300 Subject: [PATCH] [FIR] Convert CallKind to enum class --- .../kotlin/fir/resolve/calls/CallKind.kt | 99 +++++++------------ 1 file changed, 38 insertions(+), 61 deletions(-) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CallKind.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CallKind.kt index c20e9db3f2c..6b9184ae885 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CallKind.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CallKind.kt @@ -5,66 +5,43 @@ package org.jetbrains.kotlin.fir.resolve.calls -sealed class CallKind { - abstract val resolutionSequence: List +enum class CallKind(vararg resolutionSequence: ResolutionStage) { + VariableAccess( + CheckVisibility, + DiscriminateSynthetics, + CheckExplicitReceiverConsistency, + CreateFreshTypeVariableSubstitutorStage, + CheckReceivers.Dispatch, + CheckReceivers.Extension + ), + SyntheticSelect( + MapArguments, + CreateFreshTypeVariableSubstitutorStage, + CheckArguments + ), + Function( + CheckVisibility, + DiscriminateSynthetics, + MapArguments, + CheckExplicitReceiverConsistency, + CreateFreshTypeVariableSubstitutorStage, + CheckReceivers.Dispatch, + CheckReceivers.Extension, + CheckArguments, + EagerResolveOfCallableReferences + ), + CallableReference( + CheckVisibility, + DiscriminateSynthetics, + CreateFreshTypeVariableSubstitutorStage, + CheckCallableReferenceExpectedType + ), + SyntheticIdForCallableReferencesResolution( + MapArguments, + CreateFreshTypeVariableSubstitutorStage, + CheckArguments, + EagerResolveOfCallableReferences + ); - /* - * Used for resolution of synthetic calls for `when` and `try` expression - * that are equal to `fun select(vararg values: K): K` - */ - object SyntheticSelect : CallKind() { - override val resolutionSequence: List = listOf( - MapArguments, - CreateFreshTypeVariableSubstitutorStage, - CheckArguments - ) - } - - /* - * Used for resolution of synthetic calls for resolving callable references - * beyond any calls like `val x = ::foo` (they're transformed to `val x = id(::foo)`) - * It's needed to avoid having different callable references resolution parts within calls and beyond them - */ - object SyntheticIdForCallableReferencesResolution : CallKind() { - override val resolutionSequence: List = listOf( - MapArguments, - CreateFreshTypeVariableSubstitutorStage, - CheckArguments, - EagerResolveOfCallableReferences - ) - } - - object Function : CallKind() { - override val resolutionSequence: List = listOf( - CheckVisibility, - DiscriminateSynthetics, - MapArguments, - CheckExplicitReceiverConsistency, - CreateFreshTypeVariableSubstitutorStage, - CheckReceivers.Dispatch, - CheckReceivers.Extension, - CheckArguments, - EagerResolveOfCallableReferences - ) - } - - object VariableAccess : CallKind() { - override val resolutionSequence: List = listOf( - CheckVisibility, - DiscriminateSynthetics, - CheckExplicitReceiverConsistency, - CreateFreshTypeVariableSubstitutorStage, - CheckReceivers.Dispatch, - CheckReceivers.Extension - ) - } - - object CallableReference : CallKind() { - override val resolutionSequence: List = listOf( - CheckVisibility, - DiscriminateSynthetics, - CreateFreshTypeVariableSubstitutorStage, - CheckCallableReferenceExpectedType - ) - } + val resolutionSequence: List = resolutionSequence.toList() }