Move script related configuration to the plugin
This commit is contained in:
@@ -20,7 +20,10 @@ import com.intellij.codeInsight.ContainerProvider
|
|||||||
import com.intellij.codeInsight.ExternalAnnotationsManager
|
import com.intellij.codeInsight.ExternalAnnotationsManager
|
||||||
import com.intellij.codeInsight.InferredAnnotationsManager
|
import com.intellij.codeInsight.InferredAnnotationsManager
|
||||||
import com.intellij.codeInsight.runner.JavaMainMethodProvider
|
import com.intellij.codeInsight.runner.JavaMainMethodProvider
|
||||||
import com.intellij.core.*
|
import com.intellij.core.CoreApplicationEnvironment
|
||||||
|
import com.intellij.core.CoreJavaFileManager
|
||||||
|
import com.intellij.core.JavaCoreApplicationEnvironment
|
||||||
|
import com.intellij.core.JavaCoreProjectEnvironment
|
||||||
import com.intellij.ide.highlighter.JavaFileType
|
import com.intellij.ide.highlighter.JavaFileType
|
||||||
import com.intellij.lang.MetaLanguage
|
import com.intellij.lang.MetaLanguage
|
||||||
import com.intellij.lang.java.JavaParserDefinition
|
import com.intellij.lang.java.JavaParserDefinition
|
||||||
@@ -32,7 +35,6 @@ import com.intellij.openapi.diagnostic.Logger
|
|||||||
import com.intellij.openapi.extensions.Extensions
|
import com.intellij.openapi.extensions.Extensions
|
||||||
import com.intellij.openapi.extensions.ExtensionsArea
|
import com.intellij.openapi.extensions.ExtensionsArea
|
||||||
import com.intellij.openapi.fileTypes.FileTypeExtensionPoint
|
import com.intellij.openapi.fileTypes.FileTypeExtensionPoint
|
||||||
import com.intellij.openapi.fileTypes.FileTypeRegistry
|
|
||||||
import com.intellij.openapi.fileTypes.PlainTextFileType
|
import com.intellij.openapi.fileTypes.PlainTextFileType
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.openapi.util.Disposer
|
import com.intellij.openapi.util.Disposer
|
||||||
@@ -76,9 +78,6 @@ 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.ERROR
|
||||||
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity.STRONG_WARNING
|
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity.STRONG_WARNING
|
||||||
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
|
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
|
||||||
import org.jetbrains.kotlin.cli.common.script.CliScriptDefinitionProvider
|
|
||||||
import org.jetbrains.kotlin.cli.common.script.CliScriptDependenciesProvider
|
|
||||||
import org.jetbrains.kotlin.cli.common.script.CliScriptReportSink
|
|
||||||
import org.jetbrains.kotlin.cli.common.toBooleanLenient
|
import org.jetbrains.kotlin.cli.common.toBooleanLenient
|
||||||
import org.jetbrains.kotlin.cli.jvm.JvmRuntimeVersionsConsistencyChecker
|
import org.jetbrains.kotlin.cli.jvm.JvmRuntimeVersionsConsistencyChecker
|
||||||
import org.jetbrains.kotlin.cli.jvm.config.*
|
import org.jetbrains.kotlin.cli.jvm.config.*
|
||||||
@@ -113,10 +112,6 @@ import org.jetbrains.kotlin.resolve.jvm.modules.JavaModuleResolver
|
|||||||
import org.jetbrains.kotlin.resolve.lazy.declarations.CliDeclarationProviderFactoryService
|
import org.jetbrains.kotlin.resolve.lazy.declarations.CliDeclarationProviderFactoryService
|
||||||
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactoryService
|
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactoryService
|
||||||
import org.jetbrains.kotlin.resolve.multiplatform.isCommonSource
|
import org.jetbrains.kotlin.resolve.multiplatform.isCommonSource
|
||||||
import org.jetbrains.kotlin.script.ScriptDefinitionProvider
|
|
||||||
import org.jetbrains.kotlin.script.ScriptDependenciesProvider
|
|
||||||
import org.jetbrains.kotlin.script.ScriptReportSink
|
|
||||||
import org.jetbrains.kotlin.script.StandardScriptDefinition
|
|
||||||
import org.jetbrains.kotlin.utils.PathUtil
|
import org.jetbrains.kotlin.utils.PathUtil
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.lang.reflect.Field
|
import java.lang.reflect.Field
|
||||||
@@ -224,35 +219,12 @@ class KotlinCoreEnvironment private constructor(
|
|||||||
extension.updateConfiguration(configuration)
|
extension.updateConfiguration(configuration)
|
||||||
}
|
}
|
||||||
|
|
||||||
// If not disabled explicitly, we should always support at least the standard script definition
|
|
||||||
if (!configuration.getBoolean(JVMConfigurationKeys.DISABLE_STANDARD_SCRIPT_DEFINITION) &&
|
|
||||||
StandardScriptDefinition !in configuration.getList(JVMConfigurationKeys.SCRIPT_DEFINITIONS)
|
|
||||||
) {
|
|
||||||
configuration.add(JVMConfigurationKeys.SCRIPT_DEFINITIONS, StandardScriptDefinition)
|
|
||||||
}
|
|
||||||
|
|
||||||
val scriptDefinitionProvider = ScriptDefinitionProvider.getInstance(project) as? CliScriptDefinitionProvider
|
|
||||||
if (scriptDefinitionProvider != null) {
|
|
||||||
scriptDefinitionProvider.setScriptDefinitionsSources(configuration.getList(JVMConfigurationKeys.SCRIPT_DEFINITIONS_SOURCES))
|
|
||||||
scriptDefinitionProvider.setScriptDefinitions(configuration.getList(JVMConfigurationKeys.SCRIPT_DEFINITIONS))
|
|
||||||
|
|
||||||
// Register new file extensions
|
|
||||||
val fileTypeRegistry = FileTypeRegistry.getInstance() as CoreFileTypeRegistry
|
|
||||||
|
|
||||||
scriptDefinitionProvider.getKnownFilenameExtensions().filter {
|
|
||||||
fileTypeRegistry.getFileTypeByExtension(it) != KotlinFileType.INSTANCE
|
|
||||||
}.forEach {
|
|
||||||
fileTypeRegistry.registerFileType(KotlinFileType.INSTANCE, it)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sourceFiles += createKtFiles(project)
|
sourceFiles += createKtFiles(project)
|
||||||
|
|
||||||
if (scriptDefinitionProvider != null) {
|
val (newSourcesClasspath, newSources, _) = collectScriptsCompilationDependencies(configuration, project, sourceFiles)
|
||||||
val (classpath, newSources, _) = collectScriptsCompilationDependencies(configuration, project, sourceFiles)
|
configuration.addJvmClasspathRoots(newSourcesClasspath)
|
||||||
configuration.addJvmClasspathRoots(classpath)
|
sourceFiles += newSources
|
||||||
sourceFiles += newSources
|
|
||||||
}
|
|
||||||
sourceFiles.sortBy { it.virtualFile.path }
|
sourceFiles.sortBy { it.virtualFile.path }
|
||||||
|
|
||||||
val jdkHome = configuration.get(JVMConfigurationKeys.JDK_HOME)
|
val jdkHome = configuration.get(JVMConfigurationKeys.JDK_HOME)
|
||||||
@@ -702,18 +674,9 @@ class KotlinCoreEnvironment private constructor(
|
|||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun registerProjectServices(projectEnvironment: JavaCoreProjectEnvironment, messageCollector: MessageCollector?) {
|
fun registerProjectServices(projectEnvironment: JavaCoreProjectEnvironment, messageCollector: MessageCollector?) {
|
||||||
with(projectEnvironment.project) {
|
with(projectEnvironment.project) {
|
||||||
val scriptDefinitionProvider = CliScriptDefinitionProvider()
|
|
||||||
registerService(ScriptDefinitionProvider::class.java, scriptDefinitionProvider)
|
|
||||||
registerService(
|
|
||||||
ScriptDependenciesProvider::class.java,
|
|
||||||
CliScriptDependenciesProvider(projectEnvironment.project)
|
|
||||||
)
|
|
||||||
registerService(KotlinJavaPsiFacade::class.java, KotlinJavaPsiFacade(this))
|
registerService(KotlinJavaPsiFacade::class.java, KotlinJavaPsiFacade(this))
|
||||||
registerService(KtLightClassForFacade.FacadeStubCache::class.java, KtLightClassForFacade.FacadeStubCache(this))
|
registerService(KtLightClassForFacade.FacadeStubCache::class.java, KtLightClassForFacade.FacadeStubCache(this))
|
||||||
registerService(ModuleAnnotationsResolver::class.java, CliModuleAnnotationsResolver())
|
registerService(ModuleAnnotationsResolver::class.java, CliModuleAnnotationsResolver())
|
||||||
if (messageCollector != null) {
|
|
||||||
registerService(ScriptReportSink::class.java, CliScriptReportSink(messageCollector))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+44
@@ -5,14 +5,23 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.scripting.compiler.plugin
|
package org.jetbrains.kotlin.scripting.compiler.plugin
|
||||||
|
|
||||||
|
import com.intellij.core.CoreFileTypeRegistry
|
||||||
import com.intellij.mock.MockProject
|
import com.intellij.mock.MockProject
|
||||||
|
import com.intellij.openapi.fileTypes.FileTypeRegistry
|
||||||
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
|
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
|
||||||
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
|
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
|
||||||
|
import org.jetbrains.kotlin.cli.common.script.CliScriptDefinitionProvider
|
||||||
|
import org.jetbrains.kotlin.cli.common.script.CliScriptDependenciesProvider
|
||||||
|
import org.jetbrains.kotlin.cli.common.script.CliScriptReportSink
|
||||||
import org.jetbrains.kotlin.cli.jvm.config.jvmClasspathRoots
|
import org.jetbrains.kotlin.cli.jvm.config.jvmClasspathRoots
|
||||||
import org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar
|
import org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar
|
||||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||||
import org.jetbrains.kotlin.config.JVMConfigurationKeys
|
import org.jetbrains.kotlin.config.JVMConfigurationKeys
|
||||||
import org.jetbrains.kotlin.extensions.CompilerConfigurationExtension
|
import org.jetbrains.kotlin.extensions.CompilerConfigurationExtension
|
||||||
|
import org.jetbrains.kotlin.idea.KotlinFileType
|
||||||
|
import org.jetbrains.kotlin.script.ScriptDefinitionProvider
|
||||||
|
import org.jetbrains.kotlin.script.ScriptDependenciesProvider
|
||||||
|
import org.jetbrains.kotlin.script.ScriptReportSink
|
||||||
import org.jetbrains.kotlin.script.StandardScriptDefinition
|
import org.jetbrains.kotlin.script.StandardScriptDefinition
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
@@ -60,12 +69,47 @@ class ScriptingCompilerConfigurationExtension(val project: MockProject) : Compil
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If not disabled explicitly, we should always support at least the standard script definition
|
||||||
|
if (!configuration.getBoolean(JVMConfigurationKeys.DISABLE_STANDARD_SCRIPT_DEFINITION) &&
|
||||||
|
StandardScriptDefinition !in configuration.getList(JVMConfigurationKeys.SCRIPT_DEFINITIONS)
|
||||||
|
) {
|
||||||
|
configuration.add(JVMConfigurationKeys.SCRIPT_DEFINITIONS, StandardScriptDefinition)
|
||||||
|
}
|
||||||
|
|
||||||
|
val scriptDefinitionProvider = ScriptDefinitionProvider.getInstance(project) as? CliScriptDefinitionProvider
|
||||||
|
if (scriptDefinitionProvider != null) {
|
||||||
|
scriptDefinitionProvider.setScriptDefinitionsSources(configuration.getList(JVMConfigurationKeys.SCRIPT_DEFINITIONS_SOURCES))
|
||||||
|
scriptDefinitionProvider.setScriptDefinitions(configuration.getList(JVMConfigurationKeys.SCRIPT_DEFINITIONS))
|
||||||
|
|
||||||
|
// Register new file extensions
|
||||||
|
val fileTypeRegistry = FileTypeRegistry.getInstance() as CoreFileTypeRegistry
|
||||||
|
|
||||||
|
scriptDefinitionProvider.getKnownFilenameExtensions().filter {
|
||||||
|
fileTypeRegistry.getFileTypeByExtension(it) != KotlinFileType.INSTANCE
|
||||||
|
}.forEach {
|
||||||
|
fileTypeRegistry.registerFileType(KotlinFileType.INSTANCE, it)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class ScriptingCompilerConfigurationComponentRegistrar : ComponentRegistrar {
|
class ScriptingCompilerConfigurationComponentRegistrar : ComponentRegistrar {
|
||||||
override fun registerProjectComponents(project: MockProject, configuration: CompilerConfiguration) {
|
override fun registerProjectComponents(project: MockProject, configuration: CompilerConfiguration) {
|
||||||
CompilerConfigurationExtension.registerExtension(project, ScriptingCompilerConfigurationExtension(project))
|
CompilerConfigurationExtension.registerExtension(project, ScriptingCompilerConfigurationExtension(project))
|
||||||
|
|
||||||
|
val scriptDefinitionProvider = CliScriptDefinitionProvider()
|
||||||
|
project.registerService(ScriptDefinitionProvider::class.java, scriptDefinitionProvider)
|
||||||
|
project.registerService(
|
||||||
|
ScriptDependenciesProvider::class.java,
|
||||||
|
CliScriptDependenciesProvider(project)
|
||||||
|
)
|
||||||
|
|
||||||
|
val messageCollector = configuration.get(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY)
|
||||||
|
if (messageCollector != null) {
|
||||||
|
project.registerService(ScriptReportSink::class.java, CliScriptReportSink(messageCollector))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user