[FIR] Implement properties types mismatch on inheritence

PROPERTY_TYPE_MISMATCH_ON_INHERITANCE,
VAR_TYPE_MISMATCH_ON_INHERITANCE,
PROPERTY_TYPE_MISMATCH_BY_DELEGATION
This commit is contained in:
Andrey Zinovyev
2021-06-11 13:07:17 +03:00
committed by teamcityserver
parent 8c7ee0b714
commit c98cd3b190
21 changed files with 179 additions and 142 deletions
@@ -1660,6 +1660,22 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
token,
)
}
add(FirErrors.PROPERTY_TYPE_MISMATCH_ON_INHERITANCE) { firDiagnostic ->
PropertyTypeMismatchOnInheritanceImpl(
firSymbolBuilder.callableBuilder.buildCallableSymbol(firDiagnostic.a as FirCallableDeclaration),
firSymbolBuilder.callableBuilder.buildCallableSymbol(firDiagnostic.b as FirCallableDeclaration),
firDiagnostic as FirPsiDiagnostic<*>,
token,
)
}
add(FirErrors.VAR_TYPE_MISMATCH_ON_INHERITANCE) { firDiagnostic ->
VarTypeMismatchOnInheritanceImpl(
firSymbolBuilder.callableBuilder.buildCallableSymbol(firDiagnostic.a as FirCallableDeclaration),
firSymbolBuilder.callableBuilder.buildCallableSymbol(firDiagnostic.b as FirCallableDeclaration),
firDiagnostic as FirPsiDiagnostic<*>,
token,
)
}
add(FirErrors.RETURN_TYPE_MISMATCH_BY_DELEGATION) { firDiagnostic ->
ReturnTypeMismatchByDelegationImpl(
firSymbolBuilder.callableBuilder.buildCallableSymbol(firDiagnostic.a as FirCallableDeclaration),
@@ -1668,6 +1684,14 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
token,
)
}
add(FirErrors.PROPERTY_TYPE_MISMATCH_BY_DELEGATION) { firDiagnostic ->
PropertyTypeMismatchByDelegationImpl(
firSymbolBuilder.callableBuilder.buildCallableSymbol(firDiagnostic.a as FirCallableDeclaration),
firSymbolBuilder.callableBuilder.buildCallableSymbol(firDiagnostic.b as FirCallableDeclaration),
firDiagnostic as FirPsiDiagnostic<*>,
token,
)
}
add(FirErrors.ABSTRACT_MEMBER_NOT_IMPLEMENTED) { firDiagnostic ->
AbstractMemberNotImplementedImpl(
firSymbolBuilder.classifierBuilder.buildClassLikeSymbol(firDiagnostic.a),
@@ -1177,12 +1177,30 @@ sealed class KtFirDiagnostic<PSI: PsiElement> : KtDiagnosticWithPsi<PSI> {
abstract val conflictingDeclaration2: KtCallableSymbol
}
abstract class PropertyTypeMismatchOnInheritance : KtFirDiagnostic<KtClassOrObject>() {
override val diagnosticClass get() = PropertyTypeMismatchOnInheritance::class
abstract val conflictingDeclaration1: KtCallableSymbol
abstract val conflictingDeclaration2: KtCallableSymbol
}
abstract class VarTypeMismatchOnInheritance : KtFirDiagnostic<KtClassOrObject>() {
override val diagnosticClass get() = VarTypeMismatchOnInheritance::class
abstract val conflictingDeclaration1: KtCallableSymbol
abstract val conflictingDeclaration2: KtCallableSymbol
}
abstract class ReturnTypeMismatchByDelegation : KtFirDiagnostic<KtClassOrObject>() {
override val diagnosticClass get() = ReturnTypeMismatchByDelegation::class
abstract val delegateDeclaration: KtCallableSymbol
abstract val baseDeclaration: KtCallableSymbol
}
abstract class PropertyTypeMismatchByDelegation : KtFirDiagnostic<KtClassOrObject>() {
override val diagnosticClass get() = PropertyTypeMismatchByDelegation::class
abstract val delegateDeclaration: KtCallableSymbol
abstract val baseDeclaration: KtCallableSymbol
}
abstract class AbstractMemberNotImplemented : KtFirDiagnostic<KtClassOrObject>() {
override val diagnosticClass get() = AbstractMemberNotImplemented::class
abstract val classOrObject: KtClassLikeSymbol
@@ -1892,6 +1892,24 @@ internal class ReturnTypeMismatchOnInheritanceImpl(
override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic)
}
internal class PropertyTypeMismatchOnInheritanceImpl(
override val conflictingDeclaration1: KtCallableSymbol,
override val conflictingDeclaration2: KtCallableSymbol,
firDiagnostic: FirPsiDiagnostic<*>,
override val token: ValidityToken,
) : KtFirDiagnostic.PropertyTypeMismatchOnInheritance(), KtAbstractFirDiagnostic<KtClassOrObject> {
override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic)
}
internal class VarTypeMismatchOnInheritanceImpl(
override val conflictingDeclaration1: KtCallableSymbol,
override val conflictingDeclaration2: KtCallableSymbol,
firDiagnostic: FirPsiDiagnostic<*>,
override val token: ValidityToken,
) : KtFirDiagnostic.VarTypeMismatchOnInheritance(), KtAbstractFirDiagnostic<KtClassOrObject> {
override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic)
}
internal class ReturnTypeMismatchByDelegationImpl(
override val delegateDeclaration: KtCallableSymbol,
override val baseDeclaration: KtCallableSymbol,
@@ -1901,6 +1919,15 @@ internal class ReturnTypeMismatchByDelegationImpl(
override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic)
}
internal class PropertyTypeMismatchByDelegationImpl(
override val delegateDeclaration: KtCallableSymbol,
override val baseDeclaration: KtCallableSymbol,
firDiagnostic: FirPsiDiagnostic<*>,
override val token: ValidityToken,
) : KtFirDiagnostic.PropertyTypeMismatchByDelegation(), KtAbstractFirDiagnostic<KtClassOrObject> {
override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic)
}
internal class AbstractMemberNotImplementedImpl(
override val classOrObject: KtClassLikeSymbol,
override val missingDeclaration: KtCallableSymbol,