ChangeVisibilityFix: remove redundant property setter

#KT-33796 Fixed
This commit is contained in:
Toshiaki Kameyama
2019-10-17 14:29:16 +09:00
committed by Dmitry Gridin
parent 48968c0fe2
commit 27eea882fb
6 changed files with 69 additions and 2 deletions
@@ -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) :
@@ -0,0 +1,12 @@
// "Make '<set-attribute>' internal" "true"
// ACTION: "Make '<set-attribute>' public"
class Demo {
var attribute = "a"
private set
}
fun main() {
val c = Demo()
<caret>c.attribute = "test"
}
@@ -0,0 +1,12 @@
// "Make '<set-attribute>' internal" "true"
// ACTION: "Make '<set-attribute>' public"
class Demo {
var attribute = "a"
internal set
}
fun main() {
val c = Demo()
c.attribute = "test"
}
@@ -0,0 +1,12 @@
// "Make '<set-attribute>' public" "true"
// ACTION: "Make '<set-attribute>' internal"
class Demo {
var attribute = "a"
private set
}
fun main() {
val c = Demo()
<caret>c.attribute = "test"
}
@@ -0,0 +1,11 @@
// "Make '<set-attribute>' public" "true"
// ACTION: "Make '<set-attribute>' internal"
class Demo {
var attribute = "a"
}
fun main() {
val c = Demo()
<caret>c.attribute = "test"
}
@@ -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");