[LL FIR] do not execute resolve under a non-cancellable session

The sessions are invalidated on the PCE
This commit is contained in:
Ilya Kirillov
2022-12-02 10:24:51 +01:00
committed by teamcity
parent 3d68eb27d5
commit 7a89ca495c
9 changed files with 14 additions and 11 deletions
@@ -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,
@@ -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<KtReference> {
class KotlinResolveResult(element: PsiElement) : PsiElementResolveResult(element)
@@ -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()
}
}
@@ -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,
@@ -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) {
/**
@@ -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)
}
}
@@ -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 <T> Pair<T, *>?.component1() = this?.first
private operator fun <T> 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)
}
}
@@ -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)
@@ -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