Add reading script configuration files on compilation

This commit is contained in:
Ilya Chernikov
2016-06-01 14:00:08 +02:00
parent 14ae795aaa
commit 06a586bb82
2 changed files with 24 additions and 8 deletions
@@ -115,8 +115,6 @@ class K2JVMCompiler : CLICompiler<K2JVMCompilerArguments>() {
return ExitCode.OK
}
configuration.add(JVMConfigurationKeys.SCRIPT_DEFINITIONS, StandardScriptDefinition)
if (arguments.skipMetadataVersionCheck) {
JvmMetadataVersion.skipCheck = true
}
@@ -64,9 +64,7 @@ import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity.ERROR
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity.WARNING
import org.jetbrains.kotlin.cli.common.toBooleanLenient
import org.jetbrains.kotlin.cli.jvm.config.JavaSourceRoot
import org.jetbrains.kotlin.cli.jvm.config.JvmClasspathRoot
import org.jetbrains.kotlin.cli.jvm.config.JvmContentRoot
import org.jetbrains.kotlin.cli.jvm.config.*
import org.jetbrains.kotlin.codegen.extensions.ClassBuilderInterceptorExtension
import org.jetbrains.kotlin.codegen.extensions.ExpressionCodegenExtension
import org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar
@@ -89,7 +87,7 @@ import org.jetbrains.kotlin.resolve.jvm.extensions.AnalysisCompletedHandlerExten
import org.jetbrains.kotlin.resolve.jvm.extensions.PackageFragmentProviderExtension
import org.jetbrains.kotlin.resolve.lazy.declarations.CliDeclarationProviderFactoryService
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactoryService
import org.jetbrains.kotlin.script.KotlinScriptDefinitionProvider
import org.jetbrains.kotlin.script.*
import org.jetbrains.kotlin.utils.PathUtil
import java.io.File
import java.util.*
@@ -122,7 +120,6 @@ class KotlinCoreEnvironment private constructor(
registerProjectServicesForCLI(projectEnvironment)
registerProjectServices(projectEnvironment)
fillClasspath(configuration)
val fileManager = ServiceManager.getService(project, CoreJavaFileManager::class.java)
val index = JvmDependenciesIndex(javaRoots)
(fileManager as KotlinCliJavaFileManagerImpl).initIndex(index)
@@ -137,7 +134,27 @@ class KotlinCoreEnvironment private constructor(
}
})
KotlinScriptDefinitionProvider.getInstance(project).scriptDefinitions = configuration.getList(JVMConfigurationKeys.SCRIPT_DEFINITIONS)
KotlinScriptDefinitionProvider.getInstance(project).let { scriptDefinitionProvider ->
scriptDefinitionProvider.scriptDefinitions =
configuration.getList(JVMConfigurationKeys.SCRIPT_DEFINITIONS).let {
if (it.isNotEmpty()) it
else {
val kotlinEnvVars = generateKotlinScriptClasspathEnvVarsForCompiler(project)
loadScriptConfigsFromProjectRoot(File(project.basePath ?: ".")).map {
KotlinConfigurableScriptDefinition(it, kotlinEnvVars)
} + StandardScriptDefinition
}
}
KotlinScriptExtraImportsProvider.getInstance(project).let { scriptExtraImportsProvider ->
configuration.addJvmClasspathRoots(
sourceFiles
.filter { it.originalFile.virtualFile != null && scriptDefinitionProvider.isScript(it.originalFile.virtualFile) }
.flatMap { scriptExtraImportsProvider.getExtraImports(it.originalFile.virtualFile).flatMap { it.classpath.map { File(it).canonicalFile } } }
.distinct())
}
}
fillClasspath(configuration)
project.registerService(JvmVirtualFileFinderFactory::class.java, JvmCliVirtualFileFinderFactory(index))
@@ -391,6 +408,7 @@ class KotlinCoreEnvironment private constructor(
@JvmStatic fun registerProjectServices(projectEnvironment: JavaCoreProjectEnvironment) {
with (projectEnvironment.project) {
registerService(KotlinScriptDefinitionProvider::class.java, KotlinScriptDefinitionProvider())
registerService(KotlinScriptExtraImportsProvider::class.java, KotlinScriptExtraImportsProvider(projectEnvironment.project))
registerService(KotlinJavaPsiFacade::class.java, KotlinJavaPsiFacade(this))
registerService(KtLightClassForFacade.FacadeStubCache::class.java, KtLightClassForFacade.FacadeStubCache(this))
}