From befa8aaac7544179c243701f48477f8c943c001d Mon Sep 17 00:00:00 2001 From: Mark Punzalan Date: Sat, 5 Jun 2021 06:47:48 +0000 Subject: [PATCH] FIR IDE: Enable add initializer quickfix for MUST_BE_INITIALIZED. --- .../kotlin/idea/quickfix/MainKtQuickFixRegistrar.kt | 3 +-- ...ry.kt => InitializePropertyQuickFixFactories.kt} | 13 ++++++++++--- .../addInitializer/memberPropertyVarGetterOnly.kt | 3 +-- .../memberPropertyVarGetterOnly.kt.after | 3 +-- .../addInitializer/memberPropertyVarSetterOnly.kt | 3 +-- .../memberPropertyVarSetterOnly.kt.after | 3 +-- .../quickfix/addInitializer/topLevelProperty.kt | 3 +-- .../addInitializer/topLevelProperty.kt.after | 3 +-- .../addInitializer/topLevelPropertyVarClass.kt | 3 +-- .../topLevelPropertyVarClass.kt.after | 3 +-- .../addInitializer/topLevelPropertyVarGetterOnly.kt | 3 +-- .../topLevelPropertyVarGetterOnly.kt.after | 3 +-- .../addInitializer/topLevelPropertyVarSetterOnly.kt | 3 +-- .../topLevelPropertyVarSetterOnly.kt.after | 3 +-- 14 files changed, 23 insertions(+), 29 deletions(-) rename idea/idea-fir/src/org/jetbrains/kotlin/idea/quickfix/fixes/{InitializePropertyQuickFixFactory.kt => InitializePropertyQuickFixFactories.kt} (86%) diff --git a/idea/idea-fir/src/org/jetbrains/kotlin/idea/quickfix/MainKtQuickFixRegistrar.kt b/idea/idea-fir/src/org/jetbrains/kotlin/idea/quickfix/MainKtQuickFixRegistrar.kt index adb5d516a01..dd56f612621 100644 --- a/idea/idea-fir/src/org/jetbrains/kotlin/idea/quickfix/MainKtQuickFixRegistrar.kt +++ b/idea/idea-fir/src/org/jetbrains/kotlin/idea/quickfix/MainKtQuickFixRegistrar.kt @@ -11,7 +11,6 @@ import org.jetbrains.kotlin.idea.fir.api.fixes.KtQuickFixesList import org.jetbrains.kotlin.idea.fir.api.fixes.KtQuickFixesListBuilder import org.jetbrains.kotlin.idea.frontend.api.fir.diagnostics.KtFirDiagnostic import org.jetbrains.kotlin.idea.quickfix.fixes.* -import org.jetbrains.kotlin.idea.quickfix.fixes.InitializePropertyQuickFixFactory class MainKtQuickFixRegistrar : KtQuickFixRegistrar() { private val keywords = KtQuickFixesListBuilder.registerPsiQuickFix { @@ -74,7 +73,7 @@ class MainKtQuickFixRegistrar : KtQuickFixRegistrar() { KtFirDiagnostic.MustBeInitializedOrBeAbstract::class, AddModifierFix.addAbstractModifier, ) - registerApplicator(InitializePropertyQuickFixFactory.initializePropertyFactory) + registerApplicators(InitializePropertyQuickFixFactories.initializePropertyFactory) registerApplicator(AddLateInitFactory.addLateInitFactory) registerApplicator(AddAccessorsFactories.addAccessorsToUninitializedProperty) } diff --git a/idea/idea-fir/src/org/jetbrains/kotlin/idea/quickfix/fixes/InitializePropertyQuickFixFactory.kt b/idea/idea-fir/src/org/jetbrains/kotlin/idea/quickfix/fixes/InitializePropertyQuickFixFactories.kt similarity index 86% rename from idea/idea-fir/src/org/jetbrains/kotlin/idea/quickfix/fixes/InitializePropertyQuickFixFactory.kt rename to idea/idea-fir/src/org/jetbrains/kotlin/idea/quickfix/fixes/InitializePropertyQuickFixFactories.kt index e8189947323..c37d66fa9ce 100644 --- a/idea/idea-fir/src/org/jetbrains/kotlin/idea/quickfix/fixes/InitializePropertyQuickFixFactory.kt +++ b/idea/idea-fir/src/org/jetbrains/kotlin/idea/quickfix/fixes/InitializePropertyQuickFixFactories.kt @@ -11,7 +11,7 @@ import org.jetbrains.kotlin.idea.api.applicator.HLApplicator import org.jetbrains.kotlin.idea.api.applicator.HLApplicatorInput import org.jetbrains.kotlin.idea.api.applicator.applicator import org.jetbrains.kotlin.idea.fir.api.fixes.HLQuickFix -import org.jetbrains.kotlin.idea.fir.api.fixes.diagnosticFixFactory +import org.jetbrains.kotlin.idea.fir.api.fixes.diagnosticFixFactories import org.jetbrains.kotlin.idea.frontend.api.fir.diagnostics.KtFirDiagnostic import org.jetbrains.kotlin.psi.KtClass import org.jetbrains.kotlin.psi.KtProperty @@ -20,7 +20,7 @@ import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject import org.jetbrains.kotlin.psi.psiUtil.endOffset import org.jetbrains.kotlin.psi.psiUtil.startOffset -object InitializePropertyQuickFixFactory { +object InitializePropertyQuickFixFactories { data class AddInitializerInput(val initializerText: String?) : HLApplicatorInput @@ -38,8 +38,15 @@ object InitializePropertyQuickFixFactory { @OptIn(ExperimentalStdlibApi::class) val initializePropertyFactory = - diagnosticFixFactory(KtFirDiagnostic.MustBeInitializedOrBeAbstract::class) { diagnostic -> + diagnosticFixFactories( + KtFirDiagnostic.MustBeInitialized::class, + KtFirDiagnostic.MustBeInitializedOrBeAbstract::class + ) { diagnostic -> val property: KtProperty = diagnostic.psi + + // An extension property cannot be initialized because it has no backing field + if (property.receiverTypeReference != null) return@diagnosticFixFactories emptyList() + buildList { add( HLQuickFix( diff --git a/idea/testData/quickfix/addInitializer/memberPropertyVarGetterOnly.kt b/idea/testData/quickfix/addInitializer/memberPropertyVarGetterOnly.kt index 04b2238b7c6..8c8d81eb23d 100644 --- a/idea/testData/quickfix/addInitializer/memberPropertyVarGetterOnly.kt +++ b/idea/testData/quickfix/addInitializer/memberPropertyVarGetterOnly.kt @@ -2,5 +2,4 @@ class A { var n: Int get() = 1 -} -/* IGNORE_FIR */ +} \ No newline at end of file diff --git a/idea/testData/quickfix/addInitializer/memberPropertyVarGetterOnly.kt.after b/idea/testData/quickfix/addInitializer/memberPropertyVarGetterOnly.kt.after index f67c5696cdb..e58b884a71a 100644 --- a/idea/testData/quickfix/addInitializer/memberPropertyVarGetterOnly.kt.after +++ b/idea/testData/quickfix/addInitializer/memberPropertyVarGetterOnly.kt.after @@ -2,5 +2,4 @@ class A { var n: Int = 0 get() = 1 -} -/* IGNORE_FIR */ +} \ No newline at end of file diff --git a/idea/testData/quickfix/addInitializer/memberPropertyVarSetterOnly.kt b/idea/testData/quickfix/addInitializer/memberPropertyVarSetterOnly.kt index 59218ee337e..988b1dc0944 100644 --- a/idea/testData/quickfix/addInitializer/memberPropertyVarSetterOnly.kt +++ b/idea/testData/quickfix/addInitializer/memberPropertyVarSetterOnly.kt @@ -2,5 +2,4 @@ class A { var n: Int set(value: Int) {} -} -/* IGNORE_FIR */ +} \ No newline at end of file diff --git a/idea/testData/quickfix/addInitializer/memberPropertyVarSetterOnly.kt.after b/idea/testData/quickfix/addInitializer/memberPropertyVarSetterOnly.kt.after index 648d238cc00..670dcf65b77 100644 --- a/idea/testData/quickfix/addInitializer/memberPropertyVarSetterOnly.kt.after +++ b/idea/testData/quickfix/addInitializer/memberPropertyVarSetterOnly.kt.after @@ -2,5 +2,4 @@ class A { var n: Int = 0 set(value: Int) {} -} -/* IGNORE_FIR */ +} \ No newline at end of file diff --git a/idea/testData/quickfix/addInitializer/topLevelProperty.kt b/idea/testData/quickfix/addInitializer/topLevelProperty.kt index fa65f859545..c4d322060d7 100644 --- a/idea/testData/quickfix/addInitializer/topLevelProperty.kt +++ b/idea/testData/quickfix/addInitializer/topLevelProperty.kt @@ -1,3 +1,2 @@ // "Add initializer" "true" -val n: Int -/* IGNORE_FIR */ +val n: Int \ No newline at end of file diff --git a/idea/testData/quickfix/addInitializer/topLevelProperty.kt.after b/idea/testData/quickfix/addInitializer/topLevelProperty.kt.after index dac3e18ca93..3065ca025bb 100644 --- a/idea/testData/quickfix/addInitializer/topLevelProperty.kt.after +++ b/idea/testData/quickfix/addInitializer/topLevelProperty.kt.after @@ -1,3 +1,2 @@ // "Add initializer" "true" -val n: Int = 0 -/* IGNORE_FIR */ +val n: Int = 0 \ No newline at end of file diff --git a/idea/testData/quickfix/addInitializer/topLevelPropertyVarClass.kt b/idea/testData/quickfix/addInitializer/topLevelPropertyVarClass.kt index ca1f0dea62c..14d2ec3b8b7 100644 --- a/idea/testData/quickfix/addInitializer/topLevelPropertyVarClass.kt +++ b/idea/testData/quickfix/addInitializer/topLevelPropertyVarClass.kt @@ -1,5 +1,4 @@ // "Add initializer" "true" // WITH_RUNTIME class A -var label: A -/* IGNORE_FIR */ +var label: A \ No newline at end of file diff --git a/idea/testData/quickfix/addInitializer/topLevelPropertyVarClass.kt.after b/idea/testData/quickfix/addInitializer/topLevelPropertyVarClass.kt.after index 49e24675631..7aeb99df392 100644 --- a/idea/testData/quickfix/addInitializer/topLevelPropertyVarClass.kt.after +++ b/idea/testData/quickfix/addInitializer/topLevelPropertyVarClass.kt.after @@ -1,5 +1,4 @@ // "Add initializer" "true" // WITH_RUNTIME class A -var label: A = TODO() -/* IGNORE_FIR */ +var label: A = TODO() \ No newline at end of file diff --git a/idea/testData/quickfix/addInitializer/topLevelPropertyVarGetterOnly.kt b/idea/testData/quickfix/addInitializer/topLevelPropertyVarGetterOnly.kt index 5a96ec51248..8b47850fbbd 100644 --- a/idea/testData/quickfix/addInitializer/topLevelPropertyVarGetterOnly.kt +++ b/idea/testData/quickfix/addInitializer/topLevelPropertyVarGetterOnly.kt @@ -1,4 +1,3 @@ // "Add initializer" "true" var n: Int - get() = 1 -/* IGNORE_FIR */ + get() = 1 \ No newline at end of file diff --git a/idea/testData/quickfix/addInitializer/topLevelPropertyVarGetterOnly.kt.after b/idea/testData/quickfix/addInitializer/topLevelPropertyVarGetterOnly.kt.after index 87daab0b779..d41f718aac2 100644 --- a/idea/testData/quickfix/addInitializer/topLevelPropertyVarGetterOnly.kt.after +++ b/idea/testData/quickfix/addInitializer/topLevelPropertyVarGetterOnly.kt.after @@ -1,4 +1,3 @@ // "Add initializer" "true" var n: Int = 0 - get() = 1 -/* IGNORE_FIR */ + get() = 1 \ No newline at end of file diff --git a/idea/testData/quickfix/addInitializer/topLevelPropertyVarSetterOnly.kt b/idea/testData/quickfix/addInitializer/topLevelPropertyVarSetterOnly.kt index 2b6631dc983..edddd4971d7 100644 --- a/idea/testData/quickfix/addInitializer/topLevelPropertyVarSetterOnly.kt +++ b/idea/testData/quickfix/addInitializer/topLevelPropertyVarSetterOnly.kt @@ -1,4 +1,3 @@ // "Add initializer" "true" var n: Int - set(value: Int) {} -/* IGNORE_FIR */ + set(value: Int) {} \ No newline at end of file diff --git a/idea/testData/quickfix/addInitializer/topLevelPropertyVarSetterOnly.kt.after b/idea/testData/quickfix/addInitializer/topLevelPropertyVarSetterOnly.kt.after index 0bdf520f9c8..394c3c525a1 100644 --- a/idea/testData/quickfix/addInitializer/topLevelPropertyVarSetterOnly.kt.after +++ b/idea/testData/quickfix/addInitializer/topLevelPropertyVarSetterOnly.kt.after @@ -1,4 +1,3 @@ // "Add initializer" "true" var n: Int = 0 - set(value: Int) {} -/* IGNORE_FIR */ + set(value: Int) {} \ No newline at end of file