FIR IDE: use withValidityAssertion instead of explicit check in FirAnalysisSession
This commit is contained in:
+13
-20
@@ -54,22 +54,20 @@ class FirAnalysisSession(
|
|||||||
assertIsValid()
|
assertIsValid()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getSmartCastedToTypes(expression: KtExpression): Collection<KtType>? {
|
override fun getSmartCastedToTypes(expression: KtExpression): Collection<KtType>? = withValidityAssertion {
|
||||||
assertIsValid()
|
|
||||||
// TODO filter out not used smartcasts
|
// TODO filter out not used smartcasts
|
||||||
return expression.getOrBuildFirSafe<FirExpressionWithSmartcast>()?.typesFromSmartCast?.map { it.asTypeInfo() }
|
expression.getOrBuildFirSafe<FirExpressionWithSmartcast>()?.typesFromSmartCast?.map { it.asTypeInfo() }
|
||||||
}
|
}
|
||||||
|
|
||||||
@OptIn(ExperimentalStdlibApi::class)
|
@OptIn(ExperimentalStdlibApi::class)
|
||||||
override fun getImplicitReceiverSmartCasts(expression: KtExpression): Collection<ImplicitReceiverSmartCast> {
|
override fun getImplicitReceiverSmartCasts(expression: KtExpression): Collection<ImplicitReceiverSmartCast> = withValidityAssertion {
|
||||||
assertIsValid()
|
|
||||||
// TODO filter out not used smartcasts
|
// TODO filter out not used smartcasts
|
||||||
val qualifiedExpression = expression.getOrBuildFirSafe<FirQualifiedAccessExpression>() ?: return emptyList()
|
val qualifiedExpression = expression.getOrBuildFirSafe<FirQualifiedAccessExpression>() ?: return emptyList()
|
||||||
if (qualifiedExpression.dispatchReceiver !is FirExpressionWithSmartcast
|
if (qualifiedExpression.dispatchReceiver !is FirExpressionWithSmartcast
|
||||||
&& qualifiedExpression.extensionReceiver !is FirExpressionWithSmartcast
|
&& qualifiedExpression.extensionReceiver !is FirExpressionWithSmartcast
|
||||||
) return emptyList()
|
) return emptyList()
|
||||||
val session = expression.session
|
val session = expression.session
|
||||||
return buildList {
|
buildList {
|
||||||
(qualifiedExpression.dispatchReceiver as? FirExpressionWithSmartcast)?.let { smartCasted ->
|
(qualifiedExpression.dispatchReceiver as? FirExpressionWithSmartcast)?.let { smartCasted ->
|
||||||
ImplicitReceiverSmartCast(
|
ImplicitReceiverSmartCast(
|
||||||
smartCasted.typesFromSmartCast.map { it.asTypeInfo() },
|
smartCasted.typesFromSmartCast.map { it.asTypeInfo() },
|
||||||
@@ -86,15 +84,13 @@ class FirAnalysisSession(
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
override fun getReturnTypeForKtDeclaration(declaration: KtDeclaration): KtType {
|
override fun getReturnTypeForKtDeclaration(declaration: KtDeclaration): KtType = withValidityAssertion {
|
||||||
assertIsValid()
|
|
||||||
val firDeclaration = declaration.getOrBuildFirOfType<FirCallableDeclaration<*>>()
|
val firDeclaration = declaration.getOrBuildFirOfType<FirCallableDeclaration<*>>()
|
||||||
return firDeclaration.returnTypeRef.coneType.asTypeInfo()
|
firDeclaration.returnTypeRef.coneType.asTypeInfo()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getKtExpressionType(expression: KtExpression): KtType {
|
override fun getKtExpressionType(expression: KtExpression): KtType = withValidityAssertion {
|
||||||
assertIsValid()
|
expression.getOrBuildFirOfType<FirExpression>().typeRef.coneType.asTypeInfo()
|
||||||
return expression.getOrBuildFirOfType<FirExpression>().typeRef.coneType.asTypeInfo()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun isSubclassOf(klass: KtClassOrObject, superClassId: ClassId): Boolean {
|
override fun isSubclassOf(klass: KtClassOrObject, superClassId: ClassId): Boolean {
|
||||||
@@ -106,19 +102,16 @@ class FirAnalysisSession(
|
|||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getDiagnosticsForElement(element: KtElement): Collection<Diagnostic> {
|
override fun getDiagnosticsForElement(element: KtElement): Collection<Diagnostic> = withValidityAssertion {
|
||||||
assertIsValid()
|
LowLevelFirApiFacade.getDiagnosticsFor(element)
|
||||||
return LowLevelFirApiFacade.getDiagnosticsFor(element)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun resolveCall(call: KtBinaryExpression): CallInfo? {
|
override fun resolveCall(call: KtBinaryExpression): CallInfo? = withValidityAssertion {
|
||||||
assertIsValid()
|
|
||||||
val firCall = call.getOrBuildFirSafe<FirFunctionCall>() ?: return null
|
val firCall = call.getOrBuildFirSafe<FirFunctionCall>() ?: return null
|
||||||
return resolveCall(firCall, call)
|
resolveCall(firCall, call)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun resolveCall(call: KtCallExpression): CallInfo? {
|
override fun resolveCall(call: KtCallExpression): CallInfo? = withValidityAssertion {
|
||||||
assertIsValid()
|
|
||||||
val firCall = when (val fir = call.getOrBuildFir()) {
|
val firCall = when (val fir = call.getOrBuildFir()) {
|
||||||
is FirFunctionCall -> fir
|
is FirFunctionCall -> fir
|
||||||
is FirSafeCallExpression -> fir.regularQualifiedAccess as? FirFunctionCall
|
is FirSafeCallExpression -> fir.regularQualifiedAccess as? FirFunctionCall
|
||||||
|
|||||||
Reference in New Issue
Block a user