From 3f8fff55cf20d303ef3fe6edf02d4694e423d8c5 Mon Sep 17 00:00:00 2001 From: Roman Golyshev Date: Fri, 24 Dec 2021 16:19:36 +0300 Subject: [PATCH] FIR IDE: Fix ImportOptimizer for types used as generics' parameters --- .../api/fir/components/KtFirImportOptimizer.kt | 4 ++++ .../HLImportOptimizerTestGenerated.java | 12 ++++++++++++ ...usedTypeAsTypeParameter_missingOuterType.imports | 0 .../usedTypeAsTypeParameter_missingOuterType.kt | 13 +++++++++++++ .../analyseImports/usedTypeAsTypeParameter.imports | 0 .../analyseImports/usedTypeAsTypeParameter.kt | 13 +++++++++++++ 6 files changed, 42 insertions(+) create mode 100644 analysis/analysis-api/testData/components/importOptimizer/analyseImports/referencesWithErrors/usedTypeAsTypeParameter_missingOuterType.imports create mode 100644 analysis/analysis-api/testData/components/importOptimizer/analyseImports/referencesWithErrors/usedTypeAsTypeParameter_missingOuterType.kt create mode 100644 analysis/analysis-api/testData/components/importOptimizer/analyseImports/usedTypeAsTypeParameter.imports create mode 100644 analysis/analysis-api/testData/components/importOptimizer/analyseImports/usedTypeAsTypeParameter.kt 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 74ddb9dfbaf..f1206bd3f11 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 @@ -119,11 +119,15 @@ internal class KtFirImportOptimizer( override fun visitResolvedTypeRef(resolvedTypeRef: FirResolvedTypeRef) { processTypeRef(resolvedTypeRef) + + resolvedTypeRef.delegatedTypeRef?.accept(this) super.visitTypeRef(resolvedTypeRef) } override fun visitErrorTypeRef(errorTypeRef: FirErrorTypeRef) { processTypeRef(errorTypeRef) + + errorTypeRef.delegatedTypeRef?.accept(this) super.visitErrorTypeRef(errorTypeRef) } diff --git a/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/components/importOptimizer/HLImportOptimizerTestGenerated.java b/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/components/importOptimizer/HLImportOptimizerTestGenerated.java index 774a0b0e25b..5811f9694c4 100644 --- a/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/components/importOptimizer/HLImportOptimizerTestGenerated.java +++ b/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/components/importOptimizer/HLImportOptimizerTestGenerated.java @@ -78,6 +78,12 @@ public class HLImportOptimizerTestGenerated extends AbstractHLImportOptimizerTes runTest("analysis/analysis-api/testData/components/importOptimizer/analyseImports/usedInvokeOperatorImport.kt"); } + @Test + @TestMetadata("usedTypeAsTypeParameter.kt") + public void testUsedTypeAsTypeParameter() throws Exception { + runTest("analysis/analysis-api/testData/components/importOptimizer/analyseImports/usedTypeAsTypeParameter.kt"); + } + @Nested @TestMetadata("analysis/analysis-api/testData/components/importOptimizer/analyseImports/referencesWithErrors") @TestDataPath("$PROJECT_ROOT") @@ -117,6 +123,12 @@ public class HLImportOptimizerTestGenerated extends AbstractHLImportOptimizerTes runTest("analysis/analysis-api/testData/components/importOptimizer/analyseImports/referencesWithErrors/usedInvokeOperator_invalidArguments.kt"); } + @Test + @TestMetadata("usedTypeAsTypeParameter_missingOuterType.kt") + public void testUsedTypeAsTypeParameter_missingOuterType() throws Exception { + runTest("analysis/analysis-api/testData/components/importOptimizer/analyseImports/referencesWithErrors/usedTypeAsTypeParameter_missingOuterType.kt"); + } + @Test @TestMetadata("usedTypeImport_missingGeneric.kt") public void testUsedTypeImport_missingGeneric() throws Exception { diff --git a/analysis/analysis-api/testData/components/importOptimizer/analyseImports/referencesWithErrors/usedTypeAsTypeParameter_missingOuterType.imports b/analysis/analysis-api/testData/components/importOptimizer/analyseImports/referencesWithErrors/usedTypeAsTypeParameter_missingOuterType.imports new file mode 100644 index 00000000000..e69de29bb2d diff --git a/analysis/analysis-api/testData/components/importOptimizer/analyseImports/referencesWithErrors/usedTypeAsTypeParameter_missingOuterType.kt b/analysis/analysis-api/testData/components/importOptimizer/analyseImports/referencesWithErrors/usedTypeAsTypeParameter_missingOuterType.kt new file mode 100644 index 00000000000..b3bf7894821 --- /dev/null +++ b/analysis/analysis-api/testData/components/importOptimizer/analyseImports/referencesWithErrors/usedTypeAsTypeParameter_missingOuterType.kt @@ -0,0 +1,13 @@ +// FILE: main.kt +package test + +import dependency.Bar + +//class WithGeneric + +fun usage(p: WithGeneric) {} + +// FILE: dependency.kt +package dependency + +class Bar \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/importOptimizer/analyseImports/usedTypeAsTypeParameter.imports b/analysis/analysis-api/testData/components/importOptimizer/analyseImports/usedTypeAsTypeParameter.imports new file mode 100644 index 00000000000..e69de29bb2d diff --git a/analysis/analysis-api/testData/components/importOptimizer/analyseImports/usedTypeAsTypeParameter.kt b/analysis/analysis-api/testData/components/importOptimizer/analyseImports/usedTypeAsTypeParameter.kt new file mode 100644 index 00000000000..e11d4602cca --- /dev/null +++ b/analysis/analysis-api/testData/components/importOptimizer/analyseImports/usedTypeAsTypeParameter.kt @@ -0,0 +1,13 @@ +// FILE: main.kt +package test + +import dependency.Bar + +class WithGeneric + +fun usage(p: WithGeneric) {} + +// FILE: dependency.kt +package dependency + +class Bar \ No newline at end of file