[FIR] Prohibit expect class members with default values actualized

...by fake-override.
It is error without deprecation cycle because `expect` and `actual`
classes are still in Beta and expected impact of change is negligible.

^KT-62036 Fixed
This commit is contained in:
Roman Efremov
2023-09-22 16:33:13 +02:00
committed by Space Team
parent 02680442a0
commit 81fd9a679d
24 changed files with 227 additions and 6 deletions
@@ -3628,6 +3628,16 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
token,
)
}
add(FirErrors.DEFAULT_ARGUMENTS_IN_EXPECT_ACTUALIZED_BY_FAKE_OVERRIDE) { firDiagnostic ->
DefaultArgumentsInExpectActualizedByFakeOverrideImpl(
firSymbolBuilder.classifierBuilder.buildClassLikeSymbol(firDiagnostic.a),
firDiagnostic.b.map { firNamedFunctionSymbol ->
firSymbolBuilder.functionLikeBuilder.buildFunctionSymbol(firNamedFunctionSymbol)
},
firDiagnostic as KtPsiDiagnostic,
token,
)
}
add(FirErrors.EXPECTED_FUNCTION_SOURCE_WITH_DEFAULT_ARGUMENTS_NOT_FOUND) { firDiagnostic ->
ExpectedFunctionSourceWithDefaultArgumentsNotFoundImpl(
firDiagnostic as KtPsiDiagnostic,
@@ -2548,6 +2548,12 @@ sealed interface KtFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI> {
val members: List<KtCallableSymbol>
}
interface DefaultArgumentsInExpectActualizedByFakeOverride : KtFirDiagnostic<KtClass> {
override val diagnosticClass get() = DefaultArgumentsInExpectActualizedByFakeOverride::class
val expectClassSymbol: KtClassLikeSymbol
val members: List<KtFunctionLikeSymbol>
}
interface ExpectedFunctionSourceWithDefaultArgumentsNotFound : KtFirDiagnostic<PsiElement> {
override val diagnosticClass get() = ExpectedFunctionSourceWithDefaultArgumentsNotFound::class
}
@@ -3069,6 +3069,13 @@ internal class DefaultArgumentsInExpectWithActualTypealiasImpl(
token: KtLifetimeToken,
) : KtAbstractFirDiagnostic<KtTypeAlias>(firDiagnostic, token), KtFirDiagnostic.DefaultArgumentsInExpectWithActualTypealias
internal class DefaultArgumentsInExpectActualizedByFakeOverrideImpl(
override val expectClassSymbol: KtClassLikeSymbol,
override val members: List<KtFunctionLikeSymbol>,
firDiagnostic: KtPsiDiagnostic,
token: KtLifetimeToken,
) : KtAbstractFirDiagnostic<KtClass>(firDiagnostic, token), KtFirDiagnostic.DefaultArgumentsInExpectActualizedByFakeOverride
internal class ExpectedFunctionSourceWithDefaultArgumentsNotFoundImpl(
firDiagnostic: KtPsiDiagnostic,
token: KtLifetimeToken,