[FIR] Convert CallKind to enum class

This commit is contained in:
Mikhail Glukhikh
2020-01-10 15:03:30 +03:00
parent f07adf085c
commit 30e339a2d7
@@ -5,37 +5,21 @@
package org.jetbrains.kotlin.fir.resolve.calls package org.jetbrains.kotlin.fir.resolve.calls
sealed class CallKind { enum class CallKind(vararg resolutionSequence: ResolutionStage) {
abstract val resolutionSequence: List<ResolutionStage> VariableAccess(
CheckVisibility,
/* DiscriminateSynthetics,
* Used for resolution of synthetic calls for `when` and `try` expression CheckExplicitReceiverConsistency,
* that are equal to `fun <K> select(vararg values: K): K` CreateFreshTypeVariableSubstitutorStage,
*/ CheckReceivers.Dispatch,
object SyntheticSelect : CallKind() { CheckReceivers.Extension
override val resolutionSequence: List<ResolutionStage> = listOf( ),
SyntheticSelect(
MapArguments, MapArguments,
CreateFreshTypeVariableSubstitutorStage, CreateFreshTypeVariableSubstitutorStage,
CheckArguments CheckArguments
) ),
} Function(
/*
* 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<ResolutionStage> = listOf(
MapArguments,
CreateFreshTypeVariableSubstitutorStage,
CheckArguments,
EagerResolveOfCallableReferences
)
}
object Function : CallKind() {
override val resolutionSequence: List<ResolutionStage> = listOf(
CheckVisibility, CheckVisibility,
DiscriminateSynthetics, DiscriminateSynthetics,
MapArguments, MapArguments,
@@ -45,26 +29,19 @@ sealed class CallKind {
CheckReceivers.Extension, CheckReceivers.Extension,
CheckArguments, CheckArguments,
EagerResolveOfCallableReferences EagerResolveOfCallableReferences
) ),
} CallableReference(
object VariableAccess : CallKind() {
override val resolutionSequence: List<ResolutionStage> = listOf(
CheckVisibility,
DiscriminateSynthetics,
CheckExplicitReceiverConsistency,
CreateFreshTypeVariableSubstitutorStage,
CheckReceivers.Dispatch,
CheckReceivers.Extension
)
}
object CallableReference : CallKind() {
override val resolutionSequence: List<ResolutionStage> = listOf(
CheckVisibility, CheckVisibility,
DiscriminateSynthetics, DiscriminateSynthetics,
CreateFreshTypeVariableSubstitutorStage, CreateFreshTypeVariableSubstitutorStage,
CheckCallableReferenceExpectedType CheckCallableReferenceExpectedType
) ),
} SyntheticIdForCallableReferencesResolution(
MapArguments,
CreateFreshTypeVariableSubstitutorStage,
CheckArguments,
EagerResolveOfCallableReferences
);
val resolutionSequence: List<ResolutionStage> = resolutionSequence.toList()
} }