From e3ad946d23177ea6449813b58df3fa3e776ce56f Mon Sep 17 00:00:00 2001 From: Dmitrii Gridin Date: Mon, 18 Sep 2023 14:32:38 +0200 Subject: [PATCH] [LL FIR] add more debug info into containingClass ^KT-61788 --- .../level/api/fir/util/declarationUtils.kt | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/util/declarationUtils.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/util/declarationUtils.kt index 3cb69827ca4..3851605e158 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/util/declarationUtils.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/util/declarationUtils.kt @@ -22,10 +22,12 @@ import org.jetbrains.kotlin.fir.psi import org.jetbrains.kotlin.fir.realPsi import org.jetbrains.kotlin.fir.resolve.providers.FirProvider import org.jetbrains.kotlin.fir.resolve.toSymbol -import org.jetbrains.kotlin.fir.types.ConeLookupTagBasedType +import org.jetbrains.kotlin.fir.utils.exceptions.withFirEntry +import org.jetbrains.kotlin.fir.utils.exceptions.withFirLookupTagEntry import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject import org.jetbrains.kotlin.psi.psiUtil.parameterIndex +import org.jetbrains.kotlin.utils.exceptions.checkWithAttachment internal fun KtDeclaration.findSourceNonLocalFirDeclaration( firFileBuilder: LLFirFileBuilder, @@ -173,11 +175,23 @@ private fun KtDeclaration.findSourceNonLocalFirDeclarationByProvider( } fun FirAnonymousInitializer.containingClass(): FirRegularClass { - val dispatchReceiverType = this.dispatchReceiverType as? ConeLookupTagBasedType - ?: error("dispatchReceiverType for FirAnonymousInitializer modifier cannot be null") + val dispatchReceiverType = this.dispatchReceiverType + checkWithAttachment( + condition = dispatchReceiverType != null, + message = { "dispatchReceiverType for ${FirAnonymousInitializer::class.simpleName} modifier cannot be null" }, + ) { + withFirEntry("initializer", this@containingClass) + } - val dispatchReceiverSymbol = dispatchReceiverType.lookupTag.toSymbol(llFirSession) - ?: error("symbol for FirAnonymousInitializer cannot be null") + val lookupTag = dispatchReceiverType.lookupTag + val dispatchReceiverSymbol = lookupTag.toSymbol(llFirSession) + checkWithAttachment( + condition = dispatchReceiverSymbol != null, + message = { "symbol for ${FirAnonymousInitializer::class.simpleName} cannot be null" }, + ) { + withFirEntry("initializer", this@containingClass) + withFirLookupTagEntry("tag", lookupTag) + } return dispatchReceiverSymbol.fir as FirRegularClass }