diff --git a/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/configurators/AnalysisApiBaseTestServiceRegistrar.kt b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/configurators/AnalysisApiBaseTestServiceRegistrar.kt index cab5688ec37..2cffc511f50 100644 --- a/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/configurators/AnalysisApiBaseTestServiceRegistrar.kt +++ b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/configurators/AnalysisApiBaseTestServiceRegistrar.kt @@ -64,6 +64,5 @@ object AnalysisApiBaseTestServiceRegistrar: AnalysisApiTestServiceRegistrar() { } override fun registerApplicationServices(application: MockApplication, testServices: TestServices) { - application.registerService(KotlinFakeClsStubsCache::class.java, KotlinFakeClsStubsCache()) } } diff --git a/analysis/analysis-api-standalone/analysis-api-standalone-base/src/org/jetbrains/kotlin/analysis/api/standalone/base/project/structure/StandaloneProjectFactory.kt b/analysis/analysis-api-standalone/analysis-api-standalone-base/src/org/jetbrains/kotlin/analysis/api/standalone/base/project/structure/StandaloneProjectFactory.kt index 5f1e94c6f2a..e5f3a683ddc 100644 --- a/analysis/analysis-api-standalone/analysis-api-standalone-base/src/org/jetbrains/kotlin/analysis/api/standalone/base/project/structure/StandaloneProjectFactory.kt +++ b/analysis/analysis-api-standalone/analysis-api-standalone-base/src/org/jetbrains/kotlin/analysis/api/standalone/base/project/structure/StandaloneProjectFactory.kt @@ -11,6 +11,7 @@ import com.intellij.core.CoreApplicationEnvironment import com.intellij.core.CoreJavaFileManager import com.intellij.core.CorePackageIndex import com.intellij.ide.highlighter.JavaFileType +import com.intellij.mock.MockApplication import com.intellij.mock.MockProject import com.intellij.openapi.Disposable import com.intellij.openapi.roots.PackageIndex @@ -29,6 +30,7 @@ import org.jetbrains.kotlin.analysis.api.impl.base.references.HLApiReferenceProv import org.jetbrains.kotlin.analysis.api.impl.base.java.source.JavaElementSourceWithSmartPointerFactory import org.jetbrains.kotlin.analysis.api.resolve.extensions.KtResolveExtensionProvider import org.jetbrains.kotlin.analysis.project.structure.* +import org.jetbrains.kotlin.analysis.providers.impl.KotlinFakeClsStubsCache import org.jetbrains.kotlin.cli.common.messages.MessageCollector import org.jetbrains.kotlin.cli.jvm.compiler.* import org.jetbrains.kotlin.cli.jvm.index.JavaRoot @@ -61,12 +63,30 @@ object StandaloneProjectFactory { KotlinCoreEnvironment.getOrCreateApplicationEnvironmentForTests(applicationDisposable, compilerConfiguration) registerApplicationExtensionPoints(applicationEnvironment, applicationDisposable) + registerApplicationServices(applicationEnvironment.application) + return KotlinCoreProjectEnvironment(projectDisposable, applicationEnvironment).apply { registerProjectServices(project) registerJavaPsiFacade(project) } } + private fun registerApplicationServices(application: MockApplication) { + if (application.getServiceIfCreated(KotlinFakeClsStubsCache::class.java) != null) { + // application services already registered by som other threads, tests + return + } + KotlinCoreEnvironment.underApplicationLock { + if (application.getServiceIfCreated(KotlinFakeClsStubsCache::class.java) != null) { + // application services already registered by som other threads, tests + return + } + application.apply { + registerService(KotlinFakeClsStubsCache::class.java, KotlinFakeClsStubsCache()) + } + } + } + private fun registerProjectServices(project: MockProject) { @Suppress("UnstableApiUsage") CoreApplicationEnvironment.registerExtensionPoint(