From d5ea68c585df9b4e2eb9d70dc96bfe307ac01d06 Mon Sep 17 00:00:00 2001 From: Tianyu Geng Date: Mon, 22 Mar 2021 17:42:11 -0700 Subject: [PATCH] FIR IDE: add quick fix to add initializer for MUST_BE_INITIALIZED_OR_BE_ABSTRACT --- .../kotlin/generators/tests/GenerateTests.kt | 1 + .../idea/quickfix/MainKtQuickFixRegistrar.kt | 2 + .../InitializePropertyQuickFixFactory.kt | 61 ++++++++++++ .../quickfix/AbstractHighLevelQuickFixTest.kt | 3 +- .../HighLevelQuickFixTestGenerated.java | 98 +++++++++++++++++++ .../idea/frontend/api/types/ktTypeUtils.kt | 35 ++++++- .../quickfix/addInitializer/localVar.kt | 2 +- .../addInitializer/memberExtensionProperty.kt | 5 +- .../memberExtensionPropertyVarGetterOnly.kt | 5 +- .../memberExtensionPropertyVarSetterOnly.kt | 3 +- .../memberPropertyVarGetterOnly.kt | 3 +- .../memberPropertyVarGetterOnly.kt.after | 3 +- .../memberPropertyVarSetterOnly.kt | 3 +- .../memberPropertyVarSetterOnly.kt.after | 3 +- .../memberPropertyWithAccessor.kt | 3 +- .../memberPropertyWithDelegateRuntime.kt | 3 +- .../topLevelExtensionProperty.kt | 3 +- .../topLevelExtensionPropertySetterOnly.kt | 3 +- .../addInitializer/topLevelProperty.kt | 3 +- .../addInitializer/topLevelProperty.kt.after | 3 +- .../topLevelPropertyVarClass.kt | 3 +- .../topLevelPropertyVarClass.kt.after | 3 +- .../topLevelPropertyVarGetterOnly.kt | 3 +- .../topLevelPropertyVarGetterOnly.kt.after | 3 +- .../topLevelPropertyVarSetterOnly.kt | 3 +- .../topLevelPropertyVarSetterOnly.kt.after | 3 +- .../topLevelPropertyWithDelegateRuntime.kt | 4 +- .../topLevelPropertyWithGetter.kt | 4 +- 28 files changed, 245 insertions(+), 26 deletions(-) create mode 100644 idea/idea-fir/src/org/jetbrains/kotlin/idea/quickfix/fixes/InitializePropertyQuickFixFactory.kt diff --git a/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt b/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt index b16c38425dd..b77751a416a 100644 --- a/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt +++ b/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt @@ -1133,6 +1133,7 @@ fun main(args: Array) { model("quickfix/override/typeMismatchOnOverride", pattern = pattern, filenameStartsLowerCase = true, recursive = false) model("quickfix/replaceWithSafeCall", pattern = pattern, filenameStartsLowerCase = true) model("quickfix/variables/changeMutability", pattern = pattern, filenameStartsLowerCase = true) + model("quickfix/addInitializer", pattern = pattern, filenameStartsLowerCase = true) } testClass { 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 fc18fc20897..9d2a7292767 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 @@ -10,6 +10,7 @@ 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.ChangeTypeQuickFix +import org.jetbrains.kotlin.idea.quickfix.fixes.InitializePropertyQuickFixFactory import org.jetbrains.kotlin.idea.quickfix.fixes.ReplaceCallFixFactories class MainKtQuickFixRegistrar : KtQuickFixRegistrar() { @@ -61,6 +62,7 @@ class MainKtQuickFixRegistrar : KtQuickFixRegistrar() { KtFirDiagnostic.MustBeInitializedOrBeAbstract::class, AddModifierFix.addAbstractModifier, ) + registerApplicator(InitializePropertyQuickFixFactory.initializePropertyFactory) } private val overrides = KtQuickFixesListBuilder.registerPsiQuickFix { 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/InitializePropertyQuickFixFactory.kt new file mode 100644 index 00000000000..0ae1086e721 --- /dev/null +++ b/idea/idea-fir/src/org/jetbrains/kotlin/idea/quickfix/fixes/InitializePropertyQuickFixFactory.kt @@ -0,0 +1,61 @@ +/* + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.idea.quickfix.fixes + +import com.intellij.psi.PsiDocumentManager +import org.jetbrains.kotlin.idea.KotlinBundle +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.frontend.api.fir.diagnostics.KtFirDiagnostic +import org.jetbrains.kotlin.idea.frontend.api.types.defaultInitializer +import org.jetbrains.kotlin.psi.KtClass +import org.jetbrains.kotlin.psi.KtProperty +import org.jetbrains.kotlin.psi.KtPsiFactory +import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject +import org.jetbrains.kotlin.psi.psiUtil.endOffset +import org.jetbrains.kotlin.psi.psiUtil.startOffset + +object InitializePropertyQuickFixFactory { + + data class AddInitializerInput(val initializerText: String?) : HLApplicatorInput + + private val addInitializerApplicator: HLApplicator = applicator { + familyAndActionName(KotlinBundle.lazyMessage("add.initializer")) + + applyToWithEditorRequired { property, input, project, editor -> + val initializer = property.setInitializer(KtPsiFactory(project).createExpression(input.initializerText ?: "TODO()"))!! + PsiDocumentManager.getInstance(project).commitDocument(editor.document) + editor.selectionModel.setSelection(initializer.startOffset, initializer.endOffset) + editor.caretModel.moveToOffset(initializer.endOffset) + } + } + + + @OptIn(ExperimentalStdlibApi::class) + val initializePropertyFactory = + diagnosticFixFactory { diagnostic -> + val property: KtProperty = diagnostic.psi + buildList { + add( + HLQuickFix( + property, + AddInitializerInput(property.getReturnKtType().defaultInitializer), + addInitializerApplicator + ) + ) + + (property.containingClassOrObject as? KtClass)?.let { ktClass -> + if (ktClass.isAnnotation() || ktClass.isInterface()) return@let + + // TODO: Add quickfixes MoveToConstructorParameters and InitializeWithConstructorParameter after change signature + // refactoring is available. See org.jetbrains.kotlin.idea.quickfix.InitializePropertyQuickFixFactory + } + } + } +} diff --git a/idea/idea-fir/tests/org/jetbrains/kotlin/idea/quickfix/AbstractHighLevelQuickFixTest.kt b/idea/idea-fir/tests/org/jetbrains/kotlin/idea/quickfix/AbstractHighLevelQuickFixTest.kt index 2fdd4f3b558..509bf02687a 100644 --- a/idea/idea-fir/tests/org/jetbrains/kotlin/idea/quickfix/AbstractHighLevelQuickFixTest.kt +++ b/idea/idea-fir/tests/org/jetbrains/kotlin/idea/quickfix/AbstractHighLevelQuickFixTest.kt @@ -7,7 +7,6 @@ package org.jetbrains.kotlin.idea.quickfix import com.intellij.codeInsight.intention.IntentionAction import com.intellij.codeInspection.InspectionProfileEntry -import com.intellij.openapi.util.io.FileUtil import org.jetbrains.kotlin.test.uitls.IgnoreTests import java.io.File import java.nio.file.Paths @@ -40,4 +39,4 @@ abstract class AbstractHighLevelQuickFixTest : AbstractQuickFixTest() { override fun parseInspectionsToEnable(beforeFileName: String, beforeFileText: String): List { return emptyList() } -} \ No newline at end of file +} diff --git a/idea/idea-fir/tests/org/jetbrains/kotlin/idea/quickfix/HighLevelQuickFixTestGenerated.java b/idea/idea-fir/tests/org/jetbrains/kotlin/idea/quickfix/HighLevelQuickFixTestGenerated.java index 2c59755eaef..28deae162b5 100644 --- a/idea/idea-fir/tests/org/jetbrains/kotlin/idea/quickfix/HighLevelQuickFixTestGenerated.java +++ b/idea/idea-fir/tests/org/jetbrains/kotlin/idea/quickfix/HighLevelQuickFixTestGenerated.java @@ -1132,4 +1132,102 @@ public class HighLevelQuickFixTestGenerated extends AbstractHighLevelQuickFixTes } } } + + @TestMetadata("idea/testData/quickfix/addInitializer") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class AddInitializer extends AbstractHighLevelQuickFixTest { + private void runTest(String testDataFilePath) throws Exception { + KotlinTestUtils.runTest(this::doTest, this, testDataFilePath); + } + + public void testAllFilesPresentInAddInitializer() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("idea/testData/quickfix/addInitializer"), Pattern.compile("^([\\w\\-_]+)\\.kt$"), null, true); + } + + @TestMetadata("localVar.kt") + public void testLocalVar() throws Exception { + runTest("idea/testData/quickfix/addInitializer/localVar.kt"); + } + + @TestMetadata("memberExtensionProperty.kt") + public void testMemberExtensionProperty() throws Exception { + runTest("idea/testData/quickfix/addInitializer/memberExtensionProperty.kt"); + } + + @TestMetadata("memberExtensionPropertyVarGetterOnly.kt") + public void testMemberExtensionPropertyVarGetterOnly() throws Exception { + runTest("idea/testData/quickfix/addInitializer/memberExtensionPropertyVarGetterOnly.kt"); + } + + @TestMetadata("memberExtensionPropertyVarSetterOnly.kt") + public void testMemberExtensionPropertyVarSetterOnly() throws Exception { + runTest("idea/testData/quickfix/addInitializer/memberExtensionPropertyVarSetterOnly.kt"); + } + + @TestMetadata("memberProperty.kt") + public void testMemberProperty() throws Exception { + runTest("idea/testData/quickfix/addInitializer/memberProperty.kt"); + } + + @TestMetadata("memberPropertyVarGetterOnly.kt") + public void testMemberPropertyVarGetterOnly() throws Exception { + runTest("idea/testData/quickfix/addInitializer/memberPropertyVarGetterOnly.kt"); + } + + @TestMetadata("memberPropertyVarSetterOnly.kt") + public void testMemberPropertyVarSetterOnly() throws Exception { + runTest("idea/testData/quickfix/addInitializer/memberPropertyVarSetterOnly.kt"); + } + + @TestMetadata("memberPropertyWithAccessor.kt") + public void testMemberPropertyWithAccessor() throws Exception { + runTest("idea/testData/quickfix/addInitializer/memberPropertyWithAccessor.kt"); + } + + @TestMetadata("memberPropertyWithDelegateRuntime.kt") + public void testMemberPropertyWithDelegateRuntime() throws Exception { + runTest("idea/testData/quickfix/addInitializer/memberPropertyWithDelegateRuntime.kt"); + } + + @TestMetadata("topLevelExtensionProperty.kt") + public void testTopLevelExtensionProperty() throws Exception { + runTest("idea/testData/quickfix/addInitializer/topLevelExtensionProperty.kt"); + } + + @TestMetadata("topLevelExtensionPropertySetterOnly.kt") + public void testTopLevelExtensionPropertySetterOnly() throws Exception { + runTest("idea/testData/quickfix/addInitializer/topLevelExtensionPropertySetterOnly.kt"); + } + + @TestMetadata("topLevelProperty.kt") + public void testTopLevelProperty() throws Exception { + runTest("idea/testData/quickfix/addInitializer/topLevelProperty.kt"); + } + + @TestMetadata("topLevelPropertyVarClass.kt") + public void testTopLevelPropertyVarClass() throws Exception { + runTest("idea/testData/quickfix/addInitializer/topLevelPropertyVarClass.kt"); + } + + @TestMetadata("topLevelPropertyVarGetterOnly.kt") + public void testTopLevelPropertyVarGetterOnly() throws Exception { + runTest("idea/testData/quickfix/addInitializer/topLevelPropertyVarGetterOnly.kt"); + } + + @TestMetadata("topLevelPropertyVarSetterOnly.kt") + public void testTopLevelPropertyVarSetterOnly() throws Exception { + runTest("idea/testData/quickfix/addInitializer/topLevelPropertyVarSetterOnly.kt"); + } + + @TestMetadata("topLevelPropertyWithDelegateRuntime.kt") + public void testTopLevelPropertyWithDelegateRuntime() throws Exception { + runTest("idea/testData/quickfix/addInitializer/topLevelPropertyWithDelegateRuntime.kt"); + } + + @TestMetadata("topLevelPropertyWithGetter.kt") + public void testTopLevelPropertyWithGetter() throws Exception { + runTest("idea/testData/quickfix/addInitializer/topLevelPropertyWithGetter.kt"); + } + } } diff --git a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/types/ktTypeUtils.kt b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/types/ktTypeUtils.kt index 6a93477f552..9177daadd41 100644 --- a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/types/ktTypeUtils.kt +++ b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/types/ktTypeUtils.kt @@ -5,11 +5,22 @@ package org.jetbrains.kotlin.idea.frontend.api.types -import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.builtins.StandardNames import org.jetbrains.kotlin.name.ClassId +val KtType.isMarkedNullable: Boolean get() = (this as? KtTypeWithNullability)?.nullability == KtTypeNullability.NULLABLE + val KtType.isUnit: Boolean get() = isClassTypeWithClassId(DefaultTypeClassIds.UNIT) +val KtType.isInt: Boolean get() = isClassTypeWithClassId(DefaultTypeClassIds.INT) +val KtType.isLong: Boolean get() = isClassTypeWithClassId(DefaultTypeClassIds.LONG) +val KtType.isShort: Boolean get() = isClassTypeWithClassId(DefaultTypeClassIds.SHORT) +val KtType.isByte: Boolean get() = isClassTypeWithClassId(DefaultTypeClassIds.BYTE) +val KtType.isFloat: Boolean get() = isClassTypeWithClassId(DefaultTypeClassIds.FLOAT) +val KtType.isDouble: Boolean get() = isClassTypeWithClassId(DefaultTypeClassIds.DOUBLE) +val KtType.isChar: Boolean get() = isClassTypeWithClassId(DefaultTypeClassIds.CHAR) +val KtType.isBoolean: Boolean get() = isClassTypeWithClassId(DefaultTypeClassIds.BOOLEAN) +val KtType.isString: Boolean get() = isClassTypeWithClassId(DefaultTypeClassIds.STRING) + fun KtType.isClassTypeWithClassId(classId: ClassId): Boolean { if (this !is KtClassType) return false @@ -18,4 +29,26 @@ fun KtType.isClassTypeWithClassId(classId: ClassId): Boolean { private object DefaultTypeClassIds { val UNIT = ClassId.topLevel(StandardNames.FqNames.unit.toSafe()) + val INT = ClassId.topLevel(StandardNames.FqNames._int.toSafe()) + val LONG = ClassId.topLevel(StandardNames.FqNames._long.toSafe()) + val SHORT = ClassId.topLevel(StandardNames.FqNames._short.toSafe()) + val BYTE = ClassId.topLevel(StandardNames.FqNames._byte.toSafe()) + val FLOAT = ClassId.topLevel(StandardNames.FqNames._float.toSafe()) + val DOUBLE = ClassId.topLevel(StandardNames.FqNames._double.toSafe()) + val CHAR = ClassId.topLevel(StandardNames.FqNames._char.toSafe()) + val BOOLEAN = ClassId.topLevel(StandardNames.FqNames._boolean.toSafe()) + val STRING = ClassId.topLevel(StandardNames.FqNames.string.toSafe()) } + +val KtType.defaultInitializer: String? + get() = when { + isMarkedNullable -> "null" + isInt || isLong || isShort || isByte -> "0" + isFloat -> "0.0f" + isDouble -> "0.0" + isChar -> "'\\u0000'" + isBoolean -> "false" + isUnit -> "Unit" + isString -> "\"\"" + else -> null + } diff --git a/idea/testData/quickfix/addInitializer/localVar.kt b/idea/testData/quickfix/addInitializer/localVar.kt index 05402c0adfc..69a52a04807 100644 --- a/idea/testData/quickfix/addInitializer/localVar.kt +++ b/idea/testData/quickfix/addInitializer/localVar.kt @@ -1,4 +1,4 @@ -// "class org.jetbrains.kotlin.idea.quickfix.InitializePropertyQuickFixFactory$AddInitializerFix" "false" +// "Add initializer" "false" fun test() { val n: Int } \ No newline at end of file diff --git a/idea/testData/quickfix/addInitializer/memberExtensionProperty.kt b/idea/testData/quickfix/addInitializer/memberExtensionProperty.kt index d50fc235d26..d2d3ee55bc2 100644 --- a/idea/testData/quickfix/addInitializer/memberExtensionProperty.kt +++ b/idea/testData/quickfix/addInitializer/memberExtensionProperty.kt @@ -1,8 +1,9 @@ -// "class org.jetbrains.kotlin.idea.quickfix.InitializePropertyQuickFixFactory$AddInitializerFix" "false" +// "Add initializer" "false" +// ACTION: Add getter // ACTION: Make internal // ACTION: Make private // ACTION: Make protected -// ACTION: Make 'n' abstract +// ACTION: Move to constructor // ERROR: Extension property must have accessors or be abstract class A { val Int.n: Int diff --git a/idea/testData/quickfix/addInitializer/memberExtensionPropertyVarGetterOnly.kt b/idea/testData/quickfix/addInitializer/memberExtensionPropertyVarGetterOnly.kt index ed5212e32de..73015a2fa23 100644 --- a/idea/testData/quickfix/addInitializer/memberExtensionPropertyVarGetterOnly.kt +++ b/idea/testData/quickfix/addInitializer/memberExtensionPropertyVarGetterOnly.kt @@ -1,7 +1,10 @@ -// "class org.jetbrains.kotlin.idea.quickfix.InitializePropertyQuickFixFactory$AddInitializerFix" "false" +// "Add initializer" "false" +// ACTION: Add setter +// ACTION: Change to val // ACTION: Make internal // ACTION: Make private // ACTION: Make protected +// ACTION: Remove explicit type specification // ERROR: Property must be initialized class A { var Int.n: Int diff --git a/idea/testData/quickfix/addInitializer/memberExtensionPropertyVarSetterOnly.kt b/idea/testData/quickfix/addInitializer/memberExtensionPropertyVarSetterOnly.kt index 8cf25de2c87..e37279fbb19 100644 --- a/idea/testData/quickfix/addInitializer/memberExtensionPropertyVarSetterOnly.kt +++ b/idea/testData/quickfix/addInitializer/memberExtensionPropertyVarSetterOnly.kt @@ -1,4 +1,5 @@ -// "class org.jetbrains.kotlin.idea.quickfix.InitializePropertyQuickFixFactory$AddInitializerFix" "false" +// "Add initializer" "false" +// ACTION: Add getter // ACTION: Make internal // ACTION: Make private // ACTION: Make protected diff --git a/idea/testData/quickfix/addInitializer/memberPropertyVarGetterOnly.kt b/idea/testData/quickfix/addInitializer/memberPropertyVarGetterOnly.kt index 8c8d81eb23d..04b2238b7c6 100644 --- a/idea/testData/quickfix/addInitializer/memberPropertyVarGetterOnly.kt +++ b/idea/testData/quickfix/addInitializer/memberPropertyVarGetterOnly.kt @@ -2,4 +2,5 @@ class A { var n: Int get() = 1 -} \ No newline at end of file +} +/* IGNORE_FIR */ diff --git a/idea/testData/quickfix/addInitializer/memberPropertyVarGetterOnly.kt.after b/idea/testData/quickfix/addInitializer/memberPropertyVarGetterOnly.kt.after index e58b884a71a..f67c5696cdb 100644 --- a/idea/testData/quickfix/addInitializer/memberPropertyVarGetterOnly.kt.after +++ b/idea/testData/quickfix/addInitializer/memberPropertyVarGetterOnly.kt.after @@ -2,4 +2,5 @@ class A { var n: Int = 0 get() = 1 -} \ No newline at end of file +} +/* IGNORE_FIR */ diff --git a/idea/testData/quickfix/addInitializer/memberPropertyVarSetterOnly.kt b/idea/testData/quickfix/addInitializer/memberPropertyVarSetterOnly.kt index 988b1dc0944..59218ee337e 100644 --- a/idea/testData/quickfix/addInitializer/memberPropertyVarSetterOnly.kt +++ b/idea/testData/quickfix/addInitializer/memberPropertyVarSetterOnly.kt @@ -2,4 +2,5 @@ class A { var n: Int set(value: Int) {} -} \ No newline at end of file +} +/* IGNORE_FIR */ diff --git a/idea/testData/quickfix/addInitializer/memberPropertyVarSetterOnly.kt.after b/idea/testData/quickfix/addInitializer/memberPropertyVarSetterOnly.kt.after index 670dcf65b77..648d238cc00 100644 --- a/idea/testData/quickfix/addInitializer/memberPropertyVarSetterOnly.kt.after +++ b/idea/testData/quickfix/addInitializer/memberPropertyVarSetterOnly.kt.after @@ -2,4 +2,5 @@ class A { var n: Int = 0 set(value: Int) {} -} \ No newline at end of file +} +/* IGNORE_FIR */ diff --git a/idea/testData/quickfix/addInitializer/memberPropertyWithAccessor.kt b/idea/testData/quickfix/addInitializer/memberPropertyWithAccessor.kt index 23b3839b6db..a89a3d3c96d 100644 --- a/idea/testData/quickfix/addInitializer/memberPropertyWithAccessor.kt +++ b/idea/testData/quickfix/addInitializer/memberPropertyWithAccessor.kt @@ -1,7 +1,8 @@ -// "class org.jetbrains.kotlin.idea.quickfix.InitializePropertyQuickFixFactory$AddInitializerFix" "false" +// "Add initializer" "false" // ACTION: Make internal // ACTION: Make private // ACTION: Make protected +// ACTION: Remove explicit type specification class A { val n: Int get() = 1 diff --git a/idea/testData/quickfix/addInitializer/memberPropertyWithDelegateRuntime.kt b/idea/testData/quickfix/addInitializer/memberPropertyWithDelegateRuntime.kt index 2673b5331b9..2292e01f523 100644 --- a/idea/testData/quickfix/addInitializer/memberPropertyWithDelegateRuntime.kt +++ b/idea/testData/quickfix/addInitializer/memberPropertyWithDelegateRuntime.kt @@ -1,4 +1,5 @@ -// "class org.jetbrains.kotlin.idea.quickfix.InitializePropertyQuickFixFactory$AddInitializerFix" "false" +// "Add initializer" "false" +// ACTION: Convert to ordinary property // ACTION: Make internal // ACTION: Make private // ACTION: Make protected diff --git a/idea/testData/quickfix/addInitializer/topLevelExtensionProperty.kt b/idea/testData/quickfix/addInitializer/topLevelExtensionProperty.kt index 42dbf07521d..6888379feb9 100644 --- a/idea/testData/quickfix/addInitializer/topLevelExtensionProperty.kt +++ b/idea/testData/quickfix/addInitializer/topLevelExtensionProperty.kt @@ -1,4 +1,5 @@ -// "class org.jetbrains.kotlin.idea.quickfix.InitializePropertyQuickFixFactory$AddInitializerFix" "false" +// "Add initializer" "false" +// ACTION: Add getter // ACTION: Make internal // ACTION: Make private // ERROR: Extension property must have accessors or be abstract diff --git a/idea/testData/quickfix/addInitializer/topLevelExtensionPropertySetterOnly.kt b/idea/testData/quickfix/addInitializer/topLevelExtensionPropertySetterOnly.kt index 42dbf07521d..6888379feb9 100644 --- a/idea/testData/quickfix/addInitializer/topLevelExtensionPropertySetterOnly.kt +++ b/idea/testData/quickfix/addInitializer/topLevelExtensionPropertySetterOnly.kt @@ -1,4 +1,5 @@ -// "class org.jetbrains.kotlin.idea.quickfix.InitializePropertyQuickFixFactory$AddInitializerFix" "false" +// "Add initializer" "false" +// ACTION: Add getter // ACTION: Make internal // ACTION: Make private // ERROR: Extension property must have accessors or be abstract diff --git a/idea/testData/quickfix/addInitializer/topLevelProperty.kt b/idea/testData/quickfix/addInitializer/topLevelProperty.kt index c4d322060d7..fa65f859545 100644 --- a/idea/testData/quickfix/addInitializer/topLevelProperty.kt +++ b/idea/testData/quickfix/addInitializer/topLevelProperty.kt @@ -1,2 +1,3 @@ // "Add initializer" "true" -val n: Int \ No newline at end of file +val n: Int +/* IGNORE_FIR */ diff --git a/idea/testData/quickfix/addInitializer/topLevelProperty.kt.after b/idea/testData/quickfix/addInitializer/topLevelProperty.kt.after index 3065ca025bb..dac3e18ca93 100644 --- a/idea/testData/quickfix/addInitializer/topLevelProperty.kt.after +++ b/idea/testData/quickfix/addInitializer/topLevelProperty.kt.after @@ -1,2 +1,3 @@ // "Add initializer" "true" -val n: Int = 0 \ No newline at end of file +val n: Int = 0 +/* IGNORE_FIR */ diff --git a/idea/testData/quickfix/addInitializer/topLevelPropertyVarClass.kt b/idea/testData/quickfix/addInitializer/topLevelPropertyVarClass.kt index 14d2ec3b8b7..ca1f0dea62c 100644 --- a/idea/testData/quickfix/addInitializer/topLevelPropertyVarClass.kt +++ b/idea/testData/quickfix/addInitializer/topLevelPropertyVarClass.kt @@ -1,4 +1,5 @@ // "Add initializer" "true" // WITH_RUNTIME class A -var label: A \ No newline at end of file +var label: A +/* IGNORE_FIR */ diff --git a/idea/testData/quickfix/addInitializer/topLevelPropertyVarClass.kt.after b/idea/testData/quickfix/addInitializer/topLevelPropertyVarClass.kt.after index 7aeb99df392..49e24675631 100644 --- a/idea/testData/quickfix/addInitializer/topLevelPropertyVarClass.kt.after +++ b/idea/testData/quickfix/addInitializer/topLevelPropertyVarClass.kt.after @@ -1,4 +1,5 @@ // "Add initializer" "true" // WITH_RUNTIME class A -var label: A = TODO() \ No newline at end of file +var label: A = TODO() +/* IGNORE_FIR */ diff --git a/idea/testData/quickfix/addInitializer/topLevelPropertyVarGetterOnly.kt b/idea/testData/quickfix/addInitializer/topLevelPropertyVarGetterOnly.kt index 8b47850fbbd..5a96ec51248 100644 --- a/idea/testData/quickfix/addInitializer/topLevelPropertyVarGetterOnly.kt +++ b/idea/testData/quickfix/addInitializer/topLevelPropertyVarGetterOnly.kt @@ -1,3 +1,4 @@ // "Add initializer" "true" var n: Int - get() = 1 \ No newline at end of file + get() = 1 +/* IGNORE_FIR */ diff --git a/idea/testData/quickfix/addInitializer/topLevelPropertyVarGetterOnly.kt.after b/idea/testData/quickfix/addInitializer/topLevelPropertyVarGetterOnly.kt.after index d41f718aac2..87daab0b779 100644 --- a/idea/testData/quickfix/addInitializer/topLevelPropertyVarGetterOnly.kt.after +++ b/idea/testData/quickfix/addInitializer/topLevelPropertyVarGetterOnly.kt.after @@ -1,3 +1,4 @@ // "Add initializer" "true" var n: Int = 0 - get() = 1 \ No newline at end of file + get() = 1 +/* IGNORE_FIR */ diff --git a/idea/testData/quickfix/addInitializer/topLevelPropertyVarSetterOnly.kt b/idea/testData/quickfix/addInitializer/topLevelPropertyVarSetterOnly.kt index edddd4971d7..2b6631dc983 100644 --- a/idea/testData/quickfix/addInitializer/topLevelPropertyVarSetterOnly.kt +++ b/idea/testData/quickfix/addInitializer/topLevelPropertyVarSetterOnly.kt @@ -1,3 +1,4 @@ // "Add initializer" "true" var n: Int - set(value: Int) {} \ No newline at end of file + set(value: Int) {} +/* IGNORE_FIR */ diff --git a/idea/testData/quickfix/addInitializer/topLevelPropertyVarSetterOnly.kt.after b/idea/testData/quickfix/addInitializer/topLevelPropertyVarSetterOnly.kt.after index 394c3c525a1..0bdf520f9c8 100644 --- a/idea/testData/quickfix/addInitializer/topLevelPropertyVarSetterOnly.kt.after +++ b/idea/testData/quickfix/addInitializer/topLevelPropertyVarSetterOnly.kt.after @@ -1,3 +1,4 @@ // "Add initializer" "true" var n: Int = 0 - set(value: Int) {} \ No newline at end of file + set(value: Int) {} +/* IGNORE_FIR */ diff --git a/idea/testData/quickfix/addInitializer/topLevelPropertyWithDelegateRuntime.kt b/idea/testData/quickfix/addInitializer/topLevelPropertyWithDelegateRuntime.kt index 912b0d09b14..0645052379b 100644 --- a/idea/testData/quickfix/addInitializer/topLevelPropertyWithDelegateRuntime.kt +++ b/idea/testData/quickfix/addInitializer/topLevelPropertyWithDelegateRuntime.kt @@ -1,5 +1,7 @@ -// "class org.jetbrains.kotlin.idea.quickfix.InitializePropertyQuickFixFactory$AddInitializerFix" "false" +// "Add initializer" "false" // WITH_RUNTIME +// ACTION: Convert to ordinary property +// ACTION: Create test // ACTION: Make internal // ACTION: Make private val n: Int by lazy { 0 } \ No newline at end of file diff --git a/idea/testData/quickfix/addInitializer/topLevelPropertyWithGetter.kt b/idea/testData/quickfix/addInitializer/topLevelPropertyWithGetter.kt index aebe0e1c584..f65e301f474 100644 --- a/idea/testData/quickfix/addInitializer/topLevelPropertyWithGetter.kt +++ b/idea/testData/quickfix/addInitializer/topLevelPropertyWithGetter.kt @@ -1,5 +1,7 @@ -// "class org.jetbrains.kotlin.idea.quickfix.InitializePropertyQuickFixFactory$AddInitializerFix" "false" +// "Add initializer" "false" +// ACTION: Create test // ACTION: Make internal // ACTION: Make private +// ACTION: Remove explicit type specification val n: Int get() = 1 \ No newline at end of file