Convert member to extension: preserve visibility

#KT-29248 Fixed
This commit is contained in:
Toshiaki Kameyama
2019-02-02 22:22:57 +09:00
committed by Mikhail Glukhikh
parent e8a8bc89c9
commit 9c468ef2aa
8 changed files with 42 additions and 1 deletions
@@ -267,7 +267,12 @@ class ConvertMemberToExtensionIntention : SelfTargetingRangeIntention<KtCallable
}
}
return processSingleDeclaration(element, allowExpected)
val classVisibility = element.containingClass()?.visibilityModifierType()
val (extension, bodyToSelect) = processSingleDeclaration(element, allowExpected)
if (classVisibility != null && extension.visibilityModifier() == null) {
extension.addModifier(classVisibility)
}
return extension to bodyToSelect
}
private fun newTypeParameterList(member: KtCallableDeclaration): KtTypeParameterList? {
@@ -0,0 +1,3 @@
internal class Foo {
private fun <caret>bar() {}
}
@@ -0,0 +1,4 @@
internal class Foo {
}
private fun Foo.bar() {}
@@ -0,0 +1,3 @@
internal class Foo {
fun <caret>bar() {}
}
@@ -0,0 +1,4 @@
internal class Foo {
}
internal fun Foo.bar() {}
@@ -0,0 +1,3 @@
private class Foo {
fun <caret>bar() {}
}
@@ -0,0 +1,4 @@
private class Foo {
}
private fun Foo.bar() {}
@@ -8703,6 +8703,11 @@ public class IntentionTestGenerated extends AbstractIntentionTest {
runTest("idea/testData/intentions/declarations/convertMemberToExtension/private.kt");
}
@TestMetadata("privateInInternalClass.kt")
public void testPrivateInInternalClass() throws Exception {
runTest("idea/testData/intentions/declarations/convertMemberToExtension/privateInInternalClass.kt");
}
@TestMetadata("protected.kt")
public void testProtected() throws Exception {
runTest("idea/testData/intentions/declarations/convertMemberToExtension/protected.kt");
@@ -8713,6 +8718,16 @@ public class IntentionTestGenerated extends AbstractIntentionTest {
runTest("idea/testData/intentions/declarations/convertMemberToExtension/public.kt");
}
@TestMetadata("publicInInternalClass.kt")
public void testPublicInInternalClass() throws Exception {
runTest("idea/testData/intentions/declarations/convertMemberToExtension/publicInInternalClass.kt");
}
@TestMetadata("publicInPrivateClass.kt")
public void testPublicInPrivateClass() throws Exception {
runTest("idea/testData/intentions/declarations/convertMemberToExtension/publicInPrivateClass.kt");
}
@TestMetadata("secondaryConstructor.kt")
public void testSecondaryConstructor() throws Exception {
runTest("idea/testData/intentions/declarations/convertMemberToExtension/secondaryConstructor.kt");