[FIR] Implement CONFLICTING_INHERITED_MEMBERS diagnostic

This commit is contained in:
Andrey Zinovyev
2021-06-11 17:58:30 +03:00
committed by teamcityserver
parent 78519f851e
commit 3f7d050f8f
11 changed files with 72 additions and 4 deletions
@@ -1700,6 +1700,15 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
token,
)
}
add(FirErrors.CONFLICTING_INHERITED_MEMBERS) { firDiagnostic ->
ConflictingInheritedMembersImpl(
firDiagnostic.a.map { firCallableDeclaration ->
firSymbolBuilder.callableBuilder.buildCallableSymbol(firCallableDeclaration as FirCallableDeclaration)
},
firDiagnostic as FirPsiDiagnostic<*>,
token,
)
}
add(FirErrors.ABSTRACT_MEMBER_NOT_IMPLEMENTED) { firDiagnostic ->
AbstractMemberNotImplementedImpl(
firSymbolBuilder.classifierBuilder.buildClassLikeSymbol(firDiagnostic.a),
@@ -1207,6 +1207,11 @@ sealed class KtFirDiagnostic<PSI: PsiElement> : KtDiagnosticWithPsi<PSI> {
abstract val baseDeclaration: KtCallableSymbol
}
abstract class ConflictingInheritedMembers : KtFirDiagnostic<KtClassOrObject>() {
override val diagnosticClass get() = ConflictingInheritedMembers::class
abstract val conflictingDeclarations: List<KtCallableSymbol>
}
abstract class AbstractMemberNotImplemented : KtFirDiagnostic<KtClassOrObject>() {
override val diagnosticClass get() = AbstractMemberNotImplemented::class
abstract val classOrObject: KtClassLikeSymbol
@@ -1937,6 +1937,14 @@ internal class VarOverriddenByValByDelegationImpl(
override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic)
}
internal class ConflictingInheritedMembersImpl(
override val conflictingDeclarations: List<KtCallableSymbol>,
firDiagnostic: FirPsiDiagnostic<*>,
override val token: ValidityToken,
) : KtFirDiagnostic.ConflictingInheritedMembers(), KtAbstractFirDiagnostic<KtClassOrObject> {
override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic)
}
internal class AbstractMemberNotImplementedImpl(
override val classOrObject: KtClassLikeSymbol,
override val missingDeclaration: KtCallableSymbol,