diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeVariableMutabilityFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeVariableMutabilityFix.kt index 5aa7989dd9a..72c435d8249 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeVariableMutabilityFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeVariableMutabilityFix.kt @@ -128,5 +128,15 @@ class ChangeVariableMutabilityFix( return ChangeVariableMutabilityFix(property, makeVar = false, actionText = "Change to val") } } + + val MUST_BE_INITIALIZED_FACTORY = object : KotlinSingleIntentionActionFactory() { + override fun createAction(diagnostic: Diagnostic): IntentionAction? { + val property = Errors.MUST_BE_INITIALIZED.cast(diagnostic).psiElement as? KtProperty ?: return null + val getter = property.getter ?: return null + if (!getter.hasBody()) return null + if (getter.hasBlockBody() && property.typeReference == null) return null + return ChangeVariableMutabilityFix(property, makeVar = false) + } + } } } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixRegistrar.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixRegistrar.kt index 175220b30d4..2cf3e9ae468 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixRegistrar.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixRegistrar.kt @@ -639,5 +639,6 @@ class QuickFixRegistrar : QuickFixContributor { ACCIDENTAL_OVERRIDE.registerFactory(MakePrivateAndOverrideMemberFix.AccidentalOverrideFactory) + MUST_BE_INITIALIZED.registerFactory(ChangeVariableMutabilityFix.MUST_BE_INITIALIZED_FACTORY) } } diff --git a/idea/testData/quickfix/variables/changeMutability/canBeVal/uninitializedWithGetter.kt b/idea/testData/quickfix/variables/changeMutability/canBeVal/uninitializedWithGetter.kt new file mode 100644 index 00000000000..426211802f1 --- /dev/null +++ b/idea/testData/quickfix/variables/changeMutability/canBeVal/uninitializedWithGetter.kt @@ -0,0 +1,5 @@ +// "Change to val" "true" +class Test { + var foo + get() = 1 +} \ No newline at end of file diff --git a/idea/testData/quickfix/variables/changeMutability/canBeVal/uninitializedWithGetter.kt.after b/idea/testData/quickfix/variables/changeMutability/canBeVal/uninitializedWithGetter.kt.after new file mode 100644 index 00000000000..966528b0b06 --- /dev/null +++ b/idea/testData/quickfix/variables/changeMutability/canBeVal/uninitializedWithGetter.kt.after @@ -0,0 +1,5 @@ +// "Change to val" "true" +class Test { + val foo + get() = 1 +} \ No newline at end of file diff --git a/idea/testData/quickfix/variables/changeMutability/canBeVal/uninitializedWithGetter2.kt b/idea/testData/quickfix/variables/changeMutability/canBeVal/uninitializedWithGetter2.kt new file mode 100644 index 00000000000..d40cc9c975f --- /dev/null +++ b/idea/testData/quickfix/variables/changeMutability/canBeVal/uninitializedWithGetter2.kt @@ -0,0 +1,7 @@ +// "Change to val" "true" +class Test { + var foo: Int + get() { + return 1 + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/variables/changeMutability/canBeVal/uninitializedWithGetter2.kt.after b/idea/testData/quickfix/variables/changeMutability/canBeVal/uninitializedWithGetter2.kt.after new file mode 100644 index 00000000000..8bf73a5e5bf --- /dev/null +++ b/idea/testData/quickfix/variables/changeMutability/canBeVal/uninitializedWithGetter2.kt.after @@ -0,0 +1,7 @@ +// "Change to val" "true" +class Test { + val foo: Int + get() { + return 1 + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/variables/changeMutability/canBeVal/uninitializedWithGetter3.kt b/idea/testData/quickfix/variables/changeMutability/canBeVal/uninitializedWithGetter3.kt new file mode 100644 index 00000000000..92ef7eefdbb --- /dev/null +++ b/idea/testData/quickfix/variables/changeMutability/canBeVal/uninitializedWithGetter3.kt @@ -0,0 +1,14 @@ +// "Change to val" "false" +// ACTION: Add initializer +// ACTION: Convert member to extension +// ACTION: Initialize with constructor parameter +// ACTION: Introduce backing property +// ACTION: Move to companion object +// ACTION: Specify type explicitly +// ERROR: Property must be initialized +class Test { + var foo + get() { + return 1 + } +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java index d525e9eeb41..2f4794e4a62 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -14542,6 +14542,21 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { public void testSingleVariable() throws Exception { runTest("idea/testData/quickfix/variables/changeMutability/canBeVal/singleVariable.kt"); } + + @TestMetadata("uninitializedWithGetter.kt") + public void testUninitializedWithGetter() throws Exception { + runTest("idea/testData/quickfix/variables/changeMutability/canBeVal/uninitializedWithGetter.kt"); + } + + @TestMetadata("uninitializedWithGetter2.kt") + public void testUninitializedWithGetter2() throws Exception { + runTest("idea/testData/quickfix/variables/changeMutability/canBeVal/uninitializedWithGetter2.kt"); + } + + @TestMetadata("uninitializedWithGetter3.kt") + public void testUninitializedWithGetter3() throws Exception { + runTest("idea/testData/quickfix/variables/changeMutability/canBeVal/uninitializedWithGetter3.kt"); + } } }