[FE] Prohibit default arguments in expect declarations actualized via typealias

Cases when default argument inhertied from super class are allowed.

Some tests for default arguments already exist and can be found in
`testData/diagnostics/tests/multiplatform/defaultArguments`, for example
`annotationsViaActualTypeAlias.kt`.

^KT-57614 Fixed

Merge-request: KT-MR-10356
Merged-by: Roman Efremov <Roman.Efremov@jetbrains.com>
This commit is contained in:
Roman Efremov
2023-05-31 13:14:37 +00:00
committed by Space Team
parent 9829a2bf98
commit d2eb4a0abf
34 changed files with 284 additions and 174 deletions
@@ -3310,6 +3310,16 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
token,
)
}
add(FirErrors.DEFAULT_ARGUMENTS_IN_EXPECT_WITH_ACTUAL_TYPEALIAS) { firDiagnostic ->
DefaultArgumentsInExpectWithActualTypealiasImpl(
firSymbolBuilder.classifierBuilder.buildClassLikeSymbol(firDiagnostic.a),
firDiagnostic.b.map { firCallableSymbol ->
firSymbolBuilder.callableBuilder.buildCallableSymbol(firCallableSymbol)
},
firDiagnostic as KtPsiDiagnostic,
token,
)
}
add(FirErrors.ACTUAL_ANNOTATION_CONFLICTING_DEFAULT_ARGUMENT_VALUE) { firDiagnostic ->
ActualAnnotationConflictingDefaultArgumentValueImpl(
firSymbolBuilder.variableLikeBuilder.buildVariableLikeSymbol(firDiagnostic.a),
@@ -2328,6 +2328,12 @@ sealed interface KtFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI> {
override val diagnosticClass get() = ActualFunctionWithDefaultArguments::class
}
interface DefaultArgumentsInExpectWithActualTypealias : KtFirDiagnostic<KtTypeAlias> {
override val diagnosticClass get() = DefaultArgumentsInExpectWithActualTypealias::class
val expectClassSymbol: KtClassLikeSymbol
val members: List<KtCallableSymbol>
}
interface ActualAnnotationConflictingDefaultArgumentValue : KtFirDiagnostic<PsiElement> {
override val diagnosticClass get() = ActualAnnotationConflictingDefaultArgumentValue::class
val parameter: KtVariableLikeSymbol
@@ -2808,6 +2808,13 @@ internal class ActualFunctionWithDefaultArgumentsImpl(
token: KtLifetimeToken,
) : KtAbstractFirDiagnostic<PsiElement>(firDiagnostic, token), KtFirDiagnostic.ActualFunctionWithDefaultArguments
internal class DefaultArgumentsInExpectWithActualTypealiasImpl(
override val expectClassSymbol: KtClassLikeSymbol,
override val members: List<KtCallableSymbol>,
firDiagnostic: KtPsiDiagnostic,
token: KtLifetimeToken,
) : KtAbstractFirDiagnostic<KtTypeAlias>(firDiagnostic, token), KtFirDiagnostic.DefaultArgumentsInExpectWithActualTypealias
internal class ActualAnnotationConflictingDefaultArgumentValueImpl(
override val parameter: KtVariableLikeSymbol,
firDiagnostic: KtPsiDiagnostic,