From 7a89ca495ca736a49892d8c215b754d8b54260e0 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Fri, 2 Dec 2022 10:24:51 +0100 Subject: [PATCH] [LL FIR] do not execute resolve under a non-cancellable session The sessions are invalidated on the PCE --- .../kotlin/analysis/api/fir/components/KtFirCallResolver.kt | 2 +- .../analysis/api/fir/references/KtFirReferenceResolver.kt | 2 +- .../kotlin/analysis/low/level/api/fir/LLFirPhaseRunner.kt | 5 +---- .../low/level/api/fir/caches/ValueWithPostCompute.kt | 2 +- .../fir/lazy/resolve/LLFirModuleLazyDeclarationResolver.kt | 6 +++--- .../kotlin/fir/deserialization/FirTypeDeserializer.kt | 2 ++ .../kotlin/fir/resolve/calls/ConstructorProcessing.kt | 2 ++ .../body/resolve/FirExpressionsResolveTransformer.kt | 2 ++ .../org/jetbrains/kotlin/util}/platformExceptionUtils.kt | 2 +- 9 files changed, 14 insertions(+), 11 deletions(-) rename {analysis/analysis-internal-utils/src/org/jetbrains/kotlin/analysis/utils/errors => compiler/frontend.common/src/org/jetbrains/kotlin/util}/platformExceptionUtils.kt (91%) diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirCallResolver.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirCallResolver.kt index fdcce36f039..a685338dc51 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirCallResolver.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirCallResolver.kt @@ -72,10 +72,10 @@ import org.jetbrains.kotlin.util.OperatorNameConventions.EQUALS import org.jetbrains.kotlin.utils.addIfNotNull import org.jetbrains.kotlin.utils.addToStdlib.safeAs import org.jetbrains.kotlin.analysis.utils.errors.buildErrorWithAttachment -import org.jetbrains.kotlin.analysis.utils.errors.shouldIjPlatformExceptionBeRethrown import org.jetbrains.kotlin.analysis.utils.errors.withPsiEntry import org.jetbrains.kotlin.fir.declarations.FirClass import org.jetbrains.kotlin.fir.diagnostics.FirDiagnosticHolder +import org.jetbrains.kotlin.util.shouldIjPlatformExceptionBeRethrown internal class KtFirCallResolver( override val analysisSession: KtFirAnalysisSession, diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/references/KtFirReferenceResolver.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/references/KtFirReferenceResolver.kt index 7c4541c302d..31d05498d96 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/references/KtFirReferenceResolver.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/references/KtFirReferenceResolver.kt @@ -14,8 +14,8 @@ import com.intellij.psi.impl.source.resolve.ResolveCache import org.jetbrains.kotlin.analysis.api.KtAllowAnalysisOnEdt import org.jetbrains.kotlin.analysis.api.analyze import org.jetbrains.kotlin.analysis.api.lifetime.allowAnalysisOnEdt -import org.jetbrains.kotlin.analysis.utils.errors.shouldIjPlatformExceptionBeRethrown import org.jetbrains.kotlin.analysis.utils.printer.getElementTextInContext +import org.jetbrains.kotlin.util.shouldIjPlatformExceptionBeRethrown object KtFirReferenceResolver : ResolveCache.PolyVariantResolver { class KotlinResolveResult(element: PsiElement) : PsiElementResolveResult(element) diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/LLFirPhaseRunner.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/LLFirPhaseRunner.kt index b3a3702fa40..641a5b0fc07 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/LLFirPhaseRunner.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/LLFirPhaseRunner.kt @@ -6,7 +6,6 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir import org.jetbrains.kotlin.fir.declarations.FirResolvePhase -import org.jetbrains.kotlin.analysis.low.level.api.fir.util.executeWithoutPCE internal class LLFirPhaseRunner { /** @@ -17,8 +16,6 @@ internal class LLFirPhaseRunner { runPhaseWithCustomResolveWithoutLock(resolve) private inline fun runPhaseWithCustomResolveWithoutLock(crossinline resolve: () -> Unit) { - executeWithoutPCE { - resolve() - } + resolve() } } \ No newline at end of file diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/caches/ValueWithPostCompute.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/caches/ValueWithPostCompute.kt index f2d734f597e..1d253a973f3 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/caches/ValueWithPostCompute.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/caches/ValueWithPostCompute.kt @@ -5,7 +5,7 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir.fir.caches -import org.jetbrains.kotlin.analysis.utils.errors.shouldIjPlatformExceptionBeRethrown +import org.jetbrains.kotlin.util.shouldIjPlatformExceptionBeRethrown /** * Lazily calculated value which runs postCompute in the same thread, diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/lazy/resolve/LLFirModuleLazyDeclarationResolver.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/lazy/resolve/LLFirModuleLazyDeclarationResolver.kt index 994a5e1e09b..2b5555e85f3 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/lazy/resolve/LLFirModuleLazyDeclarationResolver.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/lazy/resolve/LLFirModuleLazyDeclarationResolver.kt @@ -5,7 +5,6 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir.lazy.resolve -import org.jetbrains.kotlin.util.SourceCodeAnalysisException import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirModuleResolveComponents import org.jetbrains.kotlin.analysis.low.level.api.fir.api.FirDeclarationDesignationWithFile import org.jetbrains.kotlin.analysis.low.level.api.fir.api.collectDesignationWithFile @@ -21,7 +20,7 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkCanceled import org.jetbrains.kotlin.analysis.low.level.api.fir.util.findSourceNonLocalFirDeclaration import org.jetbrains.kotlin.analysis.low.level.api.fir.util.withFirEntry import org.jetbrains.kotlin.analysis.utils.errors.buildErrorWithAttachment -import org.jetbrains.kotlin.analysis.utils.errors.shouldIjPlatformExceptionBeRethrown +import org.jetbrains.kotlin.analysis.utils.errors.buildErrorWithAttachment import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty @@ -34,8 +33,9 @@ import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirTowerDataCo import org.jetbrains.kotlin.psi.KtClassBody import org.jetbrains.kotlin.psi.KtDeclaration import org.jetbrains.kotlin.psi.KtEnumEntry -import org.jetbrains.kotlin.analysis.utils.errors.buildErrorWithAttachment import org.jetbrains.kotlin.psi.KtPrimaryConstructor +import org.jetbrains.kotlin.util.SourceCodeAnalysisException +import org.jetbrains.kotlin.util.shouldIjPlatformExceptionBeRethrown internal class LLFirModuleLazyDeclarationResolver(val moduleComponents: LLFirModuleResolveComponents) { /** diff --git a/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/FirTypeDeserializer.kt b/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/FirTypeDeserializer.kt index bab7f1896a1..10074e5c243 100644 --- a/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/FirTypeDeserializer.kt +++ b/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/FirTypeDeserializer.kt @@ -34,6 +34,7 @@ import org.jetbrains.kotlin.serialization.deserialization.ProtoEnumFlags import org.jetbrains.kotlin.serialization.deserialization.getClassId import org.jetbrains.kotlin.serialization.deserialization.getName import org.jetbrains.kotlin.types.Variance +import org.jetbrains.kotlin.util.shouldIjPlatformExceptionBeRethrown class FirTypeDeserializer( val moduleData: FirModuleData, @@ -101,6 +102,7 @@ class FirTypeDeserializer( val id = nameResolver.getClassId(fqNameIndex).takeIf { !it.isLocal } ?: StandardClassIds.Any return ConeClassLikeLookupTagImpl(id) } catch (e: Throwable) { + if (shouldIjPlatformExceptionBeRethrown(e)) throw e throw RuntimeException("Looking up for ${nameResolver.getClassId(fqNameIndex)}", e) } } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ConstructorProcessing.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ConstructorProcessing.kt index 9dd3c82321e..281e6719b02 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ConstructorProcessing.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ConstructorProcessing.kt @@ -28,6 +28,7 @@ import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.visibilityChecker import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.resolve.deprecation.DeprecationLevelValue +import org.jetbrains.kotlin.util.shouldIjPlatformExceptionBeRethrown private operator fun Pair?.component1() = this?.first private operator fun Pair<*, T>?.component2() = this?.second @@ -283,6 +284,7 @@ private fun processConstructors( } } } catch (e: Throwable) { + if (shouldIjPlatformExceptionBeRethrown(e)) throw e throw RuntimeException("While processing constructors", e) } } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt index 16d7ad0c0b7..2c47eb74774 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt @@ -52,6 +52,7 @@ import org.jetbrains.kotlin.types.AbstractTypeChecker import org.jetbrains.kotlin.types.ConstantValueKind import org.jetbrains.kotlin.types.TypeApproximatorConfiguration import org.jetbrains.kotlin.util.OperatorNameConventions +import org.jetbrains.kotlin.util.shouldIjPlatformExceptionBeRethrown open class FirExpressionsResolveTransformer(transformer: FirAbstractBodyResolveTransformerDispatcher) : FirPartialBodyResolveTransformer(transformer) { private inline val builtinTypes: BuiltinTypes get() = session.builtinTypes @@ -391,6 +392,7 @@ open class FirExpressionsResolveTransformer(transformer: FirAbstractBodyResolveT } callCompleter.completeCall(resultExpression, data) } catch (e: Throwable) { + if (shouldIjPlatformExceptionBeRethrown(e)) throw e throw RuntimeException("While resolving call ${functionCall.render()}", e) } val result = completeInference.transformToIntegerOperatorCallOrApproximateItIfNeeded(data) diff --git a/analysis/analysis-internal-utils/src/org/jetbrains/kotlin/analysis/utils/errors/platformExceptionUtils.kt b/compiler/frontend.common/src/org/jetbrains/kotlin/util/platformExceptionUtils.kt similarity index 91% rename from analysis/analysis-internal-utils/src/org/jetbrains/kotlin/analysis/utils/errors/platformExceptionUtils.kt rename to compiler/frontend.common/src/org/jetbrains/kotlin/util/platformExceptionUtils.kt index b0ace4e081c..f3e37fe3ce2 100644 --- a/analysis/analysis-internal-utils/src/org/jetbrains/kotlin/analysis/utils/errors/platformExceptionUtils.kt +++ b/compiler/frontend.common/src/org/jetbrains/kotlin/util/platformExceptionUtils.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ -package org.jetbrains.kotlin.analysis.utils.errors +package org.jetbrains.kotlin.util import com.intellij.openapi.diagnostic.ControlFlowException import com.intellij.openapi.project.IndexNotReadyException