[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");
|
||||
}
|
||||
|
||||
@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 {
|
||||
|
||||
+6
@@ -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 {
|
||||
|
||||
+16
-7
@@ -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 }
|
||||
}
|
||||
-1
@@ -33,7 +33,6 @@ object IrActualizer {
|
||||
|
||||
val symbolRemapper = ActualizerSymbolRemapper(expectActualMap)
|
||||
val typeRemapper = DeepCopyTypeRemapper(symbolRemapper)
|
||||
|
||||
FunctionDefaultParametersActualizer(symbolRemapper, typeRemapper, expectActualMap).actualize()
|
||||
|
||||
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
|
||||
// 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
|
||||
|
||||
+6
@@ -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 {
|
||||
|
||||
+6
@@ -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 {
|
||||
|
||||
+6
@@ -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 {
|
||||
|
||||
+5
@@ -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");
|
||||
|
||||
+6
@@ -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 {
|
||||
|
||||
+6
@@ -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 {
|
||||
|
||||
+6
@@ -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 {
|
||||
|
||||
+6
@@ -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 {
|
||||
|
||||
+6
@@ -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 {
|
||||
|
||||
+6
@@ -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 {
|
||||
|
||||
+6
@@ -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 {
|
||||
|
||||
+6
@@ -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 {
|
||||
|
||||
Generated
+5
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user