Refactor scripting compiler plugin - move cli dependent parts out of the -impl jar

The kotlin-scripting-compiler-impl jar is used in the idea plugin and
therefore should not depend on the cli parts of the compiler to avoid
dependency from the plugin to the kotlin-compiler.jar.
Therefore the cli-dependent parts were moved to the scripting plugin
jar, which is used only in cli compiler based environments.
Also implement required abstractions to allow this movement and
drop some redundant dependencies to the cli parts in other projects.
This commit is contained in:
Ilya Chernikov
2019-07-08 16:52:19 +02:00
parent 9ae0ff03fa
commit 9c004c3a52
55 changed files with 185 additions and 185 deletions
+2 -3
View File
@@ -1,6 +1,5 @@
import java.io.File
import org.gradle.api.tasks.bundling.Jar
import org.jetbrains.kotlin.gradle.dsl.KotlinCompile import org.jetbrains.kotlin.gradle.dsl.KotlinCompile
import java.io.File
plugins { plugins {
kotlin("jvm") kotlin("jvm")
@@ -51,7 +50,7 @@ dependencies {
testCompile(projectTests(":generators:test-generator")) testCompile(projectTests(":generators:test-generator"))
testCompile(project(":compiler:ir.ir2cfg")) testCompile(project(":compiler:ir.ir2cfg"))
testCompile(project(":compiler:ir.tree")) // used for deepCopyWithSymbols call that is removed by proguard from the compiler TODO: make it more straightforward testCompile(project(":compiler:ir.tree")) // used for deepCopyWithSymbols call that is removed by proguard from the compiler TODO: make it more straightforward
testCompile(project(":kotlin-scripting-compiler-impl")) testCompile(project(":kotlin-scripting-compiler"))
testCompile(project(":kotlin-script-util")) testCompile(project(":kotlin-script-util"))
testCompileOnly(projectRuntimeJar(":kotlin-daemon-client-new")) testCompileOnly(projectRuntimeJar(":kotlin-daemon-client-new"))
testCompileOnly(project(":kotlin-reflect-api")) testCompileOnly(project(":kotlin-reflect-api"))
+1 -1
View File
@@ -6,7 +6,7 @@ plugins {
} }
dependencies { dependencies {
testCompile(project(":kotlin-scripting-compiler-impl")) testCompile(project(":kotlin-scripting-compiler"))
testCompile(projectTests(":compiler:tests-common")) testCompile(projectTests(":compiler:tests-common"))
testCompileOnly(intellijCoreDep()) { includeJars("intellij-core") } testCompileOnly(intellijCoreDep()) { includeJars("intellij-core") }
testCompile(projectTests(":generators:test-generator")) testCompile(projectTests(":generators:test-generator"))
@@ -30,9 +30,9 @@ import org.jetbrains.kotlin.config.JVMConfigurationKeys
import org.jetbrains.kotlin.config.JvmTarget import org.jetbrains.kotlin.config.JvmTarget
import org.jetbrains.kotlin.integration.KotlinIntegrationTestBase import org.jetbrains.kotlin.integration.KotlinIntegrationTestBase
import org.jetbrains.kotlin.script.loadScriptingPlugin import org.jetbrains.kotlin.script.loadScriptingPlugin
import org.jetbrains.kotlin.scripting.compiler.plugin.repl.GenericReplCompiler
import org.jetbrains.kotlin.scripting.compiler.plugin.repl.KOTLIN_REPL_JVM_TARGET_PROPERTY
import org.jetbrains.kotlin.scripting.definitions.StandardScriptDefinition import org.jetbrains.kotlin.scripting.definitions.StandardScriptDefinition
import org.jetbrains.kotlin.scripting.repl.GenericReplCompiler
import org.jetbrains.kotlin.scripting.repl.KOTLIN_REPL_JVM_TARGET_PROPERTY
import org.jetbrains.kotlin.test.ConfigurationKind import org.jetbrains.kotlin.test.ConfigurationKind
import org.jetbrains.kotlin.test.KotlinTestUtils import org.jetbrains.kotlin.test.KotlinTestUtils
import org.jetbrains.kotlin.test.TestJdkKind import org.jetbrains.kotlin.test.TestJdkKind
@@ -27,8 +27,8 @@ import org.jetbrains.kotlin.cli.jvm.config.jvmClasspathRoots
import org.jetbrains.kotlin.config.CommonConfigurationKeys import org.jetbrains.kotlin.config.CommonConfigurationKeys
import org.jetbrains.kotlin.integration.KotlinIntegrationTestBase import org.jetbrains.kotlin.integration.KotlinIntegrationTestBase
import org.jetbrains.kotlin.script.loadScriptingPlugin import org.jetbrains.kotlin.script.loadScriptingPlugin
import org.jetbrains.kotlin.scripting.compiler.plugin.repl.GenericReplCompiler
import org.jetbrains.kotlin.scripting.definitions.KotlinScriptDefinition import org.jetbrains.kotlin.scripting.definitions.KotlinScriptDefinition
import org.jetbrains.kotlin.scripting.repl.GenericReplCompiler
import org.jetbrains.kotlin.scripting.resolve.KotlinScriptDefinitionFromAnnotatedTemplate import org.jetbrains.kotlin.scripting.resolve.KotlinScriptDefinitionFromAnnotatedTemplate
import org.jetbrains.kotlin.test.ConfigurationKind import org.jetbrains.kotlin.test.ConfigurationKind
import org.jetbrains.kotlin.test.KotlinTestUtils import org.jetbrains.kotlin.test.KotlinTestUtils
@@ -9,7 +9,7 @@ import org.jetbrains.kotlin.cli.common.messages.MessageCollector
import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoots import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoots
import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.script.loadScriptingPlugin import org.jetbrains.kotlin.script.loadScriptingPlugin
import org.jetbrains.kotlin.scripting.configuration.configureScriptDefinitions import org.jetbrains.kotlin.scripting.compiler.plugin.configureScriptDefinitions
import org.jetbrains.kotlin.test.ConfigurationKind import org.jetbrains.kotlin.test.ConfigurationKind
import org.jetbrains.kotlin.test.InTextDirectivesUtils import org.jetbrains.kotlin.test.InTextDirectivesUtils
import org.jetbrains.kotlin.test.TestJdkKind import org.jetbrains.kotlin.test.TestJdkKind
@@ -9,7 +9,7 @@ import org.jetbrains.kotlin.cli.common.messages.MessageCollector
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.script.loadScriptingPlugin import org.jetbrains.kotlin.script.loadScriptingPlugin
import org.jetbrains.kotlin.scripting.configuration.configureScriptDefinitions import org.jetbrains.kotlin.scripting.compiler.plugin.configureScriptDefinitions
import org.jetbrains.kotlin.test.ConfigurationKind import org.jetbrains.kotlin.test.ConfigurationKind
import org.jetbrains.kotlin.test.TestJdkKind import org.jetbrains.kotlin.test.TestJdkKind
import org.jetbrains.kotlin.utils.PathUtil import org.jetbrains.kotlin.utils.PathUtil
@@ -19,8 +19,8 @@ package org.jetbrains.kotlin.repl
import com.intellij.openapi.util.text.StringUtil import com.intellij.openapi.util.text.StringUtil
import org.jetbrains.kotlin.cli.common.repl.ReplEvalResult import org.jetbrains.kotlin.cli.common.repl.ReplEvalResult
import org.jetbrains.kotlin.script.loadScriptingPlugin import org.jetbrains.kotlin.script.loadScriptingPlugin
import org.jetbrains.kotlin.scripting.repl.ReplInterpreter import org.jetbrains.kotlin.scripting.compiler.plugin.repl.ReplInterpreter
import org.jetbrains.kotlin.scripting.repl.configuration.ConsoleReplConfiguration import org.jetbrains.kotlin.scripting.compiler.plugin.repl.configuration.ConsoleReplConfiguration
import org.jetbrains.kotlin.test.ConfigurationKind import org.jetbrains.kotlin.test.ConfigurationKind
import org.jetbrains.kotlin.test.KotlinTestUtils import org.jetbrains.kotlin.test.KotlinTestUtils
import org.jetbrains.kotlin.test.TestJdkKind import org.jetbrains.kotlin.test.TestJdkKind
-1
View File
@@ -58,7 +58,6 @@ dependencies {
compile(project(":core:descriptors")) compile(project(":core:descriptors"))
compile(project(":core:descriptors.jvm")) compile(project(":core:descriptors.jvm"))
compile(project(":compiler:backend")) compile(project(":compiler:backend"))
compile(project(":compiler:cli-common"))
compile(project(":compiler:frontend")) compile(project(":compiler:frontend"))
compile(project(":compiler:frontend.common")) compile(project(":compiler:frontend.common"))
compile(project(":compiler:frontend.java")) compile(project(":compiler:frontend.java"))
@@ -8,7 +8,6 @@ plugins {
dependencies { dependencies {
compile(kotlinStdlib()) compile(kotlinStdlib())
compile(project(":compiler:cli-common"))
compile(intellijPluginDep("gradle")) compile(intellijPluginDep("gradle"))
compileOnly(intellijDep()) { includeJars("slf4j-api-1.7.25") } compileOnly(intellijDep()) { includeJars("slf4j-api-1.7.25") }
} }
@@ -8,14 +8,11 @@ package org.jetbrains.kotlin.idea.script
import com.intellij.openapi.diagnostic.Logger import com.intellij.openapi.diagnostic.Logger
import com.intellij.openapi.extensions.Extensions import com.intellij.openapi.extensions.Extensions
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
import org.jetbrains.kotlin.idea.core.script.ScriptDefinitionSourceAsContributor import org.jetbrains.kotlin.idea.core.script.ScriptDefinitionSourceAsContributor
import org.jetbrains.kotlin.idea.core.script.loadDefinitionsFromTemplates import org.jetbrains.kotlin.idea.core.script.loadDefinitionsFromTemplates
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinitionsFromClasspathDiscoverySource import org.jetbrains.kotlin.scripting.definitions.ScriptDefinitionsFromClasspathDiscoverySource
import org.jetbrains.kotlin.scripting.definitions.reporter import kotlin.script.experimental.api.ScriptDiagnostic
import kotlin.script.experimental.intellij.ScriptDefinitionsProvider import kotlin.script.experimental.intellij.ScriptDefinitionsProvider
import kotlin.script.experimental.jvm.defaultJvmScriptingHostConfiguration import kotlin.script.experimental.jvm.defaultJvmScriptingHostConfiguration
@@ -25,7 +22,6 @@ class BridgeScriptDefinitionsContributor(private val project: Project) : ScriptD
override val definitions: Sequence<ScriptDefinition> override val definitions: Sequence<ScriptDefinition>
get() { get() {
val extensions = Extensions.getArea(project).getExtensionPoint(ScriptDefinitionsProvider.EP_NAME).extensions val extensions = Extensions.getArea(project).getExtensionPoint(ScriptDefinitionsProvider.EP_NAME).extensions
val messageCollector = LoggingMessageCollector()
return extensions.asSequence().flatMap { provider -> return extensions.asSequence().flatMap { provider ->
val explicitClasses = provider.getDefinitionClasses().toList() val explicitClasses = provider.getDefinitionClasses().toList()
val classPath = provider.getDefinitionsClassPath().toList() val classPath = provider.getDefinitionsClassPath().toList()
@@ -38,33 +34,20 @@ class BridgeScriptDefinitionsContributor(private val project: Project) : ScriptD
else ScriptDefinitionsFromClasspathDiscoverySource( else ScriptDefinitionsFromClasspathDiscoverySource(
classPath, classPath,
hostConfiguration, hostConfiguration,
messageCollector.reporter ::loggingReporter
).definitions ).definitions
explicitDefinitions + discoveredDefinitions explicitDefinitions + discoveredDefinitions
} }
} }
} }
private class LoggingMessageCollector : MessageCollector { fun loggingReporter(severity: ScriptDiagnostic.Severity, message: String) {
val log = Logger.getInstance("ScriptDefinitionsProviders")
private val log = Logger.getInstance("ScriptDefinitionsProviders") when (severity) {
ScriptDiagnostic.Severity.FATAL,
private var hasErrors = false ScriptDiagnostic.Severity.ERROR -> log.error(message)
ScriptDiagnostic.Severity.WARNING,
override fun clear() { ScriptDiagnostic.Severity.INFO -> log.info(message)
hasErrors = false
} }
override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageLocation?) {
when (severity) {
CompilerMessageSeverity.ERROR, CompilerMessageSeverity.EXCEPTION -> {
log.error(message)
hasErrors = true
}
CompilerMessageSeverity.WARNING, CompilerMessageSeverity.STRONG_WARNING -> log.warn(message)
else -> log.info(message)
}
}
override fun hasErrors(): Boolean = hasErrors
} }
@@ -44,7 +44,7 @@ dependencies {
compileOnly(project(":kotlin-compiler-runner")) compileOnly(project(":kotlin-compiler-runner"))
compileOnly(project(":kotlin-annotation-processing")) compileOnly(project(":kotlin-annotation-processing"))
compileOnly(project(":kotlin-annotation-processing-gradle")) compileOnly(project(":kotlin-annotation-processing-gradle"))
compileOnly(project(":kotlin-scripting-compiler-impl")) compileOnly(project(":kotlin-scripting-compiler"))
compile("com.google.code.gson:gson:${rootProject.extra["versions.jar.gson"]}") compile("com.google.code.gson:gson:${rootProject.extra["versions.jar.gson"]}")
compile("de.undercouch:gradle-download-task:3.4.3") compile("de.undercouch:gradle-download-task:3.4.3")
@@ -24,8 +24,8 @@ import org.jetbrains.kotlin.gradle.scripting.ScriptingExtension
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import org.jetbrains.kotlin.gradle.tasks.useLazyTaskConfiguration import org.jetbrains.kotlin.gradle.tasks.useLazyTaskConfiguration
import org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast import org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast
import org.jetbrains.kotlin.scripting.compiler.plugin.impl.reporter
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinitionsFromClasspathDiscoverySource import org.jetbrains.kotlin.scripting.definitions.ScriptDefinitionsFromClasspathDiscoverySource
import org.jetbrains.kotlin.scripting.definitions.reporter
import java.io.File import java.io.File
import kotlin.script.experimental.jvm.defaultJvmScriptingHostConfiguration import kotlin.script.experimental.jvm.defaultJvmScriptingHostConfiguration
@@ -49,15 +49,14 @@ import org.jetbrains.kotlin.config.CompilerConfiguration;
import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmProtoBufUtil; import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmProtoBufUtil;
import org.jetbrains.kotlin.name.FqName; import org.jetbrains.kotlin.name.FqName;
import org.jetbrains.kotlin.psi.KtScript; import org.jetbrains.kotlin.psi.KtScript;
import org.jetbrains.kotlin.scripting.compiler.plugin.ConfigurationKt;
import org.jetbrains.kotlin.scripting.compiler.plugin.ScriptingCompilerConfigurationComponentRegistrar; import org.jetbrains.kotlin.scripting.compiler.plugin.ScriptingCompilerConfigurationComponentRegistrar;
import org.jetbrains.kotlin.scripting.configuration.ConfigurationKt;
import org.jetbrains.kotlin.utils.ParametersMapKt; import org.jetbrains.kotlin.utils.ParametersMapKt;
import java.io.File; import java.io.File;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -24,8 +24,8 @@ import org.jetbrains.kotlin.cli.jvm.config.addJvmSdkRoots
import org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar import org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar
import org.jetbrains.kotlin.config.* import org.jetbrains.kotlin.config.*
import org.jetbrains.kotlin.scripting.compiler.plugin.ScriptingCompilerConfigurationComponentRegistrar import org.jetbrains.kotlin.scripting.compiler.plugin.ScriptingCompilerConfigurationComponentRegistrar
import org.jetbrains.kotlin.scripting.compiler.plugin.repl.GenericReplCompiler
import org.jetbrains.kotlin.scripting.definitions.KotlinScriptDefinition import org.jetbrains.kotlin.scripting.definitions.KotlinScriptDefinition
import org.jetbrains.kotlin.scripting.repl.GenericReplCompiler
import org.jetbrains.kotlin.scripting.resolve.KotlinScriptDefinitionFromAnnotatedTemplate import org.jetbrains.kotlin.scripting.resolve.KotlinScriptDefinitionFromAnnotatedTemplate
import org.jetbrains.kotlin.utils.PathUtil import org.jetbrains.kotlin.utils.PathUtil
import java.io.File import java.io.File
@@ -11,7 +11,6 @@ dependencies {
compileOnly(project(":compiler:frontend.java")) compileOnly(project(":compiler:frontend.java"))
compileOnly(project(":compiler:psi")) compileOnly(project(":compiler:psi"))
compileOnly(project(":compiler:plugin-api")) compileOnly(project(":compiler:plugin-api"))
compileOnly(project(":compiler:cli"))
compile(project(":kotlin-scripting-common")) compile(project(":kotlin-scripting-common"))
compile(project(":kotlin-scripting-jvm")) compile(project(":kotlin-scripting-jvm"))
compile(kotlinStdlib()) compile(kotlinStdlib())
@@ -5,19 +5,14 @@
package org.jetbrains.kotlin.scripting.definitions package org.jetbrains.kotlin.scripting.definitions
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
import java.io.File import java.io.File
import kotlin.script.experimental.annotations.KotlinScript import kotlin.script.experimental.annotations.KotlinScript
import kotlin.script.experimental.api.KotlinType import kotlin.script.experimental.api.*
import kotlin.script.experimental.api.ScriptCompilationConfiguration
import kotlin.script.experimental.api.ScriptEvaluationConfiguration
import kotlin.script.experimental.api.fileExtension
import kotlin.script.experimental.host.ScriptingHostConfiguration import kotlin.script.experimental.host.ScriptingHostConfiguration
import kotlin.script.experimental.host.configurationDependencies import kotlin.script.experimental.host.configurationDependencies
import kotlin.script.experimental.host.createCompilationConfigurationFromTemplate import kotlin.script.experimental.host.createCompilationConfigurationFromTemplate
import kotlin.script.experimental.host.createEvaluationConfigurationFromTemplate import kotlin.script.experimental.host.createEvaluationConfigurationFromTemplate
import kotlin.script.experimental.jvm.JvmDependency import kotlin.script.experimental.jvm.JvmDependency
import kotlin.script.experimental.jvm.defaultJvmScriptingHostConfiguration
class LazyScriptDefinitionFromDiscoveredClass internal constructor( class LazyScriptDefinitionFromDiscoveredClass internal constructor(
baseHostConfiguration: ScriptingHostConfiguration, baseHostConfiguration: ScriptingHostConfiguration,
@@ -43,7 +38,7 @@ class LazyScriptDefinitionFromDiscoveredClass internal constructor(
private val configurations by lazy(LazyThreadSafetyMode.PUBLICATION) { private val configurations by lazy(LazyThreadSafetyMode.PUBLICATION) {
messageReporter( messageReporter(
CompilerMessageSeverity.LOGGING, ScriptDiagnostic.Severity.DEBUG,
"Configure scripting: loading script definition class $className using classpath $classpath\n. ${Thread.currentThread().stackTrace}" "Configure scripting: loading script definition class $className using classpath $classpath\n. ${Thread.currentThread().stackTrace}"
) )
try { try {
@@ -61,11 +56,11 @@ class LazyScriptDefinitionFromDiscoveredClass internal constructor(
) )
compileCfg to evalCfg compileCfg to evalCfg
} catch (ex: ClassNotFoundException) { } catch (ex: ClassNotFoundException) {
messageReporter(CompilerMessageSeverity.ERROR, "Cannot find script definition class $className") messageReporter(ScriptDiagnostic.Severity.ERROR, "Cannot find script definition class $className")
InvalidScriptDefinition InvalidScriptDefinition
} catch (ex: Exception) { } catch (ex: Exception) {
messageReporter( messageReporter(
CompilerMessageSeverity.ERROR, ScriptDiagnostic.Severity.ERROR,
"Error processing script definition class $className: ${ex.message}\nclasspath:\n${classpath.joinToString("\n", " ")}" "Error processing script definition class $className: ${ex.message}\nclasspath:\n${classpath.joinToString("\n", " ")}"
) )
InvalidScriptDefinition InvalidScriptDefinition
@@ -5,8 +5,6 @@
package org.jetbrains.kotlin.scripting.definitions package org.jetbrains.kotlin.scripting.definitions
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
import org.jetbrains.kotlin.scripting.resolve.KotlinScriptDefinitionFromAnnotatedTemplate import org.jetbrains.kotlin.scripting.resolve.KotlinScriptDefinitionFromAnnotatedTemplate
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
import java.io.File import java.io.File
@@ -14,21 +12,14 @@ import java.io.IOException
import java.net.URLClassLoader import java.net.URLClassLoader
import java.util.jar.JarFile import java.util.jar.JarFile
import kotlin.script.experimental.annotations.KotlinScript import kotlin.script.experimental.annotations.KotlinScript
import kotlin.script.experimental.api.KotlinType import kotlin.script.experimental.api.ScriptDiagnostic
import kotlin.script.experimental.host.ScriptingHostConfiguration import kotlin.script.experimental.host.ScriptingHostConfiguration
import kotlin.script.experimental.host.createCompilationConfigurationFromTemplate
import kotlin.script.experimental.host.createEvaluationConfigurationFromTemplate
import kotlin.script.templates.ScriptTemplateDefinition import kotlin.script.templates.ScriptTemplateDefinition
const val SCRIPT_DEFINITION_MARKERS_PATH = "META-INF/kotlin/script/templates/" const val SCRIPT_DEFINITION_MARKERS_PATH = "META-INF/kotlin/script/templates/"
const val SCRIPT_DEFINITION_MARKERS_EXTENSION_WITH_DOT = ".classname" const val SCRIPT_DEFINITION_MARKERS_EXTENSION_WITH_DOT = ".classname"
typealias MessageReporter = (CompilerMessageSeverity, String) -> Unit typealias MessageReporter = (ScriptDiagnostic.Severity, String) -> Unit
val MessageCollector.reporter: MessageReporter
get() = { severity, message ->
this.report(severity, message)
}
class ScriptDefinitionsFromClasspathDiscoverySource( class ScriptDefinitionsFromClasspathDiscoverySource(
private val classpath: List<File>, private val classpath: List<File>,
@@ -107,7 +98,7 @@ private fun scriptTemplatesDiscoverySequence(
) )
if (notFoundClasses.isNotEmpty()) { if (notFoundClasses.isNotEmpty()) {
messageReporter( messageReporter(
CompilerMessageSeverity.STRONG_WARNING, ScriptDiagnostic.Severity.WARNING,
"Configure scripting: unable to find script definitions [${notFoundClasses.joinToString(", ")}]" "Configure scripting: unable to find script definitions [${notFoundClasses.joinToString(", ")}]"
) )
} }
@@ -131,12 +122,12 @@ private fun scriptTemplatesDiscoverySequence(
} }
else -> { else -> {
// assuming that invalid classpath entries will be reported elsewhere anyway, so do not spam user with additional warnings here // assuming that invalid classpath entries will be reported elsewhere anyway, so do not spam user with additional warnings here
messageReporter(CompilerMessageSeverity.LOGGING, "Configure scripting: Unknown classpath entry $dep") messageReporter(ScriptDiagnostic.Severity.DEBUG, "Configure scripting: Unknown classpath entry $dep")
} }
} }
} catch (e: IOException) { } catch (e: IOException) {
messageReporter( messageReporter(
CompilerMessageSeverity.STRONG_WARNING, "Configure scripting: unable to process classpath entry $dep: $e" ScriptDiagnostic.Severity.WARNING, "Configure scripting: unable to process classpath entry $dep: $e"
) )
} }
} }
@@ -152,13 +143,13 @@ private fun scriptTemplatesDiscoverySequence(
remainingDefinitionCandidates = notFoundDefinitions remainingDefinitionCandidates = notFoundDefinitions
} catch (e: IOException) { } catch (e: IOException) {
messageReporter( messageReporter(
CompilerMessageSeverity.STRONG_WARNING, "Configure scripting: unable to process classpath entry $dep: $e" ScriptDiagnostic.Severity.WARNING, "Configure scripting: unable to process classpath entry $dep: $e"
) )
} }
} }
if (remainingDefinitionCandidates.isNotEmpty()) { if (remainingDefinitionCandidates.isNotEmpty()) {
messageReporter( messageReporter(
CompilerMessageSeverity.STRONG_WARNING, ScriptDiagnostic.Severity.WARNING,
"The following script definitions are not found in the classpath: [${remainingDefinitionCandidates.joinToString()}]" "The following script definitions are not found in the classpath: [${remainingDefinitionCandidates.joinToString()}]"
) )
} }
@@ -207,7 +198,7 @@ fun loadScriptTemplatesFromClasspath(
} }
else -> { else -> {
// assuming that invalid classpath entries will be reported elsewhere anyway, so do not spam user with additional warnings here // assuming that invalid classpath entries will be reported elsewhere anyway, so do not spam user with additional warnings here
messageReporter(CompilerMessageSeverity.LOGGING, "Configure scripting: Unknown classpath entry $dep") messageReporter(ScriptDiagnostic.Severity.DEBUG, "Configure scripting: Unknown classpath entry $dep")
DefinitionsLoadPartitionResult( DefinitionsLoadPartitionResult(
listOf(), listOf(),
remainingTemplates remainingTemplates
@@ -222,7 +213,7 @@ fun loadScriptTemplatesFromClasspath(
} }
} catch (e: IOException) { } catch (e: IOException) {
messageReporter( messageReporter(
CompilerMessageSeverity.STRONG_WARNING, ScriptDiagnostic.Severity.WARNING,
"Configure scripting: unable to process classpath entry $dep: $e" "Configure scripting: unable to process classpath entry $dep: $e"
) )
} }
@@ -230,7 +221,7 @@ fun loadScriptTemplatesFromClasspath(
if (remainingTemplates.isNotEmpty()) { if (remainingTemplates.isNotEmpty()) {
messageReporter( messageReporter(
CompilerMessageSeverity.STRONG_WARNING, ScriptDiagnostic.Severity.WARNING,
"Configure scripting: unable to find script definition classes: ${remainingTemplates.joinToString(", ")}" "Configure scripting: unable to find script definition classes: ${remainingTemplates.joinToString(", ")}"
) )
} }
@@ -319,14 +310,14 @@ private fun loadScriptDefinition(
} }
if (def != null) { if (def != null) {
messageReporter( messageReporter(
CompilerMessageSeverity.LOGGING, ScriptDiagnostic.Severity.DEBUG,
"Configure scripting: Added template $templateClassName from ${classpathWithLoader.classpath}" "Configure scripting: Added template $templateClassName from ${classpathWithLoader.classpath}"
) )
return def return def
} }
} }
messageReporter( messageReporter(
CompilerMessageSeverity.STRONG_WARNING, ScriptDiagnostic.Severity.WARNING,
"Configure scripting: $templateClassName is not marked with any known kotlin script annotation" "Configure scripting: $templateClassName is not marked with any known kotlin script annotation"
) )
return null return null
@@ -347,7 +338,7 @@ private fun loadScriptDefinition(
ScriptDefinition.FromLegacyTemplate(hostConfiguration, cls.kotlin) ScriptDefinition.FromLegacyTemplate(hostConfiguration, cls.kotlin)
} }
messageReporter( messageReporter(
CompilerMessageSeverity.INFO, ScriptDiagnostic.Severity.INFO,
"Added script definition $template to configuration: name = ${def.name}" "Added script definition $template to configuration: name = ${def.name}"
) )
return def return def
@@ -356,7 +347,7 @@ private fun loadScriptDefinition(
} catch (ex: Exception) { } catch (ex: Exception) {
// other exceptions - might be an error // other exceptions - might be an error
messageReporter( messageReporter(
CompilerMessageSeverity.STRONG_WARNING, ScriptDiagnostic.Severity.WARNING,
"Error on loading script definition $template: ${ex.message}" "Error on loading script definition $template: ${ex.message}"
) )
} }
@@ -10,7 +10,7 @@ import org.jetbrains.kotlin.cli.common.ExitCode
import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments
import org.jetbrains.kotlin.cli.common.extensions.ShellExtension import org.jetbrains.kotlin.cli.common.extensions.ShellExtension
import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.scripting.repl.ReplFromTerminal import org.jetbrains.kotlin.scripting.compiler.plugin.repl.ReplFromTerminal
class JvmCliReplShellExtension : ShellExtension { class JvmCliReplShellExtension : ShellExtension {
@@ -12,7 +12,6 @@ import org.jetbrains.kotlin.compiler.plugin.CommandLineProcessor
import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.config.CompilerConfigurationKey import org.jetbrains.kotlin.config.CompilerConfigurationKey
import org.jetbrains.kotlin.config.JVMConfigurationKeys import org.jetbrains.kotlin.config.JVMConfigurationKeys
import org.jetbrains.kotlin.scripting.configuration.KOTLIN_SCRIPTING_PLUGIN_ID
import org.jetbrains.kotlin.scripting.configuration.ScriptingConfigurationKeys import org.jetbrains.kotlin.scripting.configuration.ScriptingConfigurationKeys
import java.io.File import java.io.File
@@ -16,9 +16,12 @@ 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.idea.KotlinFileType
import org.jetbrains.kotlin.scripting.compiler.plugin.definitions.CliScriptDefinitionProvider import org.jetbrains.kotlin.scripting.compiler.plugin.definitions.CliScriptDefinitionProvider
import org.jetbrains.kotlin.scripting.compiler.plugin.impl.reporter
import org.jetbrains.kotlin.scripting.configuration.ScriptingConfigurationKeys import org.jetbrains.kotlin.scripting.configuration.ScriptingConfigurationKeys
import org.jetbrains.kotlin.scripting.configuration.configureScriptDefinitions import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition
import org.jetbrains.kotlin.scripting.definitions.* import org.jetbrains.kotlin.scripting.definitions.ScriptDefinitionProvider
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinitionsFromClasspathDiscoverySource
import org.jetbrains.kotlin.scripting.definitions.getEnvironment
import java.io.File import java.io.File
import kotlin.script.experimental.host.ScriptingHostConfiguration import kotlin.script.experimental.host.ScriptingHostConfiguration
@@ -3,14 +3,15 @@
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * 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.scripting.configuration package org.jetbrains.kotlin.scripting.compiler.plugin
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import org.jetbrains.kotlin.cli.common.messages.MessageCollector import org.jetbrains.kotlin.cli.common.messages.MessageCollector
import org.jetbrains.kotlin.cli.jvm.config.jvmClasspathRoots import org.jetbrains.kotlin.cli.jvm.config.jvmClasspathRoots
import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.scripting.compiler.plugin.impl.reporter
import org.jetbrains.kotlin.scripting.configuration.ScriptingConfigurationKeys
import org.jetbrains.kotlin.scripting.definitions.loadScriptTemplatesFromClasspath import org.jetbrains.kotlin.scripting.definitions.loadScriptTemplatesFromClasspath
import org.jetbrains.kotlin.scripting.definitions.reporter
import kotlin.script.experimental.host.ScriptingHostConfiguration import kotlin.script.experimental.host.ScriptingHostConfiguration
import kotlin.script.experimental.jvm.defaultJvmScriptingHostConfiguration import kotlin.script.experimental.jvm.defaultJvmScriptingHostConfiguration
@@ -3,7 +3,7 @@
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * 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.scripting.dependencies package org.jetbrains.kotlin.scripting.compiler.plugin.dependencies
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import org.jetbrains.kotlin.cli.common.config.KotlinSourceRoot import org.jetbrains.kotlin.cli.common.config.KotlinSourceRoot
@@ -3,15 +3,15 @@
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * 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.scripting.extensions package org.jetbrains.kotlin.scripting.compiler.plugin.extensions
import com.intellij.core.JavaCoreProjectEnvironment import com.intellij.core.JavaCoreProjectEnvironment
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
import org.jetbrains.kotlin.cli.common.extensions.ReplFactoryExtension import org.jetbrains.kotlin.cli.common.extensions.ReplFactoryExtension
import org.jetbrains.kotlin.cli.common.repl.ReplCompiler import org.jetbrains.kotlin.cli.common.repl.ReplCompiler
import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.scripting.compiler.plugin.repl.GenericReplCompiler
import org.jetbrains.kotlin.scripting.definitions.KotlinScriptDefinition import org.jetbrains.kotlin.scripting.definitions.KotlinScriptDefinition
import org.jetbrains.kotlin.scripting.repl.GenericReplCompiler
import org.jetbrains.kotlin.scripting.resolve.KotlinScriptDefinitionFromAnnotatedTemplate import org.jetbrains.kotlin.scripting.resolve.KotlinScriptDefinitionFromAnnotatedTemplate
import java.io.File import java.io.File
import java.net.URLClassLoader import java.net.URLClassLoader
@@ -3,7 +3,7 @@
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * 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.scripting.extensions package org.jetbrains.kotlin.scripting.compiler.plugin.extensions
import com.intellij.mock.MockProject import com.intellij.mock.MockProject
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoots
import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.extensions.CollectAdditionalSourcesExtension import org.jetbrains.kotlin.extensions.CollectAdditionalSourcesExtension
import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.scripting.dependencies.collectScriptsCompilationDependencies import org.jetbrains.kotlin.scripting.compiler.plugin.dependencies.collectScriptsCompilationDependencies
class ScriptingCollectAdditionalSourcesExtension(val project: MockProject) : CollectAdditionalSourcesExtension { class ScriptingCollectAdditionalSourcesExtension(val project: MockProject) : CollectAdditionalSourcesExtension {
override fun collectAdditionalSourcesAndUpdateConfiguration( override fun collectAdditionalSourcesAndUpdateConfiguration(
@@ -21,8 +21,8 @@ import org.jetbrains.kotlin.codegen.state.GenerationState
import org.jetbrains.kotlin.descriptors.ScriptDescriptor import org.jetbrains.kotlin.descriptors.ScriptDescriptor
import org.jetbrains.kotlin.scripting.compiler.plugin.repl.JvmReplCompilerState import org.jetbrains.kotlin.scripting.compiler.plugin.repl.JvmReplCompilerState
import org.jetbrains.kotlin.scripting.compiler.plugin.repl.KJvmReplCompilerProxy import org.jetbrains.kotlin.scripting.compiler.plugin.repl.KJvmReplCompilerProxy
import org.jetbrains.kotlin.scripting.compiler.plugin.repl.ReplCodeAnalyzer
import org.jetbrains.kotlin.scripting.definitions.ScriptDependenciesProvider import org.jetbrains.kotlin.scripting.definitions.ScriptDependenciesProvider
import org.jetbrains.kotlin.scripting.repl.ReplCodeAnalyzer
import kotlin.script.experimental.api.* import kotlin.script.experimental.api.*
import kotlin.script.experimental.host.ScriptingHostConfiguration import kotlin.script.experimental.host.ScriptingHostConfiguration
@@ -25,11 +25,11 @@ import org.jetbrains.kotlin.config.JVMConfigurationKeys
import org.jetbrains.kotlin.config.JvmTarget import org.jetbrains.kotlin.config.JvmTarget
import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.scripting.compiler.plugin.ScriptingCompilerConfigurationComponentRegistrar import org.jetbrains.kotlin.scripting.compiler.plugin.ScriptingCompilerConfigurationComponentRegistrar
import org.jetbrains.kotlin.scripting.compiler.plugin.dependencies.ScriptsCompilationDependencies
import org.jetbrains.kotlin.scripting.compiler.plugin.dependencies.collectScriptsCompilationDependencies
import org.jetbrains.kotlin.scripting.configuration.ScriptingConfigurationKeys import org.jetbrains.kotlin.scripting.configuration.ScriptingConfigurationKeys
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition
import org.jetbrains.kotlin.scripting.definitions.ScriptDependenciesProvider import org.jetbrains.kotlin.scripting.definitions.ScriptDependenciesProvider
import org.jetbrains.kotlin.scripting.dependencies.ScriptsCompilationDependencies
import org.jetbrains.kotlin.scripting.dependencies.collectScriptsCompilationDependencies
import kotlin.script.experimental.api.ScriptCompilationConfiguration import kotlin.script.experimental.api.ScriptCompilationConfiguration
import kotlin.script.experimental.api.compilerOptions import kotlin.script.experimental.api.compilerOptions
import kotlin.script.experimental.api.dependencies import kotlin.script.experimental.api.dependencies
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
import org.jetbrains.kotlin.cli.common.messages.MessageCollector import org.jetbrains.kotlin.cli.common.messages.MessageCollector
import org.jetbrains.kotlin.scripting.definitions.MessageReporter
import kotlin.reflect.KMutableProperty1 import kotlin.reflect.KMutableProperty1
import kotlin.reflect.full.findAnnotation import kotlin.reflect.full.findAnnotation
import kotlin.script.experimental.api.ResultWithDiagnostics import kotlin.script.experimental.api.ResultWithDiagnostics
@@ -32,15 +33,7 @@ internal class ScriptDiagnosticsMessageCollector(private val parentMessageCollec
_diagnostics.any { it.severity == ScriptDiagnostic.Severity.ERROR } || parentMessageCollector?.hasErrors() == true _diagnostics.any { it.severity == ScriptDiagnostic.Severity.ERROR } || parentMessageCollector?.hasErrors() == true
override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageLocation?) { override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageLocation?) {
val mappedSeverity = when (severity) { val mappedSeverity = severity.toScriptingSeverity()
CompilerMessageSeverity.EXCEPTION,
CompilerMessageSeverity.ERROR -> ScriptDiagnostic.Severity.ERROR
CompilerMessageSeverity.STRONG_WARNING,
CompilerMessageSeverity.WARNING -> ScriptDiagnostic.Severity.WARNING
CompilerMessageSeverity.INFO -> ScriptDiagnostic.Severity.INFO
CompilerMessageSeverity.LOGGING -> ScriptDiagnostic.Severity.DEBUG
else -> null
}
if (mappedSeverity != null) { if (mappedSeverity != null) {
val mappedLocation = location?.let { val mappedLocation = location?.let {
if (it.line < 0 && it.column < 0) null // special location created by CompilerMessageLocation.create if (it.line < 0 && it.column < 0) null // special location created by CompilerMessageLocation.create
@@ -57,6 +50,24 @@ internal class ScriptDiagnosticsMessageCollector(private val parentMessageCollec
} }
} }
private fun CompilerMessageSeverity.toScriptingSeverity(): ScriptDiagnostic.Severity? = when (this) {
CompilerMessageSeverity.EXCEPTION,
CompilerMessageSeverity.ERROR -> ScriptDiagnostic.Severity.ERROR
CompilerMessageSeverity.STRONG_WARNING,
CompilerMessageSeverity.WARNING -> ScriptDiagnostic.Severity.WARNING
CompilerMessageSeverity.INFO -> ScriptDiagnostic.Severity.INFO
CompilerMessageSeverity.LOGGING -> ScriptDiagnostic.Severity.DEBUG
CompilerMessageSeverity.OUTPUT -> null
}
private fun ScriptDiagnostic.Severity.toCompilerMessageSeverity(): CompilerMessageSeverity = when (this) {
ScriptDiagnostic.Severity.ERROR -> CompilerMessageSeverity.ERROR
ScriptDiagnostic.Severity.WARNING -> CompilerMessageSeverity.WARNING
ScriptDiagnostic.Severity.INFO -> CompilerMessageSeverity.INFO
ScriptDiagnostic.Severity.DEBUG -> CompilerMessageSeverity.LOGGING
ScriptDiagnostic.Severity.FATAL -> CompilerMessageSeverity.EXCEPTION
}
internal fun failure( internal fun failure(
messageCollector: ScriptDiagnosticsMessageCollector, vararg diagnostics: ScriptDiagnostic messageCollector: ScriptDiagnosticsMessageCollector, vararg diagnostics: ScriptDiagnostic
): ResultWithDiagnostics.Failure = ): ResultWithDiagnostics.Failure =
@@ -134,3 +145,9 @@ private fun reportIgnoredArguments(
messageCollector.report(CompilerMessageSeverity.STRONG_WARNING, "$message${ignoredArgKeys.joinToString(", ")}") messageCollector.report(CompilerMessageSeverity.STRONG_WARNING, "$message${ignoredArgKeys.joinToString(", ")}")
} }
} }
val MessageCollector.reporter: MessageReporter
get() = { severity, message ->
this.report(severity.toCompilerMessageSeverity(), message)
}
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.idea.KotlinLanguage
import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.psi.KtScript import org.jetbrains.kotlin.psi.KtScript
import org.jetbrains.kotlin.renderer.DescriptorRenderer import org.jetbrains.kotlin.renderer.DescriptorRenderer
import org.jetbrains.kotlin.scripting.dependencies.ScriptsCompilationDependencies import org.jetbrains.kotlin.scripting.compiler.plugin.dependencies.ScriptsCompilationDependencies
import org.jetbrains.kotlin.scripting.resolve.ScriptLightVirtualFile import org.jetbrains.kotlin.scripting.resolve.ScriptLightVirtualFile
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
import java.util.* import java.util.*
@@ -22,10 +22,12 @@ import org.jetbrains.kotlin.resolve.extensions.SyntheticResolveExtension
import org.jetbrains.kotlin.scripting.compiler.plugin.definitions.CliScriptDefinitionProvider import org.jetbrains.kotlin.scripting.compiler.plugin.definitions.CliScriptDefinitionProvider
import org.jetbrains.kotlin.scripting.compiler.plugin.definitions.CliScriptDependenciesProvider import org.jetbrains.kotlin.scripting.compiler.plugin.definitions.CliScriptDependenciesProvider
import org.jetbrains.kotlin.scripting.compiler.plugin.definitions.CliScriptReportSink import org.jetbrains.kotlin.scripting.compiler.plugin.definitions.CliScriptReportSink
import org.jetbrains.kotlin.scripting.configuration.makeHostConfiguration import org.jetbrains.kotlin.scripting.compiler.plugin.extensions.JvmStandardReplFactoryExtension
import org.jetbrains.kotlin.scripting.compiler.plugin.extensions.ScriptingCollectAdditionalSourcesExtension
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinitionProvider import org.jetbrains.kotlin.scripting.definitions.ScriptDefinitionProvider
import org.jetbrains.kotlin.scripting.definitions.ScriptDependenciesProvider import org.jetbrains.kotlin.scripting.definitions.ScriptDependenciesProvider
import org.jetbrains.kotlin.scripting.extensions.* import org.jetbrains.kotlin.scripting.extensions.ScriptExtraImportsProviderExtension
import org.jetbrains.kotlin.scripting.extensions.ScriptingResolveExtension
import org.jetbrains.kotlin.scripting.resolve.ScriptReportSink import org.jetbrains.kotlin.scripting.resolve.ScriptReportSink
import java.net.URLClassLoader import java.net.URLClassLoader
@@ -43,10 +45,16 @@ class ScriptingCompilerConfigurationComponentRegistrar : ComponentRegistrar {
val hostConfiguration = makeHostConfiguration(project, configuration) val hostConfiguration = makeHostConfiguration(project, configuration)
withClassloadingProblemsReporting(messageCollector) { withClassloadingProblemsReporting(messageCollector) {
CompilerConfigurationExtension.registerExtension(project, ScriptingCompilerConfigurationExtension(project, hostConfiguration)) CompilerConfigurationExtension.registerExtension(project, ScriptingCompilerConfigurationExtension(project, hostConfiguration))
CollectAdditionalSourcesExtension.registerExtension(project, ScriptingCollectAdditionalSourcesExtension(project)) CollectAdditionalSourcesExtension.registerExtension(project,
ScriptingCollectAdditionalSourcesExtension(
project
)
)
ScriptEvaluationExtension.registerExtensionIfRequired(project, JvmCliScriptEvaluationExtension()) ScriptEvaluationExtension.registerExtensionIfRequired(project, JvmCliScriptEvaluationExtension())
ShellExtension.registerExtensionIfRequired(project, JvmCliReplShellExtension()) ShellExtension.registerExtensionIfRequired(project, JvmCliReplShellExtension())
ReplFactoryExtension.registerExtensionIfRequired(project, JvmStandardReplFactoryExtension()) ReplFactoryExtension.registerExtensionIfRequired(project,
JvmStandardReplFactoryExtension()
)
val scriptDefinitionProvider = CliScriptDefinitionProvider() val scriptDefinitionProvider = CliScriptDefinitionProvider()
project.registerService(ScriptDefinitionProvider::class.java, scriptDefinitionProvider) project.registerService(ScriptDefinitionProvider::class.java, scriptDefinitionProvider)
@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package org.jetbrains.kotlin.scripting.repl package org.jetbrains.kotlin.scripting.compiler.plugin.repl
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.KtDestructuringDeclarationEntry import org.jetbrains.kotlin.psi.KtDestructuringDeclarationEntry
@@ -3,17 +3,17 @@
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * 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.scripting.repl package org.jetbrains.kotlin.scripting.compiler.plugin.repl
import org.jetbrains.kotlin.cli.common.repl.* import org.jetbrains.kotlin.cli.common.repl.*
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.descriptors.ScriptDescriptor import org.jetbrains.kotlin.descriptors.ScriptDescriptor
import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.scripting.repl.messages.DiagnosticMessageHolder import org.jetbrains.kotlin.scripting.compiler.plugin.repl.messages.DiagnosticMessageHolder
import java.util.concurrent.locks.ReentrantReadWriteLock import java.util.concurrent.locks.ReentrantReadWriteLock
import kotlin.script.experimental.dependencies.ScriptDependencies import kotlin.script.experimental.dependencies.ScriptDependencies
class ReplCompilerStageHistory(private val state: org.jetbrains.kotlin.scripting.repl.GenericReplCompilerState) : BasicReplStageHistory<ScriptDescriptor>(state.lock) { class ReplCompilerStageHistory(private val state: GenericReplCompilerState) : BasicReplStageHistory<ScriptDescriptor>(state.lock) {
override fun reset(): Iterable<ILineId> { override fun reset(): Iterable<ILineId> {
val removedCompiledLines = super.reset() val removedCompiledLines = super.reset()
@@ -49,17 +49,17 @@ abstract class GenericReplCheckerState : IReplStageState<ScriptDescriptor> {
val errorHolder: DiagnosticMessageHolder val errorHolder: DiagnosticMessageHolder
) )
var lastLineState: org.jetbrains.kotlin.scripting.repl.GenericReplCheckerState.LineState? = null // for transferring state to the compiler in most typical case var lastLineState: LineState? = null // for transferring state to the compiler in most typical case
} }
class GenericReplCompilerState(environment: KotlinCoreEnvironment, override val lock: ReentrantReadWriteLock = ReentrantReadWriteLock()) : class GenericReplCompilerState(environment: KotlinCoreEnvironment, override val lock: ReentrantReadWriteLock = ReentrantReadWriteLock()) :
IReplStageState<ScriptDescriptor>, org.jetbrains.kotlin.scripting.repl.GenericReplCheckerState() { IReplStageState<ScriptDescriptor>, GenericReplCheckerState() {
override val history = org.jetbrains.kotlin.scripting.repl.ReplCompilerStageHistory(this) override val history = ReplCompilerStageHistory(this)
override val currentGeneration: Int get() = (history as BasicReplStageHistory<*>).currentGeneration.get() override val currentGeneration: Int get() = (history as BasicReplStageHistory<*>).currentGeneration.get()
val analyzerEngine = org.jetbrains.kotlin.scripting.repl.ReplCodeAnalyzer(environment) val analyzerEngine = ReplCodeAnalyzer(environment)
var lastDependencies: ScriptDependencies? = null var lastDependencies: ScriptDependencies? = null
} }
@@ -3,7 +3,7 @@
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * 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.scripting.repl package org.jetbrains.kotlin.scripting.compiler.plugin.repl
import com.intellij.openapi.Disposable import com.intellij.openapi.Disposable
import com.intellij.openapi.util.text.StringUtil import com.intellij.openapi.util.text.StringUtil
@@ -24,10 +24,10 @@ import org.jetbrains.kotlin.config.JvmTarget
import org.jetbrains.kotlin.idea.KotlinLanguage import org.jetbrains.kotlin.idea.KotlinLanguage
import org.jetbrains.kotlin.parsing.KotlinParserDefinition import org.jetbrains.kotlin.parsing.KotlinParserDefinition
import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.scripting.compiler.plugin.repl.messages.ConsoleDiagnosticMessageHolder
import org.jetbrains.kotlin.scripting.configuration.ScriptingConfigurationKeys import org.jetbrains.kotlin.scripting.configuration.ScriptingConfigurationKeys
import org.jetbrains.kotlin.scripting.definitions.KotlinScriptDefinition import org.jetbrains.kotlin.scripting.definitions.KotlinScriptDefinition
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition
import org.jetbrains.kotlin.scripting.repl.messages.ConsoleDiagnosticMessageHolder
import kotlin.concurrent.write import kotlin.concurrent.write
import kotlin.script.experimental.host.ScriptingHostConfiguration import kotlin.script.experimental.host.ScriptingHostConfiguration
import kotlin.script.experimental.host.configurationDependencies import kotlin.script.experimental.host.configurationDependencies
@@ -68,7 +68,7 @@ open class GenericReplChecker(
override fun check(state: IReplStageState<*>, codeLine: ReplCodeLine): ReplCheckResult { override fun check(state: IReplStageState<*>, codeLine: ReplCodeLine): ReplCheckResult {
state.lock.write { state.lock.write {
val checkerState = state.asState(org.jetbrains.kotlin.scripting.repl.GenericReplCheckerState::class.java) val checkerState = state.asState(GenericReplCheckerState::class.java)
val scriptFileName = makeScriptBaseName(codeLine) val scriptFileName = makeScriptBaseName(codeLine)
val virtualFile = val virtualFile =
LightVirtualFile( LightVirtualFile(
@@ -87,7 +87,7 @@ open class GenericReplChecker(
if (!syntaxErrorReport.isHasErrors) { if (!syntaxErrorReport.isHasErrors) {
checkerState.lastLineState = checkerState.lastLineState =
org.jetbrains.kotlin.scripting.repl.GenericReplCheckerState.LineState(codeLine, psiFile, errorHolder) GenericReplCheckerState.LineState(codeLine, psiFile, errorHolder)
} }
return when { return when {
@@ -3,7 +3,7 @@
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * 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.scripting.repl package org.jetbrains.kotlin.scripting.compiler.plugin.repl
import com.intellij.openapi.Disposable import com.intellij.openapi.Disposable
import com.intellij.openapi.util.Disposer import com.intellij.openapi.util.Disposer
@@ -41,16 +41,21 @@ open class GenericReplCompiler(
) : this(Disposer.newDisposable(), scriptDefinition, compilerConfiguration, messageCollector) ) : this(Disposer.newDisposable(), scriptDefinition, compilerConfiguration, messageCollector)
private val checker = private val checker =
GenericReplChecker(disposable, scriptDefinition, compilerConfiguration, messageCollector) GenericReplChecker(
disposable,
scriptDefinition,
compilerConfiguration,
messageCollector
)
override fun createState(lock: ReentrantReadWriteLock): IReplStageState<*> = override fun createState(lock: ReentrantReadWriteLock): IReplStageState<*> =
org.jetbrains.kotlin.scripting.repl.GenericReplCompilerState(checker.environment, lock) GenericReplCompilerState(checker.environment, lock)
override fun check(state: IReplStageState<*>, codeLine: ReplCodeLine): ReplCheckResult = checker.check(state, codeLine) override fun check(state: IReplStageState<*>, codeLine: ReplCodeLine): ReplCheckResult = checker.check(state, codeLine)
override fun compile(state: IReplStageState<*>, codeLine: ReplCodeLine): ReplCompileResult { override fun compile(state: IReplStageState<*>, codeLine: ReplCodeLine): ReplCompileResult {
state.lock.write { state.lock.write {
val compilerState = state.asState(org.jetbrains.kotlin.scripting.repl.GenericReplCompilerState::class.java) val compilerState = state.asState(GenericReplCompilerState::class.java)
val (psiFile, errorHolder) = run { val (psiFile, errorHolder) = run {
if (compilerState.lastLineState == null || compilerState.lastLineState!!.codeLine != codeLine) { if (compilerState.lastLineState == null || compilerState.lastLineState!!.codeLine != codeLine) {
@@ -5,7 +5,7 @@
@file:Suppress("UNUSED_PARAMETER") @file:Suppress("UNUSED_PARAMETER")
package org.jetbrains.kotlin.scripting.repl package org.jetbrains.kotlin.scripting.compiler.plugin.repl
import org.jetbrains.kotlin.cli.common.repl.CompiledReplCodeLine import org.jetbrains.kotlin.cli.common.repl.CompiledReplCodeLine
import org.jetbrains.kotlin.cli.common.repl.ILineId import org.jetbrains.kotlin.cli.common.repl.ILineId
@@ -116,7 +116,10 @@ class ReplCodeAnalyzer(environment: KotlinCoreEnvironment) {
} else { } else {
val scriptDescriptor = context.scripts[linePsi.script]!! val scriptDescriptor = context.scripts[linePsi.script]!!
replState.lineSuccess(linePsi, codeLine, scriptDescriptor) replState.lineSuccess(linePsi, codeLine, scriptDescriptor)
ReplLineAnalysisResult.Successful(scriptDescriptor, diagnostics) ReplLineAnalysisResult.Successful(
scriptDescriptor,
diagnostics
)
} }
} }
@@ -157,7 +160,7 @@ class ReplCodeAnalyzer(environment: KotlinCoreEnvironment) {
class AdaptablePackageMemberDeclarationProvider( class AdaptablePackageMemberDeclarationProvider(
private var delegateProvider: PackageMemberDeclarationProvider private var delegateProvider: PackageMemberDeclarationProvider
) : org.jetbrains.kotlin.scripting.repl.DelegatePackageMemberDeclarationProvider(delegateProvider) { ) : DelegatePackageMemberDeclarationProvider(delegateProvider) {
fun addDelegateProvider(provider: PackageMemberDeclarationProvider) { fun addDelegateProvider(provider: PackageMemberDeclarationProvider) {
delegateProvider = CombinedPackageMemberDeclarationProvider(listOf(provider, delegateProvider)) delegateProvider = CombinedPackageMemberDeclarationProvider(listOf(provider, delegateProvider))
@@ -197,20 +200,22 @@ class ReplCodeAnalyzer(environment: KotlinCoreEnvironment) {
} }
fun lineSuccess(ktFile: KtFile, codeLine: ReplCodeLine, scriptDescriptor: ClassDescriptorWithResolutionScopes) { fun lineSuccess(ktFile: KtFile, codeLine: ReplCodeLine, scriptDescriptor: ClassDescriptorWithResolutionScopes) {
val successfulLine = LineInfo.SuccessfulLine( val successfulLine =
ktFile, LineInfo.SuccessfulLine(
successfulLines.lastValue(), ktFile,
scriptDescriptor successfulLines.lastValue(),
) scriptDescriptor
)
submittedLines[ktFile] = successfulLine submittedLines[ktFile] = successfulLine
successfulLines.add(CompiledReplCodeLine(ktFile.name, codeLine), successfulLine) successfulLines.add(CompiledReplCodeLine(ktFile.name, codeLine), successfulLine)
} }
fun lineFailure(ktFile: KtFile, codeLine: ReplCodeLine) { fun lineFailure(ktFile: KtFile, codeLine: ReplCodeLine) {
submittedLines[ktFile] = LineInfo.FailedLine( submittedLines[ktFile] =
ktFile, LineInfo.FailedLine(
successfulLines.lastValue() ktFile,
) successfulLines.lastValue()
)
} }
private fun lineInfo(ktFile: KtFile) = submittedLines[ktFile] private fun lineInfo(ktFile: KtFile) = submittedLines[ktFile]
@@ -3,9 +3,9 @@
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * 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.scripting.repl package org.jetbrains.kotlin.scripting.compiler.plugin.repl
import org.jetbrains.kotlin.scripting.repl.writer.ReplWriter import org.jetbrains.kotlin.scripting.compiler.plugin.repl.writer.ReplWriter
import java.io.PrintWriter import java.io.PrintWriter
import java.io.StringWriter import java.io.StringWriter
@@ -17,7 +17,8 @@ interface ReplExceptionReporter {
} }
} }
class IdeReplExceptionReporter(private val replWriter: ReplWriter) : ReplExceptionReporter { class IdeReplExceptionReporter(private val replWriter: ReplWriter) :
ReplExceptionReporter {
override fun report(e: Throwable) { override fun report(e: Throwable) {
val stringWriter = StringWriter() val stringWriter = StringWriter()
val printWriter = PrintWriter(stringWriter) val printWriter = PrintWriter(stringWriter)
@@ -3,7 +3,7 @@
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * 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.scripting.repl package org.jetbrains.kotlin.scripting.compiler.plugin.repl
import com.intellij.openapi.Disposable import com.intellij.openapi.Disposable
import com.intellij.openapi.util.io.FileUtil import com.intellij.openapi.util.io.FileUtil
@@ -13,13 +13,12 @@ import org.jetbrains.kotlin.cli.common.repl.ReplEvalResult
import org.jetbrains.kotlin.cli.common.repl.replUnescapeLineBreaks import org.jetbrains.kotlin.cli.common.repl.replUnescapeLineBreaks
import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.config.KotlinCompilerVersion import org.jetbrains.kotlin.config.KotlinCompilerVersion
import org.jetbrains.kotlin.scripting.repl.configuration.ConsoleReplConfiguration import org.jetbrains.kotlin.scripting.compiler.plugin.repl.configuration.ConsoleReplConfiguration
import org.jetbrains.kotlin.scripting.repl.configuration.IdeReplConfiguration import org.jetbrains.kotlin.scripting.compiler.plugin.repl.configuration.IdeReplConfiguration
import org.jetbrains.kotlin.scripting.repl.configuration.ReplConfiguration import org.jetbrains.kotlin.scripting.compiler.plugin.repl.configuration.ReplConfiguration
import java.io.File import java.io.File
import java.io.IOException import java.io.IOException
import java.io.PrintWriter import java.io.PrintWriter
import java.util.*
import java.util.concurrent.Callable import java.util.concurrent.Callable
import java.util.concurrent.Executors import java.util.concurrent.Executors
import java.util.concurrent.Future import java.util.concurrent.Future
@@ -3,7 +3,7 @@
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * 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.scripting.repl package org.jetbrains.kotlin.scripting.compiler.plugin.repl
import com.intellij.openapi.Disposable import com.intellij.openapi.Disposable
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
@@ -15,8 +15,8 @@ import org.jetbrains.kotlin.cli.common.repl.*
import org.jetbrains.kotlin.cli.jvm.config.JvmClasspathRoot import org.jetbrains.kotlin.cli.jvm.config.JvmClasspathRoot
import org.jetbrains.kotlin.cli.jvm.config.JvmModulePathRoot import org.jetbrains.kotlin.cli.jvm.config.JvmModulePathRoot
import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.scripting.compiler.plugin.repl.configuration.ReplConfiguration
import org.jetbrains.kotlin.scripting.definitions.KotlinScriptDefinition import org.jetbrains.kotlin.scripting.definitions.KotlinScriptDefinition
import org.jetbrains.kotlin.scripting.repl.configuration.ReplConfiguration
import java.io.PrintWriter import java.io.PrintWriter
import java.net.URLClassLoader import java.net.URLClassLoader
import java.util.concurrent.atomic.AtomicInteger import java.util.concurrent.atomic.AtomicInteger
@@ -3,12 +3,12 @@
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * 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.scripting.repl.configuration package org.jetbrains.kotlin.scripting.compiler.plugin.repl.configuration
import org.jetbrains.kotlin.scripting.repl.ReplExceptionReporter import org.jetbrains.kotlin.scripting.compiler.plugin.repl.ReplExceptionReporter
import org.jetbrains.kotlin.scripting.repl.messages.ConsoleDiagnosticMessageHolder import org.jetbrains.kotlin.scripting.compiler.plugin.repl.messages.ConsoleDiagnosticMessageHolder
import org.jetbrains.kotlin.scripting.repl.reader.ConsoleReplCommandReader import org.jetbrains.kotlin.scripting.compiler.plugin.repl.reader.ConsoleReplCommandReader
import org.jetbrains.kotlin.scripting.repl.writer.ConsoleReplWriter import org.jetbrains.kotlin.scripting.compiler.plugin.repl.writer.ConsoleReplWriter
class ConsoleReplConfiguration : ReplConfiguration { class ConsoleReplConfiguration : ReplConfiguration {
override val writer = ConsoleReplWriter() override val writer = ConsoleReplWriter()
@@ -3,16 +3,16 @@
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * 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.scripting.repl.configuration package org.jetbrains.kotlin.scripting.compiler.plugin.repl.configuration
import org.jetbrains.kotlin.scripting.repl.IdeReplExceptionReporter import org.jetbrains.kotlin.scripting.compiler.plugin.repl.IdeReplExceptionReporter
import org.jetbrains.kotlin.scripting.repl.ReplExceptionReporter import org.jetbrains.kotlin.scripting.compiler.plugin.repl.ReplExceptionReporter
import org.jetbrains.kotlin.scripting.repl.messages.IdeDiagnosticMessageHolder import org.jetbrains.kotlin.scripting.compiler.plugin.repl.messages.IdeDiagnosticMessageHolder
import org.jetbrains.kotlin.scripting.repl.reader.IdeReplCommandReader import org.jetbrains.kotlin.scripting.compiler.plugin.repl.reader.IdeReplCommandReader
import org.jetbrains.kotlin.scripting.repl.reader.ReplCommandReader import org.jetbrains.kotlin.scripting.compiler.plugin.repl.reader.ReplCommandReader
import org.jetbrains.kotlin.scripting.repl.reader.ReplSystemInWrapper import org.jetbrains.kotlin.scripting.compiler.plugin.repl.reader.ReplSystemInWrapper
import org.jetbrains.kotlin.scripting.repl.writer.IdeSystemOutWrapperReplWriter import org.jetbrains.kotlin.scripting.compiler.plugin.repl.writer.IdeSystemOutWrapperReplWriter
import org.jetbrains.kotlin.scripting.repl.writer.ReplWriter import org.jetbrains.kotlin.scripting.compiler.plugin.repl.writer.ReplWriter
class IdeReplConfiguration : ReplConfiguration { class IdeReplConfiguration : ReplConfiguration {
override val allowIncompleteLines: Boolean override val allowIncompleteLines: Boolean
@@ -3,12 +3,12 @@
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * 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.scripting.repl.configuration package org.jetbrains.kotlin.scripting.compiler.plugin.repl.configuration
import org.jetbrains.kotlin.scripting.repl.ReplExceptionReporter import org.jetbrains.kotlin.scripting.compiler.plugin.repl.ReplExceptionReporter
import org.jetbrains.kotlin.scripting.repl.messages.DiagnosticMessageHolder import org.jetbrains.kotlin.scripting.compiler.plugin.repl.messages.DiagnosticMessageHolder
import org.jetbrains.kotlin.scripting.repl.reader.ReplCommandReader import org.jetbrains.kotlin.scripting.compiler.plugin.repl.reader.ReplCommandReader
import org.jetbrains.kotlin.scripting.repl.writer.ReplWriter import org.jetbrains.kotlin.scripting.compiler.plugin.repl.writer.ReplWriter
interface ReplConfiguration { interface ReplConfiguration {
val writer: ReplWriter val writer: ReplWriter
@@ -3,7 +3,7 @@
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * 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.scripting.repl.configuration package org.jetbrains.kotlin.scripting.compiler.plugin.repl.configuration
interface SnippetExecutionInterceptor { interface SnippetExecutionInterceptor {
fun <T> execute(block: () -> T): T fun <T> execute(block: () -> T): T
@@ -11,7 +11,6 @@ import com.intellij.openapi.util.Disposer
import org.jetbrains.kotlin.cli.common.repl.* import org.jetbrains.kotlin.cli.common.repl.*
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.descriptors.ScriptDescriptor import org.jetbrains.kotlin.descriptors.ScriptDescriptor
import org.jetbrains.kotlin.scripting.repl.ReplCodeAnalyzer
import java.util.concurrent.locks.ReentrantReadWriteLock import java.util.concurrent.locks.ReentrantReadWriteLock
import kotlin.concurrent.write import kotlin.concurrent.write
import kotlin.script.experimental.api.* import kotlin.script.experimental.api.*
@@ -3,7 +3,7 @@
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * 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.scripting.repl.messages package org.jetbrains.kotlin.scripting.compiler.plugin.repl.messages
import org.jetbrains.kotlin.cli.common.messages.GroupingMessageCollector import org.jetbrains.kotlin.cli.common.messages.GroupingMessageCollector
import org.jetbrains.kotlin.cli.common.messages.MessageCollectorBasedReporter import org.jetbrains.kotlin.cli.common.messages.MessageCollectorBasedReporter
@@ -12,7 +12,8 @@ import org.jetbrains.kotlin.cli.common.messages.PrintingMessageCollector
import java.io.ByteArrayOutputStream import java.io.ByteArrayOutputStream
import java.io.PrintStream import java.io.PrintStream
class ConsoleDiagnosticMessageHolder : MessageCollectorBasedReporter, DiagnosticMessageHolder { class ConsoleDiagnosticMessageHolder : MessageCollectorBasedReporter,
DiagnosticMessageHolder {
private val outputStream = ByteArrayOutputStream() private val outputStream = ByteArrayOutputStream()
override val messageCollector: GroupingMessageCollector = GroupingMessageCollector( override val messageCollector: GroupingMessageCollector = GroupingMessageCollector(
@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package org.jetbrains.kotlin.scripting.repl.messages package org.jetbrains.kotlin.scripting.compiler.plugin.repl.messages
import org.jetbrains.kotlin.cli.common.messages.DiagnosticMessageReporter import org.jetbrains.kotlin.cli.common.messages.DiagnosticMessageReporter
@@ -3,7 +3,7 @@
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * 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.scripting.repl.messages package org.jetbrains.kotlin.scripting.compiler.plugin.repl.messages
import com.intellij.openapi.util.text.StringUtil import com.intellij.openapi.util.text.StringUtil
import com.intellij.psi.PsiFile import com.intellij.psi.PsiFile
@@ -3,9 +3,9 @@
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * 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.scripting.repl.reader package org.jetbrains.kotlin.scripting.compiler.plugin.repl.reader
import org.jetbrains.kotlin.scripting.repl.ReplFromTerminal import org.jetbrains.kotlin.scripting.compiler.plugin.repl.ReplFromTerminal
import org.jline.reader.EndOfFileException import org.jline.reader.EndOfFileException
import org.jline.reader.LineReader import org.jline.reader.LineReader
import org.jline.reader.LineReaderBuilder import org.jline.reader.LineReaderBuilder
@@ -3,9 +3,9 @@
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * 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.scripting.repl.reader package org.jetbrains.kotlin.scripting.compiler.plugin.repl.reader
import org.jetbrains.kotlin.scripting.repl.ReplFromTerminal import org.jetbrains.kotlin.scripting.compiler.plugin.repl.ReplFromTerminal
class IdeReplCommandReader : ReplCommandReader { class IdeReplCommandReader : ReplCommandReader {
override fun readLine(next: ReplFromTerminal.WhatNextAfterOneLine) = readLine() override fun readLine(next: ReplFromTerminal.WhatNextAfterOneLine) = readLine()
@@ -3,9 +3,9 @@
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * 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.scripting.repl.reader package org.jetbrains.kotlin.scripting.compiler.plugin.repl.reader
import org.jetbrains.kotlin.scripting.repl.ReplFromTerminal import org.jetbrains.kotlin.scripting.compiler.plugin.repl.ReplFromTerminal
interface ReplCommandReader { interface ReplCommandReader {
fun readLine(next: ReplFromTerminal.WhatNextAfterOneLine): String? fun readLine(next: ReplFromTerminal.WhatNextAfterOneLine): String?
@@ -3,10 +3,10 @@
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * 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.scripting.repl.reader package org.jetbrains.kotlin.scripting.compiler.plugin.repl.reader
import org.jetbrains.kotlin.cli.common.repl.replUnescapeLineBreaks import org.jetbrains.kotlin.cli.common.repl.replUnescapeLineBreaks
import org.jetbrains.kotlin.scripting.repl.writer.ReplWriter import org.jetbrains.kotlin.scripting.compiler.plugin.repl.writer.ReplWriter
import org.w3c.dom.Element import org.w3c.dom.Element
import org.xml.sax.InputSource import org.xml.sax.InputSource
import java.io.ByteArrayInputStream import java.io.ByteArrayInputStream
@@ -3,7 +3,7 @@
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * 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.scripting.repl.writer package org.jetbrains.kotlin.scripting.compiler.plugin.repl.writer
class ConsoleReplWriter : ReplWriter { class ConsoleReplWriter : ReplWriter {
override fun printlnWelcomeMessage(x: String) = println(x) override fun printlnWelcomeMessage(x: String) = println(x)
@@ -3,7 +3,7 @@
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * 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.scripting.repl.writer package org.jetbrains.kotlin.scripting.compiler.plugin.repl.writer
import org.jetbrains.kotlin.cli.common.repl.replAddLineBreak import org.jetbrains.kotlin.cli.common.repl.replAddLineBreak
import org.jetbrains.kotlin.cli.common.repl.replOutputAsXml import org.jetbrains.kotlin.cli.common.repl.replOutputAsXml
@@ -3,7 +3,7 @@
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * 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.scripting.repl.writer package org.jetbrains.kotlin.scripting.compiler.plugin.repl.writer
interface ReplWriter { interface ReplWriter {
fun printlnWelcomeMessage(x: String) fun printlnWelcomeMessage(x: String)
@@ -22,11 +22,11 @@ import org.jetbrains.kotlin.compiler.plugin.AbstractCliOption
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.scripting.compiler.plugin.impl.reporter
import org.jetbrains.kotlin.scripting.configuration.ScriptingConfigurationKeys import org.jetbrains.kotlin.scripting.configuration.ScriptingConfigurationKeys
import org.jetbrains.kotlin.scripting.definitions.SCRIPT_DEFINITION_MARKERS_PATH import org.jetbrains.kotlin.scripting.definitions.SCRIPT_DEFINITION_MARKERS_PATH
import org.jetbrains.kotlin.scripting.definitions.discoverScriptTemplatesInClasspath import org.jetbrains.kotlin.scripting.definitions.discoverScriptTemplatesInClasspath
import org.jetbrains.kotlin.scripting.definitions.loadScriptTemplatesFromClasspath import org.jetbrains.kotlin.scripting.definitions.loadScriptTemplatesFromClasspath
import org.jetbrains.kotlin.scripting.definitions.reporter
import org.jetbrains.kotlin.test.ConfigurationKind import org.jetbrains.kotlin.test.ConfigurationKind
import org.jetbrains.kotlin.test.KotlinTestUtils import org.jetbrains.kotlin.test.KotlinTestUtils
import org.jetbrains.kotlin.test.TestCaseWithTmpdir import org.jetbrains.kotlin.test.TestCaseWithTmpdir
@@ -7,8 +7,6 @@ plugins {
} }
dependencies { dependencies {
compileOnly(project(":kotlin-scripting-compiler"))
compile(project(":kotlin-scripting-compiler-impl"))
compile(project(":kotlin-scripting-intellij")) compile(project(":kotlin-scripting-intellij"))
compileOnly(project(":idea:idea-gradle")) compileOnly(project(":idea:idea-gradle"))
compileOnly(project(":idea:idea-core")) compileOnly(project(":idea:idea-core"))
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.scripting.idea.plugin
import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments
import org.jetbrains.kotlin.idea.configuration.GradleProjectImportHandler import org.jetbrains.kotlin.idea.configuration.GradleProjectImportHandler
import org.jetbrains.kotlin.idea.facet.KotlinFacet import org.jetbrains.kotlin.idea.facet.KotlinFacet
import org.jetbrains.kotlin.scripting.configuration.KOTLIN_SCRIPTING_PLUGIN_ID import org.jetbrains.kotlin.scripting.KOTLIN_SCRIPTING_PLUGIN_ID
import org.jetbrains.plugins.gradle.model.data.GradleSourceSetData import org.jetbrains.plugins.gradle.model.data.GradleSourceSetData
import java.io.File import java.io.File