FIR: Support invoke convention on super-qualified calls

This commit is contained in:
Denis.Zharkov
2021-11-02 15:36:14 +03:00
committed by teamcity
parent 0c7728f64a
commit 994040c91c
7 changed files with 51 additions and 0 deletions
@@ -24509,6 +24509,12 @@ public class DiagnosisCompilerTestFE10TestdataTestGenerated extends AbstractDiag
runTest("compiler/testData/diagnostics/tests/resolve/resolveWithoutGenerics.kt");
}
@Test
@TestMetadata("superInvoke.kt")
public void testSuperInvoke() throws Exception {
runTest("compiler/testData/diagnostics/tests/resolve/superInvoke.kt");
}
@Test
@TestMetadata("typeParameterInDefaultValueInLocalFunction.kt")
public void testTypeParameterInDefaultValueInLocalFunction() throws Exception {
@@ -24509,6 +24509,12 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirDiagnosti
runTest("compiler/testData/diagnostics/tests/resolve/resolveWithoutGenerics.kt");
}
@Test
@TestMetadata("superInvoke.kt")
public void testSuperInvoke() throws Exception {
runTest("compiler/testData/diagnostics/tests/resolve/superInvoke.kt");
}
@Test
@TestMetadata("typeParameterInDefaultValueInLocalFunction.kt")
public void testTypeParameterInDefaultValueInLocalFunction() throws Exception {
@@ -24509,6 +24509,12 @@ public class FirOldFrontendDiagnosticsWithLightTreeTestGenerated extends Abstrac
runTest("compiler/testData/diagnostics/tests/resolve/resolveWithoutGenerics.kt");
}
@Test
@TestMetadata("superInvoke.kt")
public void testSuperInvoke() throws Exception {
runTest("compiler/testData/diagnostics/tests/resolve/superInvoke.kt");
}
@Test
@TestMetadata("typeParameterInDefaultValueInLocalFunction.kt")
public void testTypeParameterInDefaultValueInLocalFunction() throws Exception {
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.resolve.calls.tower
import org.jetbrains.kotlin.fir.declarations.FirTypedDeclaration
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
import org.jetbrains.kotlin.fir.expressions.FirResolvedQualifier
import org.jetbrains.kotlin.fir.expressions.builder.FirPropertyAccessExpressionBuilder
import org.jetbrains.kotlin.fir.resolve.*
@@ -53,6 +54,18 @@ internal class FirInvokeResolveTowerExtension(
}
}
fun enqueueResolveTasksForSuperReceiver(info: CallInfo, receiver: FirQualifiedAccessExpression) {
if (info.callKind != CallKind.Function) return
val invokeReceiverVariableInfo = info.replaceWithVariableAccess()
enqueueInvokeReceiverTask(
info,
invokeReceiverVariableInfo,
invokeBuiltinExtensionMode = false
) {
it.runResolverForSuperReceiver(invokeReceiverVariableInfo, receiver)
}
}
fun enqueueResolveTasksForExpressionReceiver(info: CallInfo, receiver: FirExpression) {
if (info.callKind != CallKind.Function) return
enqueueBothInvokeReceiverTasks(
@@ -66,6 +66,7 @@ class FirTowerResolver(
if (receiver is FirQualifiedAccessExpression) {
if (receiver.calleeReference is FirSuperReference) {
manager.enqueueResolverTask { mainTask.runResolverForSuperReceiver(info, receiver) }
invokeResolveTowerExtension.enqueueResolveTasksForSuperReceiver(info, receiver)
return
}
}
@@ -0,0 +1,13 @@
// FIR_IDENTICAL
// SKIP_TXT
// FILE: main.kt
open class A {
protected open val x: (String) -> Boolean = { true }
}
class B : A() {
override val x = { y: String ->
super.x(y)
}
}
@@ -24521,6 +24521,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest {
runTest("compiler/testData/diagnostics/tests/resolve/resolveWithoutGenerics.kt");
}
@Test
@TestMetadata("superInvoke.kt")
public void testSuperInvoke() throws Exception {
runTest("compiler/testData/diagnostics/tests/resolve/superInvoke.kt");
}
@Test
@TestMetadata("typeParameterInDefaultValueInLocalFunction.kt")
public void testTypeParameterInDefaultValueInLocalFunction() throws Exception {