From 50c93b02283fcd6c9bf18d7ecc268699d75e1fe1 Mon Sep 17 00:00:00 2001 From: Roman Golyshev Date: Tue, 20 Jun 2023 17:06:16 +0200 Subject: [PATCH] KT-59093 [Analysis API] Make all `resolveCall` overloads nullable Instead of returning an error which does not mean anything specific, it's easier just to return `null` --- .../KtFirInvokeFunctionReference.kt | 2 +- .../analysis/api/components/KtCallResolver.kt | 20 +++---------------- .../SymbolLightAbstractAnnotation.kt | 2 +- 3 files changed, 5 insertions(+), 19 deletions(-) diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/references/KtFirInvokeFunctionReference.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/references/KtFirInvokeFunctionReference.kt index 8c24bc76062..6b8e279a9a8 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/references/KtFirInvokeFunctionReference.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/references/KtFirInvokeFunctionReference.kt @@ -16,7 +16,7 @@ import org.jetbrains.kotlin.psi.KtExpression class KtFirInvokeFunctionReference(expression: KtCallExpression) : KtInvokeFunctionReference(expression), KtFirReference { override fun KtAnalysisSession.resolveToSymbols(): Collection { - return expression.resolveCall().calls.mapNotNull { call -> + return expression.resolveCall()?.calls.orEmpty().mapNotNull { call -> (call as? KtSimpleFunctionCall) ?.takeIf { it.isImplicitInvoke } ?.partiallyAppliedSymbol diff --git a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/components/KtCallResolver.kt b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/components/KtCallResolver.kt index 22bc7911c7e..90615820040 100644 --- a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/components/KtCallResolver.kt +++ b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/components/KtCallResolver.kt @@ -8,8 +8,6 @@ package org.jetbrains.kotlin.analysis.api.components import org.jetbrains.kotlin.analysis.api.KtAnalysisApiInternals import org.jetbrains.kotlin.analysis.api.calls.KtCallCandidateInfo import org.jetbrains.kotlin.analysis.api.calls.KtCallInfo -import org.jetbrains.kotlin.analysis.api.calls.KtErrorCallInfo -import org.jetbrains.kotlin.analysis.api.diagnostics.KtNonBoundToPsiErrorDiagnostic import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion import org.jetbrains.kotlin.psi.KtArrayAccessExpression import org.jetbrains.kotlin.psi.KtCallElement @@ -20,15 +18,6 @@ public abstract class KtCallResolver : KtAnalysisSessionComponent() { public abstract fun resolveCall(psi: KtElement): KtCallInfo? public abstract fun collectCallCandidates(psi: KtElement): List - - @KtAnalysisApiInternals - public fun unresolvedKtCallError(psi: KtElement): KtErrorCallInfo { - return KtErrorCallInfo( - _candidateCalls = emptyList(), - KtNonBoundToPsiErrorDiagnostic(factoryName = null, "Unresolved call", token), - token - ) - } } @OptIn(KtAnalysisApiInternals::class) @@ -37,20 +26,17 @@ public interface KtCallResolverMixIn : KtAnalysisSessionMixIn { public fun KtElement.resolveCall(): KtCallInfo? = withValidityAssertion { analysisSession.callResolver.resolveCall(this) } - public fun KtCallElement.resolveCall(): KtCallInfo = withValidityAssertion { + public fun KtCallElement.resolveCall(): KtCallInfo? = withValidityAssertion { analysisSession.callResolver.resolveCall(this) - ?: analysisSession.callResolver.unresolvedKtCallError(this) } - public fun KtUnaryExpression.resolveCall(): KtCallInfo = withValidityAssertion { + public fun KtUnaryExpression.resolveCall(): KtCallInfo? = withValidityAssertion { analysisSession.callResolver.resolveCall(this) - ?: analysisSession.callResolver.unresolvedKtCallError(this) } - public fun KtArrayAccessExpression.resolveCall(): KtCallInfo = withValidityAssertion { + public fun KtArrayAccessExpression.resolveCall(): KtCallInfo? = withValidityAssertion { analysisSession.callResolver.resolveCall(this) - ?: analysisSession.callResolver.unresolvedKtCallError(this) } /** diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/SymbolLightAbstractAnnotation.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/SymbolLightAbstractAnnotation.kt index 7f317a58391..d0f5f2c1bf3 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/SymbolLightAbstractAnnotation.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/SymbolLightAbstractAnnotation.kt @@ -62,7 +62,7 @@ internal abstract class SymbolLightAbstractAnnotation(parent: PsiElement) : val callElement = kotlinOrigin ?: return null return analyzeForLightClasses(callElement) { val valueParameter = callElement.resolveCall() - .singleConstructorCallOrNull() + ?.singleConstructorCallOrNull() ?.symbol ?.valueParameters ?.find { it.name.identifierOrNullIfSpecial == attributeName }