KTIJ-26276 [Analysis API] Do not consider single aliased import from the same package as unused

Even when the aliased import comes from the same package, it cannot be
removed, because it will break the code

Also, add more tests for the imports coming from the same package

^KTIJ-26276 Fixed
This commit is contained in:
Roman Golyshev
2023-07-19 11:21:42 +02:00
committed by teamcity
parent 8acf6b1bd0
commit 5e30adec06
12 changed files with 145 additions and 2 deletions
@@ -67,8 +67,10 @@ internal class KtFirImportOptimizer(
val referencesEntities = usedImports
.filterNot { (fqName, referencedByNames) ->
// when referenced by more than one name, we need to keep the imports with same package
fqName.parentOrNull() == file.packageFqName && referencedByNames.size == 1
val fromCurrentPackage = fqName.parentOrNull() == file.packageFqName
val noAliasedImports = referencedByNames.singleOrNull() == fqName.shortName()
fromCurrentPackage && noAliasedImports
}
val requiredStarImports = referencesEntities.keys
@@ -52,6 +52,12 @@ public class FirIdeNormalAnalysisSourceModuleAnalysisApiImportOptimizerTestGener
runTest("analysis/analysis-api/testData/components/importOptimizer/analyseImports/unsedObjectWithExtensionFromObject.kt");
}
@Test
@TestMetadata("unusedAliasedImportFromSamePackage.kt")
public void testUnusedAliasedImportFromSamePackage() throws Exception {
runTest("analysis/analysis-api/testData/components/importOptimizer/analyseImports/unusedAliasedImportFromSamePackage.kt");
}
@Test
@TestMetadata("unusedAliasedTypeImport.kt")
public void testUnusedAliasedTypeImport() throws Exception {
@@ -94,6 +100,12 @@ public class FirIdeNormalAnalysisSourceModuleAnalysisApiImportOptimizerTestGener
runTest("analysis/analysis-api/testData/components/importOptimizer/analyseImports/unusedImportFromObject.kt");
}
@Test
@TestMetadata("unusedImportsFromSamePackage.kt")
public void testUnusedImportsFromSamePackage() throws Exception {
runTest("analysis/analysis-api/testData/components/importOptimizer/analyseImports/unusedImportsFromSamePackage.kt");
}
@Test
@TestMetadata("unusedInvokeOperatorImport.kt")
public void testUnusedInvokeOperatorImport() throws Exception {
@@ -106,12 +118,24 @@ public class FirIdeNormalAnalysisSourceModuleAnalysisApiImportOptimizerTestGener
runTest("analysis/analysis-api/testData/components/importOptimizer/analyseImports/unusedStaticFunctionImportFromJavaChildClass.kt");
}
@Test
@TestMetadata("usedAliasedAndRegularImportsFromSamePackage.kt")
public void testUsedAliasedAndRegularImportsFromSamePackage() throws Exception {
runTest("analysis/analysis-api/testData/components/importOptimizer/analyseImports/usedAliasedAndRegularImportsFromSamePackage.kt");
}
@Test
@TestMetadata("usedAliasedFunctionReference.kt")
public void testUsedAliasedFunctionReference() throws Exception {
runTest("analysis/analysis-api/testData/components/importOptimizer/analyseImports/usedAliasedFunctionReference.kt");
}
@Test
@TestMetadata("usedAliasedImportsFromSamePackage.kt")
public void testUsedAliasedImportsFromSamePackage() throws Exception {
runTest("analysis/analysis-api/testData/components/importOptimizer/analyseImports/usedAliasedImportsFromSamePackage.kt");
}
@Test
@TestMetadata("usedAliasedTypeImport.kt")
public void testUsedAliasedTypeImport() throws Exception {