[FIR IDE] Add fast path to isImplicitFunctionCall and improve its kdoc
This commit is contained in:
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.resolve.diagnostics.*
|
||||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
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.analysis.api.symbols.KtSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.FirImplicitInvokeCall
|
||||||
import org.jetbrains.kotlin.util.OperatorNameConventions
|
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 {
|
fun FirFunctionCall.isImplicitFunctionCall(): Boolean {
|
||||||
if (extensionReceiver !is FirQualifiedAccessExpression && dispatchReceiver !is FirQualifiedAccessExpression) return false
|
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() =
|
private fun FirBasedSymbol<*>.isInvokeFunction() =
|
||||||
|
|||||||
Reference in New Issue
Block a user