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`
This commit is contained in:
+1
-1
@@ -16,7 +16,7 @@ import org.jetbrains.kotlin.psi.KtExpression
|
|||||||
|
|
||||||
class KtFirInvokeFunctionReference(expression: KtCallExpression) : KtInvokeFunctionReference(expression), KtFirReference {
|
class KtFirInvokeFunctionReference(expression: KtCallExpression) : KtInvokeFunctionReference(expression), KtFirReference {
|
||||||
override fun KtAnalysisSession.resolveToSymbols(): Collection<KtSymbol> {
|
override fun KtAnalysisSession.resolveToSymbols(): Collection<KtSymbol> {
|
||||||
return expression.resolveCall().calls.mapNotNull { call ->
|
return expression.resolveCall()?.calls.orEmpty().mapNotNull { call ->
|
||||||
(call as? KtSimpleFunctionCall)
|
(call as? KtSimpleFunctionCall)
|
||||||
?.takeIf { it.isImplicitInvoke }
|
?.takeIf { it.isImplicitInvoke }
|
||||||
?.partiallyAppliedSymbol
|
?.partiallyAppliedSymbol
|
||||||
|
|||||||
+3
-17
@@ -8,8 +8,6 @@ package org.jetbrains.kotlin.analysis.api.components
|
|||||||
import org.jetbrains.kotlin.analysis.api.KtAnalysisApiInternals
|
import org.jetbrains.kotlin.analysis.api.KtAnalysisApiInternals
|
||||||
import org.jetbrains.kotlin.analysis.api.calls.KtCallCandidateInfo
|
import org.jetbrains.kotlin.analysis.api.calls.KtCallCandidateInfo
|
||||||
import org.jetbrains.kotlin.analysis.api.calls.KtCallInfo
|
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.analysis.api.lifetime.withValidityAssertion
|
||||||
import org.jetbrains.kotlin.psi.KtArrayAccessExpression
|
import org.jetbrains.kotlin.psi.KtArrayAccessExpression
|
||||||
import org.jetbrains.kotlin.psi.KtCallElement
|
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 resolveCall(psi: KtElement): KtCallInfo?
|
||||||
|
|
||||||
public abstract fun collectCallCandidates(psi: KtElement): List<KtCallCandidateInfo>
|
public abstract fun collectCallCandidates(psi: KtElement): List<KtCallCandidateInfo>
|
||||||
|
|
||||||
@KtAnalysisApiInternals
|
|
||||||
public fun unresolvedKtCallError(psi: KtElement): KtErrorCallInfo {
|
|
||||||
return KtErrorCallInfo(
|
|
||||||
_candidateCalls = emptyList(),
|
|
||||||
KtNonBoundToPsiErrorDiagnostic(factoryName = null, "Unresolved call", token),
|
|
||||||
token
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@OptIn(KtAnalysisApiInternals::class)
|
@OptIn(KtAnalysisApiInternals::class)
|
||||||
@@ -37,20 +26,17 @@ public interface KtCallResolverMixIn : KtAnalysisSessionMixIn {
|
|||||||
public fun KtElement.resolveCall(): KtCallInfo? =
|
public fun KtElement.resolveCall(): KtCallInfo? =
|
||||||
withValidityAssertion { analysisSession.callResolver.resolveCall(this) }
|
withValidityAssertion { analysisSession.callResolver.resolveCall(this) }
|
||||||
|
|
||||||
public fun KtCallElement.resolveCall(): KtCallInfo = withValidityAssertion {
|
public fun KtCallElement.resolveCall(): KtCallInfo? = withValidityAssertion {
|
||||||
analysisSession.callResolver.resolveCall(this)
|
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.resolveCall(this)
|
||||||
?: analysisSession.callResolver.unresolvedKtCallError(this)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public fun KtArrayAccessExpression.resolveCall(): KtCallInfo = withValidityAssertion {
|
public fun KtArrayAccessExpression.resolveCall(): KtCallInfo? = withValidityAssertion {
|
||||||
analysisSession.callResolver.resolveCall(this)
|
analysisSession.callResolver.resolveCall(this)
|
||||||
?: analysisSession.callResolver.unresolvedKtCallError(this)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
+1
-1
@@ -62,7 +62,7 @@ internal abstract class SymbolLightAbstractAnnotation(parent: PsiElement) :
|
|||||||
val callElement = kotlinOrigin ?: return null
|
val callElement = kotlinOrigin ?: return null
|
||||||
return analyzeForLightClasses(callElement) {
|
return analyzeForLightClasses(callElement) {
|
||||||
val valueParameter = callElement.resolveCall()
|
val valueParameter = callElement.resolveCall()
|
||||||
.singleConstructorCallOrNull()
|
?.singleConstructorCallOrNull()
|
||||||
?.symbol
|
?.symbol
|
||||||
?.valueParameters
|
?.valueParameters
|
||||||
?.find { it.name.identifierOrNullIfSpecial == attributeName }
|
?.find { it.name.identifierOrNullIfSpecial == attributeName }
|
||||||
|
|||||||
Reference in New Issue
Block a user