From a52674f1813a07f914c197356cbb8f9a01e510fe Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Thu, 31 Dec 2020 11:35:32 +0100 Subject: [PATCH] FIR: use more meaningful error messages --- .../src/org/jetbrains/kotlin/fir/resolve/LookupTagUtils.kt | 6 ++++++ .../resolve/calls/tower/FirInvokeResolveTowerExtension.kt | 4 ++-- .../fir/resolve/transformers/FirStatusResolveTransformer.kt | 4 +++- .../src/org/jetbrains/kotlin/fir/types/ConeTypeContext.kt | 2 +- .../src/org/jetbrains/kotlin/types/AbstractTypeChecker.kt | 4 +++- 5 files changed, 15 insertions(+), 5 deletions(-) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/LookupTagUtils.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/LookupTagUtils.kt index 14f6da469f7..f127007a411 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/LookupTagUtils.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/LookupTagUtils.kt @@ -33,6 +33,12 @@ fun ConeClassLikeLookupTag.toSymbol(useSiteSession: FirSession): FirClassLikeSym } } +@OptIn(LookupTagInternals::class) +fun ConeClassLikeLookupTag.toSymbolOrError(useSiteSession: FirSession): FirClassLikeSymbol<*> = + toSymbol(useSiteSession) + ?: error("Class symbol with classId $classId was not found") + + fun ConeClassLikeLookupTag.toFirRegularClass(session: FirSession): FirRegularClass? = session.firSymbolProvider.getSymbolByLookupTag(this)?.fir as? FirRegularClass diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/tower/FirInvokeResolveTowerExtension.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/tower/FirInvokeResolveTowerExtension.kt index fb199e89b79..fc0138efa64 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/tower/FirInvokeResolveTowerExtension.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/tower/FirInvokeResolveTowerExtension.kt @@ -262,8 +262,8 @@ private fun BodyResolveComponents.createExplicitReceiverForInvoke( is FirRegularClassSymbol -> buildResolvedQualifierForClass(symbol, sourceElement = null) is FirTypeAliasSymbol -> { val type = symbol.fir.expandedTypeRef.coneTypeUnsafe().fullyExpandedType(session) - val expansionRegularClass = type.lookupTag.toSymbol(session)?.fir as? FirRegularClass - buildResolvedQualifierForClass(expansionRegularClass!!.symbol, sourceElement = symbol.fir.source) + val expansionRegularClassSymbol = type.lookupTag.toSymbolOrError(session) + buildResolvedQualifierForClass(expansionRegularClassSymbol, sourceElement = symbol.fir.source) } else -> throw AssertionError() } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolveTransformer.kt index 2b1f30d9246..08ba47d5a25 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolveTransformer.kt @@ -393,7 +393,9 @@ abstract class AbstractFirStatusResolveTransformer( } return } - require(file != null) + require(file != null) { + "Containing file was not found for\n${regularClass.render()}" + } val symbol = regularClass.symbol var declarationToStart: FirDeclaration? = null val designation = designationMapForLocalClasses[regularClass]?.let(::listOf)?.also { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/types/ConeTypeContext.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/types/ConeTypeContext.kt index b6905baca37..169e38722e2 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/types/ConeTypeContext.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/types/ConeTypeContext.kt @@ -221,7 +221,7 @@ interface ConeTypeContext : TypeSystemContext, TypeSystemOptimizationContext, Ty is FirAnonymousObjectSymbol -> symbol.fir.typeParameters[index].symbol.toLookupTag() is FirRegularClassSymbol -> symbol.fir.typeParameters[index].symbol.toLookupTag() is FirTypeAliasSymbol -> symbol.fir.typeParameters[index].symbol.toLookupTag() - else -> error("?!:12") + else -> error("Unexpected FirClassLikeSymbol $symbol for ${this::class}, with classId ${(this as? ConeClassLikeLookupTag)?.classId}") } } diff --git a/core/compiler.common/src/org/jetbrains/kotlin/types/AbstractTypeChecker.kt b/core/compiler.common/src/org/jetbrains/kotlin/types/AbstractTypeChecker.kt index da6799b18da..017dd9873ed 100644 --- a/core/compiler.common/src/org/jetbrains/kotlin/types/AbstractTypeChecker.kt +++ b/core/compiler.common/src/org/jetbrains/kotlin/types/AbstractTypeChecker.kt @@ -69,7 +69,9 @@ abstract class AbstractTypeCheckerContext : TypeSystemContext { fun initialize() { - assert(!supertypesLocked) + assert(!supertypesLocked) { + "Supertypes were locked for ${this::class}" + } supertypesLocked = true if (supertypesDeque == null) {