diff --git a/idea/idea-fir-fe10-binding/src/org/jetbrains/kotlin/idea/fir/fe10/binding/CallAndResolverCallWrappers.kt b/idea/idea-fir-fe10-binding/src/org/jetbrains/kotlin/idea/fir/fe10/binding/CallAndResolverCallWrappers.kt index f704c9667e8..d0ba1a059f9 100644 --- a/idea/idea-fir-fe10-binding/src/org/jetbrains/kotlin/idea/fir/fe10/binding/CallAndResolverCallWrappers.kt +++ b/idea/idea-fir-fe10-binding/src/org/jetbrains/kotlin/idea/fir/fe10/binding/CallAndResolverCallWrappers.kt @@ -12,6 +12,7 @@ import org.jetbrains.kotlin.fir.declarations.FirValueParameter import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.impl.FirNoReceiverExpression import org.jetbrains.kotlin.fir.realPsi +import org.jetbrains.kotlin.fir.references.FirErrorNamedReference import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference import org.jetbrains.kotlin.fir.types.FirTypeProjectionWithVariance import org.jetbrains.kotlin.idea.fir.fe10.* @@ -77,8 +78,12 @@ internal class FirWrapperResolvedCall(val firSimpleWrapperCall: FirSimpleWrapper private val firCall get() = firSimpleWrapperCall.firCall private val context get() = firSimpleWrapperCall.context - private val ktFunctionSymbol = firCall.withFir { - context.ktAnalysisSessionFacade.buildSymbol((it.calleeReference as FirResolvedNamedReference).resolvedSymbol.fir) as KtFunctionLikeSymbol + private val ktFunctionSymbol: KtFunctionLikeSymbol = firCall.withFir { + when (val calleeReference = it.calleeReference) { + is FirResolvedNamedReference -> context.ktAnalysisSessionFacade.buildSymbol(calleeReference.resolvedSymbol.fir) as KtFunctionLikeSymbol + is FirErrorNamedReference -> context.ktAnalysisSessionFacade.buildSymbol(calleeReference.candidateSymbol!!.fir) as KtFunctionLikeSymbol + else -> context.noImplementation("calleeReferenceType: ${calleeReference::class.java}") + } } private val _typeArguments: Map by lazy(LazyThreadSafetyMode.PUBLICATION) { @@ -210,7 +215,7 @@ class CallAndResolverCallWrappers(bindingContext: KtSymbolBasedBindingContext) { private fun getCall(element: KtElement): Call { val ktCall = element.parent.safeAs() ?: context.implementationPostponed() - val firCall = when (val fir = element.getOrBuildFir(context.ktAnalysisSessionFacade.firResolveState)) { + val firCall = when (val fir = ktCall.getOrBuildFir(context.ktAnalysisSessionFacade.firResolveState)) { is FirFunctionCall -> fir is FirSafeCallExpression -> fir.regularQualifiedAccess as? FirFunctionCall else -> null diff --git a/idea/testData/intentions/conventionNameCalls/replaceContains/invalidArgument.kt b/idea/testData/intentions/conventionNameCalls/replaceContains/invalidArgument.kt index 1da7c2fcd15..d35cca01361 100644 --- a/idea/testData/intentions/conventionNameCalls/replaceContains/invalidArgument.kt +++ b/idea/testData/intentions/conventionNameCalls/replaceContains/invalidArgument.kt @@ -1,7 +1,6 @@ // IS_APPLICABLE: false // ERROR: Cannot find a parameter with this name: c // ERROR: 'operator' modifier is inapplicable on this function: must have a single value parameter -// IGNORE_FE10_BINDING_BY_FIR fun test() { class Test{ operator fun contains(a: Int=1, b: Int=2): Boolean = true diff --git a/idea/testData/intentions/conventionNameCalls/replaceContains/missingArgument.kt b/idea/testData/intentions/conventionNameCalls/replaceContains/missingArgument.kt index 8aa0ac09cdf..253a006e1b7 100644 --- a/idea/testData/intentions/conventionNameCalls/replaceContains/missingArgument.kt +++ b/idea/testData/intentions/conventionNameCalls/replaceContains/missingArgument.kt @@ -1,7 +1,6 @@ // IS_APPLICABLE: false // ERROR: No value passed for parameter 'b' // ERROR: 'operator' modifier is inapplicable on this function: must have a single value parameter -// IGNORE_FE10_BINDING_BY_FIR fun test() { class Test{ operator fun contains(a: Int, b: Int): Boolean = true