diff --git a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/importOptimizer/Fe10IdeNormalAnalysisSourceModuleAnalysisApiImportOptimizerTestGenerated.java b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/importOptimizer/Fe10IdeNormalAnalysisSourceModuleAnalysisApiImportOptimizerTestGenerated.java index 5f151d5cbe6..037feb30558 100644 --- a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/importOptimizer/Fe10IdeNormalAnalysisSourceModuleAnalysisApiImportOptimizerTestGenerated.java +++ b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/importOptimizer/Fe10IdeNormalAnalysisSourceModuleAnalysisApiImportOptimizerTestGenerated.java @@ -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 { 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 78dedfcbe91..fc271ca5963 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 @@ -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 diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/importOptimizer/FirIdeNormalAnalysisSourceModuleAnalysisApiImportOptimizerTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/importOptimizer/FirIdeNormalAnalysisSourceModuleAnalysisApiImportOptimizerTestGenerated.java index cf48682b435..456f3ca0767 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/importOptimizer/FirIdeNormalAnalysisSourceModuleAnalysisApiImportOptimizerTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/importOptimizer/FirIdeNormalAnalysisSourceModuleAnalysisApiImportOptimizerTestGenerated.java @@ -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 { diff --git a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/importOptimizer/FirStandaloneNormalAnalysisSourceModuleAnalysisApiImportOptimizerTestGenerated.java b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/importOptimizer/FirStandaloneNormalAnalysisSourceModuleAnalysisApiImportOptimizerTestGenerated.java index b0aae99cc51..401b8759bda 100644 --- a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/importOptimizer/FirStandaloneNormalAnalysisSourceModuleAnalysisApiImportOptimizerTestGenerated.java +++ b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/importOptimizer/FirStandaloneNormalAnalysisSourceModuleAnalysisApiImportOptimizerTestGenerated.java @@ -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 { diff --git a/analysis/analysis-api/testData/components/importOptimizer/analyseImports/unusedAliasedImportFromSamePackage.imports b/analysis/analysis-api/testData/components/importOptimizer/analyseImports/unusedAliasedImportFromSamePackage.imports new file mode 100644 index 00000000000..c0d16ce60c0 --- /dev/null +++ b/analysis/analysis-api/testData/components/importOptimizer/analyseImports/unusedAliasedImportFromSamePackage.imports @@ -0,0 +1,2 @@ +test.SamePackage as Aliased +test.samePackage as aliased diff --git a/analysis/analysis-api/testData/components/importOptimizer/analyseImports/unusedAliasedImportFromSamePackage.kt b/analysis/analysis-api/testData/components/importOptimizer/analyseImports/unusedAliasedImportFromSamePackage.kt new file mode 100644 index 00000000000..08e68441d33 --- /dev/null +++ b/analysis/analysis-api/testData/components/importOptimizer/analyseImports/unusedAliasedImportFromSamePackage.kt @@ -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() +} \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/importOptimizer/analyseImports/unusedImportsFromSamePackage.imports b/analysis/analysis-api/testData/components/importOptimizer/analyseImports/unusedImportsFromSamePackage.imports new file mode 100644 index 00000000000..71dbe363d2a --- /dev/null +++ b/analysis/analysis-api/testData/components/importOptimizer/analyseImports/unusedImportsFromSamePackage.imports @@ -0,0 +1,2 @@ +test.SamePackage +test.samePackage diff --git a/analysis/analysis-api/testData/components/importOptimizer/analyseImports/unusedImportsFromSamePackage.kt b/analysis/analysis-api/testData/components/importOptimizer/analyseImports/unusedImportsFromSamePackage.kt new file mode 100644 index 00000000000..1f67f8f0bc4 --- /dev/null +++ b/analysis/analysis-api/testData/components/importOptimizer/analyseImports/unusedImportsFromSamePackage.kt @@ -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() {} diff --git a/analysis/analysis-api/testData/components/importOptimizer/analyseImports/usedAliasedAndRegularImportsFromSamePackage.imports b/analysis/analysis-api/testData/components/importOptimizer/analyseImports/usedAliasedAndRegularImportsFromSamePackage.imports new file mode 100644 index 00000000000..e69de29bb2d diff --git a/analysis/analysis-api/testData/components/importOptimizer/analyseImports/usedAliasedAndRegularImportsFromSamePackage.kt b/analysis/analysis-api/testData/components/importOptimizer/analyseImports/usedAliasedAndRegularImportsFromSamePackage.kt new file mode 100644 index 00000000000..8970a03b89c --- /dev/null +++ b/analysis/analysis-api/testData/components/importOptimizer/analyseImports/usedAliasedAndRegularImportsFromSamePackage.kt @@ -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() {} diff --git a/analysis/analysis-api/testData/components/importOptimizer/analyseImports/usedAliasedImportsFromSamePackage.imports b/analysis/analysis-api/testData/components/importOptimizer/analyseImports/usedAliasedImportsFromSamePackage.imports new file mode 100644 index 00000000000..e69de29bb2d diff --git a/analysis/analysis-api/testData/components/importOptimizer/analyseImports/usedAliasedImportsFromSamePackage.kt b/analysis/analysis-api/testData/components/importOptimizer/analyseImports/usedAliasedImportsFromSamePackage.kt new file mode 100644 index 00000000000..47491928508 --- /dev/null +++ b/analysis/analysis-api/testData/components/importOptimizer/analyseImports/usedAliasedImportsFromSamePackage.kt @@ -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() {}