diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeVisibilityFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeVisibilityFix.kt index 1d2a5f61657..577bb993956 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeVisibilityFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeVisibilityFix.kt @@ -27,12 +27,16 @@ import org.jetbrains.kotlin.idea.core.canBeInternal import org.jetbrains.kotlin.idea.core.canBePrivate import org.jetbrains.kotlin.idea.core.canBeProtected import org.jetbrains.kotlin.idea.core.setVisibility +import org.jetbrains.kotlin.idea.inspections.RemoveRedundantSetterFix +import org.jetbrains.kotlin.idea.inspections.isRedundantSetter import org.jetbrains.kotlin.idea.util.runOnExpectAndAllActuals import org.jetbrains.kotlin.lexer.KtModifierKeywordToken import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.KtDeclaration import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtModifierListOwner +import org.jetbrains.kotlin.psi.KtPropertyAccessor +import org.jetbrains.kotlin.psi.psiUtil.createSmartPointer import org.jetbrains.kotlin.resolve.ExposedVisibilityChecker open class ChangeVisibilityFix( @@ -45,12 +49,18 @@ open class ChangeVisibilityFix( override fun getFamilyName() = "Make $visibilityModifier" override fun invoke(project: Project, editor: Editor?, file: KtFile) { - val originalElement = element + val pointer = element?.createSmartPointer() + val originalElement = pointer?.element if (originalElement is KtDeclaration) { originalElement.runOnExpectAndAllActuals { it.setVisibility(visibilityModifier) } } - element?.setVisibility(visibilityModifier) + pointer?.element?.setVisibility(visibilityModifier) + + val propertyAccessor = pointer?.element as? KtPropertyAccessor + if (propertyAccessor?.isRedundantSetter() == true) { + RemoveRedundantSetterFix.removeRedundantSetter(propertyAccessor) + } } protected class ChangeToPublicFix(element: KtModifierListOwner, elementName: String) : diff --git a/idea/testData/quickfix/increaseVisibility/privateSetterToInternal.kt b/idea/testData/quickfix/increaseVisibility/privateSetterToInternal.kt new file mode 100644 index 00000000000..e93a3d5ee8c --- /dev/null +++ b/idea/testData/quickfix/increaseVisibility/privateSetterToInternal.kt @@ -0,0 +1,12 @@ +// "Make '' internal" "true" +// ACTION: "Make '' public" + +class Demo { + var attribute = "a" + private set +} + +fun main() { + val c = Demo() + c.attribute = "test" +} \ No newline at end of file diff --git a/idea/testData/quickfix/increaseVisibility/privateSetterToInternal.kt.after b/idea/testData/quickfix/increaseVisibility/privateSetterToInternal.kt.after new file mode 100644 index 00000000000..39e55df888f --- /dev/null +++ b/idea/testData/quickfix/increaseVisibility/privateSetterToInternal.kt.after @@ -0,0 +1,12 @@ +// "Make '' internal" "true" +// ACTION: "Make '' public" + +class Demo { + var attribute = "a" + internal set +} + +fun main() { + val c = Demo() + c.attribute = "test" +} \ No newline at end of file diff --git a/idea/testData/quickfix/increaseVisibility/privateSetterToPublic.kt b/idea/testData/quickfix/increaseVisibility/privateSetterToPublic.kt new file mode 100644 index 00000000000..54e4b8c401e --- /dev/null +++ b/idea/testData/quickfix/increaseVisibility/privateSetterToPublic.kt @@ -0,0 +1,12 @@ +// "Make '' public" "true" +// ACTION: "Make '' internal" + +class Demo { + var attribute = "a" + private set +} + +fun main() { + val c = Demo() + c.attribute = "test" +} \ No newline at end of file diff --git a/idea/testData/quickfix/increaseVisibility/privateSetterToPublic.kt.after b/idea/testData/quickfix/increaseVisibility/privateSetterToPublic.kt.after new file mode 100644 index 00000000000..cc18e8577b7 --- /dev/null +++ b/idea/testData/quickfix/increaseVisibility/privateSetterToPublic.kt.after @@ -0,0 +1,11 @@ +// "Make '' public" "true" +// ACTION: "Make '' internal" + +class Demo { + var attribute = "a" +} + +fun main() { + val c = Demo() + c.attribute = "test" +} \ 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 462197ed750..cb3d005851e 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -7790,6 +7790,16 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { runTest("idea/testData/quickfix/increaseVisibility/privateSealedClassInheritance.kt"); } + @TestMetadata("privateSetterToInternal.kt") + public void testPrivateSetterToInternal() throws Exception { + runTest("idea/testData/quickfix/increaseVisibility/privateSetterToInternal.kt"); + } + + @TestMetadata("privateSetterToPublic.kt") + public void testPrivateSetterToPublic() throws Exception { + runTest("idea/testData/quickfix/increaseVisibility/privateSetterToPublic.kt"); + } + @TestMetadata("protectedMemberToPublicSingleFile.kt") public void testProtectedMemberToPublicSingleFile() throws Exception { runTest("idea/testData/quickfix/increaseVisibility/protectedMemberToPublicSingleFile.kt");