[Analysis API] add more info to the error message of KtCallResolverMixIn
This commit is contained in:
+18
-13
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.analysis.api.components
|
|||||||
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.lifetime.withValidityAssertion
|
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
|
||||||
|
import org.jetbrains.kotlin.analysis.utils.printer.getElementTextInContext
|
||||||
import org.jetbrains.kotlin.psi.KtArrayAccessExpression
|
import org.jetbrains.kotlin.psi.KtArrayAccessExpression
|
||||||
import org.jetbrains.kotlin.psi.KtCallElement
|
import org.jetbrains.kotlin.psi.KtCallElement
|
||||||
import org.jetbrains.kotlin.psi.KtElement
|
import org.jetbrains.kotlin.psi.KtElement
|
||||||
@@ -23,21 +24,21 @@ public interface KtCallResolverMixIn : KtAnalysisSessionMixIn {
|
|||||||
public fun KtElement.resolveCall(): KtCallInfo? =
|
public fun KtElement.resolveCall(): KtCallInfo? =
|
||||||
withValidityAssertion { withValidityAssertion { analysisSession.callResolver.resolveCall(this) } }
|
withValidityAssertion { withValidityAssertion { analysisSession.callResolver.resolveCall(this) } }
|
||||||
|
|
||||||
public fun KtCallElement.resolveCall(): KtCallInfo =
|
public fun KtCallElement.resolveCall(): KtCallInfo = withValidityAssertion {
|
||||||
withValidityAssertion {
|
analysisSession.callResolver.resolveCall(this)
|
||||||
analysisSession.callResolver.resolveCall(this)
|
?: unresolvedKtCallError(this)
|
||||||
?: error("KtCallElement should always resolve to a KtCallInfo")
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public fun KtUnaryExpression.resolveCall(): KtCallInfo =
|
public fun KtUnaryExpression.resolveCall(): KtCallInfo = withValidityAssertion {
|
||||||
withValidityAssertion {
|
analysisSession.callResolver.resolveCall(this)
|
||||||
analysisSession.callResolver.resolveCall(this) ?: error("KtUnaryExpression should always resolve to a KtCallInfo")
|
?: unresolvedKtCallError(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
public fun KtArrayAccessExpression.resolveCall(): KtCallInfo =
|
|
||||||
withValidityAssertion {
|
public fun KtArrayAccessExpression.resolveCall(): KtCallInfo = withValidityAssertion {
|
||||||
analysisSession.callResolver.resolveCall(this) ?: error("KtArrayAccessExpression should always resolve to a KtCallInfo")
|
analysisSession.callResolver.resolveCall(this)
|
||||||
}
|
?: unresolvedKtCallError(this)
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns all the candidates considered during [overload resolution](https://kotlinlang.org/spec/overload-resolution.html) for the call
|
* Returns all the candidates considered during [overload resolution](https://kotlinlang.org/spec/overload-resolution.html) for the call
|
||||||
@@ -49,3 +50,7 @@ public interface KtCallResolverMixIn : KtAnalysisSessionMixIn {
|
|||||||
public fun KtElement.collectCallCandidates(): List<KtCallCandidateInfo> =
|
public fun KtElement.collectCallCandidates(): List<KtCallCandidateInfo> =
|
||||||
withValidityAssertion { analysisSession.callResolver.collectCallCandidates(this) }
|
withValidityAssertion { analysisSession.callResolver.collectCallCandidates(this) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private inline fun <reified PSI : KtElement> unresolvedKtCallError(element: PSI): Nothing {
|
||||||
|
error("${PSI::class.simpleName} should always resolve to a KtCallInfo\nelement: ${element::class.simpleName}\ntext:\n${element.getElementTextInContext()}")
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user