[FIR] Create checker for simple enum entries with missing overrides

Complex enum entries (those with bodies) with missing overrides
are covered by an existing checker that checks all types of classes. But
simple enum entries (those without bodies) were not covered and require
a separate checker for missing overrides.

#KT-58637 Fixed
This commit is contained in:
Brian Norman
2023-05-22 10:50:34 -05:00
committed by Space Team
parent 5bf51318eb
commit 8091aebbc7
11 changed files with 91 additions and 4 deletions
@@ -2474,6 +2474,16 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
token,
)
}
add(FirErrors.ABSTRACT_MEMBER_NOT_IMPLEMENTED_BY_ENUM_ENTRY) { firDiagnostic ->
AbstractMemberNotImplementedByEnumEntryImpl(
firSymbolBuilder.buildSymbol(firDiagnostic.a),
firDiagnostic.b.map { firCallableSymbol ->
firSymbolBuilder.callableBuilder.buildCallableSymbol(firCallableSymbol)
},
firDiagnostic as KtPsiDiagnostic,
token,
)
}
add(FirErrors.ABSTRACT_CLASS_MEMBER_NOT_IMPLEMENTED) { firDiagnostic ->
AbstractClassMemberNotImplementedImpl(
firSymbolBuilder.classifierBuilder.buildClassLikeSymbol(firDiagnostic.a),
@@ -1758,6 +1758,12 @@ sealed interface KtFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI> {
val missingDeclaration: KtCallableSymbol
}
interface AbstractMemberNotImplementedByEnumEntry : KtFirDiagnostic<KtEnumEntry> {
override val diagnosticClass get() = AbstractMemberNotImplementedByEnumEntry::class
val enumEntry: KtSymbol
val missingDeclarations: List<KtCallableSymbol>
}
interface AbstractClassMemberNotImplemented : KtFirDiagnostic<KtClassOrObject> {
override val diagnosticClass get() = AbstractClassMemberNotImplemented::class
val classOrObject: KtClassLikeSymbol
@@ -2110,6 +2110,13 @@ internal class AbstractMemberNotImplementedImpl(
token: KtLifetimeToken,
) : KtAbstractFirDiagnostic<KtClassOrObject>(firDiagnostic, token), KtFirDiagnostic.AbstractMemberNotImplemented
internal class AbstractMemberNotImplementedByEnumEntryImpl(
override val enumEntry: KtSymbol,
override val missingDeclarations: List<KtCallableSymbol>,
firDiagnostic: KtPsiDiagnostic,
token: KtLifetimeToken,
) : KtAbstractFirDiagnostic<KtEnumEntry>(firDiagnostic, token), KtFirDiagnostic.AbstractMemberNotImplementedByEnumEntry
internal class AbstractClassMemberNotImplementedImpl(
override val classOrObject: KtClassLikeSymbol,
override val missingDeclaration: KtCallableSymbol,