FIR: Get rid of the cycle in delegated properties resolution

^KT-32725 In Progress
This commit is contained in:
Denis Zharkov
2019-10-25 16:13:38 +03:00
parent f97f06a99a
commit 4233cf1bd6
2 changed files with 18 additions and 2 deletions
@@ -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,
@@ -258,6 +258,10 @@ class FirExpressionsResolveTransformer(transformer: FirBodyResolveTransformer) :
callableReferenceAccess: FirCallableReferenceAccess,
data: Any?
): CompositeTransformResult<FirStatement> {
if (callableReferenceAccess.calleeReference is FirResolvedNamedReference) {
return callableReferenceAccess.compose()
}
val transformedLHS =
callableReferenceAccess.explicitReceiver?.transformSingle(this, noExpectedType)