FIR: copy nullability when mapping type alias arguments

This commit is contained in:
pyos
2021-02-02 13:03:19 +01:00
committed by Mikhail Glukhikh
parent bd205317aa
commit 8277c96933
10 changed files with 51 additions and 4 deletions
@@ -37780,6 +37780,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT
runTest("compiler/testData/codegen/box/typealias/typeAliasConstructorInSuperCall.kt");
}
@Test
@TestMetadata("typeAliasFunction.kt")
public void testTypeAliasFunction() throws Exception {
runTest("compiler/testData/codegen/box/typealias/typeAliasFunction.kt");
}
@Test
@TestMetadata("typeAliasInAnonymousObjectType.kt")
public void testTypeAliasInAnonymousObjectType() throws Exception {
@@ -85,11 +85,10 @@ private fun mapTypeAliasArguments(
val type = (projection as? ConeKotlinTypeProjection)?.type ?: return null
val symbol = (type as? ConeTypeParameterType)?.lookupTag?.symbol ?: return super.substituteArgument(projection)
val mappedProjection = typeAliasMap[symbol] ?: return super.substituteArgument(projection)
val mappedType = (mappedProjection as? ConeKotlinTypeProjection)?.type ?: return mappedProjection
val mappedType = (mappedProjection as? ConeKotlinTypeProjection)?.type.updateNullabilityIfNeeded(type)
?: return mappedProjection
@Suppress("MoveVariableDeclarationIntoWhen")
val resultingKind = mappedProjection.kind + projection.kind
return when (resultingKind) {
return when (mappedProjection.kind + projection.kind) {
ProjectionKind.STAR -> ConeStarProjection
ProjectionKind.IN -> ConeKotlinTypeProjectionIn(mappedType)
ProjectionKind.OUT -> ConeKotlinTypeProjectionOut(mappedType)
@@ -0,0 +1,5 @@
typealias F<X> = (X?) -> X
fun <T> invoke(f: F<T>) = f(null)
fun box() = invoke<String> { it ?: "OK" }
@@ -37980,6 +37980,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
runTest("compiler/testData/codegen/box/typealias/typeAliasConstructorInSuperCall.kt");
}
@Test
@TestMetadata("typeAliasFunction.kt")
public void testTypeAliasFunction() throws Exception {
runTest("compiler/testData/codegen/box/typealias/typeAliasFunction.kt");
}
@Test
@TestMetadata("typeAliasInAnonymousObjectType.kt")
public void testTypeAliasInAnonymousObjectType() throws Exception {
@@ -37780,6 +37780,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
runTest("compiler/testData/codegen/box/typealias/typeAliasConstructorInSuperCall.kt");
}
@Test
@TestMetadata("typeAliasFunction.kt")
public void testTypeAliasFunction() throws Exception {
runTest("compiler/testData/codegen/box/typealias/typeAliasFunction.kt");
}
@Test
@TestMetadata("typeAliasInAnonymousObjectType.kt")
public void testTypeAliasInAnonymousObjectType() throws Exception {
@@ -30439,6 +30439,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
runTest("compiler/testData/codegen/box/typealias/typeAliasConstructorInSuperCall.kt");
}
@TestMetadata("typeAliasFunction.kt")
public void testTypeAliasFunction() throws Exception {
runTest("compiler/testData/codegen/box/typealias/typeAliasFunction.kt");
}
@TestMetadata("typeAliasInAnonymousObjectType.kt")
public void testTypeAliasInAnonymousObjectType() throws Exception {
runTest("compiler/testData/codegen/box/typealias/typeAliasInAnonymousObjectType.kt");
@@ -26615,6 +26615,11 @@ public class IrJsCodegenBoxES6TestGenerated extends AbstractIrJsCodegenBoxES6Tes
runTest("compiler/testData/codegen/box/typealias/typeAliasConstructorInSuperCall.kt");
}
@TestMetadata("typeAliasFunction.kt")
public void testTypeAliasFunction() throws Exception {
runTest("compiler/testData/codegen/box/typealias/typeAliasFunction.kt");
}
@TestMetadata("typeAliasInAnonymousObjectType.kt")
public void testTypeAliasInAnonymousObjectType() throws Exception {
runTest("compiler/testData/codegen/box/typealias/typeAliasInAnonymousObjectType.kt");
@@ -26100,6 +26100,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
runTest("compiler/testData/codegen/box/typealias/typeAliasConstructorInSuperCall.kt");
}
@TestMetadata("typeAliasFunction.kt")
public void testTypeAliasFunction() throws Exception {
runTest("compiler/testData/codegen/box/typealias/typeAliasFunction.kt");
}
@TestMetadata("typeAliasInAnonymousObjectType.kt")
public void testTypeAliasInAnonymousObjectType() throws Exception {
runTest("compiler/testData/codegen/box/typealias/typeAliasInAnonymousObjectType.kt");
@@ -26065,6 +26065,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest {
runTest("compiler/testData/codegen/box/typealias/typeAliasConstructorInSuperCall.kt");
}
@TestMetadata("typeAliasFunction.kt")
public void testTypeAliasFunction() throws Exception {
runTest("compiler/testData/codegen/box/typealias/typeAliasFunction.kt");
}
@TestMetadata("typeAliasInAnonymousObjectType.kt")
public void testTypeAliasInAnonymousObjectType() throws Exception {
runTest("compiler/testData/codegen/box/typealias/typeAliasInAnonymousObjectType.kt");
@@ -14381,6 +14381,11 @@ public class IrCodegenBoxWasmTestGenerated extends AbstractIrCodegenBoxWasmTest
runTest("compiler/testData/codegen/box/typealias/typeAliasConstructorInSuperCall.kt");
}
@TestMetadata("typeAliasFunction.kt")
public void testTypeAliasFunction() throws Exception {
runTest("compiler/testData/codegen/box/typealias/typeAliasFunction.kt");
}
@TestMetadata("typeAliasInAnonymousObjectType.kt")
public void testTypeAliasInAnonymousObjectType() throws Exception {
runTest("compiler/testData/codegen/box/typealias/typeAliasInAnonymousObjectType.kt");