[AA] Make KotlinReferenceProvidersService and KotlinReferenceProviderContributor a project services
There is no need to have those services on application level
This commit is contained in:
+2
-5
@@ -37,14 +37,11 @@ object AnalysisApiFe10TestServiceRegistrar : AnalysisApiTestServiceRegistrar() {
|
|||||||
registerService(ModuleVisibilityManager::class.java, CliModuleVisibilityManagerImpl(enabled = true))
|
registerService(ModuleVisibilityManager::class.java, CliModuleVisibilityManagerImpl(enabled = true))
|
||||||
|
|
||||||
registerService(ReadWriteAccessChecker::class.java, ReadWriteAccessCheckerDescriptorsImpl())
|
registerService(ReadWriteAccessChecker::class.java, ReadWriteAccessCheckerDescriptorsImpl())
|
||||||
|
registerService(KotlinReferenceProviderContributor::class.java, KtFe10KotlinReferenceProviderContributor::class.java)
|
||||||
}
|
}
|
||||||
AnalysisHandlerExtension.registerExtension(project, KtFe10AnalysisHandlerExtension())
|
AnalysisHandlerExtension.registerExtension(project, KtFe10AnalysisHandlerExtension())
|
||||||
KotlinCoreEnvironment.registerKotlinLightClassSupport(project)
|
KotlinCoreEnvironment.registerKotlinLightClassSupport(project)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun registerApplicationServices(application: MockApplication, testServices: TestServices) {
|
override fun registerApplicationServices(application: MockApplication, testServices: TestServices) {}
|
||||||
application.apply {
|
|
||||||
registerService(KotlinReferenceProviderContributor::class.java, KtFe10KotlinReferenceProviderContributor::class.java)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
+3
-2
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.analysis.api.impl.base.references
|
package org.jetbrains.kotlin.analysis.api.impl.base.references
|
||||||
|
|
||||||
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.psi.ContributedReferenceHost
|
import com.intellij.psi.ContributedReferenceHost
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import com.intellij.psi.PsiReference
|
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.psi.KotlinReferenceProvidersService
|
||||||
import org.jetbrains.kotlin.utils.SmartList
|
import org.jetbrains.kotlin.utils.SmartList
|
||||||
|
|
||||||
class HLApiReferenceProviderService : KotlinReferenceProvidersService() {
|
class HLApiReferenceProviderService(val project: Project) : KotlinReferenceProvidersService() {
|
||||||
private val originalProvidersBinding: MultiMap<Class<out PsiElement>, KotlinPsiReferenceProvider>
|
private val originalProvidersBinding: MultiMap<Class<out PsiElement>, KotlinPsiReferenceProvider>
|
||||||
private val providersBindingCache: Map<Class<out PsiElement>, List<KotlinPsiReferenceProvider>>
|
private val providersBindingCache: Map<Class<out PsiElement>, List<KotlinPsiReferenceProvider>>
|
||||||
|
|
||||||
init {
|
init {
|
||||||
val registrar = KotlinPsiReferenceRegistrar()
|
val registrar = KotlinPsiReferenceRegistrar()
|
||||||
KotlinReferenceProviderContributor.getInstance().registerReferenceProviders(registrar)
|
KotlinReferenceProviderContributor.getInstance(project).registerReferenceProviders(registrar)
|
||||||
originalProvidersBinding = registrar.providers
|
originalProvidersBinding = registrar.providers
|
||||||
|
|
||||||
providersBindingCache = ConcurrentFactoryMap.createMap<Class<out PsiElement>, List<KotlinPsiReferenceProvider>> { klass ->
|
providersBindingCache = ConcurrentFactoryMap.createMap<Class<out PsiElement>, List<KotlinPsiReferenceProvider>> { klass ->
|
||||||
|
|||||||
+3
-8
@@ -28,8 +28,7 @@ import org.jetbrains.kotlin.psi.KtFile
|
|||||||
import org.jetbrains.kotlin.test.services.TestServices
|
import org.jetbrains.kotlin.test.services.TestServices
|
||||||
|
|
||||||
object AnalysisApiBaseTestServiceRegistrar: AnalysisApiTestServiceRegistrar() {
|
object AnalysisApiBaseTestServiceRegistrar: AnalysisApiTestServiceRegistrar() {
|
||||||
override fun registerProjectExtensionPoints(project: MockProject, testServices: TestServices) {
|
override fun registerProjectExtensionPoints(project: MockProject, testServices: TestServices) {}
|
||||||
}
|
|
||||||
|
|
||||||
@OptIn(KtAnalysisApiInternals::class)
|
@OptIn(KtAnalysisApiInternals::class)
|
||||||
override fun registerProjectServices(project: MockProject, testServices: TestServices) {
|
override fun registerProjectServices(project: MockProject, testServices: TestServices) {
|
||||||
@@ -43,13 +42,9 @@ object AnalysisApiBaseTestServiceRegistrar: AnalysisApiTestServiceRegistrar() {
|
|||||||
registerService(KotlinAnnotationsResolverFactory::class.java, KotlinStaticAnnotationsResolverFactory(allKtFiles))
|
registerService(KotlinAnnotationsResolverFactory::class.java, KotlinStaticAnnotationsResolverFactory(allKtFiles))
|
||||||
registerService(KotlinDeclarationProviderFactory::class.java, KotlinStaticDeclarationProviderFactory(allKtFiles))
|
registerService(KotlinDeclarationProviderFactory::class.java, KotlinStaticDeclarationProviderFactory(allKtFiles))
|
||||||
registerService(KotlinPackageProviderFactory::class.java, KotlinStaticPackageProviderFactory(allKtFiles))
|
registerService(KotlinPackageProviderFactory::class.java, KotlinStaticPackageProviderFactory(allKtFiles))
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun registerApplicationServices(application: MockApplication, testServices: TestServices) {
|
|
||||||
application.apply {
|
|
||||||
registerService(KotlinReferenceProvidersService::class.java, HLApiReferenceProviderService::class.java)
|
registerService(KotlinReferenceProvidersService::class.java, HLApiReferenceProviderService::class.java)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun registerApplicationServices(application: MockApplication, testServices: TestServices) {}
|
||||||
}
|
}
|
||||||
+4
-9
@@ -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 <T : Any> registerApplicationService(serviceInterface: Class<T>, serviceImplementation: T) {
|
public fun <T : Any> registerApplicationService(serviceInterface: Class<T>, serviceImplementation: T) {
|
||||||
kotlinCoreProjectEnvironment.environment.application.apply {
|
kotlinCoreProjectEnvironment.environment.application.apply {
|
||||||
registerService(serviceInterface, serviceImplementation)
|
registerService(serviceInterface, serviceImplementation)
|
||||||
@@ -140,6 +133,10 @@ public class StandaloneAnalysisAPISessionBuilder(
|
|||||||
registerService(LLFirBuiltinsSessionFactory::class.java, LLFirBuiltinsSessionFactory(this))
|
registerService(LLFirBuiltinsSessionFactory::class.java, LLFirBuiltinsSessionFactory(this))
|
||||||
RegisterComponentService.registerLLFirLibrarySessionFactory(this)
|
RegisterComponentService.registerLLFirLibrarySessionFactory(this)
|
||||||
RegisterComponentService.registerLLFirNonUnderContentRootSessionFactory(this)
|
RegisterComponentService.registerLLFirNonUnderContentRootSessionFactory(this)
|
||||||
|
|
||||||
|
registerService(KotlinReferenceProvidersService::class.java, HLApiReferenceProviderService::class.java)
|
||||||
|
registerService(KotlinReferenceProviderContributor::class.java, KotlinFirReferenceContributor::class.java)
|
||||||
|
|
||||||
RegisterComponentService.registerLLFirResolveSessionService(this)
|
RegisterComponentService.registerLLFirResolveSessionService(this)
|
||||||
registerService(
|
registerService(
|
||||||
PackagePartProviderFactory::class.java,
|
PackagePartProviderFactory::class.java,
|
||||||
@@ -203,8 +200,6 @@ public class StandaloneAnalysisAPISessionBuilder(
|
|||||||
allSourceFiles,
|
allSourceFiles,
|
||||||
)
|
)
|
||||||
|
|
||||||
registerApplicationServices()
|
|
||||||
|
|
||||||
val project = kotlinCoreProjectEnvironment.project
|
val project = kotlinCoreProjectEnvironment.project
|
||||||
val ktFiles = allSourceFiles.filterIsInstance<KtFile>()
|
val ktFiles = allSourceFiles.filterIsInstance<KtFile>()
|
||||||
val libraryRoots = StandaloneProjectFactory.getAllBinaryRoots(modules, kotlinCoreProjectEnvironment)
|
val libraryRoots = StandaloneProjectFactory.getAllBinaryRoots(modules, kotlinCoreProjectEnvironment)
|
||||||
|
|||||||
+12
@@ -79,6 +79,8 @@ public fun configureApplicationEnvironment(app: MockApplication) {
|
|||||||
* * [KotlinDeclarationProviderFactory]
|
* * [KotlinDeclarationProviderFactory]
|
||||||
* * [KotlinPackageProviderFactory]
|
* * [KotlinPackageProviderFactory]
|
||||||
* * [PackagePartProviderFactory]
|
* * [PackagePartProviderFactory]
|
||||||
|
* * [KotlinReferenceProvidersService]
|
||||||
|
* * [KotlinReferenceProviderContributor]
|
||||||
*
|
*
|
||||||
* Note that [ProjectStructureProvider] is built by using
|
* Note that [ProjectStructureProvider] is built by using
|
||||||
* * given [ktFiles] as Kotlin sources
|
* * given [ktFiles] as Kotlin sources
|
||||||
@@ -122,6 +124,16 @@ internal fun configureProjectEnvironment(
|
|||||||
KotlinStaticAnnotationsResolverFactory(ktFiles)
|
KotlinStaticAnnotationsResolverFactory(ktFiles)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
project.registerService(
|
||||||
|
KotlinReferenceProvidersService::class.java,
|
||||||
|
HLApiReferenceProviderService::class.java
|
||||||
|
)
|
||||||
|
|
||||||
|
project.registerService(
|
||||||
|
KotlinReferenceProviderContributor::class.java,
|
||||||
|
KotlinFirReferenceContributor::class.java
|
||||||
|
)
|
||||||
|
|
||||||
RegisterComponentService.registerLLFirResolveSessionService(project)
|
RegisterComponentService.registerLLFirResolveSessionService(project)
|
||||||
project.picoContainer.registerComponentInstance(
|
project.picoContainer.registerComponentInstance(
|
||||||
FirSealedClassInheritorsProcessorFactory::class.qualifiedName,
|
FirSealedClassInheritorsProcessorFactory::class.qualifiedName,
|
||||||
|
|||||||
+3
-2
@@ -6,6 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.idea.references
|
package org.jetbrains.kotlin.idea.references
|
||||||
|
|
||||||
import com.intellij.openapi.components.ServiceManager
|
import com.intellij.openapi.components.ServiceManager
|
||||||
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import com.intellij.psi.PsiReference
|
import com.intellij.psi.PsiReference
|
||||||
import com.intellij.util.containers.MultiMap
|
import com.intellij.util.containers.MultiMap
|
||||||
@@ -19,8 +20,8 @@ interface KotlinReferenceProviderContributor {
|
|||||||
fun registerReferenceProviders(registrar: KotlinPsiReferenceRegistrar)
|
fun registerReferenceProviders(registrar: KotlinPsiReferenceRegistrar)
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
fun getInstance(): KotlinReferenceProviderContributor =
|
fun getInstance(project: Project): KotlinReferenceProviderContributor =
|
||||||
ServiceManager.getService(KotlinReferenceProviderContributor::class.java)
|
ServiceManager.getService(project, KotlinReferenceProviderContributor::class.java)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-5
@@ -54,6 +54,7 @@ object AnalysisApiFirTestServiceRegistrar : AnalysisApiTestServiceRegistrar() {
|
|||||||
registerService(KotlinAsJavaSupport::class.java, SymbolKotlinAsJavaSupport(project))
|
registerService(KotlinAsJavaSupport::class.java, SymbolKotlinAsJavaSupport(project))
|
||||||
registerService(KtCompilerPluginsProvider::class.java, KtCompilerPluginsProviderForTests(project))
|
registerService(KtCompilerPluginsProvider::class.java, KtCompilerPluginsProviderForTests(project))
|
||||||
registerService(ReadWriteAccessChecker::class.java, ReadWriteAccessCheckerFirImpl())
|
registerService(ReadWriteAccessChecker::class.java, ReadWriteAccessCheckerFirImpl())
|
||||||
|
registerService(KotlinReferenceProviderContributor::class.java, KotlinFirReferenceContributor::class.java)
|
||||||
}
|
}
|
||||||
|
|
||||||
with(PsiElementFinder.EP.getPoint(project)) {
|
with(PsiElementFinder.EP.getPoint(project)) {
|
||||||
@@ -62,9 +63,5 @@ object AnalysisApiFirTestServiceRegistrar : AnalysisApiTestServiceRegistrar() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun registerApplicationServices(application: MockApplication, testServices: TestServices) {
|
override fun registerApplicationServices(application: MockApplication, testServices: TestServices) {}
|
||||||
application.apply {
|
|
||||||
registerService(KotlinReferenceProviderContributor::class.java, KotlinFirReferenceContributor::class.java)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.psi
|
package org.jetbrains.kotlin.psi
|
||||||
|
|
||||||
import com.intellij.openapi.components.ServiceManager
|
import com.intellij.openapi.components.ServiceManager
|
||||||
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import com.intellij.psi.PsiReference
|
import com.intellij.psi.PsiReference
|
||||||
|
|
||||||
@@ -16,13 +17,13 @@ open class KotlinReferenceProvidersService {
|
|||||||
private val NO_REFERENCES_SERVICE = KotlinReferenceProvidersService()
|
private val NO_REFERENCES_SERVICE = KotlinReferenceProvidersService()
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun getInstance(): KotlinReferenceProvidersService {
|
fun getInstance(project: Project): KotlinReferenceProvidersService {
|
||||||
return ServiceManager.getService(KotlinReferenceProvidersService::class.java) ?: NO_REFERENCES_SERVICE
|
return project.getService(KotlinReferenceProvidersService::class.java) ?: NO_REFERENCES_SERVICE
|
||||||
}
|
}
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun getReferencesFromProviders(psiElement: PsiElement): Array<PsiReference> {
|
fun getReferencesFromProviders(psiElement: PsiElement): Array<PsiReference> {
|
||||||
return getInstance().getReferences(psiElement)
|
return getInstance(psiElement.project).getReferences(psiElement)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user