[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.components.KtAnalysisScopeProvider
|
||||
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
|
||||
|
||||
class KtAnalysisScopeProviderImpl(
|
||||
@@ -18,16 +18,13 @@ class KtAnalysisScopeProviderImpl(
|
||||
override val token: KtLifetimeToken
|
||||
) : KtAnalysisScopeProvider() {
|
||||
|
||||
private val allModules = buildList {
|
||||
add(analysisSession.useSiteModule)
|
||||
addAll(analysisSession.useSiteModule.allDirectDependencies())
|
||||
private val scope by lazy(LazyThreadSafetyMode.PUBLICATION) {
|
||||
KotlinResolutionScopeProvider.getInstance(analysisSession.useSiteModule.project).getResolutionScope(analysisSession.useSiteModule)
|
||||
}
|
||||
|
||||
private val analysisScope = GlobalSearchScope.union(allModules.map { it.contentScope })
|
||||
|
||||
override fun getAnalysisScope(): GlobalSearchScope = analysisScope
|
||||
override fun getAnalysisScope(): GlobalSearchScope = scope
|
||||
|
||||
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.project.structure.KtModuleScopeProvider
|
||||
import org.jetbrains.kotlin.analysis.project.structure.KtModuleScopeProviderImpl
|
||||
import org.jetbrains.kotlin.analysis.providers.KotlinAnnotationsResolverFactory
|
||||
import org.jetbrains.kotlin.analysis.providers.KotlinDeclarationProviderFactory
|
||||
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.providers.*
|
||||
import org.jetbrains.kotlin.analysis.providers.impl.*
|
||||
import org.jetbrains.kotlin.analysis.test.framework.project.structure.ktModuleProvider
|
||||
import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestServiceRegistrar
|
||||
import org.jetbrains.kotlin.psi.KotlinReferenceProvidersService
|
||||
@@ -47,6 +41,7 @@ object AnalysisApiBaseTestServiceRegistrar: AnalysisApiTestServiceRegistrar() {
|
||||
registerService(KotlinDeclarationProviderFactory::class.java, KotlinStaticDeclarationProviderFactory(project, allKtFiles))
|
||||
registerService(KotlinPackageProviderFactory::class.java, KotlinStaticPackageProviderFactory(allKtFiles))
|
||||
registerService(KotlinReferenceProvidersService::class.java, HLApiReferenceProviderService::class.java)
|
||||
registerService(KotlinResolutionScopeProvider::class.java, KotlinByModulesResolutionScopeProvider::class.java)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user