FIR checker/IDE: Add checker and quickfix for VAL_WITH_SETTER.

This commit is contained in:
Mark Punzalan
2021-02-16 23:34:10 +00:00
committed by Ilya Kirillov
parent 99c47a0487
commit 1c94372b6c
16 changed files with 116 additions and 76 deletions
@@ -1,3 +1,4 @@
// FIR_COMPARISON
val a: Int = 1
get() {
return field
@@ -48,6 +48,7 @@ class MainKtQuickFixRegistrar : KtQuickFixRegistrar() {
registerPsiQuickFixes(KtFirDiagnostic.VarOverriddenByVal::class, ChangeVariableMutabilityFix.VAR_OVERRIDDEN_BY_VAL_FACTORY)
registerPsiQuickFixes(KtFirDiagnostic.VarAnnotationParameter::class, ChangeVariableMutabilityFix.VAR_ANNOTATION_PARAMETER_FACTORY)
registerPsiQuickFixes(KtFirDiagnostic.InapplicableLateinitModifier::class, ChangeVariableMutabilityFix.LATEINIT_VAL_FACTORY)
registerPsiQuickFixes(KtFirDiagnostic.ValWithSetter::class, ChangeVariableMutabilityFix.VAL_WITH_SETTER_FACTORY)
}
override val list: KtQuickFixesList = KtQuickFixesList.createCombined(
@@ -944,6 +944,12 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
token,
)
}
add(FirErrors.VAL_WITH_SETTER) { firDiagnostic ->
ValWithSetterImpl(
firDiagnostic as FirPsiDiagnostic<*>,
token,
)
}
add(FirErrors.EXPECTED_DECLARATION_WITH_BODY) { firDiagnostic ->
ExpectedDeclarationWithBodyImpl(
firDiagnostic as FirPsiDiagnostic<*>,
@@ -666,6 +666,10 @@ sealed class KtFirDiagnostic<PSI: PsiElement> : KtDiagnosticWithPsi<PSI> {
override val diagnosticClass get() = ExpectedPrivateDeclaration::class
}
abstract class ValWithSetter : KtFirDiagnostic<KtPropertyAccessor>() {
override val diagnosticClass get() = ValWithSetter::class
}
abstract class ExpectedDeclarationWithBody : KtFirDiagnostic<KtDeclaration>() {
override val diagnosticClass get() = ExpectedDeclarationWithBody::class
}
@@ -1075,6 +1075,13 @@ internal class ExpectedPrivateDeclarationImpl(
override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic)
}
internal class ValWithSetterImpl(
firDiagnostic: FirPsiDiagnostic<*>,
override val token: ValidityToken,
) : KtFirDiagnostic.ValWithSetter(), KtAbstractFirDiagnostic<KtPropertyAccessor> {
override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic)
}
internal class ExpectedDeclarationWithBodyImpl(
firDiagnostic: FirPsiDiagnostic<*>,
override val token: ValidityToken,
@@ -3,3 +3,4 @@ class A() {
val a: Int = 0
<caret>set(v: Int) {}
}
/* FIR_COMPARISON */
@@ -3,3 +3,4 @@ class A() {
var a: Int = 0
set(v: Int) {}
}
/* FIR_COMPARISON */