diff --git a/analysis/analysis-api-fe10/tests/org/jetbrains/kotlin/analysis/api/fe10/test/configurator/AnalysisApiFe10TestServiceRegistrar.kt b/analysis/analysis-api-fe10/tests/org/jetbrains/kotlin/analysis/api/fe10/test/configurator/AnalysisApiFe10TestServiceRegistrar.kt index c1c041d5ce6..f23ca0f4efa 100644 --- a/analysis/analysis-api-fe10/tests/org/jetbrains/kotlin/analysis/api/fe10/test/configurator/AnalysisApiFe10TestServiceRegistrar.kt +++ b/analysis/analysis-api-fe10/tests/org/jetbrains/kotlin/analysis/api/fe10/test/configurator/AnalysisApiFe10TestServiceRegistrar.kt @@ -37,14 +37,11 @@ object AnalysisApiFe10TestServiceRegistrar : AnalysisApiTestServiceRegistrar() { registerService(ModuleVisibilityManager::class.java, CliModuleVisibilityManagerImpl(enabled = true)) registerService(ReadWriteAccessChecker::class.java, ReadWriteAccessCheckerDescriptorsImpl()) + registerService(KotlinReferenceProviderContributor::class.java, KtFe10KotlinReferenceProviderContributor::class.java) } AnalysisHandlerExtension.registerExtension(project, KtFe10AnalysisHandlerExtension()) KotlinCoreEnvironment.registerKotlinLightClassSupport(project) } - override fun registerApplicationServices(application: MockApplication, testServices: TestServices) { - application.apply { - registerService(KotlinReferenceProviderContributor::class.java, KtFe10KotlinReferenceProviderContributor::class.java) - } - } -} \ No newline at end of file + override fun registerApplicationServices(application: MockApplication, testServices: TestServices) {} +} diff --git a/analysis/analysis-api-impl-base/src/org/jetbrains/kotlin/analysis/api/impl/base/references/HLApiReferenceProviderService.kt b/analysis/analysis-api-impl-base/src/org/jetbrains/kotlin/analysis/api/impl/base/references/HLApiReferenceProviderService.kt index 3d6d314993a..205f087c6c5 100644 --- a/analysis/analysis-api-impl-base/src/org/jetbrains/kotlin/analysis/api/impl/base/references/HLApiReferenceProviderService.kt +++ b/analysis/analysis-api-impl-base/src/org/jetbrains/kotlin/analysis/api/impl/base/references/HLApiReferenceProviderService.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.analysis.api.impl.base.references +import com.intellij.openapi.project.Project import com.intellij.psi.ContributedReferenceHost import com.intellij.psi.PsiElement import com.intellij.psi.PsiReference @@ -21,13 +22,13 @@ import org.jetbrains.kotlin.idea.references.KotlinReferenceProviderContributor import org.jetbrains.kotlin.psi.KotlinReferenceProvidersService import org.jetbrains.kotlin.utils.SmartList -class HLApiReferenceProviderService : KotlinReferenceProvidersService() { +class HLApiReferenceProviderService(val project: Project) : KotlinReferenceProvidersService() { private val originalProvidersBinding: MultiMap, KotlinPsiReferenceProvider> private val providersBindingCache: Map, List> init { val registrar = KotlinPsiReferenceRegistrar() - KotlinReferenceProviderContributor.getInstance().registerReferenceProviders(registrar) + KotlinReferenceProviderContributor.getInstance(project).registerReferenceProviders(registrar) originalProvidersBinding = registrar.providers providersBindingCache = ConcurrentFactoryMap.createMap, List> { klass -> @@ -69,4 +70,4 @@ class HLApiReferenceProviderService : KotlinReferenceProvidersService() { ) } } -} \ No newline at end of file +} 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 30f8c0c4427..6f4d89c921f 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 @@ -28,8 +28,7 @@ import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.test.services.TestServices object AnalysisApiBaseTestServiceRegistrar: AnalysisApiTestServiceRegistrar() { - override fun registerProjectExtensionPoints(project: MockProject, testServices: TestServices) { - } + override fun registerProjectExtensionPoints(project: MockProject, testServices: TestServices) {} @OptIn(KtAnalysisApiInternals::class) override fun registerProjectServices(project: MockProject, testServices: TestServices) { @@ -43,13 +42,9 @@ object AnalysisApiBaseTestServiceRegistrar: AnalysisApiTestServiceRegistrar() { registerService(KotlinAnnotationsResolverFactory::class.java, KotlinStaticAnnotationsResolverFactory(allKtFiles)) registerService(KotlinDeclarationProviderFactory::class.java, KotlinStaticDeclarationProviderFactory(allKtFiles)) registerService(KotlinPackageProviderFactory::class.java, KotlinStaticPackageProviderFactory(allKtFiles)) - } - } - - override fun registerApplicationServices(application: MockApplication, testServices: TestServices) { - application.apply { registerService(KotlinReferenceProvidersService::class.java, HLApiReferenceProviderService::class.java) } - } -} \ No newline at end of file + + override fun registerApplicationServices(application: MockApplication, testServices: TestServices) {} +} diff --git a/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/api/standalone/StandaloneAnalysisAPISessionBuilder.kt b/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/api/standalone/StandaloneAnalysisAPISessionBuilder.kt index c63eb347ae3..19f118c8692 100644 --- a/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/api/standalone/StandaloneAnalysisAPISessionBuilder.kt +++ b/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/api/standalone/StandaloneAnalysisAPISessionBuilder.kt @@ -94,13 +94,6 @@ public class StandaloneAnalysisAPISessionBuilder( ) } - private fun registerApplicationServices() { - kotlinCoreProjectEnvironment.environment.application.apply { - registerService(KotlinReferenceProvidersService::class.java, HLApiReferenceProviderService::class.java) - registerService(KotlinReferenceProviderContributor::class.java, KotlinFirReferenceContributor::class.java) - } - } - public fun registerApplicationService(serviceInterface: Class, serviceImplementation: T) { kotlinCoreProjectEnvironment.environment.application.apply { registerService(serviceInterface, serviceImplementation) @@ -140,6 +133,10 @@ public class StandaloneAnalysisAPISessionBuilder( registerService(LLFirBuiltinsSessionFactory::class.java, LLFirBuiltinsSessionFactory(this)) RegisterComponentService.registerLLFirLibrarySessionFactory(this) RegisterComponentService.registerLLFirNonUnderContentRootSessionFactory(this) + + registerService(KotlinReferenceProvidersService::class.java, HLApiReferenceProviderService::class.java) + registerService(KotlinReferenceProviderContributor::class.java, KotlinFirReferenceContributor::class.java) + RegisterComponentService.registerLLFirResolveSessionService(this) registerService( PackagePartProviderFactory::class.java, @@ -203,8 +200,6 @@ public class StandaloneAnalysisAPISessionBuilder( allSourceFiles, ) - registerApplicationServices() - val project = kotlinCoreProjectEnvironment.project val ktFiles = allSourceFiles.filterIsInstance() val libraryRoots = StandaloneProjectFactory.getAllBinaryRoots(modules, kotlinCoreProjectEnvironment) diff --git a/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/api/standalone/StandaloneUtils.kt b/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/api/standalone/StandaloneUtils.kt index 4d07d4f0959..bf76e88e39d 100644 --- a/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/api/standalone/StandaloneUtils.kt +++ b/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/api/standalone/StandaloneUtils.kt @@ -79,6 +79,8 @@ public fun configureApplicationEnvironment(app: MockApplication) { * * [KotlinDeclarationProviderFactory] * * [KotlinPackageProviderFactory] * * [PackagePartProviderFactory] + * * [KotlinReferenceProvidersService] + * * [KotlinReferenceProviderContributor] * * Note that [ProjectStructureProvider] is built by using * * given [ktFiles] as Kotlin sources @@ -122,6 +124,16 @@ internal fun configureProjectEnvironment( KotlinStaticAnnotationsResolverFactory(ktFiles) ) + project.registerService( + KotlinReferenceProvidersService::class.java, + HLApiReferenceProviderService::class.java + ) + + project.registerService( + KotlinReferenceProviderContributor::class.java, + KotlinFirReferenceContributor::class.java + ) + RegisterComponentService.registerLLFirResolveSessionService(project) project.picoContainer.registerComponentInstance( FirSealedClassInheritorsProcessorFactory::class.qualifiedName, diff --git a/analysis/kt-references/src/org/jetbrains/kotlin/idea/references/KotlinPsiReferenceProvider.kt b/analysis/kt-references/src/org/jetbrains/kotlin/idea/references/KotlinPsiReferenceProvider.kt index df018d0d732..3536a3c7a89 100644 --- a/analysis/kt-references/src/org/jetbrains/kotlin/idea/references/KotlinPsiReferenceProvider.kt +++ b/analysis/kt-references/src/org/jetbrains/kotlin/idea/references/KotlinPsiReferenceProvider.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.idea.references import com.intellij.openapi.components.ServiceManager +import com.intellij.openapi.project.Project import com.intellij.psi.PsiElement import com.intellij.psi.PsiReference import com.intellij.util.containers.MultiMap @@ -19,8 +20,8 @@ interface KotlinReferenceProviderContributor { fun registerReferenceProviders(registrar: KotlinPsiReferenceRegistrar) companion object { - fun getInstance(): KotlinReferenceProviderContributor = - ServiceManager.getService(KotlinReferenceProviderContributor::class.java) + fun getInstance(project: Project): KotlinReferenceProviderContributor = + ServiceManager.getService(project, KotlinReferenceProviderContributor::class.java) } } @@ -47,4 +48,4 @@ class KotlinPsiReferenceRegistrar { fun registerMultiProvider(klass: Class, provider: KotlinPsiReferenceProvider) { providers.putValue(klass, provider) } -} \ No newline at end of file +} diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/base/AnalysisApiFirTestServiceRegistrar.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/base/AnalysisApiFirTestServiceRegistrar.kt index 67e112c1de6..64166c14c3b 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/base/AnalysisApiFirTestServiceRegistrar.kt +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/base/AnalysisApiFirTestServiceRegistrar.kt @@ -54,6 +54,7 @@ object AnalysisApiFirTestServiceRegistrar : AnalysisApiTestServiceRegistrar() { registerService(KotlinAsJavaSupport::class.java, SymbolKotlinAsJavaSupport(project)) registerService(KtCompilerPluginsProvider::class.java, KtCompilerPluginsProviderForTests(project)) registerService(ReadWriteAccessChecker::class.java, ReadWriteAccessCheckerFirImpl()) + registerService(KotlinReferenceProviderContributor::class.java, KotlinFirReferenceContributor::class.java) } with(PsiElementFinder.EP.getPoint(project)) { @@ -62,9 +63,5 @@ object AnalysisApiFirTestServiceRegistrar : AnalysisApiTestServiceRegistrar() { } } - override fun registerApplicationServices(application: MockApplication, testServices: TestServices) { - application.apply { - registerService(KotlinReferenceProviderContributor::class.java, KotlinFirReferenceContributor::class.java) - } - } + override fun registerApplicationServices(application: MockApplication, testServices: TestServices) {} } diff --git a/compiler/psi/src/org/jetbrains/kotlin/psi/KotlinReferenceProvidersService.kt b/compiler/psi/src/org/jetbrains/kotlin/psi/KotlinReferenceProvidersService.kt index 3195bea0909..16bfa7dd3fb 100644 --- a/compiler/psi/src/org/jetbrains/kotlin/psi/KotlinReferenceProvidersService.kt +++ b/compiler/psi/src/org/jetbrains/kotlin/psi/KotlinReferenceProvidersService.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.psi import com.intellij.openapi.components.ServiceManager +import com.intellij.openapi.project.Project import com.intellij.psi.PsiElement import com.intellij.psi.PsiReference @@ -16,13 +17,13 @@ open class KotlinReferenceProvidersService { private val NO_REFERENCES_SERVICE = KotlinReferenceProvidersService() @JvmStatic - fun getInstance(): KotlinReferenceProvidersService { - return ServiceManager.getService(KotlinReferenceProvidersService::class.java) ?: NO_REFERENCES_SERVICE + fun getInstance(project: Project): KotlinReferenceProvidersService { + return project.getService(KotlinReferenceProvidersService::class.java) ?: NO_REFERENCES_SERVICE } @JvmStatic fun getReferencesFromProviders(psiElement: PsiElement): Array { - return getInstance().getReferences(psiElement) + return getInstance(psiElement.project).getReferences(psiElement) } } -} \ No newline at end of file +}