From 0051451ed703246c77af78a7068561b2a91ebd10 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Wed, 14 Apr 2021 12:10:29 +0200 Subject: [PATCH] FIR: add error message when FirBasedSymbol.fir is not initialized --- .../kotlin/fir/backend/jvm/FirMetadataSerializer.kt | 2 +- .../jetbrains/kotlin/fir/symbols/AbstractFirBasedSymbol.kt | 7 +++++-- .../fir/symbols/impl/FirAnonymousInitializerSymbol.kt | 4 +++- .../jetbrains/kotlin/fir/symbols/impl/FirCallableSymbol.kt | 2 ++ .../kotlin/fir/symbols/impl/FirClassLikeSymbol.kt | 2 ++ .../kotlin/fir/symbols/impl/FirTypeParameterSymbol.kt | 2 ++ 6 files changed, 15 insertions(+), 4 deletions(-) diff --git a/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirMetadataSerializer.kt b/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirMetadataSerializer.kt index 30dc65b56e1..685bf54258e 100644 --- a/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirMetadataSerializer.kt +++ b/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirMetadataSerializer.kt @@ -139,7 +139,7 @@ class FirMetadataSerializer( annotations += property.annotations typeParameters += typeParameterSet }.apply { - delegateFieldSymbol?.fir = this + delegateFieldSymbol?.bind(this) } } diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/AbstractFirBasedSymbol.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/AbstractFirBasedSymbol.kt index 0573d86a570..f550a61fb87 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/AbstractFirBasedSymbol.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/AbstractFirBasedSymbol.kt @@ -9,10 +9,13 @@ import org.jetbrains.kotlin.fir.FirSymbolOwner import org.jetbrains.kotlin.fir.declarations.FirDeclaration abstract class AbstractFirBasedSymbol : FirBasedSymbol where E : FirSymbolOwner, 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 } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirAnonymousInitializerSymbol.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirAnonymousInitializerSymbol.kt index 4f71dcbbc1b..57881274eb4 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirAnonymousInitializerSymbol.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirAnonymousInitializerSymbol.kt @@ -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() \ No newline at end of file +class FirAnonymousInitializerSymbol : AbstractFirBasedSymbol() { + override fun toString(): String = "${this::class.simpleName} " +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirCallableSymbol.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirCallableSymbol.kt index 5d4f278b0ef..b1c4d3661aa 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirCallableSymbol.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirCallableSymbol.kt @@ -14,6 +14,8 @@ import org.jetbrains.kotlin.name.CallableId abstract class FirCallableSymbol> : AbstractFirBasedSymbol() { abstract val callableId: CallableId + + override fun toString(): String = "${this::class.simpleName} $callableId" } val FirCallableSymbol<*>.isStatic: Boolean get() = (fir as? FirMemberDeclaration)?.status?.isStatic == true diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirClassLikeSymbol.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirClassLikeSymbol.kt index 11b3303bde1..1270706b1ff 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirClassLikeSymbol.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirClassLikeSymbol.kt @@ -16,6 +16,8 @@ sealed class FirClassLikeSymbol( val classId: ClassId ) : FirClassifierSymbol() where D : FirClassLikeDeclaration, D : FirSymbolOwner { abstract override fun toLookupTag(): ConeClassLikeLookupTag + + override fun toString(): String = "${this::class.simpleName} ${classId.asString()}" } sealed class FirClassSymbol>(classId: ClassId) : FirClassLikeSymbol(classId) { diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirTypeParameterSymbol.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirTypeParameterSymbol.kt index 919b67a46b2..82fd8c690b2 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirTypeParameterSymbol.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirTypeParameterSymbol.kt @@ -17,5 +17,7 @@ class FirTypeParameterSymbol : FirClassifierSymbol() { private val lookupTag = ConeTypeParameterLookupTag(this) override fun toLookupTag(): ConeTypeParameterLookupTag = lookupTag + + override fun toString(): String = "${this::class.simpleName} ${name.asString()}" }