Rework checkWithAttachment/requireWithAttachment

* better naming
* throw corresponding KotlinIllegalStateExceptionWithAttachments/KotlinIllegalArgumentExceptionWithAttachments instead of general KotlinRuntimeExceptionWithAttachments
This commit is contained in:
Ilya Kirillov
2023-06-30 15:56:26 +02:00
committed by Space Team
parent 2d791eb292
commit 4b3bff3344
12 changed files with 40 additions and 34 deletions
@@ -12,7 +12,7 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.util.containingClass
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.getContainingFile
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.withFirEntry
import org.jetbrains.kotlin.utils.exceptions.errorWithAttachment
import org.jetbrains.kotlin.utils.exceptions.checkWithAttachmentBuilder
import org.jetbrains.kotlin.utils.exceptions.checkWithAttachment
import org.jetbrains.kotlin.analysis.utils.errors.requireIsInstance
import org.jetbrains.kotlin.analysis.utils.errors.unexpectedElementError
import org.jetbrains.kotlin.builtins.StandardNames
@@ -151,7 +151,7 @@ private fun collectDesignationPathWithContainingClass(target: FirDeclaration, co
?: findKotlinStdlibClass(classId, target)
}
checkWithAttachmentBuilder(
checkWithAttachment(
declaration is FirRegularClass,
message = { "'FirRegularClass' expected as a containing declaration, got '${declaration?.javaClass?.name}'" },
buildAttachment = {
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir.file.builder
import org.jetbrains.kotlin.analysis.api.impl.barebone.annotations.ThreadSafe
import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirModuleResolveComponents
import org.jetbrains.kotlin.analysis.project.structure.ProjectStructureProvider
import org.jetbrains.kotlin.utils.exceptions.checkWithAttachmentBuilder
import org.jetbrains.kotlin.utils.exceptions.checkWithAttachment
import org.jetbrains.kotlin.fir.builder.BodyBuildingMode
import org.jetbrains.kotlin.fir.builder.PsiRawFirBuilder
import org.jetbrains.kotlin.fir.declarations.FirFile
@@ -25,7 +25,7 @@ internal class LLFirFileBuilder(val moduleComponents: LLFirModuleResolveComponen
val contextualModule = moduleComponents.module
val actualFileModule = projectStructureProvider.getModule(ktFile, contextualModule)
checkWithAttachmentBuilder(actualFileModule == contextualModule, { "Modules are inconsistent" }) {
checkWithAttachment(actualFileModule == contextualModule, { "Modules are inconsistent" }) {
withEntry("file", ktFile.name)
withEntry("file module", actualFileModule) {
it.toString()
@@ -20,7 +20,7 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
import org.jetbrains.kotlin.load.java.JvmAnnotationNames
import org.jetbrains.kotlin.analysis.utils.classIdIfNonLocal
import org.jetbrains.kotlin.utils.exceptions.errorWithAttachment
import org.jetbrains.kotlin.utils.exceptions.checkWithAttachmentBuilder
import org.jetbrains.kotlin.utils.exceptions.checkWithAttachment
class LLFirFirClassByPsiClassProvider(private val session: LLFirSession) : FirSessionComponent {
fun getFirClass(psiClass: PsiClass): FirRegularClassSymbol? {
@@ -32,7 +32,7 @@ class LLFirFirClassByPsiClassProvider(private val session: LLFirSession) : FirSe
"${LLFirFirClassByPsiClassProvider::class.simpleName} can create only non-kotlin classes"
}
checkWithAttachmentBuilder(
checkWithAttachment(
psiClass !is ClsElementImpl || !psiClass.hasAnnotation(JvmAnnotationNames.METADATA_FQ_NAME.asString()), {
"${LLFirFirClassByPsiClassProvider::class.simpleName} can create only non-kotlin classes, but got ${psiClass::class} with ${JvmAnnotationNames.METADATA_FQ_NAME.asString()} annotation"
}
@@ -47,7 +47,7 @@ class LLFirFirClassByPsiClassProvider(private val session: LLFirSession) : FirSe
val firClassSymbol = createFirClassFromFirProvider(psiClass)
val gotPsi = firClassSymbol.fir.psi
checkWithAttachmentBuilder(
checkWithAttachment(
gotPsi == psiClass,
{ "resulted FirClass.psi != requested PsiClass" }
) {
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.file.builder.LLFirLockPro
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkDelegatedConstructorIsResolved
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.*
import org.jetbrains.kotlin.utils.exceptions.errorWithAttachment
import org.jetbrains.kotlin.utils.exceptions.checkWithAttachmentBuilder
import org.jetbrains.kotlin.utils.exceptions.checkWithAttachment
import org.jetbrains.kotlin.fir.FirElementWithResolveState
import org.jetbrains.kotlin.fir.FirFileAnnotationsContainer
import org.jetbrains.kotlin.fir.FirSession
@@ -103,7 +103,7 @@ private class LLFirBodyTargetResolver(
}
private fun calculateControlFlowGraph(target: FirRegularClass) {
checkWithAttachmentBuilder(
checkWithAttachment(
target.controlFlowGraphReference == null,
{ "'controlFlowGraphReference' should be 'null' if the class phase < $resolverPhase)" },
) {
@@ -5,7 +5,7 @@
package org.jetbrains.kotlin.analysis.low.level.api.fir.util
import org.jetbrains.kotlin.utils.exceptions.requireWithAttachmentBuilder
import org.jetbrains.kotlin.utils.exceptions.requireWithAttachment
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.packageFqName
@@ -70,11 +70,11 @@ internal object FirElementFinder {
expectedDeclarationAcceptor: (FirDeclaration) -> Boolean,
): FirDeclarationDesignation? {
if (containerClassId != null) {
requireWithAttachmentBuilder(!containerClassId.isLocal, { "ClassId should not be local" }) {
requireWithAttachment(!containerClassId.isLocal, { "ClassId should not be local" }) {
withEntry("classId", containerClassId) { it.asString() }
}
requireWithAttachmentBuilder(
requireWithAttachment(
firFile.packageFqName == containerClassId.packageFqName,
{ "ClassId should not be local" }
) {
@@ -6,7 +6,7 @@
package org.jetbrains.kotlin.analysis.low.level.api.fir.util
import org.jetbrains.kotlin.utils.exceptions.ExceptionAttachmentBuilder
import org.jetbrains.kotlin.utils.exceptions.checkWithAttachmentBuilder
import org.jetbrains.kotlin.utils.exceptions.checkWithAttachment
import org.jetbrains.kotlin.fir.FirAnnotationContainer
import org.jetbrains.kotlin.fir.FirElementWithResolveState
import org.jetbrains.kotlin.fir.contracts.FirLegacyRawContractDescription
@@ -30,7 +30,7 @@ internal inline fun checkTypeRefIsResolved(
acceptImplicitTypeRef: Boolean = false,
extraAttachment: ExceptionAttachmentBuilder.() -> Unit = {},
) {
checkWithAttachmentBuilder(
checkWithAttachment(
condition = typeRef is FirResolvedTypeRef || acceptImplicitTypeRef && typeRef is FirImplicitTypeRef,
message = {
buildString {
@@ -66,7 +66,7 @@ internal fun checkBodyIsResolved(function: FirFunction) {
internal fun checkExpectForActualIsResolved(memberDeclaration: FirMemberDeclaration) {
if (!memberDeclaration.isActual) return
checkWithAttachmentBuilder(
checkWithAttachment(
condition = memberDeclaration.expectForActual != null,
message = { "Expect for actual matching is missing" }
) {
@@ -87,7 +87,7 @@ internal fun checkReferenceIsResolved(
owner: FirResolvable,
extraAttachment: ExceptionAttachmentBuilder.() -> Unit = {},
) {
checkWithAttachmentBuilder(
checkWithAttachment(
condition = reference is FirResolvedNamedReference || reference is FirErrorNamedReference || reference is FirFromMissingDependenciesNamedReference,
message = {
"Expected ${FirNamedReference::class.simpleName}, " +
@@ -116,7 +116,7 @@ internal fun checkDefaultValueIsResolved(parameter: FirValueParameter) {
}
internal fun checkDeprecationProviderIsResolved(declaration: FirDeclaration, provider: DeprecationsProvider) {
checkWithAttachmentBuilder(
checkWithAttachment(
condition = provider !is UnresolvedDeprecationProvider,
message = { "Unresolved deprecation provider found for ${declaration::class.simpleName}" }
) {
@@ -136,7 +136,7 @@ internal fun checkReceiverTypeRefIsResolved(declaration: FirCallableDeclaration,
internal fun checkContractDescriptionIsResolved(declaration: FirContractDescriptionOwner) {
val contractDescription = declaration.contractDescription
checkWithAttachmentBuilder(
checkWithAttachment(
condition = contractDescription is FirResolvedContractDescription ||
contractDescription is FirEmptyContractDescription ||
contractDescription is FirLegacyRawContractDescription /* TODO: should be dropped after KT-60310 */,
@@ -148,7 +148,7 @@ internal fun checkContractDescriptionIsResolved(declaration: FirContractDescript
internal fun checkDeclarationStatusIsResolved(declaration: FirMemberDeclaration) {
val status = declaration.status
checkWithAttachmentBuilder(
checkWithAttachment(
condition = status is FirResolvedDeclarationStatus,
message = { "Expected ${FirResolvedDeclarationStatus::class.simpleName} but ${status::class.simpleName} found for ${declaration::class.simpleName}" }
) {
@@ -161,7 +161,7 @@ internal fun <T> checkAnnotationArgumentsMappingIsResolved(
) where T : FirAnnotationContainer, T : FirElementWithResolveState {
for (annotation in annotationContainer.annotations) {
if (annotation is FirAnnotationCall) {
checkWithAttachmentBuilder(
checkWithAttachment(
condition = annotation.argumentList is FirResolvedArgumentList,
message = {
buildString {
@@ -6,7 +6,7 @@
package org.jetbrains.kotlin.analysis.low.level.api.fir.util
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.FirDesignation
import org.jetbrains.kotlin.utils.exceptions.checkWithAttachmentBuilder
import org.jetbrains.kotlin.utils.exceptions.checkWithAttachment
import org.jetbrains.kotlin.fir.FirElementWithResolveState
import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration
import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration
@@ -18,7 +18,7 @@ import org.jetbrains.kotlin.fir.declarations.resolvePhase
internal fun FirElementWithResolveState.checkPhase(requiredResolvePhase: FirResolvePhase) {
@OptIn(ResolveStateAccess::class)
val declarationResolveState = resolveState
checkWithAttachmentBuilder(
checkWithAttachment(
declarationResolveState.resolvePhase >= requiredResolvePhase,
{ "At least $requiredResolvePhase expected but $declarationResolveState found for ${this::class.simpleName}" },
) {