From 5ec626b29db78362dfe22437dc1d0b46b87f904e Mon Sep 17 00:00:00 2001 From: Roman Golyshev Date: Mon, 30 Jan 2023 11:21:11 +0100 Subject: [PATCH] [Analysis API] KTIJ-24453 Handle `TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM` error in KtFe10CallResolver.kt It makes call with such type of errors completely unresolvable in Analysis API ^KTIJ-24453 Fixed --- .../descriptors/components/KtFe10CallResolver.kt | 13 ++++++++----- ...nalysisSourceModuleResolveCallTestGenerated.java | 6 ++++++ ...nalysisSourceModuleResolveCallTestGenerated.java | 6 ++++++ ...nalysisSourceModuleResolveCallTestGenerated.java | 6 ++++++ .../typecheckerRecursiveError.descriptors.txt | 3 +++ .../resolveCall/typecheckerRecursiveError.kt | 1 + .../resolveCall/typecheckerRecursiveError.txt | 3 +++ 7 files changed, 33 insertions(+), 5 deletions(-) create mode 100644 analysis/analysis-api/testData/components/callResolver/resolveCall/typecheckerRecursiveError.descriptors.txt create mode 100644 analysis/analysis-api/testData/components/callResolver/resolveCall/typecheckerRecursiveError.kt create mode 100644 analysis/analysis-api/testData/components/callResolver/resolveCall/typecheckerRecursiveError.txt diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/components/KtFe10CallResolver.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/components/KtFe10CallResolver.kt index 8a3ca76a6b3..01053b69abe 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/components/KtFe10CallResolver.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/components/KtFe10CallResolver.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.analysis.api.descriptors.components +import com.intellij.psi.PsiElement import org.jetbrains.kotlin.analysis.api.calls.* import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode import org.jetbrains.kotlin.analysis.api.descriptors.KtFe10AnalysisSession @@ -28,10 +29,7 @@ import org.jetbrains.kotlin.analysis.api.types.KtType import org.jetbrains.kotlin.analysis.utils.printer.parentOfType import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.descriptors.* -import org.jetbrains.kotlin.diagnostics.DiagnosticWithParameters1 -import org.jetbrains.kotlin.diagnostics.DiagnosticWithParameters2 -import org.jetbrains.kotlin.diagnostics.Errors -import org.jetbrains.kotlin.diagnostics.Severity +import org.jetbrains.kotlin.diagnostics.* import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.getPossiblyQualifiedCallExpression @@ -98,7 +96,8 @@ internal class KtFe10CallResolver( Errors.REDUNDANT_SPREAD_OPERATOR_IN_NAMED_FORM_IN_ANNOTATION, *Errors.TYPE_MISMATCH_ERRORS.toTypedArray(), ) - private val resolutionFailureErrors = setOf( + + private val resolutionFailureErrors: Set> = setOf( Errors.INVISIBLE_MEMBER, Errors.NO_VALUE_FOR_PARAMETER, Errors.MISSING_RECEIVER, @@ -122,6 +121,7 @@ internal class KtFe10CallResolver( Errors.PARENTHESIZED_COMPANION_LHS_DEPRECATION, Errors.RESOLUTION_TO_PRIVATE_CONSTRUCTOR_OF_SEALED_CLASS, Errors.UNRESOLVED_REFERENCE, + *Errors.TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM.factories, ) private val syntaxErrors = setOf( @@ -143,6 +143,9 @@ internal class KtFe10CallResolver( Errors.DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE, Errors.DELEGATE_PD_METHOD_NONE_APPLICABLE, ) + + private val DiagnosticFactoryForDeprecation<*, *, *>.factories: Array> + get() = arrayOf(warningFactory, errorFactory) } override val token: KtLifetimeToken diff --git a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/callResolver/Fe10IdeNormalAnalysisSourceModuleResolveCallTestGenerated.java b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/callResolver/Fe10IdeNormalAnalysisSourceModuleResolveCallTestGenerated.java index a4ebe9fb592..3e68dacba61 100644 --- a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/callResolver/Fe10IdeNormalAnalysisSourceModuleResolveCallTestGenerated.java +++ b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/callResolver/Fe10IdeNormalAnalysisSourceModuleResolveCallTestGenerated.java @@ -772,6 +772,12 @@ public class Fe10IdeNormalAnalysisSourceModuleResolveCallTestGenerated extends A runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/superTypeCallEntryResolveToCallInfo.kt"); } + @Test + @TestMetadata("typecheckerRecursiveError.kt") + public void testTypecheckerRecursiveError() throws Exception { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/typecheckerRecursiveError.kt"); + } + @Test @TestMetadata("unresolvableOperator_elvis_1.kt") public void testUnresolvableOperator_elvis_1() throws Exception { diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/callResolver/FirIdeNormalAnalysisSourceModuleResolveCallTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/callResolver/FirIdeNormalAnalysisSourceModuleResolveCallTestGenerated.java index 315326751aa..d1fa5a23ff0 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/callResolver/FirIdeNormalAnalysisSourceModuleResolveCallTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/callResolver/FirIdeNormalAnalysisSourceModuleResolveCallTestGenerated.java @@ -772,6 +772,12 @@ public class FirIdeNormalAnalysisSourceModuleResolveCallTestGenerated extends Ab runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/superTypeCallEntryResolveToCallInfo.kt"); } + @Test + @TestMetadata("typecheckerRecursiveError.kt") + public void testTypecheckerRecursiveError() throws Exception { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/typecheckerRecursiveError.kt"); + } + @Test @TestMetadata("unresolvableOperator_elvis_1.kt") public void testUnresolvableOperator_elvis_1() throws Exception { diff --git a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/callResolver/FirStandaloneNormalAnalysisSourceModuleResolveCallTestGenerated.java b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/callResolver/FirStandaloneNormalAnalysisSourceModuleResolveCallTestGenerated.java index a28274068e5..24f676de3d1 100644 --- a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/callResolver/FirStandaloneNormalAnalysisSourceModuleResolveCallTestGenerated.java +++ b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/callResolver/FirStandaloneNormalAnalysisSourceModuleResolveCallTestGenerated.java @@ -772,6 +772,12 @@ public class FirStandaloneNormalAnalysisSourceModuleResolveCallTestGenerated ext runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/superTypeCallEntryResolveToCallInfo.kt"); } + @Test + @TestMetadata("typecheckerRecursiveError.kt") + public void testTypecheckerRecursiveError() throws Exception { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/typecheckerRecursiveError.kt"); + } + @Test @TestMetadata("unresolvableOperator_elvis_1.kt") public void testUnresolvableOperator_elvis_1() throws Exception { diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/typecheckerRecursiveError.descriptors.txt b/analysis/analysis-api/testData/components/callResolver/resolveCall/typecheckerRecursiveError.descriptors.txt new file mode 100644 index 00000000000..b8c8e8b9c4c --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/typecheckerRecursiveError.descriptors.txt @@ -0,0 +1,3 @@ +KtErrorCallInfo: + candidateCalls = [] + diagnostic = ERROR diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/typecheckerRecursiveError.kt b/analysis/analysis-api/testData/components/callResolver/resolveCall/typecheckerRecursiveError.kt new file mode 100644 index 00000000000..8c196479874 --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/typecheckerRecursiveError.kt @@ -0,0 +1 @@ +val function = function() diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/typecheckerRecursiveError.txt b/analysis/analysis-api/testData/components/callResolver/resolveCall/typecheckerRecursiveError.txt new file mode 100644 index 00000000000..531dff3f7ec --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/typecheckerRecursiveError.txt @@ -0,0 +1,3 @@ +KtErrorCallInfo: + candidateCalls = [] + diagnostic = ERROR \ No newline at end of file