From 9b820202b595407c99ff1a440986ba663d1c49b2 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Mon, 30 Jan 2017 15:38:03 +0100 Subject: [PATCH] Don't run decompiler to check whether reference is in copied fragment #KT-16038 Fixed --- .../idea/codeInsight/KotlinCopyPasteReferenceProcessor.kt | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/codeInsight/KotlinCopyPasteReferenceProcessor.kt b/idea/src/org/jetbrains/kotlin/idea/codeInsight/KotlinCopyPasteReferenceProcessor.kt index b171681455b..5274d1668de 100644 --- a/idea/src/org/jetbrains/kotlin/idea/codeInsight/KotlinCopyPasteReferenceProcessor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/codeInsight/KotlinCopyPasteReferenceProcessor.kt @@ -54,6 +54,7 @@ import org.jetbrains.kotlin.psi.psiUtil.elementsInRange import org.jetbrains.kotlin.psi.psiUtil.forEachDescendantOfType import org.jetbrains.kotlin.psi.psiUtil.parentsWithSelf import org.jetbrains.kotlin.resolve.BindingContext +import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.resolve.scopes.LexicalScope @@ -160,8 +161,10 @@ class KotlinCopyPasteReferenceProcessor : CopyPastePostProcessor && descriptors.size > 1) return@forEachDescendantOfType for (descriptor in descriptors) { - val declarations = DescriptorToSourceUtilsIde.getAllDeclarations(file.project, descriptor) - val declaration = declarations.singleOrNull() + val effectiveReferencedDescriptors = DescriptorToSourceUtils.getEffectiveReferencedDescriptors(descriptor).asSequence() + val declaration = effectiveReferencedDescriptors + .map { DescriptorToSourceUtils.getSourceFromDescriptor(it) } + .singleOrNull() if (declaration != null && declaration.isInCopiedArea(file, startOffsets, endOffsets)) continue if (!reference.canBeResolvedViaImport(descriptor)) continue