From 21c46a6ddbdc9082bb23901da0b785853f2bdca1 Mon Sep 17 00:00:00 2001 From: Roman Golyshev Date: Tue, 24 Oct 2023 19:14:56 +0200 Subject: [PATCH] KTIJ-26423 [AA] Remove `KtImportOptimizerResult.unusedImports` This information is computed on the `intellij` side, and no there is no code left in `kotlin` which still requires it --- .../fir/components/KtFirImportOptimizer.kt | 45 +------------------ .../api/components/KtImportOptimizer.kt | 3 -- 2 files changed, 1 insertion(+), 47 deletions(-) diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirImportOptimizer.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirImportOptimizer.kt index facc20fc489..ebb71cea327 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirImportOptimizer.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirImportOptimizer.kt @@ -59,52 +59,9 @@ internal class KtFirImportOptimizer( if (existingImports.isEmpty()) return KtImportOptimizerResult() val firFile = file.getOrBuildFirFile(firResolveSession).apply { lazyResolveToPhaseRecursively(FirResolvePhase.BODY_RESOLVE) } - - val explicitlyImportedFqNames = existingImports - .asSequence() - .mapNotNull { it.importPath } - .filter { !it.isAllUnder && !it.hasAlias() } - .map { it.fqName } - .toSet() - val (usedDeclarations, unresolvedNames) = collectReferencedEntities(firFile) - // 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() - - fromCurrentPackage && noAliasedImports - } - - val requiredStarImports = referencesEntities.keys - .asSequence() - .filterNot { it in explicitlyImportedFqNames } - .mapNotNull { it.parentOrNull() } - .filterNot { it.isRoot } - .toSet() - - val unusedImports = mutableSetOf() - val alreadySeenImports = mutableSetOf() - - for (import in existingImports) { - val importPath = import.importPath ?: continue - - val isUsed = when { - importPath.importedName in unresolvedNames -> true - !alreadySeenImports.add(importPath) -> false - importPath.isAllUnder -> unresolvedNames.isNotEmpty() || importPath.fqName in requiredStarImports - importPath.fqName in referencesEntities -> importPath.importedName in referencesEntities.getValue(importPath.fqName) - else -> false - } - - if (!isUsed) { - unusedImports += import - } - } - - return KtImportOptimizerResult(unusedImports, usedDeclarations, unresolvedNames) + return KtImportOptimizerResult(usedDeclarations, unresolvedNames) } private data class ReferencedEntitiesResult( diff --git a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/components/KtImportOptimizer.kt b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/components/KtImportOptimizer.kt index b92dd111254..ff0f0526491 100644 --- a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/components/KtImportOptimizer.kt +++ b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/components/KtImportOptimizer.kt @@ -10,7 +10,6 @@ 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 public abstract class KtImportOptimizer : KtLifetimeOwner { public abstract fun analyseImports(file: KtFile): KtImportOptimizerResult @@ -30,8 +29,6 @@ public interface KtImportOptimizerMixIn : KtAnalysisSessionMixIn { } public class KtImportOptimizerResult( - @Deprecated("Compute unused import on the IntelliJ side instead, see org.jetbrains.kotlin.idea.base.analysis.api.utils.computeUnusedImports") - public val unusedImports: Set = emptySet(), public val usedDeclarations: Map> = emptyMap(), public val unresolvedNames: Set = emptySet(), ) \ No newline at end of file