From 6caf6858fa7891fd2d837098df124686fe057663 Mon Sep 17 00:00:00 2001 From: Dmitry Gridin Date: Wed, 3 Apr 2019 16:01:25 +0700 Subject: [PATCH] Minor: refactoring KotlinAddImportAction --- .../idea/actions/KotlinAddImportAction.kt | 89 ++++++++++--------- 1 file changed, 47 insertions(+), 42 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/actions/KotlinAddImportAction.kt b/idea/src/org/jetbrains/kotlin/idea/actions/KotlinAddImportAction.kt index fa51c30f8ff..837be9ab754 100644 --- a/idea/src/org/jetbrains/kotlin/idea/actions/KotlinAddImportAction.kt +++ b/idea/src/org/jetbrains/kotlin/idea/actions/KotlinAddImportAction.kt @@ -54,10 +54,10 @@ import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtSimpleNameExpression internal fun createSingleImportAction( - project: Project, - editor: Editor, - element: KtElement, - fqNames: Collection + project: Project, + editor: Editor, + element: KtElement, + fqNames: Collection ): KotlinAddImportAction { val file = element.containingKtFile val prioritizer = Prioritizer(element.containingKtFile) @@ -71,17 +71,17 @@ internal fun createSingleImportAction( } internal fun createSingleImportActionForConstructor( - project: Project, - editor: Editor, - element: KtElement, - fqNames: Collection + project: Project, + editor: Editor, + element: KtElement, + fqNames: Collection ): KotlinAddImportAction { val file = element.containingKtFile val prioritizer = Prioritizer(element.containingKtFile) val variants = fqNames.mapNotNull { fqName -> val sameFqNameDescriptors = file.resolveImportReference(fqName.parent()) - .filterIsInstance() - .flatMap { it.constructors } + .filterIsInstance() + .flatMap { it.constructors } val priority = sameFqNameDescriptors.asSequence().map { prioritizer.priority(it) }.min() ?: return@mapNotNull null Prioritizer.VariantWithPriority(SingleImportVariant(fqName, sameFqNameDescriptors), priority) @@ -90,34 +90,33 @@ internal fun createSingleImportActionForConstructor( } internal fun createGroupedImportsAction( - project: Project, - editor: Editor, - element: KtElement, - autoImportDescription: String, - fqNames: Collection + project: Project, + editor: Editor, + element: KtElement, + autoImportDescription: String, + fqNames: Collection ): KotlinAddImportAction { val prioritizer = DescriptorGroupPrioritizer(element.containingKtFile) val file = element.containingKtFile val variants = fqNames - .groupBy { it.parentOrNull() ?: FqName.ROOT } - .map { - val samePackageFqNames = it.value - val descriptors = samePackageFqNames.flatMap { file.resolveImportReference(it) } - val variant = if (samePackageFqNames.size > 1) { - GroupedImportVariant(autoImportDescription, descriptors) - } - else { - SingleImportVariant(samePackageFqNames.first(), descriptors) - } + .groupBy { it.parentOrNull() ?: FqName.ROOT } + .map { + val samePackageFqNames = it.value + val descriptors = samePackageFqNames.flatMap { fqName -> file.resolveImportReference(fqName) } + val variant = if (samePackageFqNames.size > 1) { + GroupedImportVariant(autoImportDescription, descriptors) + } else { + SingleImportVariant(samePackageFqNames.first(), descriptors) + } - val priority = prioritizer.priority(descriptors) - DescriptorGroupPrioritizer.VariantWithPriority(variant, priority) - } - .sortedBy { - it.priority - } - .map { it.variant } + val priority = prioritizer.priority(descriptors) + DescriptorGroupPrioritizer.VariantWithPriority(variant, priority) + } + .sortedBy { + it.priority + } + .map { it.variant } return KotlinAddImportAction(project, editor, element, variants) } @@ -127,10 +126,11 @@ internal fun createGroupedImportsAction( * Based on {@link AddImportAction} */ class KotlinAddImportAction internal constructor( - private val project: Project, - private val editor: Editor, - private val element: KtElement, - private val variants: List) : QuestionAction { + private val project: Project, + private val editor: Editor, + private val element: KtElement, + private val variants: List +) : QuestionAction { fun showHint(): Boolean { if (variants.isEmpty()) return false @@ -212,7 +212,10 @@ class KotlinAddImportAction internal constructor( // insert partly qualified name if (descriptor is ClassDescriptor || descriptor is PackageViewDescriptor) { if (element is KtSimpleNameExpression) { - element.mainReference.bindToFqName(descriptor.importableFqName!!, KtSimpleNameReference.ShorteningMode.FORCED_SHORTENING) + element.mainReference.bindToFqName( + descriptor.importableFqName!!, + KtSimpleNameReference.ShorteningMode.FORCED_SHORTENING + ) } } else { ImportInsertHelper.getInstance(project).importDescriptor(file, descriptor) @@ -283,20 +286,22 @@ internal interface AutoImportVariant { fun icon(project: Project) = KotlinDescriptorIconProvider.getIcon(descriptorsToImport.first(), declarationToImport(project), 0) fun declarationToImport(project: Project): PsiElement? = - DescriptorToSourceUtilsIde.getAnyDeclaration(project, descriptorsToImport.first()) + DescriptorToSourceUtilsIde.getAnyDeclaration(project, descriptorsToImport.first()) } -private class GroupedImportVariant(val autoImportDescription: String, val descriptors: Collection) : AutoImportVariant { +private class GroupedImportVariant(val autoImportDescription: String, val descriptors: Collection) : + AutoImportVariant { override val excludeFqNameCheck: FqName = descriptors.first().importableFqName!!.parent() override val descriptorsToImport: Collection get() = descriptors override val hint: String get() = "$autoImportDescription from $excludeFqNameCheck" } private class SingleImportVariant( - override val excludeFqNameCheck: FqName, - val descriptors: Collection + override val excludeFqNameCheck: FqName, + val descriptors: Collection ) : AutoImportVariant { - override val descriptorsToImport: Collection get() = + override val descriptorsToImport: Collection + get() = listOf(descriptors.singleOrNull() ?: descriptors.sortedBy { if (it is ClassDescriptor) 0 else 1 }.first()) override val hint: String get() = excludeFqNameCheck.asString()