diff --git a/idea/src/org/jetbrains/kotlin/idea/codeInsight/KotlinCopyPasteReferenceProcessor.kt b/idea/src/org/jetbrains/kotlin/idea/codeInsight/KotlinCopyPasteReferenceProcessor.kt index 9698748749d..8874701bf90 100644 --- a/idea/src/org/jetbrains/kotlin/idea/codeInsight/KotlinCopyPasteReferenceProcessor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/codeInsight/KotlinCopyPasteReferenceProcessor.kt @@ -68,8 +68,8 @@ import java.util.ArrayList public class KotlinCopyPasteReferenceProcessor() : CopyPastePostProcessor() { private val LOG = Logger.getInstance(javaClass()) - private val IGNORE_REFERENCES_INSIDE: Array?> = array( - javaClass(), + private val IGNORE_REFERENCES_INSIDE: Array> = array( + javaClass(), javaClass() ) @@ -138,10 +138,12 @@ public class KotlinCopyPasteReferenceProcessor() : CopyPastePostProcessor): Collection { + val fqNames = referencesToRestore.map { it.refData.fqName }.toSortedSet() + + declarationsToImportSuggested = fqNames + val shouldShowDialog = CodeInsightSettings.getInstance().ADD_IMPORTS_ON_PASTE == CodeInsightSettings.ASK if (!shouldShowDialog || referencesToRestore.isEmpty()) { return referencesToRestore } - val fqNames = referencesToRestore.map { it.refData.fqName }.toSortedSet() - val dialog = RestoreReferencesDialog(project, fqNames.copyToArray()) dialog.show() @@ -345,4 +349,9 @@ public class KotlinCopyPasteReferenceProcessor() : CopyPastePostProcessor = emptyList() + } } diff --git a/idea/testData/copyPaste/imports/AlreadyImportedViaStar.expected.names b/idea/testData/copyPaste/imports/AlreadyImportedViaStar.expected.names new file mode 100644 index 00000000000..6faa818b6ea --- /dev/null +++ b/idea/testData/copyPaste/imports/AlreadyImportedViaStar.expected.names @@ -0,0 +1,7 @@ +a.E.ENTRY +a.Outer.Inner +a.Outer.Nested +a.Outer.NestedAnnotation +a.Outer.NestedEnum +a.Outer.NestedObj +a.Outer.NestedTrait diff --git a/idea/testData/copyPaste/imports/ClassAlreadyImported.expected.names b/idea/testData/copyPaste/imports/ClassAlreadyImported.expected.names new file mode 100644 index 00000000000..8b137891791 --- /dev/null +++ b/idea/testData/copyPaste/imports/ClassAlreadyImported.expected.names @@ -0,0 +1 @@ + diff --git a/idea/testData/copyPaste/imports/ClassMember.expected.names b/idea/testData/copyPaste/imports/ClassMember.expected.names new file mode 100644 index 00000000000..e69de29bb2d diff --git a/idea/testData/copyPaste/imports/ClassObject.expected.names b/idea/testData/copyPaste/imports/ClassObject.expected.names new file mode 100644 index 00000000000..c16c0990c16 --- /dev/null +++ b/idea/testData/copyPaste/imports/ClassObject.expected.names @@ -0,0 +1,5 @@ +a.A +a.A.Companion +a.B +a.B.Companion +a.T diff --git a/idea/testData/copyPaste/imports/ClassObjectFunInsideClass.expected.names b/idea/testData/copyPaste/imports/ClassObjectFunInsideClass.expected.names new file mode 100644 index 00000000000..e69de29bb2d diff --git a/idea/testData/copyPaste/imports/ClassObjectInner.expected.names b/idea/testData/copyPaste/imports/ClassObjectInner.expected.names new file mode 100644 index 00000000000..59d1571744d --- /dev/null +++ b/idea/testData/copyPaste/imports/ClassObjectInner.expected.names @@ -0,0 +1,5 @@ +a.Outer.Companion.Nested +a.Outer.Companion.NestedAnnotation +a.Outer.Companion.NestedEnum +a.Outer.Companion.NestedObj +a.Outer.Companion.NestedTrait diff --git a/idea/testData/copyPaste/imports/ClassResolvedToPackage.expected.names b/idea/testData/copyPaste/imports/ClassResolvedToPackage.expected.names new file mode 100644 index 00000000000..d6d5ebaaf76 --- /dev/null +++ b/idea/testData/copyPaste/imports/ClassResolvedToPackage.expected.names @@ -0,0 +1,2 @@ +a.a +a.a.Companion diff --git a/idea/testData/copyPaste/imports/ClassType.expected.names b/idea/testData/copyPaste/imports/ClassType.expected.names new file mode 100644 index 00000000000..1955288b3e6 --- /dev/null +++ b/idea/testData/copyPaste/imports/ClassType.expected.names @@ -0,0 +1 @@ +a.A diff --git a/idea/testData/copyPaste/imports/ConflictForTypeWithTypeParameter.expected.names b/idea/testData/copyPaste/imports/ConflictForTypeWithTypeParameter.expected.names new file mode 100644 index 00000000000..1955288b3e6 --- /dev/null +++ b/idea/testData/copyPaste/imports/ConflictForTypeWithTypeParameter.expected.names @@ -0,0 +1 @@ +a.A diff --git a/idea/testData/copyPaste/imports/ConflictWithClass.expected.names b/idea/testData/copyPaste/imports/ConflictWithClass.expected.names new file mode 100644 index 00000000000..1955288b3e6 --- /dev/null +++ b/idea/testData/copyPaste/imports/ConflictWithClass.expected.names @@ -0,0 +1 @@ +a.A diff --git a/idea/testData/copyPaste/imports/Constructor.expected.names b/idea/testData/copyPaste/imports/Constructor.expected.names new file mode 100644 index 00000000000..1955288b3e6 --- /dev/null +++ b/idea/testData/copyPaste/imports/Constructor.expected.names @@ -0,0 +1 @@ +a.A diff --git a/idea/testData/copyPaste/imports/DeepInnerClasses.expected.names b/idea/testData/copyPaste/imports/DeepInnerClasses.expected.names new file mode 100644 index 00000000000..4e13387849f --- /dev/null +++ b/idea/testData/copyPaste/imports/DeepInnerClasses.expected.names @@ -0,0 +1,6 @@ +a.Outer +a.Outer.Inner.II +a.Outer.Nested.NI +a.Outer.Nested.NN +a.Outer.Nested.NN2 +a.with diff --git a/idea/testData/copyPaste/imports/DefaultPackage.expected.names b/idea/testData/copyPaste/imports/DefaultPackage.expected.names new file mode 100644 index 00000000000..f70f10e4db1 --- /dev/null +++ b/idea/testData/copyPaste/imports/DefaultPackage.expected.names @@ -0,0 +1 @@ +A diff --git a/idea/testData/copyPaste/imports/DelegatedProperty.expected.names b/idea/testData/copyPaste/imports/DelegatedProperty.expected.names new file mode 100644 index 00000000000..9781ae0f479 --- /dev/null +++ b/idea/testData/copyPaste/imports/DelegatedProperty.expected.names @@ -0,0 +1,3 @@ +a.A +a.get +a.set diff --git a/idea/testData/copyPaste/imports/DependencyOnJava.expected.names b/idea/testData/copyPaste/imports/DependencyOnJava.expected.names new file mode 100644 index 00000000000..3b86807ee72 --- /dev/null +++ b/idea/testData/copyPaste/imports/DependencyOnJava.expected.names @@ -0,0 +1,3 @@ +java.JavaClass +java.JavaClass.NestedClass +java.JavaClass.staticMethod diff --git a/idea/testData/copyPaste/imports/DependencyOnKotlinLibrary.expected.names b/idea/testData/copyPaste/imports/DependencyOnKotlinLibrary.expected.names new file mode 100644 index 00000000000..e6157dde936 --- /dev/null +++ b/idea/testData/copyPaste/imports/DependencyOnKotlinLibrary.expected.names @@ -0,0 +1,15 @@ +d.A +d.ClassObject.Companion +d.E.ENTRY +d.O1 +d.O2 +d.Outer.Inner +d.Outer.Nested +d.Outer.NestedAnnotation +d.Outer.NestedEnum +d.Outer.NestedObj +d.Outer.NestedTrait +d.T +d.c +d.ext +d.g diff --git a/idea/testData/copyPaste/imports/DependencyOnStdLib.expected.names b/idea/testData/copyPaste/imports/DependencyOnStdLib.expected.names new file mode 100644 index 00000000000..1e28860500b --- /dev/null +++ b/idea/testData/copyPaste/imports/DependencyOnStdLib.expected.names @@ -0,0 +1,2 @@ +kotlin.Int +kotlin.concurrent.FunctionalList diff --git a/idea/testData/copyPaste/imports/EnumEntries.expected.names b/idea/testData/copyPaste/imports/EnumEntries.expected.names new file mode 100644 index 00000000000..5a90d72bfc8 --- /dev/null +++ b/idea/testData/copyPaste/imports/EnumEntries.expected.names @@ -0,0 +1,3 @@ +a.A.A +a.A.B +a.A.C diff --git a/idea/testData/copyPaste/imports/Extension.expected.names b/idea/testData/copyPaste/imports/Extension.expected.names new file mode 100644 index 00000000000..7a63e53756f --- /dev/null +++ b/idea/testData/copyPaste/imports/Extension.expected.names @@ -0,0 +1,3 @@ +a.f +a.g +a.p diff --git a/idea/testData/copyPaste/imports/ExtensionAsInfixOrOperator.expected.names b/idea/testData/copyPaste/imports/ExtensionAsInfixOrOperator.expected.names new file mode 100644 index 00000000000..06457feda0b --- /dev/null +++ b/idea/testData/copyPaste/imports/ExtensionAsInfixOrOperator.expected.names @@ -0,0 +1,3 @@ +a.A +a.infix +a.plus diff --git a/idea/testData/copyPaste/imports/ExtensionCannotBeImportedOrLengthened.expected.names b/idea/testData/copyPaste/imports/ExtensionCannotBeImportedOrLengthened.expected.names new file mode 100644 index 00000000000..0e426c30c50 --- /dev/null +++ b/idea/testData/copyPaste/imports/ExtensionCannotBeImportedOrLengthened.expected.names @@ -0,0 +1,2 @@ +a.ext +a.p diff --git a/idea/testData/copyPaste/imports/ExtensionConflict.expected.names b/idea/testData/copyPaste/imports/ExtensionConflict.expected.names new file mode 100644 index 00000000000..f514a914fd7 --- /dev/null +++ b/idea/testData/copyPaste/imports/ExtensionConflict.expected.names @@ -0,0 +1,5 @@ +a.ext +a.infix +a.minus +a.p +a.plus diff --git a/idea/testData/copyPaste/imports/ForLoop.expected.names b/idea/testData/copyPaste/imports/ForLoop.expected.names new file mode 100644 index 00000000000..3975d316e2f --- /dev/null +++ b/idea/testData/copyPaste/imports/ForLoop.expected.names @@ -0,0 +1,4 @@ +a.A +a.hasNext +a.iterator +a.next diff --git a/idea/testData/copyPaste/imports/FullyQualified.expected.names b/idea/testData/copyPaste/imports/FullyQualified.expected.names new file mode 100644 index 00000000000..8b137891791 --- /dev/null +++ b/idea/testData/copyPaste/imports/FullyQualified.expected.names @@ -0,0 +1 @@ + diff --git a/idea/testData/copyPaste/imports/Function.expected.names b/idea/testData/copyPaste/imports/Function.expected.names new file mode 100644 index 00000000000..e9071250797 --- /dev/null +++ b/idea/testData/copyPaste/imports/Function.expected.names @@ -0,0 +1 @@ +a.g diff --git a/idea/testData/copyPaste/imports/FunctionAlreadyImported.expected.names b/idea/testData/copyPaste/imports/FunctionAlreadyImported.expected.names new file mode 100644 index 00000000000..8b137891791 --- /dev/null +++ b/idea/testData/copyPaste/imports/FunctionAlreadyImported.expected.names @@ -0,0 +1 @@ + diff --git a/idea/testData/copyPaste/imports/FunctionParameter.expected.names b/idea/testData/copyPaste/imports/FunctionParameter.expected.names new file mode 100644 index 00000000000..8b137891791 --- /dev/null +++ b/idea/testData/copyPaste/imports/FunctionParameter.expected.names @@ -0,0 +1 @@ + diff --git a/idea/testData/copyPaste/imports/GetExpression.expected.names b/idea/testData/copyPaste/imports/GetExpression.expected.names new file mode 100644 index 00000000000..3fd5f59e88b --- /dev/null +++ b/idea/testData/copyPaste/imports/GetExpression.expected.names @@ -0,0 +1,2 @@ +a.A +a.get diff --git a/idea/testData/copyPaste/imports/ImportDependency.expected.names b/idea/testData/copyPaste/imports/ImportDependency.expected.names new file mode 100644 index 00000000000..e6157dde936 --- /dev/null +++ b/idea/testData/copyPaste/imports/ImportDependency.expected.names @@ -0,0 +1,15 @@ +d.A +d.ClassObject.Companion +d.E.ENTRY +d.O1 +d.O2 +d.Outer.Inner +d.Outer.Nested +d.Outer.NestedAnnotation +d.Outer.NestedEnum +d.Outer.NestedObj +d.Outer.NestedTrait +d.T +d.c +d.ext +d.g diff --git a/idea/testData/copyPaste/imports/ImportDirective.expected.names b/idea/testData/copyPaste/imports/ImportDirective.expected.names new file mode 100644 index 00000000000..e69de29bb2d diff --git a/idea/testData/copyPaste/imports/ImportableEntityInExtensionLiteral.expected.names b/idea/testData/copyPaste/imports/ImportableEntityInExtensionLiteral.expected.names new file mode 100644 index 00000000000..68b50ccdc5d --- /dev/null +++ b/idea/testData/copyPaste/imports/ImportableEntityInExtensionLiteral.expected.names @@ -0,0 +1,3 @@ +a.A.Nested +a.ext +a.f diff --git a/idea/testData/copyPaste/imports/ImportedElementCopied.expected.names b/idea/testData/copyPaste/imports/ImportedElementCopied.expected.names new file mode 100644 index 00000000000..8b137891791 --- /dev/null +++ b/idea/testData/copyPaste/imports/ImportedElementCopied.expected.names @@ -0,0 +1 @@ + diff --git a/idea/testData/copyPaste/imports/Inner.expected.names b/idea/testData/copyPaste/imports/Inner.expected.names new file mode 100644 index 00000000000..9113f6c10b3 --- /dev/null +++ b/idea/testData/copyPaste/imports/Inner.expected.names @@ -0,0 +1,7 @@ +a.Outer +a.Outer.Inner +a.Outer.Nested +a.Outer.NestedAnnotation +a.Outer.NestedEnum +a.Outer.NestedObj +a.Outer.NestedTrait diff --git a/idea/testData/copyPaste/imports/Invoke.expected.names b/idea/testData/copyPaste/imports/Invoke.expected.names new file mode 100644 index 00000000000..ad6be8b56f7 --- /dev/null +++ b/idea/testData/copyPaste/imports/Invoke.expected.names @@ -0,0 +1,2 @@ +a.A +a.invoke diff --git a/idea/testData/copyPaste/imports/JavaStaticViaClass.expected.names b/idea/testData/copyPaste/imports/JavaStaticViaClass.expected.names new file mode 100644 index 00000000000..cff7255686b --- /dev/null +++ b/idea/testData/copyPaste/imports/JavaStaticViaClass.expected.names @@ -0,0 +1,2 @@ +a.JavaF +a.JavaM diff --git a/idea/testData/copyPaste/imports/Local.expected.names b/idea/testData/copyPaste/imports/Local.expected.names new file mode 100644 index 00000000000..e69de29bb2d diff --git a/idea/testData/copyPaste/imports/MultiDeclaration.expected.names b/idea/testData/copyPaste/imports/MultiDeclaration.expected.names new file mode 100644 index 00000000000..17c76b78406 --- /dev/null +++ b/idea/testData/copyPaste/imports/MultiDeclaration.expected.names @@ -0,0 +1,3 @@ +a.A +a.component1 +a.component2 diff --git a/idea/testData/copyPaste/imports/MultiReferencePartiallyCopied.expected.names b/idea/testData/copyPaste/imports/MultiReferencePartiallyCopied.expected.names new file mode 100644 index 00000000000..51fe8d708e4 --- /dev/null +++ b/idea/testData/copyPaste/imports/MultiReferencePartiallyCopied.expected.names @@ -0,0 +1,4 @@ +a.A +a.B +a.hasNext +a.next diff --git a/idea/testData/copyPaste/imports/NoImportForBuiltIns.expected.names b/idea/testData/copyPaste/imports/NoImportForBuiltIns.expected.names new file mode 100644 index 00000000000..fd933a36666 --- /dev/null +++ b/idea/testData/copyPaste/imports/NoImportForBuiltIns.expected.names @@ -0,0 +1,2 @@ +a.b +a.d diff --git a/idea/testData/copyPaste/imports/NoImportForSamePackage.expected.names b/idea/testData/copyPaste/imports/NoImportForSamePackage.expected.names new file mode 100644 index 00000000000..6faa818b6ea --- /dev/null +++ b/idea/testData/copyPaste/imports/NoImportForSamePackage.expected.names @@ -0,0 +1,7 @@ +a.E.ENTRY +a.Outer.Inner +a.Outer.Nested +a.Outer.NestedAnnotation +a.Outer.NestedEnum +a.Outer.NestedObj +a.Outer.NestedTrait diff --git a/idea/testData/copyPaste/imports/NotReferencePosition.expected.names b/idea/testData/copyPaste/imports/NotReferencePosition.expected.names new file mode 100644 index 00000000000..8b137891791 --- /dev/null +++ b/idea/testData/copyPaste/imports/NotReferencePosition.expected.names @@ -0,0 +1 @@ + diff --git a/idea/testData/copyPaste/imports/NotReferencePosition2.expected.names b/idea/testData/copyPaste/imports/NotReferencePosition2.expected.names new file mode 100644 index 00000000000..8b137891791 --- /dev/null +++ b/idea/testData/copyPaste/imports/NotReferencePosition2.expected.names @@ -0,0 +1 @@ + diff --git a/idea/testData/copyPaste/imports/Object.expected.names b/idea/testData/copyPaste/imports/Object.expected.names new file mode 100644 index 00000000000..499a1f69752 --- /dev/null +++ b/idea/testData/copyPaste/imports/Object.expected.names @@ -0,0 +1,3 @@ +a.A +a.B +a.T diff --git a/idea/testData/copyPaste/imports/PackageView.expected.names b/idea/testData/copyPaste/imports/PackageView.expected.names new file mode 100644 index 00000000000..4e1c325aa34 --- /dev/null +++ b/idea/testData/copyPaste/imports/PackageView.expected.names @@ -0,0 +1 @@ +a.b diff --git a/idea/testData/copyPaste/imports/PartiallyQualified.expected.names b/idea/testData/copyPaste/imports/PartiallyQualified.expected.names new file mode 100644 index 00000000000..65fb6725e5d --- /dev/null +++ b/idea/testData/copyPaste/imports/PartiallyQualified.expected.names @@ -0,0 +1 @@ +a.Foo diff --git a/idea/testData/copyPaste/imports/QualifiedTypeConflict.expected.names b/idea/testData/copyPaste/imports/QualifiedTypeConflict.expected.names new file mode 100644 index 00000000000..1955288b3e6 --- /dev/null +++ b/idea/testData/copyPaste/imports/QualifiedTypeConflict.expected.names @@ -0,0 +1 @@ +a.A diff --git a/idea/testData/copyPaste/imports/ReferencedElementAlsoCopied.expected.names b/idea/testData/copyPaste/imports/ReferencedElementAlsoCopied.expected.names new file mode 100644 index 00000000000..8b137891791 --- /dev/null +++ b/idea/testData/copyPaste/imports/ReferencedElementAlsoCopied.expected.names @@ -0,0 +1 @@ + diff --git a/idea/testData/copyPaste/imports/Super.expected.names b/idea/testData/copyPaste/imports/Super.expected.names new file mode 100644 index 00000000000..e69de29bb2d diff --git a/idea/testData/copyPaste/imports/ThisReference.expected.names b/idea/testData/copyPaste/imports/ThisReference.expected.names new file mode 100644 index 00000000000..8b137891791 --- /dev/null +++ b/idea/testData/copyPaste/imports/ThisReference.expected.names @@ -0,0 +1 @@ + diff --git a/idea/testData/copyPaste/imports/TopLevelProperty.expected.names b/idea/testData/copyPaste/imports/TopLevelProperty.expected.names new file mode 100644 index 00000000000..c0b1b6e366a --- /dev/null +++ b/idea/testData/copyPaste/imports/TopLevelProperty.expected.names @@ -0,0 +1,2 @@ +a.b +a.c diff --git a/idea/testData/copyPaste/imports/Trait.expected.names b/idea/testData/copyPaste/imports/Trait.expected.names new file mode 100644 index 00000000000..1955288b3e6 --- /dev/null +++ b/idea/testData/copyPaste/imports/Trait.expected.names @@ -0,0 +1 @@ +a.A diff --git a/idea/testData/copyPaste/imports/TypeParameter.expected.names b/idea/testData/copyPaste/imports/TypeParameter.expected.names new file mode 100644 index 00000000000..1463f0d217c --- /dev/null +++ b/idea/testData/copyPaste/imports/TypeParameter.expected.names @@ -0,0 +1,2 @@ +a.A +a.T diff --git a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/AbstractInsertImportOnPasteTest.kt b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/AbstractInsertImportOnPasteTest.kt index f780555460b..682d63e6d01 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/AbstractInsertImportOnPasteTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/AbstractInsertImportOnPasteTest.kt @@ -17,22 +17,20 @@ package org.jetbrains.kotlin.idea.codeInsight import com.intellij.openapi.actionSystem.IdeActions -import com.intellij.openapi.util.TextRange import com.intellij.openapi.util.io.FileUtil import org.jetbrains.kotlin.checkers.DebugInfoUtil -import org.jetbrains.kotlin.diagnostics.Diagnostic import org.jetbrains.kotlin.diagnostics.DiagnosticUtils import org.jetbrains.kotlin.diagnostics.Errors import org.jetbrains.kotlin.diagnostics.rendering.DefaultErrorMessages import org.jetbrains.kotlin.idea.AbstractCopyPasteTest import org.jetbrains.kotlin.idea.PluginTestCaseBase -import org.jetbrains.kotlin.idea.caches.resolve.* +import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.caches.resolve.analyzeFully import org.jetbrains.kotlin.psi.JetFile import org.jetbrains.kotlin.psi.JetReferenceExpression -import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.test.InTextDirectivesUtils - +import org.jetbrains.kotlin.test.JetTestUtils import java.io.File import kotlin.test.fail @@ -61,10 +59,15 @@ public abstract class AbstractInsertImportOnPasteTest : AbstractCopyPasteTest() myFixture.configureByFile(testFileName) myFixture.performEditorAction(cutOrCopy) + KotlinCopyPasteReferenceProcessor.declarationsToImportSuggested = emptyList() + val toFileName = testFileName.replace(".kt", ".to.kt") val toFile = configureToFile(toFileName) performNotWriteEditorAction(IdeActions.ACTION_PASTE) + val namesToImportDump = KotlinCopyPasteReferenceProcessor.declarationsToImportSuggested.joinToString("\n") + JetTestUtils.assertEqualsToFile(File(path.replace(".kt", ".expected.names")), namesToImportDump) + myFixture.checkResultByFile(testFileName.replace(".kt", ".expected.kt")) if (!InTextDirectivesUtils.isDirectiveDefined(FileUtil.loadFile(testFile, true), ALLOW_UNRESOLVED_DIRECTIVE)) {