From bdfc814389d6baba575b3d602084e15d0e586a74 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Wed, 14 Feb 2018 15:38:45 +0300 Subject: [PATCH] Move: Fix scope of internal reference recovery in the case of file move #KT-22282 Fixed --- .../MoveKotlinDeclarationsProcessor.kt | 7 ++++++- .../moveFile/selfReferenceInImport/after/my/dummy.txt | 0 .../moveFile/selfReferenceInImport/after/my2/test.kt | 11 +++++++++++ .../selfReferenceInImport/before/my/dummy.txt | 0 .../moveFile/selfReferenceInImport/before/my/test.kt | 11 +++++++++++ .../selfReferenceInImport/selfReferenceInImport.test | 5 +++++ .../idea/refactoring/move/MoveTestGenerated.java | 6 ++++++ 7 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 idea/testData/refactoring/move/kotlin/moveFile/selfReferenceInImport/after/my/dummy.txt create mode 100644 idea/testData/refactoring/move/kotlin/moveFile/selfReferenceInImport/after/my2/test.kt create mode 100644 idea/testData/refactoring/move/kotlin/moveFile/selfReferenceInImport/before/my/dummy.txt create mode 100644 idea/testData/refactoring/move/kotlin/moveFile/selfReferenceInImport/before/my/test.kt create mode 100644 idea/testData/refactoring/move/kotlin/moveFile/selfReferenceInImport/selfReferenceInImport.test diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveDeclarations/MoveKotlinDeclarationsProcessor.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveDeclarations/MoveKotlinDeclarationsProcessor.kt index a570576326e..608bdf88ec4 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveDeclarations/MoveKotlinDeclarationsProcessor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveDeclarations/MoveKotlinDeclarationsProcessor.kt @@ -293,7 +293,12 @@ class MoveKotlinDeclarationsProcessor( } } - newDeclarations.forEach { newInternalUsages += restoreInternalUsages(it, oldToNewElementsMapping) } + val internalUsageScopes: List = if (descriptor.scanEntireFile) { + newDeclarations.map { it.containingKtFile }.distinct() + } else { + newDeclarations + } + internalUsageScopes.forEach { newInternalUsages += restoreInternalUsages(it, oldToNewElementsMapping) } usagesToProcess += newInternalUsages diff --git a/idea/testData/refactoring/move/kotlin/moveFile/selfReferenceInImport/after/my/dummy.txt b/idea/testData/refactoring/move/kotlin/moveFile/selfReferenceInImport/after/my/dummy.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/idea/testData/refactoring/move/kotlin/moveFile/selfReferenceInImport/after/my2/test.kt b/idea/testData/refactoring/move/kotlin/moveFile/selfReferenceInImport/after/my2/test.kt new file mode 100644 index 00000000000..3b201d9112d --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveFile/selfReferenceInImport/after/my2/test.kt @@ -0,0 +1,11 @@ +package my2 + +import my2.Foo.* + +class Foo { + class Bar +} + +fun main(args: Array) { + val b = Bar() +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/kotlin/moveFile/selfReferenceInImport/before/my/dummy.txt b/idea/testData/refactoring/move/kotlin/moveFile/selfReferenceInImport/before/my/dummy.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/idea/testData/refactoring/move/kotlin/moveFile/selfReferenceInImport/before/my/test.kt b/idea/testData/refactoring/move/kotlin/moveFile/selfReferenceInImport/before/my/test.kt new file mode 100644 index 00000000000..43cecff904a --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveFile/selfReferenceInImport/before/my/test.kt @@ -0,0 +1,11 @@ +package my + +import my.Foo.* + +class Foo { + class Bar +} + +fun main(args: Array) { + val b = Bar() +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/kotlin/moveFile/selfReferenceInImport/selfReferenceInImport.test b/idea/testData/refactoring/move/kotlin/moveFile/selfReferenceInImport/selfReferenceInImport.test new file mode 100644 index 00000000000..4ca92459e89 --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveFile/selfReferenceInImport/selfReferenceInImport.test @@ -0,0 +1,5 @@ +{ + "mainFile": "my/test.kt", + "type": "MOVE_FILES", + "targetPackage": "my2" +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/refactoring/move/MoveTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/refactoring/move/MoveTestGenerated.java index 044716267ca..89fdc46d4c5 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/move/MoveTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/move/MoveTestGenerated.java @@ -307,6 +307,12 @@ public class MoveTestGenerated extends AbstractMoveTest { doTest(fileName); } + @TestMetadata("kotlin/moveFile/selfReferenceInImport/selfReferenceInImport.test") + public void testKotlin_moveFile_selfReferenceInImport_SelfReferenceInImport() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/move/kotlin/moveFile/selfReferenceInImport/selfReferenceInImport.test"); + doTest(fileName); + } + @TestMetadata("kotlin/moveFile/typeRefWithArguments/typeRefWithArguments.test") public void testKotlin_moveFile_typeRefWithArguments_TypeRefWithArguments() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/move/kotlin/moveFile/typeRefWithArguments/typeRefWithArguments.test");