[Analysis API] introduce a KotlinResolutionScopeProvider to optimize the resolutions scope in the IDE

This commit is contained in:
Ilya Kirillov
2023-02-09 22:40:21 +01:00
parent bb0ddcbeba
commit 769fb835f9
5 changed files with 50 additions and 17 deletions
@@ -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)
}
}
@@ -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 })
}
}