Pass GlobalSearchScope instance to JvmPackagePartProvider

Currently behavior is unchanged because the "all project" scope is passed,
however in the future this will allow to implement separate modules in the
compiler properly
This commit is contained in:
Alexander Udalov
2016-09-29 19:14:21 +03:00
parent 54dfe760c0
commit 3314725700
9 changed files with 43 additions and 26 deletions
@@ -16,6 +16,7 @@
package org.jetbrains.kotlin.cli.jvm.compiler
import com.intellij.psi.search.GlobalSearchScope
import com.intellij.util.SmartList
import org.jetbrains.kotlin.cli.jvm.config.JvmClasspathRoot
import org.jetbrains.kotlin.config.JVMConfigurationKeys
@@ -23,12 +24,15 @@ import org.jetbrains.kotlin.descriptors.PackagePartProvider
import org.jetbrains.kotlin.load.kotlin.ModuleMapping
import java.io.EOFException
class JvmPackagePartProvider(val env: KotlinCoreEnvironment) : PackagePartProvider {
class JvmPackagePartProvider(
private val env: KotlinCoreEnvironment,
private val scope: GlobalSearchScope
) : PackagePartProvider {
private val notLoadedRoots by lazy(LazyThreadSafetyMode.NONE) {
env.configuration.getList(JVMConfigurationKeys.CONTENT_ROOTS)
.filterIsInstance<JvmClasspathRoot>()
.mapNotNull { env.contentRootToVirtualFile(it) }
.filter { it.findChild("META-INF") != null }
.filter { it in scope && it.findChild("META-INF") != null }
.toMutableList()
}
@@ -408,7 +408,7 @@ object KotlinToJVMBytecodeCompiler {
environment.getSourceFiles(),
CliLightClassGenerationSupport.NoScopeRecordCliBindingTrace(),
environment.configuration,
JvmPackagePartProvider(environment)
{ scope -> JvmPackagePartProvider(environment, scope) }
)
override fun reportEnvironmentErrors() {
@@ -54,12 +54,13 @@ class CliReplAnalyzerEngine(environment: KotlinCoreEnvironment) {
this.scriptDeclarationFactory = ScriptMutableDeclarationProviderFactory()
val moduleContentScope = ProjectScope.getAllScope(environment.project)
val container = createContainerForTopDownSingleModuleAnalyzerForJvm(
moduleContext,
trace,
scriptDeclarationFactory,
ProjectScope.getAllScope(environment.project),
JvmPackagePartProvider(environment)
moduleContentScope,
JvmPackagePartProvider(environment, moduleContentScope)
)
this.resolveSession = container.get<ResolveSession>()