[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");
|
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
|
@Test
|
||||||
@TestMetadata("expectActualOverloads.kt")
|
@TestMetadata("expectActualOverloads.kt")
|
||||||
public void testExpectActualOverloads() throws Exception {
|
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");
|
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
|
@Test
|
||||||
@TestMetadata("expectActualOverloads.kt")
|
@TestMetadata("expectActualOverloads.kt")
|
||||||
public void testExpectActualOverloads() throws Exception {
|
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.symbols.IrTypeParameterSymbol
|
||||||
import org.jetbrains.kotlin.ir.types.IrDynamicType
|
import org.jetbrains.kotlin.ir.types.IrDynamicType
|
||||||
import org.jetbrains.kotlin.ir.types.classifierOrFail
|
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.hasAnnotation
|
||||||
import org.jetbrains.kotlin.ir.util.kotlinFqName
|
import org.jetbrains.kotlin.ir.util.kotlinFqName
|
||||||
import org.jetbrains.kotlin.ir.util.module
|
import org.jetbrains.kotlin.ir.util.module
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
|
import org.jetbrains.kotlin.name.StandardClassIds
|
||||||
import org.jetbrains.kotlin.resolve.multiplatform.OptionalAnnotationUtil
|
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(
|
internal fun Map<String, List<IrDeclaration>>.getMatches(
|
||||||
expectDeclaration: IrDeclaration,
|
expectDeclaration: IrDeclaration,
|
||||||
expectActualTypesMap: Map<IrSymbol, IrSymbol>,
|
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 {
|
private fun IrFunction.match(actualFunction: IrFunction, expectActualTypesMap: Map<IrSymbol, IrSymbol>): Boolean {
|
||||||
fun getActualizedValueParameterSymbol(
|
fun getActualizedTypeClassifierSymbol(
|
||||||
expectParameter: IrValueParameter,
|
expectParameter: IrValueParameter,
|
||||||
localTypeParametersMap: Map<IrTypeParameterSymbol, IrTypeParameterSymbol>? = null
|
localTypeParametersMap: Map<IrTypeParameterSymbol, IrTypeParameterSymbol>? = null
|
||||||
): IrSymbol {
|
): IrSymbol {
|
||||||
@@ -74,8 +78,15 @@ private fun IrFunction.match(actualFunction: IrFunction, expectActualTypesMap: M
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
if (getActualizedValueParameterSymbol(expectParameter, localTypeParametersMap) !=
|
if (expectParameter.type.isNullable() != actualParameter.type.isNullable() &&
|
||||||
getActualizedValueParameterSymbol(actualParameter)
|
!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
|
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");
|
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
|
@Test
|
||||||
@TestMetadata("expectActualOverloads.kt")
|
@TestMetadata("expectActualOverloads.kt")
|
||||||
public void testExpectActualOverloads() throws Exception {
|
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");
|
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
|
@Test
|
||||||
@TestMetadata("expectActualOverloads.kt")
|
@TestMetadata("expectActualOverloads.kt")
|
||||||
public void testExpectActualOverloads() throws Exception {
|
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");
|
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
|
@Test
|
||||||
@TestMetadata("expectActualOverloads.kt")
|
@TestMetadata("expectActualOverloads.kt")
|
||||||
public void testExpectActualOverloads() throws Exception {
|
public void testExpectActualOverloads() throws Exception {
|
||||||
|
|||||||
+5
@@ -27225,6 +27225,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
|
|||||||
@TestDataPath("$PROJECT_ROOT")
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
@RunWith(JUnit3RunnerWithInners.class)
|
@RunWith(JUnit3RunnerWithInners.class)
|
||||||
public static class Basic extends AbstractLightAnalysisModeTest {
|
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")
|
@TestMetadata("expectProperty.kt")
|
||||||
public void ignoreExpectProperty() throws Exception {
|
public void ignoreExpectProperty() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectProperty.kt");
|
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");
|
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
|
@Test
|
||||||
@TestMetadata("expectActualOverloads.kt")
|
@TestMetadata("expectActualOverloads.kt")
|
||||||
public void testExpectActualOverloads() throws Exception {
|
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");
|
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
|
@Test
|
||||||
@TestMetadata("expectActualOverloads.kt")
|
@TestMetadata("expectActualOverloads.kt")
|
||||||
public void testExpectActualOverloads() throws Exception {
|
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");
|
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
|
@Test
|
||||||
@TestMetadata("expectActualOverloads.kt")
|
@TestMetadata("expectActualOverloads.kt")
|
||||||
public void testExpectActualOverloads() throws Exception {
|
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");
|
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
|
@Test
|
||||||
@TestMetadata("expectActualOverloads.kt")
|
@TestMetadata("expectActualOverloads.kt")
|
||||||
public void testExpectActualOverloads() throws Exception {
|
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");
|
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
|
@Test
|
||||||
@TestMetadata("expectActualOverloads.kt")
|
@TestMetadata("expectActualOverloads.kt")
|
||||||
public void testExpectActualOverloads() throws Exception {
|
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");
|
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
|
@Test
|
||||||
@TestMetadata("expectActualOverloads.kt")
|
@TestMetadata("expectActualOverloads.kt")
|
||||||
public void testExpectActualOverloads() throws Exception {
|
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");
|
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
|
@Test
|
||||||
@TestMetadata("expectActualOverloads.kt")
|
@TestMetadata("expectActualOverloads.kt")
|
||||||
public void testExpectActualOverloads() throws Exception {
|
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");
|
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
|
@Test
|
||||||
@TestMetadata("expectActualOverloads.kt")
|
@TestMetadata("expectActualOverloads.kt")
|
||||||
public void testExpectActualOverloads() throws Exception {
|
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");
|
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")
|
@TestMetadata("expectActualOverloads.kt")
|
||||||
public void testExpectActualOverloads() throws Exception {
|
public void testExpectActualOverloads() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualOverloads.kt");
|
runTest("compiler/testData/codegen/box/multiplatform/k2/basic/expectActualOverloads.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user