From 693f42f33e5dbfce10444c7c42976256cecfb7d2 Mon Sep 17 00:00:00 2001 From: Dmitry Gridin Date: Wed, 14 Aug 2019 13:54:00 +0700 Subject: [PATCH] KotlinCopyPasteReferenceProcessor: cleanup code --- .../KotlinCopyPasteReferenceProcessor.kt | 115 +++++++++--------- 1 file changed, 58 insertions(+), 57 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/codeInsight/KotlinCopyPasteReferenceProcessor.kt b/idea/src/org/jetbrains/kotlin/idea/codeInsight/KotlinCopyPasteReferenceProcessor.kt index 41b654e851b..4cc6f32f9d9 100644 --- a/idea/src/org/jetbrains/kotlin/idea/codeInsight/KotlinCopyPasteReferenceProcessor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/codeInsight/KotlinCopyPasteReferenceProcessor.kt @@ -74,8 +74,8 @@ class KotlinCopyPasteReferenceProcessor : CopyPastePostProcessor> = arrayOf( - KtImportList::class.java, - KtPackageDirective::class.java + KtImportList::class.java, + KtPackageDirective::class.java ) override fun extractTransferableData(content: Transferable): List { @@ -85,10 +85,8 @@ class KotlinCopyPasteReferenceProcessor : CopyPastePostProcessor { if (file !is KtFile || DumbService.getInstance(file.getProject()).isDumb) return listOf() val collectedData = try { collectReferenceData(file, startOffsets, endOffsets) - } - catch (e: ProcessCanceledException) { + } catch (e: ProcessCanceledException) { // supposedly analysis can only be canceled from another thread // do not log ProcessCanceledException as it is rethrown by IdeaLogger and code won't be copied LOG.debug("ProcessCanceledException while analyzing references in ${file.getName()}. References can't be processed.") return listOf() - } - catch (e: Throwable) { + } catch (e: Throwable) { LOG.error("Exception in processing references for copy paste in file ${file.getName()}}", e) return listOf() } @@ -123,13 +119,13 @@ class KotlinCopyPasteReferenceProcessor : CopyPastePostProcessor { val ranges = toTextRanges(startOffsets, endOffsets) - val elementsByRange = ranges.associateBy({ it }, { - file.elementsInRange(it).filter { it is KtElement || it is KDocElement } + val elementsByRange = ranges.associateBy({ it }, { textRange -> + file.elementsInRange(textRange).filter { it is KtElement || it is KDocElement } }) val allElementsToResolve = elementsByRange.values.flatten().flatMap { it.collectDescendantsOfType() } @@ -148,12 +144,12 @@ class KotlinCopyPasteReferenceProcessor : CopyPastePostProcessor.addReferenceDataInsideElement( - element: PsiElement, - file: KtFile, - startOffset: Int, - startOffsets: IntArray, - endOffsets: IntArray, - bindingContext: BindingContext + element: PsiElement, + file: KtFile, + startOffset: Int, + startOffsets: IntArray, + endOffsets: IntArray, + bindingContext: BindingContext ) { if (PsiTreeUtil.getNonStrictParentOfType(element, *IGNORE_REFERENCES_INSIDE) != null) return @@ -167,8 +163,8 @@ class KotlinCopyPasteReferenceProcessor : CopyPastePostProcessor, - values: List + project: Project, + editor: Editor, + bounds: RangeMarker, + caretOffset: Int, + indented: Ref, + values: List ) { if (DumbService.getInstance(project).isDumb) return @@ -220,14 +216,17 @@ class KotlinCopyPasteReferenceProcessor : CopyPastePostProcessor): List { + private fun findReferencesToRestore( + file: PsiFile, + blockStart: Int, + referenceData: Array + ): List { if (file !is KtFile) return listOf() val references = referenceData.map { it to findReference(it, file, blockStart) } val bindingContext = try { file.getResolutionFacade().analyze(references.mapNotNull { it.second?.element }, BodyResolveMode.PARTIAL) - } - catch (e: Throwable) { + } catch (e: Throwable) { LOG.error("Failed to analyze references after copy paste", e) return emptyList() } @@ -258,11 +257,11 @@ class KotlinCopyPasteReferenceProcessor : CopyPastePostProcessor, - val fqName: FqName + val pointer: SmartPsiElementPointer, + val fqName: FqName ) val bindingRequests = ArrayList() @@ -324,8 +322,7 @@ class KotlinCopyPasteReferenceProcessor : CopyPastePostProcessor() + private fun findCallableToImport(fqName: FqName, file: KtFile): CallableDescriptor? = + findImportableDescriptors(fqName, file).firstIsInstanceOrNull() - private fun showRestoreReferencesDialog(project: Project, referencesToRestore: List): Collection { + private fun showRestoreReferencesDialog( + project: Project, + referencesToRestore: List + ): Collection { val fqNames = referencesToRestore.asSequence().map { it.refData.fqName }.toSortedSet() if (ApplicationManager.getApplication().isUnitTestMode) { @@ -383,6 +383,7 @@ class KotlinCopyPasteReferenceProcessor : CopyPastePostProcessor = emptyList() + @get:TestOnly + var declarationsToImportSuggested: Collection = emptyList() } }