[Analysis API] introduce a KotlinResolutionScopeProvider to optimize the resolutions scope in the IDE
This commit is contained in:
+5
-8
@@ -10,7 +10,7 @@ import com.intellij.psi.search.GlobalSearchScope
|
|||||||
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
|
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
|
||||||
import org.jetbrains.kotlin.analysis.api.components.KtAnalysisScopeProvider
|
import org.jetbrains.kotlin.analysis.api.components.KtAnalysisScopeProvider
|
||||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
|
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
|
||||||
import org.jetbrains.kotlin.analysis.project.structure.allDirectDependencies
|
import org.jetbrains.kotlin.analysis.providers.KotlinResolutionScopeProvider
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.contains
|
import org.jetbrains.kotlin.psi.psiUtil.contains
|
||||||
|
|
||||||
class KtAnalysisScopeProviderImpl(
|
class KtAnalysisScopeProviderImpl(
|
||||||
@@ -18,16 +18,13 @@ class KtAnalysisScopeProviderImpl(
|
|||||||
override val token: KtLifetimeToken
|
override val token: KtLifetimeToken
|
||||||
) : KtAnalysisScopeProvider() {
|
) : KtAnalysisScopeProvider() {
|
||||||
|
|
||||||
private val allModules = buildList {
|
private val scope by lazy(LazyThreadSafetyMode.PUBLICATION) {
|
||||||
add(analysisSession.useSiteModule)
|
KotlinResolutionScopeProvider.getInstance(analysisSession.useSiteModule.project).getResolutionScope(analysisSession.useSiteModule)
|
||||||
addAll(analysisSession.useSiteModule.allDirectDependencies())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private val analysisScope = GlobalSearchScope.union(allModules.map { it.contentScope })
|
override fun getAnalysisScope(): GlobalSearchScope = scope
|
||||||
|
|
||||||
override fun getAnalysisScope(): GlobalSearchScope = analysisScope
|
|
||||||
|
|
||||||
override fun canBeAnalysed(psi: PsiElement): Boolean {
|
override fun canBeAnalysed(psi: PsiElement): Boolean {
|
||||||
return analysisScope.contains(psi)
|
return scope.contains(psi)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-8
@@ -13,14 +13,8 @@ import org.jetbrains.kotlin.analysis.api.lifetime.KtDefaultLifetimeTokenProvider
|
|||||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtReadActionConfinementDefaultLifetimeTokenProvider
|
import org.jetbrains.kotlin.analysis.api.lifetime.KtReadActionConfinementDefaultLifetimeTokenProvider
|
||||||
import org.jetbrains.kotlin.analysis.project.structure.KtModuleScopeProvider
|
import org.jetbrains.kotlin.analysis.project.structure.KtModuleScopeProvider
|
||||||
import org.jetbrains.kotlin.analysis.project.structure.KtModuleScopeProviderImpl
|
import org.jetbrains.kotlin.analysis.project.structure.KtModuleScopeProviderImpl
|
||||||
import org.jetbrains.kotlin.analysis.providers.KotlinAnnotationsResolverFactory
|
import org.jetbrains.kotlin.analysis.providers.*
|
||||||
import org.jetbrains.kotlin.analysis.providers.KotlinDeclarationProviderFactory
|
import org.jetbrains.kotlin.analysis.providers.impl.*
|
||||||
import org.jetbrains.kotlin.analysis.providers.KotlinModificationTrackerFactory
|
|
||||||
import org.jetbrains.kotlin.analysis.providers.KotlinPackageProviderFactory
|
|
||||||
import org.jetbrains.kotlin.analysis.providers.impl.KotlinStaticAnnotationsResolverFactory
|
|
||||||
import org.jetbrains.kotlin.analysis.providers.impl.KotlinStaticDeclarationProviderFactory
|
|
||||||
import org.jetbrains.kotlin.analysis.providers.impl.KotlinStaticModificationTrackerFactory
|
|
||||||
import org.jetbrains.kotlin.analysis.providers.impl.KotlinStaticPackageProviderFactory
|
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.project.structure.ktModuleProvider
|
import org.jetbrains.kotlin.analysis.test.framework.project.structure.ktModuleProvider
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestServiceRegistrar
|
import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestServiceRegistrar
|
||||||
import org.jetbrains.kotlin.psi.KotlinReferenceProvidersService
|
import org.jetbrains.kotlin.psi.KotlinReferenceProvidersService
|
||||||
@@ -47,6 +41,7 @@ object AnalysisApiBaseTestServiceRegistrar: AnalysisApiTestServiceRegistrar() {
|
|||||||
registerService(KotlinDeclarationProviderFactory::class.java, KotlinStaticDeclarationProviderFactory(project, allKtFiles))
|
registerService(KotlinDeclarationProviderFactory::class.java, KotlinStaticDeclarationProviderFactory(project, allKtFiles))
|
||||||
registerService(KotlinPackageProviderFactory::class.java, KotlinStaticPackageProviderFactory(allKtFiles))
|
registerService(KotlinPackageProviderFactory::class.java, KotlinStaticPackageProviderFactory(allKtFiles))
|
||||||
registerService(KotlinReferenceProvidersService::class.java, HLApiReferenceProviderService::class.java)
|
registerService(KotlinReferenceProvidersService::class.java, HLApiReferenceProviderService::class.java)
|
||||||
|
registerService(KotlinResolutionScopeProvider::class.java, KotlinByModulesResolutionScopeProvider::class.java)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+19
@@ -0,0 +1,19 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* 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.providers
|
||||||
|
|
||||||
|
import com.intellij.openapi.project.Project
|
||||||
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
|
import org.jetbrains.kotlin.analysis.project.structure.KtModule
|
||||||
|
|
||||||
|
public abstract class KotlinResolutionScopeProvider {
|
||||||
|
public abstract fun getResolutionScope(module: KtModule): GlobalSearchScope
|
||||||
|
|
||||||
|
public companion object {
|
||||||
|
public fun getInstance(project: Project): KotlinResolutionScopeProvider =
|
||||||
|
project.getService(KotlinResolutionScopeProvider::class.java)
|
||||||
|
}
|
||||||
|
}
|
||||||
+21
@@ -0,0 +1,21 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* 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.providers.impl
|
||||||
|
|
||||||
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
|
import org.jetbrains.kotlin.analysis.project.structure.KtModule
|
||||||
|
import org.jetbrains.kotlin.analysis.project.structure.allDirectDependencies
|
||||||
|
import org.jetbrains.kotlin.analysis.providers.KotlinResolutionScopeProvider
|
||||||
|
|
||||||
|
public class KotlinByModulesResolutionScopeProvider : KotlinResolutionScopeProvider() {
|
||||||
|
override fun getResolutionScope(module: KtModule): GlobalSearchScope {
|
||||||
|
val allModules = buildList {
|
||||||
|
add(module)
|
||||||
|
addAll(module.allDirectDependencies())
|
||||||
|
}
|
||||||
|
return GlobalSearchScope.union(allModules.map { it.contentScope })
|
||||||
|
}
|
||||||
|
}
|
||||||
+2
-1
@@ -39,7 +39,7 @@ import org.jetbrains.kotlin.asJava.KotlinAsJavaSupport
|
|||||||
import org.jetbrains.kotlin.asJava.finder.JavaElementFinder
|
import org.jetbrains.kotlin.asJava.finder.JavaElementFinder
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreProjectEnvironment
|
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreProjectEnvironment
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.setupIdeaStandaloneExecution
|
import org.jetbrains.kotlin.cli.jvm.compiler.setupIdeaStandaloneExecution
|
||||||
import org.jetbrains.kotlin.config.*
|
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||||
import org.jetbrains.kotlin.fir.declarations.SealedClassInheritorsProvider
|
import org.jetbrains.kotlin.fir.declarations.SealedClassInheritorsProvider
|
||||||
import org.jetbrains.kotlin.fir.declarations.SealedClassInheritorsProviderImpl
|
import org.jetbrains.kotlin.fir.declarations.SealedClassInheritorsProviderImpl
|
||||||
import org.jetbrains.kotlin.idea.references.KotlinFirReferenceContributor
|
import org.jetbrains.kotlin.idea.references.KotlinFirReferenceContributor
|
||||||
@@ -121,6 +121,7 @@ public class StandaloneAnalysisAPISessionBuilder(
|
|||||||
|
|
||||||
registerService(KtModuleScopeProvider::class.java, KtModuleScopeProviderImpl())
|
registerService(KtModuleScopeProvider::class.java, KtModuleScopeProviderImpl())
|
||||||
registerService(KotlinAnnotationsResolverFactory::class.java, KotlinStaticAnnotationsResolverFactory(ktFiles))
|
registerService(KotlinAnnotationsResolverFactory::class.java, KotlinStaticAnnotationsResolverFactory(ktFiles))
|
||||||
|
registerService(KotlinResolutionScopeProvider::class.java, KotlinByModulesResolutionScopeProvider::class.java)
|
||||||
registerService(
|
registerService(
|
||||||
KotlinDeclarationProviderFactory::class.java,
|
KotlinDeclarationProviderFactory::class.java,
|
||||||
KotlinStaticDeclarationProviderFactory(
|
KotlinStaticDeclarationProviderFactory(
|
||||||
|
|||||||
Reference in New Issue
Block a user