FIR IDE: add helper to resolve call for any KtElement

This commit is contained in:
Tianyu Geng
2021-10-28 15:24:38 -07:00
committed by Ilya Kirillov
parent 523cb4b3e8
commit 1a22124c02
2 changed files with 11 additions and 6 deletions
@@ -44,11 +44,6 @@ abstract class AbstractResolveCallTest(configurator: FrontendApiTestConfigurator
}
private fun KtAnalysisSession.resolveCall(element: PsiElement): KtCall? = when (element) {
is KtCallElement -> element.resolveCall()
is KtBinaryExpression -> element.resolveCall()
is KtUnaryExpression -> element.resolveCall()
is KtArrayAccessExpression -> element.resolveCall()
is KtSimpleNameExpression -> element.resolveAccessorCall()
is KtValueArgument -> resolveCall(element.getArgumentExpression()!!)
is KtDeclarationModifierList -> {
val annotationEntry = element.annotationEntries.singleOrNull()
@@ -60,6 +55,8 @@ abstract class AbstractResolveCallTest(configurator: FrontendApiTestConfigurator
?: error("Only single annotation entry is supported for now")
annotationEntry.resolveCall()
}
is KtSimpleNameExpression -> element.resolveAccessorCall()
is KtElement -> element.resolveCallIfPossible()
else -> error("Selected element type (${element::class.simpleName}) is not supported for resolveCall()")
}
@@ -36,4 +36,12 @@ public interface KtCallResolverMixIn : KtAnalysisSessionMixIn {
public fun KtArrayAccessExpression.resolveCall(): KtCall? =
analysisSession.callResolver.resolveCall(this)
}
public fun KtElement.resolveCallIfPossible(): KtCall? = when (this) {
is KtCallElement -> resolveCall()
is KtBinaryExpression -> resolveCall()
is KtUnaryExpression -> resolveCall()
is KtArrayAccessExpression -> resolveCall()
else -> null
}
}