From d343e40ac5b803297520b1305d6d527a4da31165 Mon Sep 17 00:00:00 2001 From: Roman Efremov Date: Mon, 27 Nov 2023 15:40:59 +0100 Subject: [PATCH] [FIR] Actualize expect nested classes in type arguments in expect actual ...checker. ^KT-31636 --- .../mpp/FirExpectActualMatchingContextImpl.kt | 17 +++++++++++++++-- ...ssViaActualTypealiasExpandInTypeParam.fir.kt | 2 +- ...assViaActualTypealiasExpandInTypeParam.ll.kt | 2 +- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/mpp/FirExpectActualMatchingContextImpl.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/mpp/FirExpectActualMatchingContextImpl.kt index b2ca950a57e..52722ffba9d 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/mpp/FirExpectActualMatchingContextImpl.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/mpp/FirExpectActualMatchingContextImpl.kt @@ -365,10 +365,23 @@ class FirExpectActualMatchingContextImpl private constructor( if (this is ConeClassLikeType && classId?.isNestedClass == true) { val classSymbol = classId.toSymbol(actualSession) if (classSymbol is FirRegularClassSymbol && classSymbol.isExpect) { - tryExpandExpectNestedClassActualizedViaTypealias(this, classSymbol)?.let { return it } + tryExpandExpectNestedClassActualizedViaTypealias(this, classSymbol)?.let { + return it.actualizeTypeArguments() + } } } - return fullyExpandedType(actualSession) + return fullyExpandedType(actualSession).actualizeTypeArguments() + } + + private fun ConeKotlinType.actualizeTypeArguments(): ConeKotlinType { + if (this !is ConeClassLikeType) { + return this + } + return withArguments { arg -> + if (arg is ConeKotlinTypeProjection) { + arg.replaceType(arg.type.actualize()) as ConeTypeProjection + } else arg + } } /** diff --git a/compiler/testData/diagnostics/tests/multiplatform/nestedClassViaActualTypealiasExpandInTypeParam.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/nestedClassViaActualTypealiasExpandInTypeParam.fir.kt index eddfe4166fc..5f968715587 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/nestedClassViaActualTypealiasExpandInTypeParam.fir.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/nestedClassViaActualTypealiasExpandInTypeParam.fir.kt @@ -14,4 +14,4 @@ class FooImpl { } } -actual typealias Foo = FooImpl +actual typealias Foo = FooImpl diff --git a/compiler/testData/diagnostics/tests/multiplatform/nestedClassViaActualTypealiasExpandInTypeParam.ll.kt b/compiler/testData/diagnostics/tests/multiplatform/nestedClassViaActualTypealiasExpandInTypeParam.ll.kt index dad17c52b50..e4e7d4239bd 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/nestedClassViaActualTypealiasExpandInTypeParam.ll.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/nestedClassViaActualTypealiasExpandInTypeParam.ll.kt @@ -14,4 +14,4 @@ class FooImpl { } } -actual typealias Foo = FooImpl +actual typealias Foo = FooImpl