FIR checker: warn useless elvis

This commit is contained in:
Jinseong Jeon
2021-04-19 10:12:20 -07:00
committed by TeamCityServer
parent b2005302dc
commit 24d792fb49
44 changed files with 171 additions and 109 deletions
@@ -1798,6 +1798,19 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
token,
)
}
add(FirErrors.USELESS_ELVIS) { firDiagnostic ->
UselessElvisImpl(
firSymbolBuilder.typeBuilder.buildKtType(firDiagnostic.a),
firDiagnostic as FirPsiDiagnostic<*>,
token,
)
}
add(FirErrors.USELESS_ELVIS_RIGHT_IS_NULL) { firDiagnostic ->
UselessElvisRightIsNullImpl(
firDiagnostic as FirPsiDiagnostic<*>,
token,
)
}
add(FirErrors.NO_ELSE_IN_WHEN) { firDiagnostic ->
NoElseInWhenImpl(
firDiagnostic.a.map { whenMissingCase ->
@@ -1265,6 +1265,15 @@ sealed class KtFirDiagnostic<PSI: PsiElement> : KtDiagnosticWithPsi<PSI> {
override val diagnosticClass get() = NotNullAssertionOnCallableReference::class
}
abstract class UselessElvis : KtFirDiagnostic<KtBinaryExpression>() {
override val diagnosticClass get() = UselessElvis::class
abstract val receiverType: KtType
}
abstract class UselessElvisRightIsNull : KtFirDiagnostic<KtBinaryExpression>() {
override val diagnosticClass get() = UselessElvisRightIsNull::class
}
abstract class NoElseInWhen : KtFirDiagnostic<KtWhenExpression>() {
override val diagnosticClass get() = NoElseInWhen::class
abstract val missingWhenCases: List<WhenMissingCase>
@@ -2049,6 +2049,21 @@ internal class NotNullAssertionOnCallableReferenceImpl(
override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic)
}
internal class UselessElvisImpl(
override val receiverType: KtType,
firDiagnostic: FirPsiDiagnostic<*>,
override val token: ValidityToken,
) : KtFirDiagnostic.UselessElvis(), KtAbstractFirDiagnostic<KtBinaryExpression> {
override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic)
}
internal class UselessElvisRightIsNullImpl(
firDiagnostic: FirPsiDiagnostic<*>,
override val token: ValidityToken,
) : KtFirDiagnostic.UselessElvisRightIsNull(), KtAbstractFirDiagnostic<KtBinaryExpression> {
override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic)
}
internal class NoElseInWhenImpl(
override val missingWhenCases: List<WhenMissingCase>,
firDiagnostic: FirPsiDiagnostic<*>,