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.analysis.analyzeAsReplacement
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
|
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.resolve.frontendService
|
||||||
import org.jetbrains.kotlin.idea.util.ImportInsertHelper
|
import org.jetbrains.kotlin.idea.util.ImportInsertHelper
|
||||||
import org.jetbrains.kotlin.idea.util.getResolutionScope
|
import org.jetbrains.kotlin.idea.util.getResolutionScope
|
||||||
@@ -82,8 +83,10 @@ class OptimizedImportsBuilder(
|
|||||||
fun buildOptimizedImports(): List<ImportPath>? {
|
fun buildOptimizedImports(): List<ImportPath>? {
|
||||||
val facade = file.getResolutionFacade()
|
val facade = file.getResolutionFacade()
|
||||||
file.importDirectives
|
file.importDirectives
|
||||||
.filter { it.isAllUnder && data.unresolvedNames.isNotEmpty() || it.importedName in data.unresolvedNames && !it.canResolve(facade) }
|
.asSequence()
|
||||||
.mapNotNullTo(importRules) { it.importPath?.let { path -> ImportRule.Add(path) } }
|
.filter { it.mayReferToSomeUnresolvedName() || it.isExistedUnresolvedName(facade) }
|
||||||
|
.mapNotNull { it.importPath }
|
||||||
|
.mapNotNullTo(importRules) { ImportRule.Add(it) }
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
ProgressManager.checkCanceled()
|
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? {
|
private fun getExpressionToAnalyze(element: KtElement): KtExpression? {
|
||||||
val parent = element.parent
|
val parent = element.parent
|
||||||
return when {
|
return when {
|
||||||
|
|||||||
@@ -151,12 +151,7 @@ class KotlinImportOptimizer : ImportOptimizer {
|
|||||||
|
|
||||||
val references = element.references.ifEmpty { return }
|
val references = element.references.ifEmpty { return }
|
||||||
val bindingContext = element.analyze(BodyResolveMode.PARTIAL)
|
val bindingContext = element.analyze(BodyResolveMode.PARTIAL)
|
||||||
val isResolved = if (element is KtCallElement)
|
val isResolved = hasResolvedDescriptor(element, bindingContext)
|
||||||
element.getResolvedCall(bindingContext) != null
|
|
||||||
else
|
|
||||||
element.mainReference?.resolveToDescriptors(bindingContext)?.let { descriptors ->
|
|
||||||
descriptors.isNotEmpty() && descriptors.none { it is ErrorSimpleFunctionDescriptorImpl }
|
|
||||||
} == true
|
|
||||||
|
|
||||||
for (reference in references) {
|
for (reference in references) {
|
||||||
if (reference !is KtReference) continue
|
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