FIR IDE: add more info to error messages
This commit is contained in:
+2
-1
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration
|
|||||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
||||||
|
import org.jetbrains.kotlin.fir.render
|
||||||
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
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.file.builder.ModuleFileCache
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.util.replaceFirst
|
import org.jetbrains.kotlin.idea.fir.low.level.api.util.replaceFirst
|
||||||
@@ -29,7 +30,7 @@ internal object FileStructureUtil {
|
|||||||
firFile.declarations as MutableList<FirDeclaration>
|
firFile.declarations as MutableList<FirDeclaration>
|
||||||
} else {
|
} else {
|
||||||
val classLikeLookupTag = from.containingClass()
|
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
|
val containingClass = classLikeLookupTag.toSymbol(firFile.session)?.fir as FirRegularClass
|
||||||
containingClass.declarations as MutableList<FirDeclaration>
|
containingClass.declarations as MutableList<FirDeclaration>
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -101,7 +101,7 @@ private fun KtDeclaration.findSourceNonLocalFirDeclarationByProvider(
|
|||||||
containerClassFir.declarations.first { it.psi === this }
|
containerClassFir.declarations.first { it.psi === this }
|
||||||
}
|
}
|
||||||
this is KtTypeAlias -> findFir(firSymbolProvider)
|
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 }
|
return candidate?.takeIf { it.realPsi == this }
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -98,7 +98,7 @@ internal class KtFirCallResolver(
|
|||||||
is FirSimpleNamedReference ->
|
is FirSimpleNamedReference ->
|
||||||
error(
|
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
|
consider resolving it containing declaration before starting resolve calls
|
||||||
${this.render()}
|
${this.render()}
|
||||||
${(this.psi as? KtElement)?.getElementTextInContext()}
|
${(this.psi as? KtElement)?.getElementTextInContext()}
|
||||||
|
|||||||
+5
-4
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration
|
|||||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
|
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
|
||||||
import org.jetbrains.kotlin.fir.originalIfFakeOverride
|
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.ValidityTokenOwner
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.FirRefWithValidityCheck
|
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.FirRefWithValidityCheck
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbol
|
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.SamConstructor -> KtSymbolOrigin.SAM_CONSTRUCTOR
|
||||||
FirDeclarationOrigin.Enhancement -> KtSymbolOrigin.JAVA
|
FirDeclarationOrigin.Enhancement -> KtSymbolOrigin.JAVA
|
||||||
else -> {
|
else -> {
|
||||||
val overridden =
|
val overridden = (this as? FirCallableDeclaration<*>)?.originalIfFakeOverride()
|
||||||
(this as? FirCallableDeclaration<*>)?.originalIfFakeOverride() ?: throw InvalidFirDeclarationOriginForSymbol(origin)
|
?: throw InvalidFirDeclarationOriginForSymbol(this)
|
||||||
overridden.ktSymbolOrigin()
|
overridden.ktSymbolOrigin()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class InvalidFirDeclarationOriginForSymbol(origin: FirDeclarationOrigin) :
|
class InvalidFirDeclarationOriginForSymbol(declaration: FirDeclaration) :
|
||||||
IllegalStateException("Invalid FirDeclarationOrigin $origin")
|
IllegalStateException("Invalid FirDeclarationOrigin ${declaration.origin::class.simpleName} for ${declaration.render()}" )
|
||||||
|
|||||||
Reference in New Issue
Block a user