Analysis API: Rename resolveCandidates to collectCallCandidates.

Didn't bother to rename the directory in the test data.
This commit is contained in:
Mark Punzalan
2022-02-02 11:04:41 +00:00
committed by Ilya Kirillov
parent 58c6c25fe9
commit 7a1ef25333
4 changed files with 22 additions and 17 deletions
@@ -147,7 +147,7 @@ internal class KtFe10CallResolver(
} }
// TODO: See Call.resolveCandidates() in plugins/kotlin/core/src/org/jetbrains/kotlin/idea/core/Utils.kt // TODO: See Call.resolveCandidates() in plugins/kotlin/core/src/org/jetbrains/kotlin/idea/core/Utils.kt
override fun resolveCandidates(psi: KtElement): List<KtCallInfo> = TODO() override fun collectCallCandidates(psi: KtElement): List<KtCallInfo> = TODO()
private fun handleAsCompoundAssignment(context: BindingContext, binaryExpression: KtBinaryExpression): KtCallInfo? { private fun handleAsCompoundAssignment(context: BindingContext, binaryExpression: KtBinaryExpression): KtCallInfo? {
val left = binaryExpression.left ?: return null val left = binaryExpression.left ?: return null
@@ -698,9 +698,9 @@ internal class KtFirCallResolver(
private fun FirValueParameterSymbol.toKtSymbol(): KtValueParameterSymbol = private fun FirValueParameterSymbol.toKtSymbol(): KtValueParameterSymbol =
firSymbolBuilder.variableLikeBuilder.buildValueParameterSymbol(this) firSymbolBuilder.variableLikeBuilder.buildValueParameterSymbol(this)
override fun resolveCandidates(psi: KtElement): List<KtCallInfo> = withValidityAssertion { override fun collectCallCandidates(psi: KtElement): List<KtCallInfo> = withValidityAssertion {
getKtCallInfos(psi) { psiToResolve, resolveCalleeExpressionOfFunctionCall, resolveFragmentOfCall -> getKtCallInfos(psi) { psiToResolve, resolveCalleeExpressionOfFunctionCall, resolveFragmentOfCall ->
resolveCandidates( collectCallCandidates(
psiToResolve, psiToResolve,
resolveCalleeExpressionOfFunctionCall, resolveCalleeExpressionOfFunctionCall,
resolveFragmentOfCall resolveFragmentOfCall
@@ -709,7 +709,7 @@ internal class KtFirCallResolver(
} }
// TODO: Refactor common code with FirElement.toKtCallInfo() when other FirResolvables are handled // TODO: Refactor common code with FirElement.toKtCallInfo() when other FirResolvables are handled
private fun FirElement.resolveCandidates( private fun FirElement.collectCallCandidates(
psi: KtElement, psi: KtElement,
resolveCalleeExpressionOfFunctionCall: Boolean, resolveCalleeExpressionOfFunctionCall: Boolean,
resolveFragmentOfCall: Boolean, resolveFragmentOfCall: Boolean,
@@ -725,7 +725,7 @@ internal class KtFirCallResolver(
// // This way `f` is also the explicit receiver of this implicit `invoke` call // // This way `f` is also the explicit receiver of this implicit `invoke` call
// } // }
// ``` // ```
return explicitReceiver?.resolveCandidates( return explicitReceiver?.collectCallCandidates(
psi, psi,
resolveCalleeExpressionOfFunctionCall = false, resolveCalleeExpressionOfFunctionCall = false,
resolveFragmentOfCall = resolveFragmentOfCall resolveFragmentOfCall = resolveFragmentOfCall
@@ -736,7 +736,7 @@ internal class KtFirCallResolver(
val firFile = psi.containingKtFile.getOrBuildFirFile(firResolveState) val firFile = psi.containingKtFile.getOrBuildFirFile(firResolveState)
AllCandidatesResolver(analysisSession.rootModuleSession, firFile).getAllCandidates(this, psi, resolveFragmentOfCall) AllCandidatesResolver(analysisSession.rootModuleSession, firFile).getAllCandidates(this, psi, resolveFragmentOfCall)
} }
is FirSafeCallExpression -> selector.resolveCandidates( is FirSafeCallExpression -> selector.collectCallCandidates(
psi, psi,
resolveCalleeExpressionOfFunctionCall, resolveCalleeExpressionOfFunctionCall,
resolveFragmentOfCall resolveFragmentOfCall
@@ -7,9 +7,7 @@ package org.jetbrains.kotlin.analysis.api.impl.base.test.components
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.calls.KtCall
import org.jetbrains.kotlin.analysis.api.calls.KtCallInfo import org.jetbrains.kotlin.analysis.api.calls.KtCallInfo
import org.jetbrains.kotlin.analysis.api.impl.barebone.test.FrontendApiTestConfiguratorService
import org.jetbrains.kotlin.analysis.api.impl.barebone.test.expressionMarkerProvider import org.jetbrains.kotlin.analysis.api.impl.barebone.test.expressionMarkerProvider
import org.jetbrains.kotlin.analysis.api.impl.base.test.test.framework.AbstractHLApiSingleModuleTest import org.jetbrains.kotlin.analysis.api.impl.base.test.test.framework.AbstractHLApiSingleModuleTest
import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.*
@@ -24,7 +22,7 @@ abstract class AbstractResolveCandidatesTest : AbstractHLApiSingleModuleTest() {
val actual = executeOnPooledThreadInReadAction { val actual = executeOnPooledThreadInReadAction {
analyseForTest(expression) { analyseForTest(expression) {
val candidates = resolveCandidates(expression) val candidates = collectCallCandidates(expression)
if (candidates.isEmpty()) { if (candidates.isEmpty()) {
"NO_CANDIDATES" "NO_CANDIDATES"
} else { } else {
@@ -35,19 +33,19 @@ abstract class AbstractResolveCandidatesTest : AbstractHLApiSingleModuleTest() {
testServices.assertions.assertEqualsToTestDataFileSibling(actual) testServices.assertions.assertEqualsToTestDataFileSibling(actual)
} }
private fun KtAnalysisSession.resolveCandidates(element: PsiElement): List<KtCallInfo> = when (element) { private fun KtAnalysisSession.collectCallCandidates(element: PsiElement): List<KtCallInfo> = when (element) {
is KtValueArgument -> resolveCandidates(element.getArgumentExpression()!!) is KtValueArgument -> this@collectCallCandidates.collectCallCandidates(element.getArgumentExpression()!!)
is KtDeclarationModifierList -> { is KtDeclarationModifierList -> {
val annotationEntry = element.annotationEntries.singleOrNull() val annotationEntry = element.annotationEntries.singleOrNull()
?: error("Only single annotation entry is supported for now") ?: error("Only single annotation entry is supported for now")
annotationEntry.resolveCandidates() annotationEntry.collectCallCandidates()
} }
is KtFileAnnotationList -> { is KtFileAnnotationList -> {
val annotationEntry = element.annotationEntries.singleOrNull() val annotationEntry = element.annotationEntries.singleOrNull()
?: error("Only single annotation entry is supported for now") ?: error("Only single annotation entry is supported for now")
annotationEntry.resolveCandidates() annotationEntry.collectCallCandidates()
} }
is KtElement -> element.resolveCandidates() is KtElement -> element.collectCallCandidates()
else -> error("Selected element type (${element::class.simpleName}) is not supported for resolveCandidates()") else -> error("Selected element type (${element::class.simpleName}) is not supported for resolveCandidates()")
} }
@@ -13,7 +13,7 @@ import org.jetbrains.kotlin.psi.KtUnaryExpression
public abstract class KtCallResolver : KtAnalysisSessionComponent() { public abstract class KtCallResolver : KtAnalysisSessionComponent() {
public abstract fun resolveCall(psi: KtElement): KtCallInfo? public abstract fun resolveCall(psi: KtElement): KtCallInfo?
public abstract fun resolveCandidates(psi: KtElement): List<KtCallInfo> public abstract fun collectCallCandidates(psi: KtElement): List<KtCallInfo>
} }
public interface KtCallResolverMixIn : KtAnalysisSessionMixIn { public interface KtCallResolverMixIn : KtAnalysisSessionMixIn {
@@ -31,6 +31,13 @@ public interface KtCallResolverMixIn : KtAnalysisSessionMixIn {
public fun KtArrayAccessExpression.resolveCall(): KtCallInfo = public fun KtArrayAccessExpression.resolveCall(): KtCallInfo =
analysisSession.callResolver.resolveCall(this) ?: error("KtArrayAccessExpression should always resolve to a KtCallInfo") analysisSession.callResolver.resolveCall(this) ?: error("KtArrayAccessExpression should always resolve to a KtCallInfo")
public fun KtElement.resolveCandidates(): List<KtCallInfo> = /**
analysisSession.callResolver.resolveCandidates(this) * Returns all the candidates considered during [overload resolution](https://kotlinlang.org/spec/overload-resolution.html) for the call
* corresponding to this [KtElement].
*
* [resolveCall] only returns the final result of overload resolution, i.e., the selected callable after considering candidate
* applicability and choosing the most specific candidate.
*/
public fun KtElement.collectCallCandidates(): List<KtCallInfo> =
analysisSession.callResolver.collectCallCandidates(this)
} }