FIR: implement checker for open members

Specifically,

1. NON_FINAL_MEMBER_IN_FINAL_CLASS
2. NON_FINAL_MEMBER_IN_OBJECT
This commit is contained in:
Tianyu Geng
2021-02-16 14:04:34 -08:00
committed by Mikhail Glukhikh
parent 3e9ff3ecda
commit 6b453d9b23
21 changed files with 165 additions and 75 deletions
@@ -723,6 +723,18 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
token,
)
}
add(FirErrors.NON_FINAL_MEMBER_IN_FINAL_CLASS) { firDiagnostic ->
NonFinalMemberInFinalClassImpl(
firDiagnostic as FirPsiDiagnostic<*>,
token,
)
}
add(FirErrors.NON_FINAL_MEMBER_IN_OBJECT) { firDiagnostic ->
NonFinalMemberInObjectImpl(
firDiagnostic as FirPsiDiagnostic<*>,
token,
)
}
add(FirErrors.MANY_COMPANION_OBJECTS) { firDiagnostic ->
ManyCompanionObjectsImpl(
firDiagnostic as FirPsiDiagnostic<*>,
@@ -515,6 +515,14 @@ sealed class KtFirDiagnostic<PSI: PsiElement> : KtDiagnosticWithPsi<PSI> {
abstract val overriddenDeclaration: KtSymbol
}
abstract class NonFinalMemberInFinalClass : KtFirDiagnostic<KtNamedDeclaration>() {
override val diagnosticClass get() = NonFinalMemberInFinalClass::class
}
abstract class NonFinalMemberInObject : KtFirDiagnostic<KtNamedDeclaration>() {
override val diagnosticClass get() = NonFinalMemberInObject::class
}
abstract class ManyCompanionObjects : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = ManyCompanionObjects::class
}
@@ -822,6 +822,20 @@ internal class VarOverriddenByValImpl(
override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic)
}
internal class NonFinalMemberInFinalClassImpl(
firDiagnostic: FirPsiDiagnostic<*>,
override val token: ValidityToken,
) : KtFirDiagnostic.NonFinalMemberInFinalClass(), KtAbstractFirDiagnostic<KtNamedDeclaration> {
override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic)
}
internal class NonFinalMemberInObjectImpl(
firDiagnostic: FirPsiDiagnostic<*>,
override val token: ValidityToken,
) : KtFirDiagnostic.NonFinalMemberInObject(), KtAbstractFirDiagnostic<KtNamedDeclaration> {
override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic)
}
internal class ManyCompanionObjectsImpl(
firDiagnostic: FirPsiDiagnostic<*>,
override val token: ValidityToken,