From e63e48933d53b6d09218dc803bff393a2b2d139e Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Fri, 16 Feb 2018 20:19:16 +0300 Subject: [PATCH] Move: Add import for top-level declarations moved to the default package #KT-22661 Fixed --- .../kotlin/idea/references/KtSimpleNameReference.kt | 11 +++++++++-- .../misc/moveClassFromDefaultPackage/after/a/X.kt | 2 ++ .../misc/moveClassToDefaultPackage/after/a/main.kt | 4 +++- .../misc/moveClassToDefaultPackage/before/a/main.kt | 2 +- 4 files changed, 15 insertions(+), 4 deletions(-) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/KtSimpleNameReference.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/KtSimpleNameReference.kt index 739b31cbd16..3a7b47ce9ba 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/KtSimpleNameReference.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/KtSimpleNameReference.kt @@ -22,6 +22,7 @@ import com.intellij.psi.PsiElement import com.intellij.psi.util.PsiTreeUtil import com.intellij.util.IncorrectOperationException import com.intellij.util.SmartList +import org.jetbrains.kotlin.asJava.unwrapped import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.resolve.resolveImportReference @@ -201,6 +202,12 @@ class KtSimpleNameReference(expression: KtSimpleNameExpression) : KtSimpleRefere } } + val targetUnwrapped = targetElement?.unwrapped + + if (targetUnwrapped != null && targetUnwrapped.isTopLevelKtOrJavaMember() && fqName.isOneSegmentFQN()) { + addDelayedImportRequest(targetUnwrapped, containingKtFile) + } + var parentDelimiter = "." val fqNameBase = when { parent is KtCallElement -> { @@ -215,8 +222,8 @@ class KtSimpleNameReference(expression: KtSimpleNameExpression) : KtSimpleRefere .callableReference .replace(psiFactory.createSimpleName(shortName)) .parent as KtCallableReferenceExpression - if (targetElement != null && targetElement.isTopLevelKtOrJavaMember()) { - addDelayedImportRequest(targetElement, parent.containingKtFile) + if (targetUnwrapped != null && targetUnwrapped.isTopLevelKtOrJavaMember()) { + addDelayedImportRequest(targetUnwrapped, parent.containingKtFile) return parent.replaced(newCallableRef).callableReference as KtNameReferenceExpression } newCallableRef.text diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/moveClassFromDefaultPackage/after/a/X.kt b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/moveClassFromDefaultPackage/after/a/X.kt index 0eb2e134b95..7f59d2e8187 100644 --- a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/moveClassFromDefaultPackage/after/a/X.kt +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/moveClassFromDefaultPackage/after/a/X.kt @@ -1,5 +1,7 @@ package a +import Y + class X: Y() { fun main() { Y().foo() diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/moveClassToDefaultPackage/after/a/main.kt b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/moveClassToDefaultPackage/after/a/main.kt index 34bfda24017..625018b631c 100644 --- a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/moveClassToDefaultPackage/after/a/main.kt +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/moveClassToDefaultPackage/after/a/main.kt @@ -1,5 +1,7 @@ package a -class Y { +import X + +class Y(x: X) { } \ No newline at end of file diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/moveClassToDefaultPackage/before/a/main.kt b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/moveClassToDefaultPackage/before/a/main.kt index 1eecc6aa70a..0ab6c0bc42f 100644 --- a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/moveClassToDefaultPackage/before/a/main.kt +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/moveClassToDefaultPackage/before/a/main.kt @@ -4,6 +4,6 @@ class X { } -class Y { +class Y(x: X) { } \ No newline at end of file