diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/file/structure/FileStructureUtil.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/file/structure/FileStructureUtil.kt index b3ff3c5aadb..611493bf1b6 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/file/structure/FileStructureUtil.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/file/structure/FileStructureUtil.kt @@ -10,6 +10,7 @@ import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.declarations.FirFile import org.jetbrains.kotlin.fir.declarations.FirRegularClass +import org.jetbrains.kotlin.fir.render import org.jetbrains.kotlin.fir.resolve.toSymbol import org.jetbrains.kotlin.idea.fir.low.level.api.file.builder.ModuleFileCache import org.jetbrains.kotlin.idea.fir.low.level.api.util.replaceFirst @@ -29,7 +30,7 @@ internal object FileStructureUtil { firFile.declarations as MutableList } else { val classLikeLookupTag = from.containingClass() - ?: error("Class name should not be null for non-top-level & non-local declarations") + ?: error("Class name should not be null for non-top-level & non-local declarations, but was null for\n${from.render()}") val containingClass = classLikeLookupTag.toSymbol(firFile.session)?.fir as FirRegularClass containingClass.declarations as MutableList } diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/util/declarationUtils.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/util/declarationUtils.kt index fe2fffbf6fc..7d0095633e3 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/util/declarationUtils.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/util/declarationUtils.kt @@ -101,7 +101,7 @@ private fun KtDeclaration.findSourceNonLocalFirDeclarationByProvider( containerClassFir.declarations.first { it.psi === this } } this is KtTypeAlias -> findFir(firSymbolProvider) - else -> error("Invalid container $this::class") + else -> error("Invalid container ${this::class}\n${getElementTextInContext()}") } return candidate?.takeIf { it.realPsi == this } } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirCallResolver.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirCallResolver.kt index 338fc017a5c..a1deb37a83a 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirCallResolver.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirCallResolver.kt @@ -98,7 +98,7 @@ internal class KtFirCallResolver( is FirSimpleNamedReference -> error( """ - Looks like FirFunctionCall was not resolved to BODY_RESOLVE phase, + Looks like ${this::class.simpleName} && it calle reference ${calleeReference::class.simpleName} were not resolved to BODY_RESOLVE phase, consider resolving it containing declaration before starting resolve calls ${this.render()} ${(this.psi as? KtElement)?.getElementTextInContext()} diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirSymbol.kt index 3b9ce680477..b3fe3ba915e 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirSymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirSymbol.kt @@ -10,6 +10,7 @@ import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin import org.jetbrains.kotlin.fir.originalIfFakeOverride +import org.jetbrains.kotlin.fir.render import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner import org.jetbrains.kotlin.idea.frontend.api.fir.utils.FirRefWithValidityCheck import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbol @@ -35,11 +36,11 @@ private tailrec fun FirDeclaration.ktSymbolOrigin(): KtSymbolOrigin = when (orig FirDeclarationOrigin.SamConstructor -> KtSymbolOrigin.SAM_CONSTRUCTOR FirDeclarationOrigin.Enhancement -> KtSymbolOrigin.JAVA else -> { - val overridden = - (this as? FirCallableDeclaration<*>)?.originalIfFakeOverride() ?: throw InvalidFirDeclarationOriginForSymbol(origin) + val overridden = (this as? FirCallableDeclaration<*>)?.originalIfFakeOverride() + ?: throw InvalidFirDeclarationOriginForSymbol(this) overridden.ktSymbolOrigin() } } -class InvalidFirDeclarationOriginForSymbol(origin: FirDeclarationOrigin) : - IllegalStateException("Invalid FirDeclarationOrigin $origin") +class InvalidFirDeclarationOriginForSymbol(declaration: FirDeclaration) : + IllegalStateException("Invalid FirDeclarationOrigin ${declaration.origin::class.simpleName} for ${declaration.render()}" )