From b0c808082fed041f90e806595e5fa22746c8e86b Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Thu, 28 Jan 2016 17:28:46 +0300 Subject: [PATCH] Pull Members Up: Skip visibility checking between members to move --- .../idea/refactoring/pullUp/pullUpConflictsUtils.kt | 1 + .../refactoring/pullUp/k2k/inaccessibleMemberUsed.kt | 2 +- .../pullUp/k2k/noVisibilityCheckBetweenMovedMembers.kt | 8 ++++++++ .../k2k/noVisibilityCheckBetweenMovedMembers.kt.after | 10 ++++++++++ .../idea/refactoring/pullUp/PullUpTestGenerated.java | 6 ++++++ 5 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 idea/testData/refactoring/pullUp/k2k/noVisibilityCheckBetweenMovedMembers.kt create mode 100644 idea/testData/refactoring/pullUp/k2k/noVisibilityCheckBetweenMovedMembers.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/pullUp/pullUpConflictsUtils.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/pullUp/pullUpConflictsUtils.kt index 7bbd746b436..dddaf0917ac 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/pullUp/pullUpConflictsUtils.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/pullUp/pullUpConflictsUtils.kt @@ -147,6 +147,7 @@ private fun KotlinPullUpData.checkVisibility( conflicts: MultiMap ) { fun reportConflictIfAny(targetDescriptor: DeclarationDescriptor) { + if (targetDescriptor in memberDescriptors.values) return val target = (targetDescriptor as? DeclarationDescriptorWithSource)?.source?.getPsi() ?: return if (targetDescriptor is DeclarationDescriptorWithVisibility && !Visibilities.isVisibleWithIrrelevantReceiver(targetDescriptor, targetClassDescriptor)) { diff --git a/idea/testData/refactoring/pullUp/k2k/inaccessibleMemberUsed.kt b/idea/testData/refactoring/pullUp/k2k/inaccessibleMemberUsed.kt index df213eb3641..961daf2765c 100644 --- a/idea/testData/refactoring/pullUp/k2k/inaccessibleMemberUsed.kt +++ b/idea/testData/refactoring/pullUp/k2k/inaccessibleMemberUsed.kt @@ -6,7 +6,7 @@ class B: A() { // INFO: {"checked": "false"} private fun foo() = 1 - // INFO: {"checked": "true"} + // INFO: {"checked": "false"} private class Z(n: Int) // INFO: {"checked": "true"} diff --git a/idea/testData/refactoring/pullUp/k2k/noVisibilityCheckBetweenMovedMembers.kt b/idea/testData/refactoring/pullUp/k2k/noVisibilityCheckBetweenMovedMembers.kt new file mode 100644 index 00000000000..19680fc6880 --- /dev/null +++ b/idea/testData/refactoring/pullUp/k2k/noVisibilityCheckBetweenMovedMembers.kt @@ -0,0 +1,8 @@ +open class Temp1 +open class Temp2 : Temp1() { + // INFO: {"checked": "true"} + private val used: Int = 1 + // INFO: {"checked": "true"} + private val using: Int = used + 1 +} +class Temp3 : Temp2() \ No newline at end of file diff --git a/idea/testData/refactoring/pullUp/k2k/noVisibilityCheckBetweenMovedMembers.kt.after b/idea/testData/refactoring/pullUp/k2k/noVisibilityCheckBetweenMovedMembers.kt.after new file mode 100644 index 00000000000..831fe4b01a7 --- /dev/null +++ b/idea/testData/refactoring/pullUp/k2k/noVisibilityCheckBetweenMovedMembers.kt.after @@ -0,0 +1,10 @@ +open class Temp1 { + // INFO: {"checked": "true"} + private val used: Int = 1 + // INFO: {"checked": "true"} + private val using: Int = used + 1 +} + +open class Temp2 : Temp1() { +} +class Temp3 : Temp2() \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/refactoring/pullUp/PullUpTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/refactoring/pullUp/PullUpTestGenerated.java index d24d82e1562..fcfb35e798b 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/pullUp/PullUpTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/pullUp/PullUpTestGenerated.java @@ -181,6 +181,12 @@ public class PullUpTestGenerated extends AbstractPullUpTest { doKotlinTest(fileName); } + @TestMetadata("noVisibilityCheckBetweenMovedMembers.kt") + public void testNoVisibilityCheckBetweenMovedMembers() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/pullUp/k2k/noVisibilityCheckBetweenMovedMembers.kt"); + doKotlinTest(fileName); + } + @TestMetadata("outsideOfClass.kt") public void testOutsideOfClass() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/pullUp/k2k/outsideOfClass.kt");