FIR IDE: add more info to error messages

This commit is contained in:
Ilya Kirillov
2021-01-09 03:23:03 +01:00
parent c131983188
commit 1901436c96
4 changed files with 9 additions and 7 deletions
@@ -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<FirDeclaration>
} 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<FirDeclaration>
}
@@ -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 }
}
@@ -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()}
@@ -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()}" )