Rewrite handing and caching of script configurations

The refactoring could enable lazy update of the index on script loading, but seems that makeRootsChange
call doesn't work as expected, therefore initial project scan is performed in the KotlinScriptConfigurationManager
anyway
This commit is contained in:
Ilya Chernikov
2016-06-01 12:41:37 +02:00
parent 3e6616de42
commit b9ea9513b1
9 changed files with 193 additions and 107 deletions
@@ -136,7 +136,7 @@ class KotlinCoreEnvironment private constructor(
})
KotlinScriptDefinitionProvider.getInstance(project).let { scriptDefinitionProvider ->
scriptDefinitionProvider.scriptDefinitions =
scriptDefinitionProvider.setScriptDefinitions(
configuration.getList(JVMConfigurationKeys.SCRIPT_DEFINITIONS)
.ifEmpty {
if (configuration.get(JVMConfigurationKeys.LOAD_SCRIPT_CONFIGS) ?: false)
@@ -146,14 +146,14 @@ class KotlinCoreEnvironment private constructor(
}
else null
?: listOf(StandardScriptDefinition)
}
})
configuration.addJvmClasspathRoots(
sourceFiles
.mapNotNull { src -> src.virtualFile }
.flatMap { getScriptCombinedClasspath(it, project) }
.map { File(it).canonicalFile }
.distinct())
KotlinScriptExtraImportsProvider.getInstance(project)?.run {
configuration.addJvmClasspathRoots(
getCombinedClasspathFor(sourceFiles.mapNotNull { src -> src.virtualFile })
.map { File(it).canonicalFile }
.distinct())
}
}
fillClasspath(configuration)
@@ -409,8 +409,9 @@ class KotlinCoreEnvironment private constructor(
// made public for Upsource
@JvmStatic fun registerProjectServices(projectEnvironment: JavaCoreProjectEnvironment) {
with (projectEnvironment.project) {
registerService(KotlinScriptDefinitionProvider::class.java, KotlinScriptDefinitionProvider())
registerService(KotlinScriptExtraImportsProvider::class.java, KotlinScriptExtraImportsProvider(projectEnvironment.project))
val kotlinScriptDefinitionProvider = KotlinScriptDefinitionProvider()
registerService(KotlinScriptDefinitionProvider::class.java, kotlinScriptDefinitionProvider)
registerService(KotlinScriptExtraImportsProvider::class.java, KotlinScriptExtraImportsProvider(projectEnvironment.project, kotlinScriptDefinitionProvider))
registerService(KotlinJavaPsiFacade::class.java, KotlinJavaPsiFacade(this))
registerService(KtLightClassForFacade.FacadeStubCache::class.java, KtLightClassForFacade.FacadeStubCache(this))
}