KTIJ-26423 [AA] Return more info from KtFirImportOptimizer
Deprecate `unusedImports`, since they are supposed to be computed on the IDE side from now on based on the information from Analysis API Currently the `unusedImports` property is not removed completely so it can still be used by the Kotlin side import optimizer tests; they should be moved/adapted to the intellij repository also
This commit is contained in:
+5
-4
@@ -57,7 +57,7 @@ internal class KtFirImportOptimizer(
|
||||
|
||||
override fun analyseImports(file: KtFile): KtImportOptimizerResult {
|
||||
val existingImports = file.importDirectives
|
||||
if (existingImports.isEmpty()) return KtImportOptimizerResult(emptySet())
|
||||
if (existingImports.isEmpty()) return KtImportOptimizerResult()
|
||||
|
||||
val firFile = file.getOrBuildFirFile(firResolveSession).apply { lazyResolveToPhase(FirResolvePhase.BODY_RESOLVE) }
|
||||
|
||||
@@ -68,9 +68,10 @@ internal class KtFirImportOptimizer(
|
||||
.map { it.fqName }
|
||||
.toSet()
|
||||
|
||||
val (usedImports, unresolvedNames) = collectReferencedEntities(firFile)
|
||||
val (usedDeclarations, unresolvedNames) = collectReferencedEntities(firFile)
|
||||
|
||||
val referencesEntities = usedImports
|
||||
// TODO remove unused imports computing code completely
|
||||
val referencesEntities = usedDeclarations
|
||||
.filterNot { (fqName, referencedByNames) ->
|
||||
val fromCurrentPackage = fqName.parentOrNull() == file.packageFqName
|
||||
val noAliasedImports = referencedByNames.singleOrNull() == fqName.shortName()
|
||||
@@ -104,7 +105,7 @@ internal class KtFirImportOptimizer(
|
||||
}
|
||||
}
|
||||
|
||||
return KtImportOptimizerResult(unusedImports)
|
||||
return KtImportOptimizerResult(unusedImports, usedDeclarations, unresolvedNames)
|
||||
}
|
||||
|
||||
private data class ReferencedEntitiesResult(
|
||||
|
||||
+1
@@ -16,6 +16,7 @@ abstract class AbstractAnalysisApiImportOptimizerTest : AbstractAnalysisApiBased
|
||||
val mainKtFile = ktFiles.singleOrNull() ?: ktFiles.first { it.name == "main.kt" }
|
||||
val unusedImports = analyseForTest(mainKtFile) {
|
||||
val results = analyseImports(mainKtFile)
|
||||
@Suppress("DEPRECATION")
|
||||
results.unusedImports
|
||||
}
|
||||
|
||||
|
||||
+6
-1
@@ -7,6 +7,8 @@ package org.jetbrains.kotlin.analysis.api.components
|
||||
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeOwner
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.psi.KtImportDirective
|
||||
|
||||
@@ -28,5 +30,8 @@ public interface KtImportOptimizerMixIn : KtAnalysisSessionMixIn {
|
||||
}
|
||||
|
||||
public class KtImportOptimizerResult(
|
||||
public val unusedImports: Set<KtImportDirective>,
|
||||
@Deprecated("Compute unused import on the IntelliJ side instead, see org.jetbrains.kotlin.idea.base.analysis.api.utils.computeUnusedImports")
|
||||
public val unusedImports: Set<KtImportDirective> = emptySet(),
|
||||
public val usedDeclarations: Map<FqName, Set<Name>> = emptyMap(),
|
||||
public val unresolvedNames: Set<Name> = emptySet(),
|
||||
)
|
||||
Reference in New Issue
Block a user