[K2, MPP] Build expect-actual map for type parameters from functions
^KT-57181 Fixed
This commit is contained in:
committed by
Space Team
parent
3a60b30dae
commit
beaeb405d2
+6
@@ -33437,6 +33437,12 @@ public class FirLightTreeBlackBoxCodegenTestGenerated extends AbstractFirLightTr
|
|||||||
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualSimple.kt");
|
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
|
@Test
|
||||||
@TestMetadata("expectActualTypealias.kt")
|
@TestMetadata("expectActualTypealias.kt")
|
||||||
public void testExpectActualTypealias() throws Exception {
|
public void testExpectActualTypealias() throws Exception {
|
||||||
|
|||||||
+6
@@ -33437,6 +33437,12 @@ public class FirPsiBlackBoxCodegenTestGenerated extends AbstractFirPsiBlackBoxCo
|
|||||||
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualSimple.kt");
|
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
|
@Test
|
||||||
@TestMetadata("expectActualTypealias.kt")
|
@TestMetadata("expectActualTypealias.kt")
|
||||||
public void testExpectActualTypealias() throws Exception {
|
public void testExpectActualTypealias() throws Exception {
|
||||||
|
|||||||
+16
-7
@@ -126,12 +126,7 @@ private class ClassLinksCollector(
|
|||||||
val actualClassSymbol = actualClasses[generateIrElementFullNameFromExpect(declaration, expectActualTypeAliasMap)]
|
val actualClassSymbol = actualClasses[generateIrElementFullNameFromExpect(declaration, expectActualTypeAliasMap)]
|
||||||
if (actualClassSymbol != null) {
|
if (actualClassSymbol != null) {
|
||||||
expectActualMap[declaration.symbol] = actualClassSymbol
|
expectActualMap[declaration.symbol] = actualClassSymbol
|
||||||
val actualClass = actualClassSymbol.owner
|
expectActualMap.appendTypeParametersMap(declaration, actualClassSymbol.owner)
|
||||||
for (expectTypeParameter in declaration.typeParameters) {
|
|
||||||
actualClass.typeParameters.firstOrNull { it.name == expectTypeParameter.name }?.let { actualTypeParameter ->
|
|
||||||
expectActualMap[expectTypeParameter.symbol] = actualTypeParameter.symbol
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if (!declaration.containsOptionalExpectation()) {
|
} else if (!declaration.containsOptionalExpectation()) {
|
||||||
diagnosticsReporter.reportMissingActual(declaration)
|
diagnosticsReporter.reportMissingActual(declaration)
|
||||||
}
|
}
|
||||||
@@ -170,8 +165,14 @@ private class MemberLinksCollector(
|
|||||||
expectActualMap[declaration.symbol] = actualMember.symbol
|
expectActualMap[declaration.symbol] = actualMember.symbol
|
||||||
if (declaration is IrProperty) {
|
if (declaration is IrProperty) {
|
||||||
val actualProperty = actualMember as 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 }
|
declaration.setter?.symbol?.let { expectActualMap[it] = actualProperty.setter!!.symbol }
|
||||||
|
} else if (declaration is IrFunction) {
|
||||||
|
expectActualMap.appendTypeParametersMap(declaration, actualMember as IrFunction)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
actualMemberMatches.size > 1 -> {
|
actualMemberMatches.size > 1 -> {
|
||||||
@@ -187,3 +188,11 @@ private class MemberLinksCollector(
|
|||||||
element.acceptChildrenVoid(this)
|
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 }
|
||||||
|
}
|
||||||
-1
@@ -33,7 +33,6 @@ object IrActualizer {
|
|||||||
|
|
||||||
val symbolRemapper = ActualizerSymbolRemapper(expectActualMap)
|
val symbolRemapper = ActualizerSymbolRemapper(expectActualMap)
|
||||||
val typeRemapper = DeepCopyTypeRemapper(symbolRemapper)
|
val typeRemapper = DeepCopyTypeRemapper(symbolRemapper)
|
||||||
|
|
||||||
FunctionDefaultParametersActualizer(symbolRemapper, typeRemapper, expectActualMap).actualize()
|
FunctionDefaultParametersActualizer(symbolRemapper, typeRemapper, expectActualMap).actualize()
|
||||||
|
|
||||||
MissingFakeOverridesAdder(
|
MissingFakeOverridesAdder(
|
||||||
|
|||||||
+27
@@ -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()
|
||||||
+2
-5
@@ -1,9 +1,6 @@
|
|||||||
// !LANGUAGE: +MultiPlatformProjects
|
// !LANGUAGE: +MultiPlatformProjects
|
||||||
// IGNORE_BACKEND: WASM
|
// IGNORE_BACKEND_K1: JVM, JVM_IR, JS, JS_IR, JS_IR_ES6, NATIVE, WASM
|
||||||
// IGNORE_BACKEND_K1: JVM, JVM_IR, JS, JS_IR, JS_IR_ES6, NATIVE
|
// ISSUE: KT-57181
|
||||||
// IGNORE_BACKEND_K2: JS_IR
|
|
||||||
// KT-57181
|
|
||||||
// IGNORE_BACKEND_K2: NATIVE
|
|
||||||
// WITH_STDLIB
|
// WITH_STDLIB
|
||||||
|
|
||||||
// MODULE: common
|
// MODULE: common
|
||||||
|
|||||||
+6
@@ -32009,6 +32009,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
|
|||||||
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualSimple.kt");
|
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
|
@Test
|
||||||
@TestMetadata("expectActualTypealias.kt")
|
@TestMetadata("expectActualTypealias.kt")
|
||||||
public void testExpectActualTypealias() throws Exception {
|
public void testExpectActualTypealias() throws Exception {
|
||||||
|
|||||||
+6
@@ -33437,6 +33437,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
|
|||||||
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualSimple.kt");
|
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
|
@Test
|
||||||
@TestMetadata("expectActualTypealias.kt")
|
@TestMetadata("expectActualTypealias.kt")
|
||||||
public void testExpectActualTypealias() throws Exception {
|
public void testExpectActualTypealias() throws Exception {
|
||||||
|
|||||||
+6
@@ -33437,6 +33437,12 @@ public class IrBlackBoxCodegenWithIrInlinerTestGenerated extends AbstractIrBlack
|
|||||||
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualSimple.kt");
|
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
|
@Test
|
||||||
@TestMetadata("expectActualTypealias.kt")
|
@TestMetadata("expectActualTypealias.kt")
|
||||||
public void testExpectActualTypealias() throws Exception {
|
public void testExpectActualTypealias() throws Exception {
|
||||||
|
|||||||
+5
@@ -27283,6 +27283,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
|
|||||||
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualSimple.kt");
|
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")
|
@TestMetadata("expectActualTypealias.kt")
|
||||||
public void testExpectActualTypealias() throws Exception {
|
public void testExpectActualTypealias() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualTypealias.kt");
|
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualTypealias.kt");
|
||||||
|
|||||||
+6
@@ -23221,6 +23221,12 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest {
|
|||||||
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualSimple.kt");
|
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
|
@Test
|
||||||
@TestMetadata("expectActualTypealias.kt")
|
@TestMetadata("expectActualTypealias.kt")
|
||||||
public void testExpectActualTypealias() throws Exception {
|
public void testExpectActualTypealias() throws Exception {
|
||||||
|
|||||||
+6
@@ -23359,6 +23359,12 @@ public class FirJsCodegenBoxTestGenerated extends AbstractFirJsCodegenBoxTest {
|
|||||||
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualSimple.kt");
|
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
|
@Test
|
||||||
@TestMetadata("expectActualTypealias.kt")
|
@TestMetadata("expectActualTypealias.kt")
|
||||||
public void testExpectActualTypealias() throws Exception {
|
public void testExpectActualTypealias() throws Exception {
|
||||||
|
|||||||
+6
@@ -23359,6 +23359,12 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
|
|||||||
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualSimple.kt");
|
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
|
@Test
|
||||||
@TestMetadata("expectActualTypealias.kt")
|
@TestMetadata("expectActualTypealias.kt")
|
||||||
public void testExpectActualTypealias() throws Exception {
|
public void testExpectActualTypealias() throws Exception {
|
||||||
|
|||||||
+6
@@ -23359,6 +23359,12 @@ public class IrJsES6CodegenBoxTestGenerated extends AbstractIrJsES6CodegenBoxTes
|
|||||||
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualSimple.kt");
|
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
|
@Test
|
||||||
@TestMetadata("expectActualTypealias.kt")
|
@TestMetadata("expectActualTypealias.kt")
|
||||||
public void testExpectActualTypealias() throws Exception {
|
public void testExpectActualTypealias() throws Exception {
|
||||||
|
|||||||
+6
@@ -26791,6 +26791,12 @@ public class FirNativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTe
|
|||||||
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualSimple.kt");
|
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
|
@Test
|
||||||
@TestMetadata("expectActualTypealias.kt")
|
@TestMetadata("expectActualTypealias.kt")
|
||||||
public void testExpectActualTypealias() throws Exception {
|
public void testExpectActualTypealias() throws Exception {
|
||||||
|
|||||||
+6
@@ -27401,6 +27401,12 @@ public class FirNativeCodegenBoxTestNoPLGenerated extends AbstractNativeCodegenB
|
|||||||
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualSimple.kt");
|
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
|
@Test
|
||||||
@TestMetadata("expectActualTypealias.kt")
|
@TestMetadata("expectActualTypealias.kt")
|
||||||
public void testExpectActualTypealias() throws Exception {
|
public void testExpectActualTypealias() throws Exception {
|
||||||
|
|||||||
+6
@@ -26486,6 +26486,12 @@ public class NativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTest
|
|||||||
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualSimple.kt");
|
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
|
@Test
|
||||||
@TestMetadata("expectActualTypealias.kt")
|
@TestMetadata("expectActualTypealias.kt")
|
||||||
public void testExpectActualTypealias() throws Exception {
|
public void testExpectActualTypealias() throws Exception {
|
||||||
|
|||||||
+6
@@ -27096,6 +27096,12 @@ public class NativeCodegenBoxTestNoPLGenerated extends AbstractNativeCodegenBoxT
|
|||||||
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualSimple.kt");
|
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
|
@Test
|
||||||
@TestMetadata("expectActualTypealias.kt")
|
@TestMetadata("expectActualTypealias.kt")
|
||||||
public void testExpectActualTypealias() throws Exception {
|
public void testExpectActualTypealias() throws Exception {
|
||||||
|
|||||||
Generated
+5
@@ -20801,6 +20801,11 @@ public class IrCodegenBoxWasmTestGenerated extends AbstractIrCodegenBoxWasmTest
|
|||||||
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualSimple.kt");
|
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")
|
@TestMetadata("expectActualTypealias.kt")
|
||||||
public void testExpectActualTypealias() throws Exception {
|
public void testExpectActualTypealias() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualTypealias.kt");
|
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualTypealias.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user