[K2, MPP] Build expect-actual map for type parameters from functions

^KT-57181 Fixed
This commit is contained in:
Ivan Kochurkin
2023-03-30 13:42:36 +02:00
committed by Space Team
parent 3a60b30dae
commit beaeb405d2
19 changed files with 133 additions and 13 deletions
@@ -33437,6 +33437,12 @@ public class FirLightTreeBlackBoxCodegenTestGenerated extends AbstractFirLightTr
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualSimple.kt");
}
@Test
@TestMetadata("expectActualTypeParameters.kt")
public void testExpectActualTypeParameters() throws Exception {
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualTypeParameters.kt");
}
@Test
@TestMetadata("expectActualTypealias.kt")
public void testExpectActualTypealias() throws Exception {
@@ -33437,6 +33437,12 @@ public class FirPsiBlackBoxCodegenTestGenerated extends AbstractFirPsiBlackBoxCo
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualSimple.kt");
}
@Test
@TestMetadata("expectActualTypeParameters.kt")
public void testExpectActualTypeParameters() throws Exception {
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualTypeParameters.kt");
}
@Test
@TestMetadata("expectActualTypealias.kt")
public void testExpectActualTypealias() throws Exception {
@@ -126,12 +126,7 @@ private class ClassLinksCollector(
val actualClassSymbol = actualClasses[generateIrElementFullNameFromExpect(declaration, expectActualTypeAliasMap)]
if (actualClassSymbol != null) {
expectActualMap[declaration.symbol] = actualClassSymbol
val actualClass = actualClassSymbol.owner
for (expectTypeParameter in declaration.typeParameters) {
actualClass.typeParameters.firstOrNull { it.name == expectTypeParameter.name }?.let { actualTypeParameter ->
expectActualMap[expectTypeParameter.symbol] = actualTypeParameter.symbol
}
}
expectActualMap.appendTypeParametersMap(declaration, actualClassSymbol.owner)
} else if (!declaration.containsOptionalExpectation()) {
diagnosticsReporter.reportMissingActual(declaration)
}
@@ -170,8 +165,14 @@ private class MemberLinksCollector(
expectActualMap[declaration.symbol] = actualMember.symbol
if (declaration is IrProperty) {
val actualProperty = actualMember as IrProperty
declaration.getter!!.symbol.let { expectActualMap[it] = actualProperty.getter!!.symbol }
declaration.getter?.let {
val getter = actualProperty.getter!!
expectActualMap[it.symbol] = getter.symbol
expectActualMap.appendTypeParametersMap(it, getter)
}
declaration.setter?.symbol?.let { expectActualMap[it] = actualProperty.setter!!.symbol }
} else if (declaration is IrFunction) {
expectActualMap.appendTypeParametersMap(declaration, actualMember as IrFunction)
}
}
actualMemberMatches.size > 1 -> {
@@ -186,4 +187,12 @@ private class MemberLinksCollector(
override fun visitElement(element: IrElement) {
element.acceptChildrenVoid(this)
}
}
private fun MutableMap<IrSymbol, IrSymbol>.appendTypeParametersMap(
expectTypeParametersContainer: IrTypeParametersContainer,
actualTypeParametersContainer: IrTypeParametersContainer
) {
expectTypeParametersContainer.typeParameters.zip(actualTypeParametersContainer.typeParameters)
.forEach { (expectTypeParameter, actualTypeParameter) -> this[expectTypeParameter.symbol] = actualTypeParameter.symbol }
}
@@ -33,7 +33,6 @@ object IrActualizer {
val symbolRemapper = ActualizerSymbolRemapper(expectActualMap)
val typeRemapper = DeepCopyTypeRemapper(symbolRemapper)
FunctionDefaultParametersActualizer(symbolRemapper, typeRemapper, expectActualMap).actualize()
MissingFakeOverridesAdder(
@@ -0,0 +1,27 @@
// IGNORE_BACKEND_K1: JS, JS_IR, JS_IR_ES6, NATIVE
// !LANGUAGE: +MultiPlatformProjects
// MODULE: common
// TARGET_PLATFORM: Common
// FILE: common.kt
expect class A<B, C> {
fun o(b: B): C
}
expect val <D> D.k: D
fun k(): String {
return "K".k
}
// MODULE: platform()()(common)
// FILE: platform.kt
actual class A<C, B> {
actual fun o(b: C): B = "O" as B
}
actual val <D> D.k: D get() = this as D
fun box() = A<Int, String>().o(42) + k()
@@ -1,9 +1,6 @@
// !LANGUAGE: +MultiPlatformProjects
// IGNORE_BACKEND: WASM
// IGNORE_BACKEND_K1: JVM, JVM_IR, JS, JS_IR, JS_IR_ES6, NATIVE
// IGNORE_BACKEND_K2: JS_IR
// KT-57181
// IGNORE_BACKEND_K2: NATIVE
// IGNORE_BACKEND_K1: JVM, JVM_IR, JS, JS_IR, JS_IR_ES6, NATIVE, WASM
// ISSUE: KT-57181
// WITH_STDLIB
// MODULE: common
@@ -32009,6 +32009,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualSimple.kt");
}
@Test
@TestMetadata("expectActualTypeParameters.kt")
public void testExpectActualTypeParameters() throws Exception {
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualTypeParameters.kt");
}
@Test
@TestMetadata("expectActualTypealias.kt")
public void testExpectActualTypealias() throws Exception {
@@ -33437,6 +33437,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualSimple.kt");
}
@Test
@TestMetadata("expectActualTypeParameters.kt")
public void testExpectActualTypeParameters() throws Exception {
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualTypeParameters.kt");
}
@Test
@TestMetadata("expectActualTypealias.kt")
public void testExpectActualTypealias() throws Exception {
@@ -33437,6 +33437,12 @@ public class IrBlackBoxCodegenWithIrInlinerTestGenerated extends AbstractIrBlack
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualSimple.kt");
}
@Test
@TestMetadata("expectActualTypeParameters.kt")
public void testExpectActualTypeParameters() throws Exception {
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualTypeParameters.kt");
}
@Test
@TestMetadata("expectActualTypealias.kt")
public void testExpectActualTypealias() throws Exception {
@@ -27283,6 +27283,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualSimple.kt");
}
@TestMetadata("expectActualTypeParameters.kt")
public void testExpectActualTypeParameters() throws Exception {
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualTypeParameters.kt");
}
@TestMetadata("expectActualTypealias.kt")
public void testExpectActualTypealias() throws Exception {
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualTypealias.kt");
@@ -23221,6 +23221,12 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest {
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualSimple.kt");
}
@Test
@TestMetadata("expectActualTypeParameters.kt")
public void testExpectActualTypeParameters() throws Exception {
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualTypeParameters.kt");
}
@Test
@TestMetadata("expectActualTypealias.kt")
public void testExpectActualTypealias() throws Exception {
@@ -23359,6 +23359,12 @@ public class FirJsCodegenBoxTestGenerated extends AbstractFirJsCodegenBoxTest {
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualSimple.kt");
}
@Test
@TestMetadata("expectActualTypeParameters.kt")
public void testExpectActualTypeParameters() throws Exception {
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualTypeParameters.kt");
}
@Test
@TestMetadata("expectActualTypealias.kt")
public void testExpectActualTypealias() throws Exception {
@@ -23359,6 +23359,12 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualSimple.kt");
}
@Test
@TestMetadata("expectActualTypeParameters.kt")
public void testExpectActualTypeParameters() throws Exception {
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualTypeParameters.kt");
}
@Test
@TestMetadata("expectActualTypealias.kt")
public void testExpectActualTypealias() throws Exception {
@@ -23359,6 +23359,12 @@ public class IrJsES6CodegenBoxTestGenerated extends AbstractIrJsES6CodegenBoxTes
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualSimple.kt");
}
@Test
@TestMetadata("expectActualTypeParameters.kt")
public void testExpectActualTypeParameters() throws Exception {
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualTypeParameters.kt");
}
@Test
@TestMetadata("expectActualTypealias.kt")
public void testExpectActualTypealias() throws Exception {
@@ -26791,6 +26791,12 @@ public class FirNativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTe
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualSimple.kt");
}
@Test
@TestMetadata("expectActualTypeParameters.kt")
public void testExpectActualTypeParameters() throws Exception {
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualTypeParameters.kt");
}
@Test
@TestMetadata("expectActualTypealias.kt")
public void testExpectActualTypealias() throws Exception {
@@ -27401,6 +27401,12 @@ public class FirNativeCodegenBoxTestNoPLGenerated extends AbstractNativeCodegenB
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualSimple.kt");
}
@Test
@TestMetadata("expectActualTypeParameters.kt")
public void testExpectActualTypeParameters() throws Exception {
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualTypeParameters.kt");
}
@Test
@TestMetadata("expectActualTypealias.kt")
public void testExpectActualTypealias() throws Exception {
@@ -26486,6 +26486,12 @@ public class NativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTest
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualSimple.kt");
}
@Test
@TestMetadata("expectActualTypeParameters.kt")
public void testExpectActualTypeParameters() throws Exception {
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualTypeParameters.kt");
}
@Test
@TestMetadata("expectActualTypealias.kt")
public void testExpectActualTypealias() throws Exception {
@@ -27096,6 +27096,12 @@ public class NativeCodegenBoxTestNoPLGenerated extends AbstractNativeCodegenBoxT
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualSimple.kt");
}
@Test
@TestMetadata("expectActualTypeParameters.kt")
public void testExpectActualTypeParameters() throws Exception {
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualTypeParameters.kt");
}
@Test
@TestMetadata("expectActualTypealias.kt")
public void testExpectActualTypealias() throws Exception {
@@ -20801,6 +20801,11 @@ public class IrCodegenBoxWasmTestGenerated extends AbstractIrCodegenBoxWasmTest
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualSimple.kt");
}
@TestMetadata("expectActualTypeParameters.kt")
public void testExpectActualTypeParameters() throws Exception {
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualTypeParameters.kt");
}
@TestMetadata("expectActualTypealias.kt")
public void testExpectActualTypealias() throws Exception {
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualTypealias.kt");