Forbid usages of super if in fact it accesses an abstract member

#KT-49017 Fixed
This commit is contained in:
Mikhail Glukhikh
2022-01-10 14:19:19 +03:00
parent d15270b9e5
commit b689bbf5c7
23 changed files with 279 additions and 4 deletions
@@ -392,6 +392,12 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
token,
)
}
add(FirErrors.ABSTRACT_SUPER_CALL_WARNING) { firDiagnostic ->
AbstractSuperCallWarningImpl(
firDiagnostic as KtPsiDiagnostic,
token,
)
}
add(FirErrors.INSTANCE_ACCESS_BEFORE_SUPER_CALL) { firDiagnostic ->
InstanceAccessBeforeSuperCallImpl(
firDiagnostic.a,
@@ -307,6 +307,10 @@ sealed class KtFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI> {
override val diagnosticClass get() = AbstractSuperCall::class
}
abstract class AbstractSuperCallWarning : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = AbstractSuperCallWarning::class
}
abstract class InstanceAccessBeforeSuperCall : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = InstanceAccessBeforeSuperCall::class
abstract val target: String
@@ -356,6 +356,11 @@ internal class AbstractSuperCallImpl(
override val token: ValidityToken,
) : KtFirDiagnostic.AbstractSuperCall(), KtAbstractFirDiagnostic<PsiElement>
internal class AbstractSuperCallWarningImpl(
override val firDiagnostic: KtPsiDiagnostic,
override val token: ValidityToken,
) : KtFirDiagnostic.AbstractSuperCallWarning(), KtAbstractFirDiagnostic<PsiElement>
internal class InstanceAccessBeforeSuperCallImpl(
override val target: String,
override val firDiagnostic: KtPsiDiagnostic,