From 4233cf1bd6b578db71f7727bc319ccd74ee9835e Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Fri, 25 Oct 2019 16:13:38 +0300 Subject: [PATCH] FIR: Get rid of the cycle in delegated properties resolution ^KT-32725 In Progress --- .../kotlin/fir/resolve/calls/Arguments.kt | 16 ++++++++++++++-- .../resolve/FirExpressionsResolveTransformer.kt | 4 ++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/Arguments.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/Arguments.kt index 8c44f81e521..776bc23e24d 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/Arguments.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/Arguments.kt @@ -10,6 +10,7 @@ import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction import org.jetbrains.kotlin.fir.declarations.FirValueParameter import org.jetbrains.kotlin.fir.expressions.* +import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.firUnsafe import org.jetbrains.kotlin.fir.resolve.withNullability import org.jetbrains.kotlin.fir.returnExpressions @@ -46,8 +47,19 @@ fun Candidate.resolveArgumentExpression( isSafeCall, typeProvider ) - // TODO:! - is FirCallableReferenceAccess -> preprocessCallableReference(argument, expectedType) + is FirCallableReferenceAccess -> + if (argument.calleeReference is FirResolvedNamedReference) + resolvePlainExpressionArgument( + csBuilder, + argument, + expectedType, + sink, + isReceiver, + isSafeCall, + typeProvider + ) + else + preprocessCallableReference(argument, expectedType) // NB: FirCallableReferenceAccess should be checked earlier is FirQualifiedAccessExpression -> resolvePlainExpressionArgument( csBuilder, diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt index 563d4422a63..303c09159e3 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt @@ -258,6 +258,10 @@ class FirExpressionsResolveTransformer(transformer: FirBodyResolveTransformer) : callableReferenceAccess: FirCallableReferenceAccess, data: Any? ): CompositeTransformResult { + if (callableReferenceAccess.calleeReference is FirResolvedNamedReference) { + return callableReferenceAccess.compose() + } + val transformedLHS = callableReferenceAccess.explicitReceiver?.transformSingle(this, noExpectedType)