From 8faced91929f7bbce34e15cdbb5def5ece40cdf1 Mon Sep 17 00:00:00 2001 From: Dmitry Gridin Date: Tue, 16 Jun 2020 22:41:55 +0700 Subject: [PATCH] KotlinImportOptimizer: replace `LinkedHashMap` with `HashMap` and `BodyResolveMode.FULL` with `BodyResolveMode.PARTIAL` --- .../idea/imports/OptimizedImportsBuilder.kt | 3 ++- .../kotlin/idea/imports/KotlinImportOptimizer.kt | 15 ++++++++++----- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/idea/ide-common/src/org/jetbrains/kotlin/idea/imports/OptimizedImportsBuilder.kt b/idea/ide-common/src/org/jetbrains/kotlin/idea/imports/OptimizedImportsBuilder.kt index 290f31a7156..f883b6f30f5 100644 --- a/idea/ide-common/src/org/jetbrains/kotlin/idea/imports/OptimizedImportsBuilder.kt +++ b/idea/ide-common/src/org/jetbrains/kotlin/idea/imports/OptimizedImportsBuilder.kt @@ -26,6 +26,7 @@ import org.jetbrains.kotlin.renderer.render import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.BindingTraceContext import org.jetbrains.kotlin.resolve.ImportPath +import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.resolve.lazy.FileScopeProvider import org.jetbrains.kotlin.resolve.scopes.ImportingScope import org.jetbrains.kotlin.resolve.scopes.utils.findClassifier @@ -177,7 +178,7 @@ class OptimizedImportsBuilder( ProgressManager.checkCanceled() val element = ref.element - val bindingContext = element.analyze() + val bindingContext = element.analyze(BodyResolveMode.PARTIAL) val expressionToAnalyze = getExpressionToAnalyze(element) ?: continue val newScope = element.getResolutionScope( bindingContext, diff --git a/idea/src/org/jetbrains/kotlin/idea/imports/KotlinImportOptimizer.kt b/idea/src/org/jetbrains/kotlin/idea/imports/KotlinImportOptimizer.kt index 824f697c3d1..3ff3ff8f061 100644 --- a/idea/src/org/jetbrains/kotlin/idea/imports/KotlinImportOptimizer.kt +++ b/idea/src/org/jetbrains/kotlin/idea/imports/KotlinImportOptimizer.kt @@ -29,6 +29,7 @@ import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.ImportPath import org.jetbrains.kotlin.resolve.descriptorUtil.getImportableDescriptor +import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.resolve.scopes.HierarchicalScope import org.jetbrains.kotlin.resolve.scopes.utils.* @@ -116,12 +117,16 @@ class KotlinImportOptimizer : ImportOptimizer { .mapNotNull { it.importPath } .groupBy(keySelector = { it.fqName }, valueTransform = { it.importedName as Name }) - private val descriptorsToImport = LinkedHashSet() - private val namesToImport = LinkedHashMap>() + private val descriptorsToImport = hashSetOf() + private val namesToImport = hashMapOf>() private val abstractRefs = ArrayList() val data: OptimizedImportsBuilder.InputData - get() = OptimizedImportsBuilder.InputData(descriptorsToImport, namesToImport, abstractRefs) + get() = OptimizedImportsBuilder.InputData( + descriptorsToImport, + namesToImport, + abstractRefs, + ) override fun visitElement(element: PsiElement) { ProgressIndicatorProvider.checkCanceled() @@ -144,7 +149,7 @@ class KotlinImportOptimizer : ImportOptimizer { val names = reference.resolvesByNames - val bindingContext = element.analyze() + val bindingContext = element.analyze(BodyResolveMode.PARTIAL) val targets = reference.targets(bindingContext) for (target in targets) { val importableDescriptor = target.getImportableDescriptor() @@ -160,7 +165,7 @@ class KotlinImportOptimizer : ImportOptimizer { if (isAccessibleAsMember(importableDescriptor, element, bindingContext)) continue val descriptorNames = (aliases[importableFqName].orEmpty() + importableFqName.shortName()).intersect(names) - namesToImport.getOrPut(importableFqName) { LinkedHashSet() } += descriptorNames + namesToImport.getOrPut(importableFqName) { hashSetOf() } += descriptorNames descriptorsToImport += importableDescriptor } }