From dd0bb9abf15f2d569fb95726349932a6ead010fd Mon Sep 17 00:00:00 2001 From: Vladimir Dolzhenko Date: Mon, 6 Apr 2020 09:53:24 +0000 Subject: [PATCH] Do not resolve references pasted into the same origin #KT-37993 Fixed --- .../BasicKotlinReferenceTransferableData.kt | 3 +- .../KotlinCopyPasteReferenceProcessor.kt | 34 ++++++++++++++++++- 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/codeInsight/BasicKotlinReferenceTransferableData.kt b/idea/src/org/jetbrains/kotlin/idea/codeInsight/BasicKotlinReferenceTransferableData.kt index d093da7914d..9dc9a0fe8f9 100644 --- a/idea/src/org/jetbrains/kotlin/idea/codeInsight/BasicKotlinReferenceTransferableData.kt +++ b/idea/src/org/jetbrains/kotlin/idea/codeInsight/BasicKotlinReferenceTransferableData.kt @@ -16,7 +16,8 @@ class BasicKotlinReferenceTransferableData( val imports: List, val sourceTextOffset: Int, val sourceText: String, - val textRanges: List + val textRanges: List, + val locationFqName: String? ) : TextBlockTransferableData, Cloneable, Serializable { override fun getFlavor() = dataFlavor override fun getOffsetCount() = 0 diff --git a/idea/src/org/jetbrains/kotlin/idea/codeInsight/KotlinCopyPasteReferenceProcessor.kt b/idea/src/org/jetbrains/kotlin/idea/codeInsight/KotlinCopyPasteReferenceProcessor.kt index d47b39611ca..8e41701ef09 100644 --- a/idea/src/org/jetbrains/kotlin/idea/codeInsight/KotlinCopyPasteReferenceProcessor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/codeInsight/KotlinCopyPasteReferenceProcessor.kt @@ -117,6 +117,11 @@ class KotlinCopyPasteReferenceProcessor : CopyPastePostProcessor, file: KtFile, @@ -267,9 +278,30 @@ class KotlinCopyPasteReferenceProcessor : CopyPastePostProcessor + ): Boolean { + if (values.size == 1 && values[0].sourceFileUrl == file.virtualFile.url && + values[0].locationFqName != null && + // check locationFqName on position before pasted snippet + values[0].locationFqName == file.namedDeclarationFqName(caretOffset - 1) + ) { + val currentImports = file.importDirectives.map { it.text }.toSet() + val originalImports = values.flatMap { it.imports }.toSet() + if (currentImports == originalImports) { + return true + } + } + return false + } + private fun processReferenceData( project: Project, editor: Editor,