ImportOptimizer: cleanup code
#KT-31331
This commit is contained in:
@@ -15,6 +15,7 @@ import org.jetbrains.kotlin.descriptors.impl.TypeAliasConstructorDescriptor
|
||||
import org.jetbrains.kotlin.idea.analysis.analyzeAsReplacement
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
|
||||
import org.jetbrains.kotlin.idea.resolve.ResolutionFacade
|
||||
import org.jetbrains.kotlin.idea.resolve.frontendService
|
||||
import org.jetbrains.kotlin.idea.util.ImportInsertHelper
|
||||
import org.jetbrains.kotlin.idea.util.getResolutionScope
|
||||
@@ -82,8 +83,10 @@ class OptimizedImportsBuilder(
|
||||
fun buildOptimizedImports(): List<ImportPath>? {
|
||||
val facade = file.getResolutionFacade()
|
||||
file.importDirectives
|
||||
.filter { it.isAllUnder && data.unresolvedNames.isNotEmpty() || it.importedName in data.unresolvedNames && !it.canResolve(facade) }
|
||||
.mapNotNullTo(importRules) { it.importPath?.let { path -> ImportRule.Add(path) } }
|
||||
.asSequence()
|
||||
.filter { it.mayReferToSomeUnresolvedName() || it.isExistedUnresolvedName(facade) }
|
||||
.mapNotNull { it.importPath }
|
||||
.mapNotNullTo(importRules) { ImportRule.Add(it) }
|
||||
|
||||
while (true) {
|
||||
ProgressManager.checkCanceled()
|
||||
@@ -94,6 +97,11 @@ class OptimizedImportsBuilder(
|
||||
}
|
||||
}
|
||||
|
||||
private fun KtImportDirective.mayReferToSomeUnresolvedName() = isAllUnder && data.unresolvedNames.isNotEmpty()
|
||||
|
||||
private fun KtImportDirective.isExistedUnresolvedName(facade: ResolutionFacade) =
|
||||
importedName in data.unresolvedNames && !canResolve(facade)
|
||||
|
||||
private fun getExpressionToAnalyze(element: KtElement): KtExpression? {
|
||||
val parent = element.parent
|
||||
return when {
|
||||
|
||||
@@ -151,12 +151,7 @@ class KotlinImportOptimizer : ImportOptimizer {
|
||||
|
||||
val references = element.references.ifEmpty { return }
|
||||
val bindingContext = element.analyze(BodyResolveMode.PARTIAL)
|
||||
val isResolved = if (element is KtCallElement)
|
||||
element.getResolvedCall(bindingContext) != null
|
||||
else
|
||||
element.mainReference?.resolveToDescriptors(bindingContext)?.let { descriptors ->
|
||||
descriptors.isNotEmpty() && descriptors.none { it is ErrorSimpleFunctionDescriptorImpl }
|
||||
} == true
|
||||
val isResolved = hasResolvedDescriptor(element, bindingContext)
|
||||
|
||||
for (reference in references) {
|
||||
if (reference !is KtReference) continue
|
||||
@@ -302,3 +297,11 @@ class KotlinImportOptimizer : ImportOptimizer {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun hasResolvedDescriptor(element: KtElement, bindingContext: BindingContext): Boolean =
|
||||
if (element is KtCallElement)
|
||||
element.getResolvedCall(bindingContext) != null
|
||||
else
|
||||
element.mainReference?.resolveToDescriptors(bindingContext)?.let { descriptors ->
|
||||
descriptors.isNotEmpty() && descriptors.none { it is ErrorSimpleFunctionDescriptorImpl }
|
||||
} == true
|
||||
|
||||
Reference in New Issue
Block a user