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 d7e526c9e32..0de7874bb51 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 @@ -30,12 +30,20 @@ class MainKtQuickFixRegistrar : KtQuickFixRegistrar() { AddModifierFix.addAbstractToContainingClass, RemoveModifierFix.removeAbstractModifier ) - registerPsiQuickFixes( KtFirDiagnostic.NonFinalMemberInFinalClass::class, AddModifierFix.addOpenToContainingClass, RemoveModifierFix.removeOpenModifier ) + registerPsiQuickFixes( + KtFirDiagnostic.PrivateSetterForOpenProperty::class, + AddModifierFix.addFinalToProperty, + RemoveModifierFix.removePrivateModifier + ) + registerPsiQuickFixes( + KtFirDiagnostic.PrivateSetterForAbstractProperty::class, + RemoveModifierFix.removePrivateModifier + ) } private val overrides = KtQuickFixesListBuilder.registerPsiQuickFix { 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 61e5133f78c..18068e4a7cf 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 @@ -253,6 +253,11 @@ public class HighLevelQuickFixTestGenerated extends AbstractHighLevelQuickFixTes runTest("idea/testData/quickfix/modifiers/abstractModifierInEnum.kt"); } + @TestMetadata("abstractVarWithPrivateSetter.kt") + public void testAbstractVarWithPrivateSetter() throws Exception { + runTest("idea/testData/quickfix/modifiers/abstractVarWithPrivateSetter.kt"); + } + @TestMetadata("addLateinit.kt") public void testAddLateinit() throws Exception { runTest("idea/testData/quickfix/modifiers/addLateinit.kt"); @@ -397,9 +402,14 @@ public class HighLevelQuickFixTestGenerated extends AbstractHighLevelQuickFixTes runTest("idea/testData/quickfix/modifiers/openObject.kt"); } - @TestMetadata("openVarWithPrivateSetter.kt") - public void testOpenVarWithPrivateSetter() throws Exception { - runTest("idea/testData/quickfix/modifiers/openVarWithPrivateSetter.kt"); + @TestMetadata("openVarWithPrivateSetter1.kt") + public void testOpenVarWithPrivateSetter1() throws Exception { + runTest("idea/testData/quickfix/modifiers/openVarWithPrivateSetter1.kt"); + } + + @TestMetadata("openVarWithPrivateSetter2.kt") + public void testOpenVarWithPrivateSetter2() throws Exception { + runTest("idea/testData/quickfix/modifiers/openVarWithPrivateSetter2.kt"); } @TestMetadata("operatorModifier.kt") @@ -427,9 +437,14 @@ public class HighLevelQuickFixTestGenerated extends AbstractHighLevelQuickFixTes runTest("idea/testData/quickfix/modifiers/operatorModifierInherited.kt"); } - @TestMetadata("overrideWithPrivateSetter.kt") - public void testOverrideWithPrivateSetter() throws Exception { - runTest("idea/testData/quickfix/modifiers/overrideWithPrivateSetter.kt"); + @TestMetadata("overrideWithPrivateSetter1.kt") + public void testOverrideWithPrivateSetter1() throws Exception { + runTest("idea/testData/quickfix/modifiers/overrideWithPrivateSetter1.kt"); + } + + @TestMetadata("overrideWithPrivateSetter2.kt") + public void testOverrideWithPrivateSetter2() throws Exception { + runTest("idea/testData/quickfix/modifiers/overrideWithPrivateSetter2.kt"); } @TestMetadata("packageMemberCannotBeProtected.kt") diff --git a/idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/AddModifierFix.kt b/idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/AddModifierFix.kt index cc315ee518b..d46f01b7af3 100644 --- a/idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/AddModifierFix.kt +++ b/idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/AddModifierFix.kt @@ -111,6 +111,8 @@ open class AddModifierFix( AddModifierFix.createFactory(KtTokens.ABSTRACT_KEYWORD, KtClassOrObject::class.java) val addOpenToContainingClass: QuickFixesPsiBasedFactory = AddModifierFix.createFactory(KtTokens.OPEN_KEYWORD, KtClassOrObject::class.java) + val addFinalToProperty: QuickFixesPsiBasedFactory = + AddModifierFix.createFactory(KtTokens.FINAL_KEYWORD, KtProperty::class.java) private val modalityModifiers: Set = setOf(KtTokens.ABSTRACT_KEYWORD, KtTokens.OPEN_KEYWORD, KtTokens.FINAL_KEYWORD) diff --git a/idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/RemoveModifierFix.kt b/idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/RemoveModifierFix.kt index e0f7090d3ae..df6ec93a456 100644 --- a/idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/RemoveModifierFix.kt +++ b/idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/RemoveModifierFix.kt @@ -60,7 +60,8 @@ class RemoveModifierFix( modifier = KtTokens.OPEN_KEYWORD, isRedundant = true ) - val removeOpenModifier = createRemoveModifierFromListOwnerPsiBasedFactory(KtTokens.OPEN_KEYWORD) + val removeOpenModifier: QuickFixesPsiBasedFactory = createRemoveModifierFromListOwnerPsiBasedFactory(KtTokens.OPEN_KEYWORD) + val removePrivateModifier: QuickFixesPsiBasedFactory = createRemoveModifierFromListOwnerPsiBasedFactory(KtTokens.PRIVATE_KEYWORD) @Deprecated( "For binary compatibility", diff --git a/idea/testData/quickfix/modifiers/abstractVarWithPrivateSetter.kt b/idea/testData/quickfix/modifiers/abstractVarWithPrivateSetter.kt new file mode 100644 index 00000000000..4e245044c05 --- /dev/null +++ b/idea/testData/quickfix/modifiers/abstractVarWithPrivateSetter.kt @@ -0,0 +1,6 @@ +// "Remove 'private' modifier" "true" +abstract class My { + abstract var foo: Int + private set +} +/* FIR_COMPARISON */ diff --git a/idea/testData/quickfix/modifiers/abstractVarWithPrivateSetter.kt.after b/idea/testData/quickfix/modifiers/abstractVarWithPrivateSetter.kt.after new file mode 100644 index 00000000000..259c816a112 --- /dev/null +++ b/idea/testData/quickfix/modifiers/abstractVarWithPrivateSetter.kt.after @@ -0,0 +1,6 @@ +// "Remove 'private' modifier" "true" +abstract class My { + abstract var foo: Int + set +} +/* FIR_COMPARISON */ diff --git a/idea/testData/quickfix/modifiers/openVarWithPrivateSetter.kt b/idea/testData/quickfix/modifiers/openVarWithPrivateSetter1.kt similarity index 80% rename from idea/testData/quickfix/modifiers/openVarWithPrivateSetter.kt rename to idea/testData/quickfix/modifiers/openVarWithPrivateSetter1.kt index 9adbaedf9e2..99166a71575 100644 --- a/idea/testData/quickfix/modifiers/openVarWithPrivateSetter.kt +++ b/idea/testData/quickfix/modifiers/openVarWithPrivateSetter1.kt @@ -2,4 +2,5 @@ open class My { open var foo = 42 private set -} \ No newline at end of file +} +/* FIR_COMPARISON */ diff --git a/idea/testData/quickfix/modifiers/openVarWithPrivateSetter.kt.after b/idea/testData/quickfix/modifiers/openVarWithPrivateSetter1.kt.after similarity index 79% rename from idea/testData/quickfix/modifiers/openVarWithPrivateSetter.kt.after rename to idea/testData/quickfix/modifiers/openVarWithPrivateSetter1.kt.after index 12d5129966f..145fdf079e3 100644 --- a/idea/testData/quickfix/modifiers/openVarWithPrivateSetter.kt.after +++ b/idea/testData/quickfix/modifiers/openVarWithPrivateSetter1.kt.after @@ -2,4 +2,5 @@ open class My { var foo = 42 private set -} \ No newline at end of file +} +/* FIR_COMPARISON */ diff --git a/idea/testData/quickfix/modifiers/openVarWithPrivateSetter2.kt b/idea/testData/quickfix/modifiers/openVarWithPrivateSetter2.kt new file mode 100644 index 00000000000..ed42f792eba --- /dev/null +++ b/idea/testData/quickfix/modifiers/openVarWithPrivateSetter2.kt @@ -0,0 +1,6 @@ +// "Remove 'private' modifier" "true" +open class My { + open var foo = 42 + private set +} +/* FIR_COMPARISON */ diff --git a/idea/testData/quickfix/modifiers/openVarWithPrivateSetter2.kt.after b/idea/testData/quickfix/modifiers/openVarWithPrivateSetter2.kt.after new file mode 100644 index 00000000000..7bcf2ef5576 --- /dev/null +++ b/idea/testData/quickfix/modifiers/openVarWithPrivateSetter2.kt.after @@ -0,0 +1,6 @@ +// "Remove 'private' modifier" "true" +open class My { + open var foo = 42 + set +} +/* FIR_COMPARISON */ diff --git a/idea/testData/quickfix/modifiers/overrideWithPrivateSetter.kt b/idea/testData/quickfix/modifiers/overrideWithPrivateSetter1.kt similarity index 87% rename from idea/testData/quickfix/modifiers/overrideWithPrivateSetter.kt rename to idea/testData/quickfix/modifiers/overrideWithPrivateSetter1.kt index efbb1fb824a..323dfa80c4a 100644 --- a/idea/testData/quickfix/modifiers/overrideWithPrivateSetter.kt +++ b/idea/testData/quickfix/modifiers/overrideWithPrivateSetter1.kt @@ -6,4 +6,5 @@ interface Foo { open class FooImpl : Foo { override var bar: String = "" private set -} \ No newline at end of file +} +/* FIR_COMPARISON */ diff --git a/idea/testData/quickfix/modifiers/overrideWithPrivateSetter.kt.after b/idea/testData/quickfix/modifiers/overrideWithPrivateSetter1.kt.after similarity index 87% rename from idea/testData/quickfix/modifiers/overrideWithPrivateSetter.kt.after rename to idea/testData/quickfix/modifiers/overrideWithPrivateSetter1.kt.after index efec91bf5af..b219f0c6f73 100644 --- a/idea/testData/quickfix/modifiers/overrideWithPrivateSetter.kt.after +++ b/idea/testData/quickfix/modifiers/overrideWithPrivateSetter1.kt.after @@ -6,4 +6,5 @@ interface Foo { open class FooImpl : Foo { final override var bar: String = "" private set -} \ No newline at end of file +} +/* FIR_COMPARISON */ diff --git a/idea/testData/quickfix/modifiers/overrideWithPrivateSetter2.kt b/idea/testData/quickfix/modifiers/overrideWithPrivateSetter2.kt new file mode 100644 index 00000000000..41a206cc411 --- /dev/null +++ b/idea/testData/quickfix/modifiers/overrideWithPrivateSetter2.kt @@ -0,0 +1,10 @@ +// "Remove 'private' modifier" "true" +interface Foo { + val bar: String +} + +open class FooImpl : Foo { + override var bar: String = "" + private set +} +/* FIR_COMPARISON */ diff --git a/idea/testData/quickfix/modifiers/overrideWithPrivateSetter2.kt.after b/idea/testData/quickfix/modifiers/overrideWithPrivateSetter2.kt.after new file mode 100644 index 00000000000..91809d7d35d --- /dev/null +++ b/idea/testData/quickfix/modifiers/overrideWithPrivateSetter2.kt.after @@ -0,0 +1,10 @@ +// "Remove 'private' modifier" "true" +interface Foo { + val bar: String +} + +open class FooImpl : Foo { + override var bar: String = "" + set +} +/* FIR_COMPARISON */ diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java index 9716bf46318..7cfd0610865 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -9218,6 +9218,11 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { runTest("idea/testData/quickfix/modifiers/abstractModifierInEnum.kt"); } + @TestMetadata("abstractVarWithPrivateSetter.kt") + public void testAbstractVarWithPrivateSetter() throws Exception { + runTest("idea/testData/quickfix/modifiers/abstractVarWithPrivateSetter.kt"); + } + @TestMetadata("addLateinit.kt") public void testAddLateinit() throws Exception { runTest("idea/testData/quickfix/modifiers/addLateinit.kt"); @@ -9362,9 +9367,14 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { runTest("idea/testData/quickfix/modifiers/openObject.kt"); } - @TestMetadata("openVarWithPrivateSetter.kt") - public void testOpenVarWithPrivateSetter() throws Exception { - runTest("idea/testData/quickfix/modifiers/openVarWithPrivateSetter.kt"); + @TestMetadata("openVarWithPrivateSetter1.kt") + public void testOpenVarWithPrivateSetter1() throws Exception { + runTest("idea/testData/quickfix/modifiers/openVarWithPrivateSetter1.kt"); + } + + @TestMetadata("openVarWithPrivateSetter2.kt") + public void testOpenVarWithPrivateSetter2() throws Exception { + runTest("idea/testData/quickfix/modifiers/openVarWithPrivateSetter2.kt"); } @TestMetadata("operatorModifier.kt") @@ -9392,9 +9402,14 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { runTest("idea/testData/quickfix/modifiers/operatorModifierInherited.kt"); } - @TestMetadata("overrideWithPrivateSetter.kt") - public void testOverrideWithPrivateSetter() throws Exception { - runTest("idea/testData/quickfix/modifiers/overrideWithPrivateSetter.kt"); + @TestMetadata("overrideWithPrivateSetter1.kt") + public void testOverrideWithPrivateSetter1() throws Exception { + runTest("idea/testData/quickfix/modifiers/overrideWithPrivateSetter1.kt"); + } + + @TestMetadata("overrideWithPrivateSetter2.kt") + public void testOverrideWithPrivateSetter2() throws Exception { + runTest("idea/testData/quickfix/modifiers/overrideWithPrivateSetter2.kt"); } @TestMetadata("packageMemberCannotBeProtected.kt")