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 037feb30558..3c042df8f8b 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 @@ -94,6 +94,12 @@ public class Fe10IdeNormalAnalysisSourceModuleAnalysisApiImportOptimizerTestGene runTest("analysis/analysis-api/testData/components/importOptimizer/analyseImports/unusedGenericTypeQualifier.kt"); } + @Test + @TestMetadata("unusedImplicitReturnTypeReference_destructuring.kt") + public void testUnusedImplicitReturnTypeReference_destructuring() throws Exception { + runTest("analysis/analysis-api/testData/components/importOptimizer/analyseImports/unusedImplicitReturnTypeReference_destructuring.kt"); + } + @Test @TestMetadata("unusedImportFromObject.kt") public void testUnusedImportFromObject() 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 74f0027e8bc..9d6be81bfea 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 @@ -506,6 +506,8 @@ private sealed interface TypeQualifier { } fun createFor(typeRef: FirResolvedTypeRef): TypeQualifier? { + if (typeRef.source?.kind !is KtRealSourceElementKind) return null + val wholeClassId = typeRef.resolvedClassId ?: return null val psi = typeRef.psi as? KtTypeReference ?: return null 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 456f3ca0767..ddf0fd9b96d 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 @@ -94,6 +94,12 @@ public class FirIdeNormalAnalysisSourceModuleAnalysisApiImportOptimizerTestGener runTest("analysis/analysis-api/testData/components/importOptimizer/analyseImports/unusedGenericTypeQualifier.kt"); } + @Test + @TestMetadata("unusedImplicitReturnTypeReference_destructuring.kt") + public void testUnusedImplicitReturnTypeReference_destructuring() throws Exception { + runTest("analysis/analysis-api/testData/components/importOptimizer/analyseImports/unusedImplicitReturnTypeReference_destructuring.kt"); + } + @Test @TestMetadata("unusedImportFromObject.kt") public void testUnusedImportFromObject() 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 401b8759bda..6f89a2fb139 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 @@ -94,6 +94,12 @@ public class FirStandaloneNormalAnalysisSourceModuleAnalysisApiImportOptimizerTe runTest("analysis/analysis-api/testData/components/importOptimizer/analyseImports/unusedGenericTypeQualifier.kt"); } + @Test + @TestMetadata("unusedImplicitReturnTypeReference_destructuring.kt") + public void testUnusedImplicitReturnTypeReference_destructuring() throws Exception { + runTest("analysis/analysis-api/testData/components/importOptimizer/analyseImports/unusedImplicitReturnTypeReference_destructuring.kt"); + } + @Test @TestMetadata("unusedImportFromObject.kt") public void testUnusedImportFromObject() throws Exception { diff --git a/analysis/analysis-api/testData/components/importOptimizer/analyseImports/unusedImplicitReturnTypeReference_destructuring.imports b/analysis/analysis-api/testData/components/importOptimizer/analyseImports/unusedImplicitReturnTypeReference_destructuring.imports new file mode 100644 index 00000000000..57c8b370b4c --- /dev/null +++ b/analysis/analysis-api/testData/components/importOptimizer/analyseImports/unusedImplicitReturnTypeReference_destructuring.imports @@ -0,0 +1,3 @@ +dependency.Bar +dependency.One +dependency.Two diff --git a/analysis/analysis-api/testData/components/importOptimizer/analyseImports/unusedImplicitReturnTypeReference_destructuring.kt b/analysis/analysis-api/testData/components/importOptimizer/analyseImports/unusedImplicitReturnTypeReference_destructuring.kt new file mode 100644 index 00000000000..c95eec4944f --- /dev/null +++ b/analysis/analysis-api/testData/components/importOptimizer/analyseImports/unusedImplicitReturnTypeReference_destructuring.kt @@ -0,0 +1,21 @@ +// FILE: main.kt +package test + +import dependency.foo +import dependency.Bar +import dependency.One +import dependency.Two + +fun usage() { + val (one, two) = foo() +} + +// FILE: dependency.kt +package dependency + +fun foo(): Bar = Bar() + +data class Bar(val one: One, val two: Two) + +class One +class Two