FIR: add error message when FirBasedSymbol.fir is not initialized

This commit is contained in:
Ilya Kirillov
2021-04-14 12:10:29 +02:00
committed by TeamCityServer
parent 69ff45971f
commit 0051451ed7
6 changed files with 15 additions and 4 deletions
@@ -139,7 +139,7 @@ class FirMetadataSerializer(
annotations += property.annotations
typeParameters += typeParameterSet
}.apply {
delegateFieldSymbol?.fir = this
delegateFieldSymbol?.bind(this)
}
}
@@ -9,10 +9,13 @@ import org.jetbrains.kotlin.fir.FirSymbolOwner
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
abstract class AbstractFirBasedSymbol<E> : FirBasedSymbol<E> where E : FirSymbolOwner<E>, E : FirDeclaration {
private var _fir: E? = null
override lateinit var fir: E
override val fir: E
get() = _fir
?: error("Fir is not initialized for $this")
override fun bind(e: E) {
fir = e
_fir = e
}
}
@@ -8,4 +8,6 @@ package org.jetbrains.kotlin.fir.symbols.impl
import org.jetbrains.kotlin.fir.declarations.FirAnonymousInitializer
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
class FirAnonymousInitializerSymbol : AbstractFirBasedSymbol<FirAnonymousInitializer>()
class FirAnonymousInitializerSymbol : AbstractFirBasedSymbol<FirAnonymousInitializer>() {
override fun toString(): String = "${this::class.simpleName} <init>"
}
@@ -14,6 +14,8 @@ import org.jetbrains.kotlin.name.CallableId
abstract class FirCallableSymbol<D : FirCallableDeclaration<D>> : AbstractFirBasedSymbol<D>() {
abstract val callableId: CallableId
override fun toString(): String = "${this::class.simpleName} $callableId"
}
val FirCallableSymbol<*>.isStatic: Boolean get() = (fir as? FirMemberDeclaration)?.status?.isStatic == true
@@ -16,6 +16,8 @@ sealed class FirClassLikeSymbol<D>(
val classId: ClassId
) : FirClassifierSymbol<D>() where D : FirClassLikeDeclaration<D>, D : FirSymbolOwner<D> {
abstract override fun toLookupTag(): ConeClassLikeLookupTag
override fun toString(): String = "${this::class.simpleName} ${classId.asString()}"
}
sealed class FirClassSymbol<C : FirClass<C>>(classId: ClassId) : FirClassLikeSymbol<C>(classId) {
@@ -17,5 +17,7 @@ class FirTypeParameterSymbol : FirClassifierSymbol<FirTypeParameter>() {
private val lookupTag = ConeTypeParameterLookupTag(this)
override fun toLookupTag(): ConeTypeParameterLookupTag = lookupTag
override fun toString(): String = "${this::class.simpleName} ${name.asString()}"
}