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");
|
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
|
@Test
|
||||||
@TestMetadata("typeParameterInDefaultValueInLocalFunction.kt")
|
@TestMetadata("typeParameterInDefaultValueInLocalFunction.kt")
|
||||||
public void testTypeParameterInDefaultValueInLocalFunction() throws Exception {
|
public void testTypeParameterInDefaultValueInLocalFunction() throws Exception {
|
||||||
|
|||||||
+6
@@ -24509,6 +24509,12 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirDiagnosti
|
|||||||
runTest("compiler/testData/diagnostics/tests/resolve/resolveWithoutGenerics.kt");
|
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
|
@Test
|
||||||
@TestMetadata("typeParameterInDefaultValueInLocalFunction.kt")
|
@TestMetadata("typeParameterInDefaultValueInLocalFunction.kt")
|
||||||
public void testTypeParameterInDefaultValueInLocalFunction() throws Exception {
|
public void testTypeParameterInDefaultValueInLocalFunction() throws Exception {
|
||||||
|
|||||||
+6
@@ -24509,6 +24509,12 @@ public class FirOldFrontendDiagnosticsWithLightTreeTestGenerated extends Abstrac
|
|||||||
runTest("compiler/testData/diagnostics/tests/resolve/resolveWithoutGenerics.kt");
|
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
|
@Test
|
||||||
@TestMetadata("typeParameterInDefaultValueInLocalFunction.kt")
|
@TestMetadata("typeParameterInDefaultValueInLocalFunction.kt")
|
||||||
public void testTypeParameterInDefaultValueInLocalFunction() throws Exception {
|
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.declarations.FirTypedDeclaration
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
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.FirResolvedQualifier
|
||||||
import org.jetbrains.kotlin.fir.expressions.builder.FirPropertyAccessExpressionBuilder
|
import org.jetbrains.kotlin.fir.expressions.builder.FirPropertyAccessExpressionBuilder
|
||||||
import org.jetbrains.kotlin.fir.resolve.*
|
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) {
|
fun enqueueResolveTasksForExpressionReceiver(info: CallInfo, receiver: FirExpression) {
|
||||||
if (info.callKind != CallKind.Function) return
|
if (info.callKind != CallKind.Function) return
|
||||||
enqueueBothInvokeReceiverTasks(
|
enqueueBothInvokeReceiverTasks(
|
||||||
|
|||||||
+1
@@ -66,6 +66,7 @@ class FirTowerResolver(
|
|||||||
if (receiver is FirQualifiedAccessExpression) {
|
if (receiver is FirQualifiedAccessExpression) {
|
||||||
if (receiver.calleeReference is FirSuperReference) {
|
if (receiver.calleeReference is FirSuperReference) {
|
||||||
manager.enqueueResolverTask { mainTask.runResolverForSuperReceiver(info, receiver) }
|
manager.enqueueResolverTask { mainTask.runResolverForSuperReceiver(info, receiver) }
|
||||||
|
invokeResolveTowerExtension.enqueueResolveTasksForSuperReceiver(info, receiver)
|
||||||
return
|
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");
|
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
|
@Test
|
||||||
@TestMetadata("typeParameterInDefaultValueInLocalFunction.kt")
|
@TestMetadata("typeParameterInDefaultValueInLocalFunction.kt")
|
||||||
public void testTypeParameterInDefaultValueInLocalFunction() throws Exception {
|
public void testTypeParameterInDefaultValueInLocalFunction() throws Exception {
|
||||||
|
|||||||
Reference in New Issue
Block a user