From 6a51ddf755d814f1a4488abd9195b8ea8e0a4aca Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Fri, 7 May 2021 12:43:40 +0300 Subject: [PATCH] FirEqualityCompatibilityChecker: add exception wrapper --- .../expression/FirEqualityOperatorCallChecker.kt | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirEqualityOperatorCallChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirEqualityOperatorCallChecker.kt index a4103e3226e..fe54a1a7ce0 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirEqualityOperatorCallChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirEqualityOperatorCallChecker.kt @@ -17,6 +17,8 @@ import org.jetbrains.kotlin.fir.resolve.inference.inferenceComponents import org.jetbrains.kotlin.fir.resolve.toFirRegularClass import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.analysis.checkers.ConeTypeCompatibilityChecker.areCompatible +import org.jetbrains.kotlin.fir.declarations.FirFile +import org.jetbrains.kotlin.fir.render object FirEqualityCompatibilityChecker : FirEqualityOperatorCallChecker() { override fun check(expression: FirEqualityOperatorCall, context: CheckerContext, reporter: DiagnosticReporter) { @@ -30,7 +32,16 @@ object FirEqualityCompatibilityChecker : FirEqualityOperatorCallChecker() { val inferenceContext = context.session.inferenceComponents.ctx val intersectionType = inferenceContext.intersectTypesOrNull(listOf(lType, rType)) as? ConeIntersectionType ?: return - val compatibility = intersectionType.intersectedTypes.areCompatible(inferenceContext) + val compatibility = try { + intersectionType.intersectedTypes.areCompatible(inferenceContext) + } catch (e: Throwable) { + throw IllegalStateException( + "Exception while determining type compatibility: type ${intersectionType.render()}, " + + "equality ${expression.render()}, " + + "file ${context.containingDeclarations.filterIsInstance().firstOrNull()?.name}", + e + ) + } if (compatibility != ConeTypeCompatibilityChecker.Compatibility.COMPATIBLE) { when (expression.source?.kind) { FirRealSourceElementKind -> {