~ get rid of customCompletionHandling
diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/FirCallCompleter.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/FirCallCompleter.kt
index 768d13f..bea4727 100644
--- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/FirCallCompleter.kt
+++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/FirCallCompleter.kt
@@ -75,25 +75,18 @@
val completionMode = candidate.computeCompletionMode(
session.inferenceComponents, resolutionMode, initialType
- )
+ ).let {
+ if (it == ConstraintSystemCompletionMode.FULL && inferenceSession.shouldAvoidFullCompletion(call))
+ ConstraintSystemCompletionMode.PARTIAL
+ else
+ it
+ }
val analyzer = createPostponedArgumentsAnalyzer(transformer.resolutionContext)
if (call is FirFunctionCall) {
call.replaceLambdaArgumentInvocationKinds(session)
}
- if (inferenceSession.customCompletionHandling(call, resolutionMode, completionMode) { chosenCompletionMode ->
- runCompletionForCall(
- candidate,
- chosenCompletionMode,
- call,
- initialType
- )
- }
- ) {
- return call
- }
-
return when (completionMode) {
ConstraintSystemCompletionMode.FULL -> {
if (inferenceSession.shouldRunCompletion(call)) {
@@ -114,13 +107,16 @@
inferenceSession.addCompletedCall(completedCall, candidate)
completedCall
} else {
- inferenceSession.addPartiallyResolvedCall(call)
+ inferenceSession.processPartiallyResolvedCall(call, resolutionMode)
call
}
}
ConstraintSystemCompletionMode.PARTIAL -> {
runCompletionForCall(candidate, completionMode, call, initialType, analyzer)
+ if (inferenceSession is FirDelegatedPropertyInferenceSession) {
+ inferenceSession.processPartiallyResolvedCall(call, resolutionMode)
+ }
call
}
diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/FirDelegatedPropertyInferenceSession.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/FirDelegatedPropertyInferenceSession.kt
index a58bcc7..230131d 100644
--- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/FirDelegatedPropertyInferenceSession.kt
+++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/FirDelegatedPropertyInferenceSession.kt
@@ -47,30 +47,15 @@
)
}
- override fun <T> customCompletionHandling(
- call: T,
- resolutionMode: ResolutionMode,
- completionMode: ConstraintSystemCompletionMode,
- runCompletionCallback: (ConstraintSystemCompletionMode) -> Unit,
- ): Boolean where T : FirResolvable, T : FirStatement {
- val candidate = call.candidate
+ override fun <T> shouldAvoidFullCompletion(call: T): Boolean where T : FirResolvable, T : FirStatement = call.isAnyOfDelegateOperators()
-
- // Do not run completion for provideDelegate/getValue/setValue because they might affect each other
- if (completionMode == ConstraintSystemCompletionMode.FULL && resolutionMode == ResolutionMode.ContextDependent.Delegate) return false
-
- if (resolutionMode != ResolutionMode.ContextDependent.Delegate && !call.isAnyOfDelegateOperators()) return false
+ override fun <T> processPartiallyResolvedCall(call: T, resolutionMode: ResolutionMode) where T : FirResolvable, T : FirStatement {
+ if (resolutionMode != ResolutionMode.ContextDependent.Delegate && !call.isAnyOfDelegateOperators()) return
val candidateSystem = call.candidate.system
- val isProvideDelegateOperator = call.isOperatorCallWithName { it == OperatorNameConventions.PROVIDE_DELEGATE }
- if (!isProvideDelegateOperator) {
- runCompletionCallback(ConstraintSystemCompletionMode.PARTIAL)
- }
partiallyResolvedCalls.add(call to call.candidate)
currentConstraintSystem = candidateSystem
-
- return true
}
private fun <T> T.isAnyOfDelegateOperators(): Boolean where T : FirResolvable, T : FirStatement = isOperatorCallWithName {
@@ -148,8 +133,6 @@
override fun <T> addCompletedCall(call: T, candidate: Candidate) where T : FirResolvable, T : FirStatement {}
- override fun <T> addPartiallyResolvedCall(call: T) where T : FirResolvable, T : FirStatement {
- error("")
- }
+
override fun <T> shouldRunCompletion(call: T): Boolean where T : FirResolvable, T : FirStatement = true
}
diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/FirInferenceSession.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/FirInferenceSession.kt
index 71d053a..7ec558e 100644
--- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/FirInferenceSession.kt
+++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/FirInferenceSession.kt
@@ -26,15 +26,9 @@
}
abstract fun <T> shouldRunCompletion(call: T): Boolean where T : FirResolvable, T : FirStatement
+ open fun <T> shouldAvoidFullCompletion(call: T): Boolean where T : FirResolvable, T : FirStatement = false
- open fun <T> customCompletionHandling(
- call: T,
- resolutionMode: ResolutionMode,
- completionMode: ConstraintSystemCompletionMode,
- runCompletionCallback: (ConstraintSystemCompletionMode) -> Unit,
- ): Boolean where T : FirResolvable, T : FirStatement = false
-
- abstract fun <T> addPartiallyResolvedCall(call: T) where T : FirResolvable, T : FirStatement
+ abstract fun <T> processPartiallyResolvedCall(call: T, resolutionMode: ResolutionMode) where T : FirResolvable, T : FirStatement
abstract fun <T> addCompletedCall(call: T, candidate: Candidate) where T : FirResolvable, T : FirStatement
abstract fun registerStubTypes(map: Map<TypeVariableMarker, StubTypeMarker>)
@@ -54,7 +48,7 @@
abstract class FirStubInferenceSession : FirInferenceSession() {
override fun <T> shouldRunCompletion(call: T): Boolean where T : FirResolvable, T : FirStatement = true
- override fun <T> addPartiallyResolvedCall(call: T) where T : FirResolvable, T : FirStatement {}
+ override fun <T> processPartiallyResolvedCall(call: T, resolutionMode: ResolutionMode) where T : FirResolvable, T : FirStatement {}
override fun <T> addCompletedCall(call: T, candidate: Candidate) where T : FirResolvable, T : FirStatement {}
override fun inferPostponedVariables(
diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/FirInferenceSessionForChainedResolve.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/FirInferenceSessionForChainedResolve.kt
index 70d0405..25a9a9e 100644
--- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/FirInferenceSessionForChainedResolve.kt
+++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/FirInferenceSessionForChainedResolve.kt
@@ -8,6 +8,7 @@
import org.jetbrains.kotlin.fir.expressions.FirResolvable
import org.jetbrains.kotlin.fir.expressions.FirStatement
import org.jetbrains.kotlin.fir.resolve.BodyResolveComponents
+import org.jetbrains.kotlin.fir.resolve.ResolutionMode
import org.jetbrains.kotlin.fir.resolve.calls.Candidate
import org.jetbrains.kotlin.fir.resolve.calls.ResolutionContext
import org.jetbrains.kotlin.fir.resolve.calls.candidate
@@ -32,7 +33,7 @@
// do nothing
}
- override fun <T> addPartiallyResolvedCall(call: T) where T : FirResolvable, T : FirStatement {
+ override fun <T> processPartiallyResolvedCall(call: T, resolutionMode: ResolutionMode) where T : FirResolvable, T : FirStatement {
partiallyResolvedCalls += call to call.candidate
}