[K2, MPP] Fix actualization of nullability-based overloads
^KT-58043 Fixed
This commit is contained in:
committed by
Space Team
parent
c5b60a16bb
commit
b72dcf8b37
+6
@@ -33467,6 +33467,12 @@ public class FirLightTreeBlackBoxCodegenTestGenerated extends AbstractFirLightTr
|
||||
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualMultiCommon.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("expectActualNullabilityBasedOverloads.kt")
|
||||
public void testExpectActualNullabilityBasedOverloads() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualNullabilityBasedOverloads.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("expectActualOverloads.kt")
|
||||
public void testExpectActualOverloads() throws Exception {
|
||||
|
||||
+6
@@ -33467,6 +33467,12 @@ public class FirPsiBlackBoxCodegenTestGenerated extends AbstractFirPsiBlackBoxCo
|
||||
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualMultiCommon.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("expectActualNullabilityBasedOverloads.kt")
|
||||
public void testExpectActualNullabilityBasedOverloads() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualNullabilityBasedOverloads.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("expectActualOverloads.kt")
|
||||
public void testExpectActualOverloads() throws Exception {
|
||||
|
||||
+14
-3
@@ -15,12 +15,16 @@ import org.jetbrains.kotlin.ir.symbols.IrSymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol
|
||||
import org.jetbrains.kotlin.ir.types.IrDynamicType
|
||||
import org.jetbrains.kotlin.ir.types.classifierOrFail
|
||||
import org.jetbrains.kotlin.ir.types.isNullable
|
||||
import org.jetbrains.kotlin.ir.util.hasAnnotation
|
||||
import org.jetbrains.kotlin.ir.util.kotlinFqName
|
||||
import org.jetbrains.kotlin.ir.util.module
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.StandardClassIds
|
||||
import org.jetbrains.kotlin.resolve.multiplatform.OptionalAnnotationUtil
|
||||
|
||||
private val FLEXIBLE_NULLABILITY_ANNOTATION_FQ_NAME = StandardClassIds.Annotations.FlexibleNullability.asSingleFqName()
|
||||
|
||||
internal fun Map<String, List<IrDeclaration>>.getMatches(
|
||||
expectDeclaration: IrDeclaration,
|
||||
expectActualTypesMap: Map<IrSymbol, IrSymbol>,
|
||||
@@ -44,7 +48,7 @@ private inline fun List<IrDeclaration>.getMatches(
|
||||
}
|
||||
|
||||
private fun IrFunction.match(actualFunction: IrFunction, expectActualTypesMap: Map<IrSymbol, IrSymbol>): Boolean {
|
||||
fun getActualizedValueParameterSymbol(
|
||||
fun getActualizedTypeClassifierSymbol(
|
||||
expectParameter: IrValueParameter,
|
||||
localTypeParametersMap: Map<IrTypeParameterSymbol, IrTypeParameterSymbol>? = null
|
||||
): IrSymbol {
|
||||
@@ -74,8 +78,15 @@ private fun IrFunction.match(actualFunction: IrFunction, expectActualTypesMap: M
|
||||
return true
|
||||
}
|
||||
|
||||
if (getActualizedValueParameterSymbol(expectParameter, localTypeParametersMap) !=
|
||||
getActualizedValueParameterSymbol(actualParameter)
|
||||
if (expectParameter.type.isNullable() != actualParameter.type.isNullable() &&
|
||||
!expectParameter.type.annotations.hasAnnotation(FLEXIBLE_NULLABILITY_ANNOTATION_FQ_NAME) &&
|
||||
!actualParameter.type.annotations.hasAnnotation(FLEXIBLE_NULLABILITY_ANNOTATION_FQ_NAME)
|
||||
) {
|
||||
return false
|
||||
}
|
||||
|
||||
if (getActualizedTypeClassifierSymbol(expectParameter, localTypeParametersMap) !=
|
||||
getActualizedTypeClassifierSymbol(actualParameter)
|
||||
) {
|
||||
return false
|
||||
}
|
||||
|
||||
Vendored
+20
@@ -0,0 +1,20 @@
|
||||
// IGNORE_BACKEND: JVM, JVM_IR
|
||||
// IGNORE_BACKEND_K1: JS, JS_IR, JS_IR_ES6, NATIVE
|
||||
// !LANGUAGE: +MultiPlatformProjects
|
||||
|
||||
// MODULE: common
|
||||
// FILE: common.kt
|
||||
|
||||
expect fun o(x: String?): String?
|
||||
expect fun k(x: String?): String?
|
||||
|
||||
fun box() = o(null) + k(null)
|
||||
|
||||
// MODULE: platform()()(common)
|
||||
// FILE: platform.kt
|
||||
|
||||
fun o(x: String) = ""
|
||||
actual fun o(x: String?): String? = "O"
|
||||
|
||||
actual fun k(x: String?): String? = "K"
|
||||
fun k(x: String) = ""
|
||||
+6
@@ -32027,6 +32027,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
|
||||
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualMultiCommon.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("expectActualNullabilityBasedOverloads.kt")
|
||||
public void testExpectActualNullabilityBasedOverloads() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualNullabilityBasedOverloads.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("expectActualOverloads.kt")
|
||||
public void testExpectActualOverloads() throws Exception {
|
||||
|
||||
+6
@@ -33467,6 +33467,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
|
||||
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualMultiCommon.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("expectActualNullabilityBasedOverloads.kt")
|
||||
public void testExpectActualNullabilityBasedOverloads() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualNullabilityBasedOverloads.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("expectActualOverloads.kt")
|
||||
public void testExpectActualOverloads() throws Exception {
|
||||
|
||||
+6
@@ -33467,6 +33467,12 @@ public class IrBlackBoxCodegenWithIrInlinerTestGenerated extends AbstractIrBlack
|
||||
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualMultiCommon.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("expectActualNullabilityBasedOverloads.kt")
|
||||
public void testExpectActualNullabilityBasedOverloads() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualNullabilityBasedOverloads.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("expectActualOverloads.kt")
|
||||
public void testExpectActualOverloads() throws Exception {
|
||||
|
||||
+5
@@ -27225,6 +27225,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
@RunWith(JUnit3RunnerWithInners.class)
|
||||
public static class Basic extends AbstractLightAnalysisModeTest {
|
||||
@TestMetadata("expectActualNullabilityBasedOverloads.kt")
|
||||
public void ignoreExpectActualNullabilityBasedOverloads() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualNullabilityBasedOverloads.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("expectProperty.kt")
|
||||
public void ignoreExpectProperty() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectProperty.kt");
|
||||
|
||||
+6
@@ -23245,6 +23245,12 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest {
|
||||
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualMultiCommon.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("expectActualNullabilityBasedOverloads.kt")
|
||||
public void testExpectActualNullabilityBasedOverloads() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualNullabilityBasedOverloads.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("expectActualOverloads.kt")
|
||||
public void testExpectActualOverloads() throws Exception {
|
||||
|
||||
+6
@@ -23383,6 +23383,12 @@ public class FirJsCodegenBoxTestGenerated extends AbstractFirJsCodegenBoxTest {
|
||||
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualMultiCommon.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("expectActualNullabilityBasedOverloads.kt")
|
||||
public void testExpectActualNullabilityBasedOverloads() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualNullabilityBasedOverloads.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("expectActualOverloads.kt")
|
||||
public void testExpectActualOverloads() throws Exception {
|
||||
|
||||
+6
@@ -23383,6 +23383,12 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
|
||||
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualMultiCommon.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("expectActualNullabilityBasedOverloads.kt")
|
||||
public void testExpectActualNullabilityBasedOverloads() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualNullabilityBasedOverloads.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("expectActualOverloads.kt")
|
||||
public void testExpectActualOverloads() throws Exception {
|
||||
|
||||
+6
@@ -23383,6 +23383,12 @@ public class IrJsES6CodegenBoxTestGenerated extends AbstractIrJsES6CodegenBoxTes
|
||||
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualMultiCommon.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("expectActualNullabilityBasedOverloads.kt")
|
||||
public void testExpectActualNullabilityBasedOverloads() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualNullabilityBasedOverloads.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("expectActualOverloads.kt")
|
||||
public void testExpectActualOverloads() throws Exception {
|
||||
|
||||
+6
@@ -26809,6 +26809,12 @@ public class FirNativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTe
|
||||
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualMultiCommon.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("expectActualNullabilityBasedOverloads.kt")
|
||||
public void testExpectActualNullabilityBasedOverloads() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualNullabilityBasedOverloads.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("expectActualOverloads.kt")
|
||||
public void testExpectActualOverloads() throws Exception {
|
||||
|
||||
+6
@@ -27419,6 +27419,12 @@ public class FirNativeCodegenBoxTestNoPLGenerated extends AbstractNativeCodegenB
|
||||
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualMultiCommon.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("expectActualNullabilityBasedOverloads.kt")
|
||||
public void testExpectActualNullabilityBasedOverloads() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualNullabilityBasedOverloads.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("expectActualOverloads.kt")
|
||||
public void testExpectActualOverloads() throws Exception {
|
||||
|
||||
+6
@@ -26504,6 +26504,12 @@ public class NativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTest
|
||||
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualMultiCommon.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("expectActualNullabilityBasedOverloads.kt")
|
||||
public void testExpectActualNullabilityBasedOverloads() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualNullabilityBasedOverloads.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("expectActualOverloads.kt")
|
||||
public void testExpectActualOverloads() throws Exception {
|
||||
|
||||
+6
@@ -27114,6 +27114,12 @@ public class NativeCodegenBoxTestNoPLGenerated extends AbstractNativeCodegenBoxT
|
||||
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualMultiCommon.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("expectActualNullabilityBasedOverloads.kt")
|
||||
public void testExpectActualNullabilityBasedOverloads() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualNullabilityBasedOverloads.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("expectActualOverloads.kt")
|
||||
public void testExpectActualOverloads() throws Exception {
|
||||
|
||||
Generated
+5
@@ -20811,6 +20811,11 @@ public class IrCodegenBoxWasmTestGenerated extends AbstractIrCodegenBoxWasmTest
|
||||
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualMultiCommon.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("expectActualNullabilityBasedOverloads.kt")
|
||||
public void testExpectActualNullabilityBasedOverloads() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualNullabilityBasedOverloads.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("expectActualOverloads.kt")
|
||||
public void testExpectActualOverloads() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualOverloads.kt");
|
||||
|
||||
Reference in New Issue
Block a user