Optimize Imports shouldn't delete imports with unresolved parts
#KT-10512 Fixed
This commit is contained in:
@@ -20,7 +20,10 @@ package org.jetbrains.kotlin.idea.imports
|
||||
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.psi.KtImportDirective
|
||||
import org.jetbrains.kotlin.psi.KtNameReferenceExpression
|
||||
import org.jetbrains.kotlin.psi.KtReferenceExpression
|
||||
import org.jetbrains.kotlin.psi.psiUtil.getQualifiedElementSelector
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||
import org.jetbrains.kotlin.resolve.ImportPath
|
||||
@@ -28,7 +31,6 @@ import org.jetbrains.kotlin.resolve.bindingContextUtil.getReferenceTargets
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.getImportableDescriptor
|
||||
import org.jetbrains.kotlin.types.KotlinType
|
||||
import java.util.*
|
||||
|
||||
object ImportPathComparator : Comparator<ImportPath> {
|
||||
override fun compare(import1: ImportPath, import2: ImportPath): Int {
|
||||
@@ -92,3 +94,5 @@ fun KtReferenceExpression.getImportableTargets(bindingContext: BindingContext):
|
||||
return targets.map { it.getImportableDescriptor() }.toSet()
|
||||
}
|
||||
|
||||
fun KtImportDirective.canResolve(): Boolean = (importedReference?.getQualifiedElementSelector() as? KtNameReferenceExpression)
|
||||
?.reference?.resolve() != null ?: false
|
||||
@@ -87,6 +87,11 @@ class OptimizedImportsBuilder(
|
||||
private val importRules = HashSet<ImportRule>()
|
||||
|
||||
fun buildOptimizedImports(): List<ImportPath>? {
|
||||
file.importDirectives
|
||||
.filterNot(KtImportDirective::canResolve)
|
||||
.mapNotNull(KtImportDirective::getImportPath)
|
||||
.mapTo(importRules) { ImportRule.Add(it) }
|
||||
|
||||
while (true) {
|
||||
val importRulesBefore = importRules.size
|
||||
val result = tryBuildOptimizedImports()
|
||||
|
||||
Reference in New Issue
Block a user