[FIR IDE] Add fast path to isImplicitFunctionCall and improve its kdoc

This commit is contained in:
Roman Golyshev
2021-10-25 17:36:46 +03:00
committed by teamcityserver
parent 4b49356a56
commit 8e911b1e98
@@ -15,13 +15,23 @@ import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
import org.jetbrains.kotlin.fir.resolve.diagnostics.*
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
import org.jetbrains.kotlin.fir.expressions.FirImplicitInvokeCall
import org.jetbrains.kotlin.util.OperatorNameConventions
/**
* Checks if the function call is an implicit invoke call with a simple qualified receiver, or looks like it.
*
* For example, `foo()` and `foo.bar()` have simple qualified receivers, while `foo!!()`, `{}()` and `(foo ?: bar)()` - don't.
*
* @return `true` if the function call has a simple qualified receiver and is an implicit invoke call,
* or looks like it and resolves to the `invoke` function.
*/
fun FirFunctionCall.isImplicitFunctionCall(): Boolean {
if (extensionReceiver !is FirQualifiedAccessExpression && dispatchReceiver !is FirQualifiedAccessExpression) return false
return calleeReference.getCandidateSymbols().any(FirBasedSymbol<*>::isInvokeFunction)
return this is FirImplicitInvokeCall ||
calleeReference.getCandidateSymbols().any(FirBasedSymbol<*>::isInvokeFunction)
}
private fun FirBasedSymbol<*>.isInvokeFunction() =