From b45aeda711552e2f3afa5439e04e5cdcd55c4bca Mon Sep 17 00:00:00 2001 From: Dmitry Gridin Date: Fri, 5 Apr 2019 20:23:36 +0700 Subject: [PATCH] Fix caret after "Introduce import alias" if invoke in import directive #KT-30833 Fixed --- .../KotlinIntroduceImportAliasHandler.kt | 9 ++++++--- .../introduceImportAlias/alreadyImportAlias.kt.after | 2 +- .../introduceImportAlias/conflictLocalName.kt.after | 2 +- .../intentions/introduceImportAlias/function.kt.after | 2 +- .../testData/intentions/introduceImportAlias/inImport.kt | 9 +++++++++ .../intentions/introduceImportAlias/inImport.kt.after | 9 +++++++++ .../kotlin/idea/intentions/IntentionTestGenerated.java | 5 +++++ 7 files changed, 32 insertions(+), 6 deletions(-) create mode 100644 idea/testData/intentions/introduceImportAlias/inImport.kt create mode 100644 idea/testData/intentions/introduceImportAlias/inImport.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceImportAlias/KotlinIntroduceImportAliasHandler.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceImportAlias/KotlinIntroduceImportAliasHandler.kt index 15c19ca0bf4..55b20214ffd 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceImportAlias/KotlinIntroduceImportAliasHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceImportAlias/KotlinIntroduceImportAliasHandler.kt @@ -22,6 +22,7 @@ import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.resolve.resolveImportReference import org.jetbrains.kotlin.idea.codeInsight.CodeInsightUtils import org.jetbrains.kotlin.idea.core.KotlinNameSuggester +import org.jetbrains.kotlin.idea.core.moveCaret import org.jetbrains.kotlin.idea.imports.importableFqName import org.jetbrains.kotlin.idea.refactoring.selectElement import org.jetbrains.kotlin.idea.references.KtSimpleNameReference @@ -44,9 +45,7 @@ import org.jetbrains.kotlin.psi.KtCallExpression import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtNameReferenceExpression import org.jetbrains.kotlin.psi.KtUserType -import org.jetbrains.kotlin.psi.psiUtil.getQualifiedElement -import org.jetbrains.kotlin.psi.psiUtil.getQualifiedElementSelector -import org.jetbrains.kotlin.psi.psiUtil.siblings +import org.jetbrains.kotlin.psi.psiUtil.* import org.jetbrains.kotlin.resolve.PropertyImportedFromObject import org.jetbrains.kotlin.resolve.descriptorUtil.isExtension import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode @@ -74,6 +73,8 @@ object KotlinIntroduceImportAliasHandler : RefactoringActionHandler { } } + val elementInImportDirective = element.isInImportDirective() + val oldName = element.mainReference.value val scopes = usages.mapNotNull { val expression = it.reference.element @@ -99,6 +100,8 @@ object KotlinIntroduceImportAliasHandler : RefactoringActionHandler { replaceUsages(usages, newName) cleanImport(file, fqName) + if (elementInImportDirective) editor.moveCaret(newDirective.alias?.nameIdentifier?.textOffset ?: newDirective.endOffset) + if (!ApplicationManager.getApplication().isUnitTestMode) { invokeRename(project, editor, newDirective.alias, suggestionsName) } diff --git a/idea/testData/intentions/introduceImportAlias/alreadyImportAlias.kt.after b/idea/testData/intentions/introduceImportAlias/alreadyImportAlias.kt.after index 8eb7ff7fb14..cbac619098e 100644 --- a/idea/testData/intentions/introduceImportAlias/alreadyImportAlias.kt.after +++ b/idea/testData/intentions/introduceImportAlias/alreadyImportAlias.kt.after @@ -9,6 +9,6 @@ class Outer { class Test() { fun test() { - val i = Middle1.Inner() + val i = Middle1.Inner() } } \ No newline at end of file diff --git a/idea/testData/intentions/introduceImportAlias/conflictLocalName.kt.after b/idea/testData/intentions/introduceImportAlias/conflictLocalName.kt.after index bec52e327a1..34d81e0f46c 100644 --- a/idea/testData/intentions/introduceImportAlias/conflictLocalName.kt.after +++ b/idea/testData/intentions/introduceImportAlias/conflictLocalName.kt.after @@ -13,6 +13,6 @@ class Outer { class Test() { fun test() { val foo = 1 - foo1() + foo1() } } \ No newline at end of file diff --git a/idea/testData/intentions/introduceImportAlias/function.kt.after b/idea/testData/intentions/introduceImportAlias/function.kt.after index 00685a63678..af11f0c3334 100644 --- a/idea/testData/intentions/introduceImportAlias/function.kt.after +++ b/idea/testData/intentions/introduceImportAlias/function.kt.after @@ -14,7 +14,7 @@ class Outer { class Test() { fun test() { - val i = foo1() + val i = foo1() } fun test2() { diff --git a/idea/testData/intentions/introduceImportAlias/inImport.kt b/idea/testData/intentions/introduceImportAlias/inImport.kt new file mode 100644 index 00000000000..26759f0c795 --- /dev/null +++ b/idea/testData/intentions/introduceImportAlias/inImport.kt @@ -0,0 +1,9 @@ +package test + +import test.Foo + +class Foo + +fun main() { + Foo() +} \ No newline at end of file diff --git a/idea/testData/intentions/introduceImportAlias/inImport.kt.after b/idea/testData/intentions/introduceImportAlias/inImport.kt.after new file mode 100644 index 00000000000..132de60524a --- /dev/null +++ b/idea/testData/intentions/introduceImportAlias/inImport.kt.after @@ -0,0 +1,9 @@ +package test + +import test.Foo as Foo1 + +class Foo + +fun main() { + Foo1() +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java index 2682eaab29f..ff56c323f9b 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java @@ -10143,6 +10143,11 @@ public class IntentionTestGenerated extends AbstractIntentionTest { runTest("idea/testData/intentions/introduceImportAlias/function.kt"); } + @TestMetadata("inImport.kt") + public void testInImport() throws Exception { + runTest("idea/testData/intentions/introduceImportAlias/inImport.kt"); + } + @TestMetadata("middleImport.kt") public void testMiddleImport() throws Exception { runTest("idea/testData/intentions/introduceImportAlias/middleImport.kt");