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
@@ -52,6 +52,12 @@ public class Fe10IdeNormalAnalysisSourceModuleAnalysisApiImportOptimizerTestGene
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 Fe10IdeNormalAnalysisSourceModuleAnalysisApiImportOptimizerTestGene
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 Fe10IdeNormalAnalysisSourceModuleAnalysisApiImportOptimizerTestGene
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 {
@@ -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 {
@@ -52,6 +52,12 @@ public class FirStandaloneNormalAnalysisSourceModuleAnalysisApiImportOptimizerTe
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 FirStandaloneNormalAnalysisSourceModuleAnalysisApiImportOptimizerTe
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 FirStandaloneNormalAnalysisSourceModuleAnalysisApiImportOptimizerTe
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 {
@@ -0,0 +1,2 @@
test.SamePackage as Aliased
test.samePackage as aliased
@@ -0,0 +1,12 @@
package test
import test.SamePackage as Aliased
import test.samePackage as aliased
class SamePackage
fun samePackage() {}
fun usage(a: SamePackage) {
samePackage()
}
@@ -0,0 +1,2 @@
test.SamePackage
test.samePackage
@@ -0,0 +1,17 @@
// FILE: main.kt
package test
import test.SamePackage
import test.samePackage
fun usage(a: SamePackage) {
samePackage()
}
// FILE: dependency.kt
package test
class SamePackage
fun samePackage() {}
@@ -0,0 +1,20 @@
// FILE: main.kt
package test
import test.SamePackage
import test.SamePackage as Aliased
import test.samePackage
import test.samePackage as aliased
fun usage(a: Aliased, b: SamePackage) {
aliased()
samePackage()
}
// FILE: dependency.kt
package test
class SamePackage
fun samePackage() {}
@@ -0,0 +1,16 @@
// FILE: main.kt
package test
import test.SamePackage as Aliased
import test.samePackage as aliased
fun usage(a: Aliased) {
aliased()
}
// FILE: dependency.kt
package test
class SamePackage
fun samePackage() {}