mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
KT UAST: build implicit this receiver from containing method's extension receiver
^KTIJ-32595 GitOrigin-RevId: fd3cb0d1f71fee7e2200567e1481f6389162c1de
This commit is contained in:
committed by
intellij-monorepo-bot
parent
f81bd3f24e
commit
996c6ee877
+30
@@ -291,6 +291,14 @@ class KotlinUFunctionCallExpression(
|
||||
// Bail out for non-instance functions
|
||||
if (isStatic || callableDeclaration !is PsiMethod) return null
|
||||
|
||||
val containingUMethod = getContainingUMethod()
|
||||
val extensionReceiver = containingUMethod?.uastParameters?.firstOrNull() as? KotlinReceiverUParameter
|
||||
// Extension receiver of the containing method
|
||||
if (extensionReceiver != null && extensionReceiver.javaPsi.type == receiverType) {
|
||||
// Implicit $this$extension
|
||||
return KotlinUImplicitExtensionReceiver(extensionReceiver, receiverType, this)
|
||||
}
|
||||
|
||||
val implicitReceiver =
|
||||
if (baseResolveProviderService.isResolvedToExtension(sourcePsi)) {
|
||||
// Extension receiver of PsiParameter
|
||||
@@ -347,6 +355,28 @@ class KotlinUFunctionCallExpression(
|
||||
get() = implicitReceiver
|
||||
}
|
||||
|
||||
private class KotlinUImplicitExtensionReceiver(
|
||||
val extensionReceiver: KotlinReceiverUParameter,
|
||||
val receiverType: PsiType?,
|
||||
uasParent: UElement,
|
||||
) : KotlinAbstractUExpression(uasParent), UThisExpression {
|
||||
override val label: String?
|
||||
get() = null
|
||||
|
||||
override val labelIdentifier: UIdentifier?
|
||||
get() = null
|
||||
|
||||
override fun getExpressionType() = receiverType
|
||||
|
||||
override fun resolve(): PsiElement? = extensionReceiver.javaPsi
|
||||
|
||||
override val sourcePsi: PsiElement?
|
||||
get() = null
|
||||
|
||||
override val javaPsi: PsiElement?
|
||||
get() = extensionReceiver.javaPsi
|
||||
}
|
||||
|
||||
private class KotlinUImplicitLambdaReceiver(
|
||||
val lambdaReceiver: UParameter?,
|
||||
val receiverType: PsiType?,
|
||||
|
||||
Reference in New Issue
Block a user