From a2015a6eb5b16077794c6df0ff061137c05da2c8 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Wed, 30 Aug 2023 23:00:29 +0200 Subject: [PATCH] [Analysis API Standalone] fix wrongly registered `KtLifetimeTokenProvider` for standalone mode tests `KtAnalysisSessionProvider` cached the incorrect `KtLifetimeTokenFactory` before the proper one was registered ^KT-60884 --- .../fir/test/StandaloneModeTestServiceRegistrar.kt | 8 +++++++- .../analysis/api/session/KtAnalysisSessionProvider.kt | 4 +++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/analysis/analysis-api-standalone/tests/org/jetbrains/kotlin/analysis/api/standalone/fir/test/StandaloneModeTestServiceRegistrar.kt b/analysis/analysis-api-standalone/tests/org/jetbrains/kotlin/analysis/api/standalone/fir/test/StandaloneModeTestServiceRegistrar.kt index 8bbe3a9c18e..35c19cba5ba 100644 --- a/analysis/analysis-api-standalone/tests/org/jetbrains/kotlin/analysis/api/standalone/fir/test/StandaloneModeTestServiceRegistrar.kt +++ b/analysis/analysis-api-standalone/tests/org/jetbrains/kotlin/analysis/api/standalone/fir/test/StandaloneModeTestServiceRegistrar.kt @@ -8,8 +8,10 @@ package org.jetbrains.kotlin.analysis.api.standalone.fir.test import com.intellij.mock.MockApplication import com.intellij.mock.MockProject import com.intellij.openapi.vfs.impl.jar.CoreJarFileSystem +import org.jetbrains.kotlin.analysis.api.KtAnalysisApiInternals +import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeTokenProvider +import org.jetbrains.kotlin.analysis.api.standalone.KtAlwaysAccessibleLifetimeTokenProvider import org.jetbrains.kotlin.analysis.api.standalone.base.project.structure.KtStaticModuleProvider -import org.jetbrains.kotlin.analysis.decompiled.light.classes.ClsJavaStubByVirtualFileCache import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.JvmFirDeserializedSymbolProviderFactory import org.jetbrains.kotlin.analysis.project.structure.KtBinaryModule import org.jetbrains.kotlin.analysis.project.structure.ProjectStructureProvider @@ -19,11 +21,15 @@ import org.jetbrains.kotlin.analysis.test.framework.services.environmentManager import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestServiceRegistrar import org.jetbrains.kotlin.test.services.TestServices +@OptIn(KtAnalysisApiInternals::class) public object StandaloneModeTestServiceRegistrar : AnalysisApiTestServiceRegistrar() { override fun registerProjectExtensionPoints(project: MockProject, testServices: TestServices) { } override fun registerProjectServices(project: MockProject, testServices: TestServices) { + project.apply { + registerService(KtLifetimeTokenProvider::class.java, KtAlwaysAccessibleLifetimeTokenProvider::class.java) + } } override fun registerProjectModelServices(project: MockProject, testServices: TestServices) { diff --git a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/session/KtAnalysisSessionProvider.kt b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/session/KtAnalysisSessionProvider.kt index 6accf02f41f..4b59f302e15 100644 --- a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/session/KtAnalysisSessionProvider.kt +++ b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/session/KtAnalysisSessionProvider.kt @@ -26,7 +26,9 @@ import org.jetbrains.kotlin.psi.KtFile @OptIn(KtAnalysisApiInternals::class) public abstract class KtAnalysisSessionProvider(public val project: Project) : Disposable { @KtAnalysisApiInternals - public val tokenFactory: KtLifetimeTokenFactory = KtLifetimeTokenProvider.getService(project).getLifetimeTokenFactory() + public val tokenFactory: KtLifetimeTokenFactory by lazy(LazyThreadSafetyMode.PUBLICATION) { + KtLifetimeTokenProvider.getService(project).getLifetimeTokenFactory() + } @Suppress("LeakingThis") public val noWriteActionInAnalyseCallChecker: NoWriteActionInAnalyseCallChecker = NoWriteActionInAnalyseCallChecker(this)