FIR IDE: Enable add initializer quickfix for MUST_BE_INITIALIZED.

This commit is contained in:
Mark Punzalan
2021-06-05 06:47:48 +00:00
committed by teamcityserver
parent bb2246ebaf
commit befa8aaac7
14 changed files with 23 additions and 29 deletions
@@ -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)
}
@@ -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(
@@ -2,5 +2,4 @@
class A {
<caret>var n: Int
get() = 1
}
/* IGNORE_FIR */
}
@@ -2,5 +2,4 @@
class A {
var n: Int = <selection>0</selection><caret>
get() = 1
}
/* IGNORE_FIR */
}
@@ -2,5 +2,4 @@
class A {
<caret>var n: Int
set(value: Int) {}
}
/* IGNORE_FIR */
}
@@ -2,5 +2,4 @@
class A {
var n: Int = <selection>0</selection><caret>
set(value: Int) {}
}
/* IGNORE_FIR */
}
+1 -2
View File
@@ -1,3 +1,2 @@
// "Add initializer" "true"
<caret>val n: Int
/* IGNORE_FIR */
<caret>val n: Int
@@ -1,3 +1,2 @@
// "Add initializer" "true"
val n: Int = <selection>0</selection><caret>
/* IGNORE_FIR */
val n: Int = <selection>0</selection><caret>
@@ -1,5 +1,4 @@
// "Add initializer" "true"
// WITH_RUNTIME
class A
<caret>var label: A
/* IGNORE_FIR */
<caret>var label: A
@@ -1,5 +1,4 @@
// "Add initializer" "true"
// WITH_RUNTIME
class A
var label: A = TODO()
/* IGNORE_FIR */
var label: A = TODO()
@@ -1,4 +1,3 @@
// "Add initializer" "true"
<caret>var n: Int
get() = 1
/* IGNORE_FIR */
get() = 1
@@ -1,4 +1,3 @@
// "Add initializer" "true"
var n: Int = <selection>0</selection><caret>
get() = 1
/* IGNORE_FIR */
get() = 1
@@ -1,4 +1,3 @@
// "Add initializer" "true"
<caret>var n: Int
set(value: Int) {}
/* IGNORE_FIR */
set(value: Int) {}
@@ -1,4 +1,3 @@
// "Add initializer" "true"
var n: Int = <selection>0</selection><caret>
set(value: Int) {}
/* IGNORE_FIR */
set(value: Int) {}