FIR: Support invoke convention on super-qualified calls
This commit is contained in:
+6
@@ -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 {
|
||||
|
||||
+6
@@ -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 {
|
||||
|
||||
+6
@@ -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 {
|
||||
|
||||
+13
@@ -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(
|
||||
|
||||
+1
@@ -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)
|
||||
}
|
||||
}
|
||||
Generated
+6
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user