[FIR] Fix ClassCastException when rendering ACTUAL_WITHOUT_EXPECT

#KT-57320
This commit is contained in:
Kirill Rakhman
2023-03-28 17:45:58 +02:00
committed by Space Team
parent 3b09313192
commit 3b0c36da3f
14 changed files with 131 additions and 25 deletions
@@ -361,6 +361,7 @@ internal object FirToKtConversionCreator {
FqName::class,
ClassId::class,
FirModuleData::class,
ExpectActualCompatibility::class,
ExpectActualCompatibility.Incompatible::class,
DeprecationInfo::class,
ApiVersion::class,
@@ -3215,8 +3215,8 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
NoActualForExpectImpl(
firSymbolBuilder.buildSymbol(firDiagnostic.a),
firDiagnostic.b,
firDiagnostic.c.mapKeys { (incompatible, _) ->
incompatible
firDiagnostic.c.mapKeys { (expectActualCompatibility, _) ->
expectActualCompatibility
}.mapValues { (_, collection) ->
collection.map { firBasedSymbol ->
firSymbolBuilder.buildSymbol(firBasedSymbol)
@@ -3229,8 +3229,8 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
add(FirErrors.ACTUAL_WITHOUT_EXPECT) { firDiagnostic ->
ActualWithoutExpectImpl(
firSymbolBuilder.buildSymbol(firDiagnostic.a),
firDiagnostic.b.mapKeys { (incompatible, _) ->
incompatible
firDiagnostic.b.mapKeys { (expectActualCompatibility, _) ->
expectActualCompatibility
}.mapValues { (_, collection) ->
collection.map { firBasedSymbol ->
firSymbolBuilder.buildSymbol(firBasedSymbol)
@@ -80,6 +80,7 @@ import org.jetbrains.kotlin.psi.KtWhenEntry
import org.jetbrains.kotlin.psi.KtWhenExpression
import org.jetbrains.kotlin.resolve.ForbiddenNamedArgumentsTarget
import org.jetbrains.kotlin.resolve.deprecation.DeprecationInfo
import org.jetbrains.kotlin.resolve.multiplatform.ExpectActualCompatibility
import org.jetbrains.kotlin.resolve.multiplatform.ExpectActualCompatibility.Incompatible
import org.jetbrains.kotlin.types.Variance
@@ -2262,13 +2263,13 @@ sealed class KtFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI> {
override val diagnosticClass get() = NoActualForExpect::class
abstract val declaration: KtSymbol
abstract val module: FirModuleData
abstract val compatibility: Map<Incompatible<FirBasedSymbol<*>>, List<KtSymbol>>
abstract val compatibility: Map<ExpectActualCompatibility<FirBasedSymbol<*>>, List<KtSymbol>>
}
abstract class ActualWithoutExpect : KtFirDiagnostic<KtNamedDeclaration>() {
override val diagnosticClass get() = ActualWithoutExpect::class
abstract val declaration: KtSymbol
abstract val compatibility: Map<Incompatible<FirBasedSymbol<*>>, List<KtSymbol>>
abstract val compatibility: Map<ExpectActualCompatibility<FirBasedSymbol<*>>, List<KtSymbol>>
}
abstract class AmbiguousActuals : KtFirDiagnostic<KtNamedDeclaration>() {
@@ -81,6 +81,7 @@ import org.jetbrains.kotlin.psi.KtWhenEntry
import org.jetbrains.kotlin.psi.KtWhenExpression
import org.jetbrains.kotlin.resolve.ForbiddenNamedArgumentsTarget
import org.jetbrains.kotlin.resolve.deprecation.DeprecationInfo
import org.jetbrains.kotlin.resolve.multiplatform.ExpectActualCompatibility
import org.jetbrains.kotlin.resolve.multiplatform.ExpectActualCompatibility.Incompatible
import org.jetbrains.kotlin.types.Variance
@@ -2727,14 +2728,14 @@ internal class ExpectedFunctionSourceWithDefaultArgumentsNotFoundImpl(
internal class NoActualForExpectImpl(
override val declaration: KtSymbol,
override val module: FirModuleData,
override val compatibility: Map<Incompatible<FirBasedSymbol<*>>, List<KtSymbol>>,
override val compatibility: Map<ExpectActualCompatibility<FirBasedSymbol<*>>, List<KtSymbol>>,
override val firDiagnostic: KtPsiDiagnostic,
override val token: KtLifetimeToken,
) : KtFirDiagnostic.NoActualForExpect(), KtAbstractFirDiagnostic<KtNamedDeclaration>
internal class ActualWithoutExpectImpl(
override val declaration: KtSymbol,
override val compatibility: Map<Incompatible<FirBasedSymbol<*>>, List<KtSymbol>>,
override val compatibility: Map<ExpectActualCompatibility<FirBasedSymbol<*>>, List<KtSymbol>>,
override val firDiagnostic: KtPsiDiagnostic,
override val token: KtLifetimeToken,
) : KtFirDiagnostic.ActualWithoutExpect(), KtAbstractFirDiagnostic<KtNamedDeclaration>