From ef6e8ebb9bc63436021d6465e4fcbacfe1ce1cf5 Mon Sep 17 00:00:00 2001 From: Roman Golyshev Date: Wed, 16 Aug 2023 17:57:33 +0200 Subject: [PATCH] KTIJ-26672 [AA] Correctly handle `ConeAmbiguityError` in `KtFirImportOptimizer` Add a test case for missing call diagnostic just in case ^KTIJ-26672 Fixed --- ...duleAnalysisApiImportOptimizerTestGenerated.java | 12 ++++++++++++ .../api/fir/components/KtFirImportOptimizer.kt | 8 +++++--- ...duleAnalysisApiImportOptimizerTestGenerated.java | 12 ++++++++++++ ...duleAnalysisApiImportOptimizerTestGenerated.java | 12 ++++++++++++ .../referencesWithErrors/ambiguousFunction.imports | 1 + .../referencesWithErrors/ambiguousFunction.kt | 12 ++++++++++++ .../missingFunctionCall.imports | 1 + .../referencesWithErrors/missingFunctionCall.kt | 13 +++++++++++++ 8 files changed, 68 insertions(+), 3 deletions(-) create mode 100644 analysis/analysis-api/testData/components/importOptimizer/analyseImports/referencesWithErrors/ambiguousFunction.imports create mode 100644 analysis/analysis-api/testData/components/importOptimizer/analyseImports/referencesWithErrors/ambiguousFunction.kt create mode 100644 analysis/analysis-api/testData/components/importOptimizer/analyseImports/referencesWithErrors/missingFunctionCall.imports create mode 100644 analysis/analysis-api/testData/components/importOptimizer/analyseImports/referencesWithErrors/missingFunctionCall.kt 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 9697cfd46f9..a18f92585f7 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 @@ -241,6 +241,18 @@ public class Fe10IdeNormalAnalysisSourceModuleAnalysisApiImportOptimizerTestGene KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/components/importOptimizer/analyseImports/referencesWithErrors"), Pattern.compile("^([^.]+)\\.kt$"), null, true); } + @Test + @TestMetadata("ambiguousFunction.kt") + public void testAmbiguousFunction() throws Exception { + runTest("analysis/analysis-api/testData/components/importOptimizer/analyseImports/referencesWithErrors/ambiguousFunction.kt"); + } + + @Test + @TestMetadata("missingFunctionCall.kt") + public void testMissingFunctionCall() throws Exception { + runTest("analysis/analysis-api/testData/components/importOptimizer/analyseImports/referencesWithErrors/missingFunctionCall.kt"); + } + @Test @TestMetadata("unresolvedFunction.kt") public void testUnresolvedFunction() 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 c22fe9e9a81..5a511e8d453 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 @@ -23,6 +23,7 @@ import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.psi import org.jetbrains.kotlin.fir.realPsi import org.jetbrains.kotlin.fir.references.FirErrorNamedReference +import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeAmbiguityError import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeUnresolvedError import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeUnresolvedNameError import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeUnresolvedReferenceError @@ -300,9 +301,10 @@ internal class KtFirImportOptimizer( } private val FirErrorNamedReference.unresolvedName: Name? - get() { - val diagnostic = diagnostic as? ConeUnresolvedError ?: return null - return diagnostic.unresolvedName + get() = when (val diagnostic = diagnostic) { + is ConeUnresolvedError -> diagnostic.unresolvedName + is ConeAmbiguityError -> diagnostic.name + else -> null } private val ConeUnresolvedError.unresolvedName: Name? 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 deed0791621..bbdc628aaf6 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 @@ -241,6 +241,18 @@ public class FirIdeNormalAnalysisSourceModuleAnalysisApiImportOptimizerTestGener KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/components/importOptimizer/analyseImports/referencesWithErrors"), Pattern.compile("^([^.]+)\\.kt$"), null, true); } + @Test + @TestMetadata("ambiguousFunction.kt") + public void testAmbiguousFunction() throws Exception { + runTest("analysis/analysis-api/testData/components/importOptimizer/analyseImports/referencesWithErrors/ambiguousFunction.kt"); + } + + @Test + @TestMetadata("missingFunctionCall.kt") + public void testMissingFunctionCall() throws Exception { + runTest("analysis/analysis-api/testData/components/importOptimizer/analyseImports/referencesWithErrors/missingFunctionCall.kt"); + } + @Test @TestMetadata("unresolvedFunction.kt") public void testUnresolvedFunction() 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 ef8b3e8c1e7..5b5080b694b 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 @@ -241,6 +241,18 @@ public class FirStandaloneNormalAnalysisSourceModuleAnalysisApiImportOptimizerTe KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/components/importOptimizer/analyseImports/referencesWithErrors"), Pattern.compile("^([^.]+)\\.kt$"), null, true); } + @Test + @TestMetadata("ambiguousFunction.kt") + public void testAmbiguousFunction() throws Exception { + runTest("analysis/analysis-api/testData/components/importOptimizer/analyseImports/referencesWithErrors/ambiguousFunction.kt"); + } + + @Test + @TestMetadata("missingFunctionCall.kt") + public void testMissingFunctionCall() throws Exception { + runTest("analysis/analysis-api/testData/components/importOptimizer/analyseImports/referencesWithErrors/missingFunctionCall.kt"); + } + @Test @TestMetadata("unresolvedFunction.kt") public void testUnresolvedFunction() throws Exception { diff --git a/analysis/analysis-api/testData/components/importOptimizer/analyseImports/referencesWithErrors/ambiguousFunction.imports b/analysis/analysis-api/testData/components/importOptimizer/analyseImports/referencesWithErrors/ambiguousFunction.imports new file mode 100644 index 00000000000..8b137891791 --- /dev/null +++ b/analysis/analysis-api/testData/components/importOptimizer/analyseImports/referencesWithErrors/ambiguousFunction.imports @@ -0,0 +1 @@ + diff --git a/analysis/analysis-api/testData/components/importOptimizer/analyseImports/referencesWithErrors/ambiguousFunction.kt b/analysis/analysis-api/testData/components/importOptimizer/analyseImports/referencesWithErrors/ambiguousFunction.kt new file mode 100644 index 00000000000..1613993e862 --- /dev/null +++ b/analysis/analysis-api/testData/components/importOptimizer/analyseImports/referencesWithErrors/ambiguousFunction.kt @@ -0,0 +1,12 @@ +// FILE: main.kt +package test + +fun test() { + withOverloads() +} + +// FILE: dependency.kt +package dependency + +fun withOverloads(i: Int) {} +fun withOverloads(i: String) {} diff --git a/analysis/analysis-api/testData/components/importOptimizer/analyseImports/referencesWithErrors/missingFunctionCall.imports b/analysis/analysis-api/testData/components/importOptimizer/analyseImports/referencesWithErrors/missingFunctionCall.imports new file mode 100644 index 00000000000..8b137891791 --- /dev/null +++ b/analysis/analysis-api/testData/components/importOptimizer/analyseImports/referencesWithErrors/missingFunctionCall.imports @@ -0,0 +1 @@ + diff --git a/analysis/analysis-api/testData/components/importOptimizer/analyseImports/referencesWithErrors/missingFunctionCall.kt b/analysis/analysis-api/testData/components/importOptimizer/analyseImports/referencesWithErrors/missingFunctionCall.kt new file mode 100644 index 00000000000..339c80375e7 --- /dev/null +++ b/analysis/analysis-api/testData/components/importOptimizer/analyseImports/referencesWithErrors/missingFunctionCall.kt @@ -0,0 +1,13 @@ +// FILE: main.kt +package test + +import dependency.function + +fun test() { + function +} + +// FILE: dependency.kt +package dependency + +fun function() {}