FIR IDE: Enable add initializer quickfix for MUST_BE_INITIALIZED.
This commit is contained in:
committed by
teamcityserver
parent
bb2246ebaf
commit
befa8aaac7
@@ -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.fir.api.fixes.KtQuickFixesListBuilder
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.diagnostics.KtFirDiagnostic
|
import org.jetbrains.kotlin.idea.frontend.api.fir.diagnostics.KtFirDiagnostic
|
||||||
import org.jetbrains.kotlin.idea.quickfix.fixes.*
|
import org.jetbrains.kotlin.idea.quickfix.fixes.*
|
||||||
import org.jetbrains.kotlin.idea.quickfix.fixes.InitializePropertyQuickFixFactory
|
|
||||||
|
|
||||||
class MainKtQuickFixRegistrar : KtQuickFixRegistrar() {
|
class MainKtQuickFixRegistrar : KtQuickFixRegistrar() {
|
||||||
private val keywords = KtQuickFixesListBuilder.registerPsiQuickFix {
|
private val keywords = KtQuickFixesListBuilder.registerPsiQuickFix {
|
||||||
@@ -74,7 +73,7 @@ class MainKtQuickFixRegistrar : KtQuickFixRegistrar() {
|
|||||||
KtFirDiagnostic.MustBeInitializedOrBeAbstract::class,
|
KtFirDiagnostic.MustBeInitializedOrBeAbstract::class,
|
||||||
AddModifierFix.addAbstractModifier,
|
AddModifierFix.addAbstractModifier,
|
||||||
)
|
)
|
||||||
registerApplicator(InitializePropertyQuickFixFactory.initializePropertyFactory)
|
registerApplicators(InitializePropertyQuickFixFactories.initializePropertyFactory)
|
||||||
registerApplicator(AddLateInitFactory.addLateInitFactory)
|
registerApplicator(AddLateInitFactory.addLateInitFactory)
|
||||||
registerApplicator(AddAccessorsFactories.addAccessorsToUninitializedProperty)
|
registerApplicator(AddAccessorsFactories.addAccessorsToUninitializedProperty)
|
||||||
}
|
}
|
||||||
|
|||||||
+10
-3
@@ -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.HLApplicatorInput
|
||||||
import org.jetbrains.kotlin.idea.api.applicator.applicator
|
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.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.idea.frontend.api.fir.diagnostics.KtFirDiagnostic
|
||||||
import org.jetbrains.kotlin.psi.KtClass
|
import org.jetbrains.kotlin.psi.KtClass
|
||||||
import org.jetbrains.kotlin.psi.KtProperty
|
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.endOffset
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
||||||
|
|
||||||
object InitializePropertyQuickFixFactory {
|
object InitializePropertyQuickFixFactories {
|
||||||
|
|
||||||
data class AddInitializerInput(val initializerText: String?) : HLApplicatorInput
|
data class AddInitializerInput(val initializerText: String?) : HLApplicatorInput
|
||||||
|
|
||||||
@@ -38,8 +38,15 @@ object InitializePropertyQuickFixFactory {
|
|||||||
|
|
||||||
@OptIn(ExperimentalStdlibApi::class)
|
@OptIn(ExperimentalStdlibApi::class)
|
||||||
val initializePropertyFactory =
|
val initializePropertyFactory =
|
||||||
diagnosticFixFactory(KtFirDiagnostic.MustBeInitializedOrBeAbstract::class) { diagnostic ->
|
diagnosticFixFactories(
|
||||||
|
KtFirDiagnostic.MustBeInitialized::class,
|
||||||
|
KtFirDiagnostic.MustBeInitializedOrBeAbstract::class
|
||||||
|
) { diagnostic ->
|
||||||
val property: KtProperty = diagnostic.psi
|
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 {
|
buildList {
|
||||||
add(
|
add(
|
||||||
HLQuickFix(
|
HLQuickFix(
|
||||||
@@ -3,4 +3,3 @@ class A {
|
|||||||
<caret>var n: Int
|
<caret>var n: Int
|
||||||
get() = 1
|
get() = 1
|
||||||
}
|
}
|
||||||
/* IGNORE_FIR */
|
|
||||||
|
|||||||
@@ -3,4 +3,3 @@ class A {
|
|||||||
var n: Int = <selection>0</selection><caret>
|
var n: Int = <selection>0</selection><caret>
|
||||||
get() = 1
|
get() = 1
|
||||||
}
|
}
|
||||||
/* IGNORE_FIR */
|
|
||||||
|
|||||||
@@ -3,4 +3,3 @@ class A {
|
|||||||
<caret>var n: Int
|
<caret>var n: Int
|
||||||
set(value: Int) {}
|
set(value: Int) {}
|
||||||
}
|
}
|
||||||
/* IGNORE_FIR */
|
|
||||||
|
|||||||
@@ -3,4 +3,3 @@ class A {
|
|||||||
var n: Int = <selection>0</selection><caret>
|
var n: Int = <selection>0</selection><caret>
|
||||||
set(value: Int) {}
|
set(value: Int) {}
|
||||||
}
|
}
|
||||||
/* IGNORE_FIR */
|
|
||||||
|
|||||||
@@ -1,3 +1,2 @@
|
|||||||
// "Add initializer" "true"
|
// "Add initializer" "true"
|
||||||
<caret>val n: Int
|
<caret>val n: Int
|
||||||
/* IGNORE_FIR */
|
|
||||||
|
|||||||
@@ -1,3 +1,2 @@
|
|||||||
// "Add initializer" "true"
|
// "Add initializer" "true"
|
||||||
val n: Int = <selection>0</selection><caret>
|
val n: Int = <selection>0</selection><caret>
|
||||||
/* IGNORE_FIR */
|
|
||||||
|
|||||||
@@ -2,4 +2,3 @@
|
|||||||
// WITH_RUNTIME
|
// WITH_RUNTIME
|
||||||
class A
|
class A
|
||||||
<caret>var label: A
|
<caret>var label: A
|
||||||
/* IGNORE_FIR */
|
|
||||||
|
|||||||
@@ -2,4 +2,3 @@
|
|||||||
// WITH_RUNTIME
|
// WITH_RUNTIME
|
||||||
class A
|
class A
|
||||||
var label: A = TODO()
|
var label: A = TODO()
|
||||||
/* IGNORE_FIR */
|
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// "Add initializer" "true"
|
// "Add initializer" "true"
|
||||||
<caret>var n: Int
|
<caret>var n: Int
|
||||||
get() = 1
|
get() = 1
|
||||||
/* IGNORE_FIR */
|
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// "Add initializer" "true"
|
// "Add initializer" "true"
|
||||||
var n: Int = <selection>0</selection><caret>
|
var n: Int = <selection>0</selection><caret>
|
||||||
get() = 1
|
get() = 1
|
||||||
/* IGNORE_FIR */
|
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// "Add initializer" "true"
|
// "Add initializer" "true"
|
||||||
<caret>var n: Int
|
<caret>var n: Int
|
||||||
set(value: Int) {}
|
set(value: Int) {}
|
||||||
/* IGNORE_FIR */
|
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// "Add initializer" "true"
|
// "Add initializer" "true"
|
||||||
var n: Int = <selection>0</selection><caret>
|
var n: Int = <selection>0</selection><caret>
|
||||||
set(value: Int) {}
|
set(value: Int) {}
|
||||||
/* IGNORE_FIR */
|
|
||||||
|
|||||||
Reference in New Issue
Block a user