diff --git a/build.gradle.kts b/build.gradle.kts index 97d20de94d3..edc32662d4d 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -729,7 +729,8 @@ tasks { register("scriptingTest") { dependsOn("dist") dependsOn(":kotlin-script-util:test") - dependsOn(":kotlin-scripting-compiler-embeddable:test") + dependsOn(":kotlin-scripting-compiler:test") + dependsOn(":kotlin-scripting-compiler:testWithIr") dependsOn(":kotlin-scripting-common:test") dependsOn(":kotlin-scripting-jvm:test") dependsOn(":kotlin-scripting-jvm-host-test:test") @@ -740,6 +741,7 @@ tasks { // dependsOn(":kotlin-scripting-jvm-host-test:embeddableTest") dependsOn(":kotlin-scripting-jsr223-test:embeddableTest") dependsOn(":kotlin-main-kts-test:test") + dependsOn(":kotlin-main-kts-test:testWithIr") dependsOn(":kotlin-scripting-ide-services-test:test") dependsOn(":kotlin-scripting-ide-services-test:embeddableTest") dependsOn(":kotlin-scripting-js-test:test") diff --git a/libraries/tools/kotlin-main-kts-test/build.gradle.kts b/libraries/tools/kotlin-main-kts-test/build.gradle.kts index 2355fdf5d0e..8201fb58438 100644 --- a/libraries/tools/kotlin-main-kts-test/build.gradle.kts +++ b/libraries/tools/kotlin-main-kts-test/build.gradle.kts @@ -24,3 +24,9 @@ projectTest(parallel = true) { dependsOn(":dist") workingDir = rootDir } + +projectTest(taskName = "testWithIr", parallel = true) { + dependsOn(":dist") + workingDir = rootDir + systemProperty("kotlin.script.test.base.compiler.arguments", "-Xuse-ir") +} diff --git a/plugins/scripting/scripting-compiler/build.gradle.kts b/plugins/scripting/scripting-compiler/build.gradle.kts index 38dcbbd035d..591f5e9e58d 100644 --- a/plugins/scripting/scripting-compiler/build.gradle.kts +++ b/plugins/scripting/scripting-compiler/build.gradle.kts @@ -62,3 +62,11 @@ projectTest(parallel = true) { workingDir = rootDir systemProperty("kotlin.test.script.classpath", testSourceSet.output.classesDirs.joinToString(File.pathSeparator)) } + +projectTest(taskName = "testWithIr", parallel = true) { + dependsOn(":dist") + workingDir = rootDir + systemProperty("kotlin.test.script.classpath", testSourceSet.output.classesDirs.joinToString(File.pathSeparator)) + systemProperty("kotlin.script.test.base.compiler.arguments", "-Xuse-ir") +} + diff --git a/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/impl/compilationContext.kt b/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/impl/compilationContext.kt index 48ae6cd4c60..7277b7eb983 100644 --- a/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/impl/compilationContext.kt +++ b/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/impl/compilationContext.kt @@ -163,29 +163,40 @@ private fun CompilerConfiguration.updateWithCompilerOptions( messageCollector: ScriptDiagnosticsMessageCollector, ignoredOptionsReportingState: IgnoredOptionsReportingState, isRefinement: Boolean +) { + updateWithCompilerOptions(compilerOptions) { + validateArguments(it.errors)?.let { error -> + messageCollector.report(CompilerMessageSeverity.ERROR, error) + false + } ?: run { + messageCollector.reportArgumentParseProblems(it) + reportArgumentsIgnoredGenerally( + it, + messageCollector, + ignoredOptionsReportingState + ) + if (isRefinement) { + reportArgumentsIgnoredFromRefinement( + it, + messageCollector, + ignoredOptionsReportingState + ) + } + true + } + } +} + +internal fun CompilerConfiguration.updateWithCompilerOptions( + compilerOptions: List, + validate: (K2JVMCompilerArguments) -> Boolean = { + validateArguments(it.errors)?.let { throw Exception("Error parsing arguments: $it") } ?: true + } ) { val compilerArguments = K2JVMCompilerArguments() parseCommandLineArguments(compilerOptions, compilerArguments) - validateArguments(compilerArguments.errors)?.let { - messageCollector.report(CompilerMessageSeverity.ERROR, it) - return - } - - messageCollector.reportArgumentParseProblems(compilerArguments) - - reportArgumentsIgnoredGenerally( - compilerArguments, - messageCollector, - ignoredOptionsReportingState - ) - if (isRefinement) { - reportArgumentsIgnoredFromRefinement( - compilerArguments, - messageCollector, - ignoredOptionsReportingState - ) - } + if (!validate(compilerArguments)) return processPluginsCommandLine(compilerArguments) diff --git a/plugins/scripting/scripting-compiler/tests/org/jetbrains/kotlin/scripting/compiler/plugin/ScriptingCompilerPluginTest.kt b/plugins/scripting/scripting-compiler/tests/org/jetbrains/kotlin/scripting/compiler/plugin/ScriptingCompilerPluginTest.kt index f82b4b866ec..791779a8c12 100644 --- a/plugins/scripting/scripting-compiler/tests/org/jetbrains/kotlin/scripting/compiler/plugin/ScriptingCompilerPluginTest.kt +++ b/plugins/scripting/scripting-compiler/tests/org/jetbrains/kotlin/scripting/compiler/plugin/ScriptingCompilerPluginTest.kt @@ -11,8 +11,8 @@ import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys import org.jetbrains.kotlin.cli.common.ExitCode import org.jetbrains.kotlin.cli.common.config.addKotlinSourceRoots import org.jetbrains.kotlin.cli.common.environment.setIdeaIoUseFallback -import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSourceLocation import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity +import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSourceLocation import org.jetbrains.kotlin.cli.common.messages.MessageCollector import org.jetbrains.kotlin.cli.jvm.K2JVMCompiler import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles @@ -65,6 +65,7 @@ class ScriptingCompilerPluginTest : TestCase() { confBody: CompilerConfiguration.() -> Unit ): KotlinCoreEnvironment { val configuration = KotlinTestUtils.newConfiguration(ConfigurationKind.NO_KOTLIN_REFLECT, TestJdkKind.FULL_JDK).apply { + updateWithBaseCompilerArguments() put(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, messageCollector) addKotlinSourceRoots(sources) put(JVMConfigurationKeys.OUTPUT_DIRECTORY, destDir) diff --git a/plugins/scripting/scripting-compiler/tests/org/jetbrains/kotlin/scripting/compiler/plugin/testUtil.kt b/plugins/scripting/scripting-compiler/tests/org/jetbrains/kotlin/scripting/compiler/plugin/testUtil.kt index 6589402c4d9..604517148c6 100644 --- a/plugins/scripting/scripting-compiler/tests/org/jetbrains/kotlin/scripting/compiler/plugin/testUtil.kt +++ b/plugins/scripting/scripting-compiler/tests/org/jetbrains/kotlin/scripting/compiler/plugin/testUtil.kt @@ -9,6 +9,8 @@ import com.intellij.openapi.Disposable import com.intellij.openapi.util.Disposer import org.jetbrains.kotlin.cli.common.CLITool import org.jetbrains.kotlin.cli.jvm.K2JVMCompiler +import org.jetbrains.kotlin.config.CompilerConfiguration +import org.jetbrains.kotlin.scripting.compiler.plugin.impl.updateWithCompilerOptions import org.junit.Assert import java.io.ByteArrayOutputStream import java.io.File @@ -18,6 +20,11 @@ import java.nio.file.Files import java.util.concurrent.TimeUnit import kotlin.concurrent.thread +const val SCRIPT_TEST_BASE_COMPILER_ARGUMENTS_PROPERTY = "kotlin.script.test.base.compiler.arguments" + +private fun getBaseCompilerArgumentsFromProperty(): List? = + System.getProperty(SCRIPT_TEST_BASE_COMPILER_ARGUMENTS_PROPERTY)?.takeIf { it.isNotBlank() }?.split(' ') + // TODO: partially copypasted from LauncherReplTest, consider extracting common parts to some (new) test util module fun runWithKotlinc( scriptPath: String, @@ -52,6 +59,7 @@ fun runWithKotlinLauncherScript( add("-cp") add(classpath.joinToString(File.pathSeparator)) } + getBaseCompilerArgumentsFromProperty()?.let { addAll(it) } addAll(compilerArgs) } @@ -161,10 +169,11 @@ fun runWithK2JVMCompiler( expectedExitCode: Int = 0, expectedSomeErrPatterns: List? = null ) { + val argsWithBasefromProp = getBaseCompilerArgumentsFromProperty()?.let { (it + args).toTypedArray() } ?: args val (out, err, ret) = captureOutErrRet { CLITool.doMainNoExit( K2JVMCompiler(), - args + argsWithBasefromProp ) } try { @@ -243,4 +252,9 @@ class TestDisposable : Disposable { } } +fun CompilerConfiguration.updateWithBaseCompilerArguments() { + getBaseCompilerArgumentsFromProperty()?.let { + updateWithCompilerOptions(it) + } +} diff --git a/plugins/scripting/scripting-compiler/tests/org/jetbrains/kotlin/scripting/compiler/test/CollectScriptCompilationDependenciesTest.kt b/plugins/scripting/scripting-compiler/tests/org/jetbrains/kotlin/scripting/compiler/test/CollectScriptCompilationDependenciesTest.kt index bae4690676d..c51afdb92b6 100644 --- a/plugins/scripting/scripting-compiler/tests/org/jetbrains/kotlin/scripting/compiler/test/CollectScriptCompilationDependenciesTest.kt +++ b/plugins/scripting/scripting-compiler/tests/org/jetbrains/kotlin/scripting/compiler/test/CollectScriptCompilationDependenciesTest.kt @@ -13,6 +13,7 @@ import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.cli.jvm.config.jvmClasspathRoots import org.jetbrains.kotlin.script.loadScriptingPlugin import org.jetbrains.kotlin.scripting.compiler.plugin.TestDisposable +import org.jetbrains.kotlin.scripting.compiler.plugin.updateWithBaseCompilerArguments import org.jetbrains.kotlin.scripting.configuration.ScriptingConfigurationKeys import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition import org.jetbrains.kotlin.test.ConfigurationKind @@ -58,6 +59,7 @@ class CollectScriptCompilationDependenciesTest : TestCase() { private fun runTest(scriptFile: String, expectedDependencies: List, classPath: List = emptyList()) { val configuration = KotlinTestUtils.newConfiguration(ConfigurationKind.NO_KOTLIN_REFLECT, TestJdkKind.MOCK_JDK).apply { + updateWithBaseCompilerArguments() add( ScriptingConfigurationKeys.SCRIPT_DEFINITIONS, ScriptDefinition.FromTemplate( diff --git a/plugins/scripting/scripting-compiler/tests/org/jetbrains/kotlin/scripting/compiler/test/CompileTimeFibonacciTest.kt b/plugins/scripting/scripting-compiler/tests/org/jetbrains/kotlin/scripting/compiler/test/CompileTimeFibonacciTest.kt index 570dbd99f54..a05e72d82ae 100644 --- a/plugins/scripting/scripting-compiler/tests/org/jetbrains/kotlin/scripting/compiler/test/CompileTimeFibonacciTest.kt +++ b/plugins/scripting/scripting-compiler/tests/org/jetbrains/kotlin/scripting/compiler/test/CompileTimeFibonacciTest.kt @@ -13,6 +13,7 @@ import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.script.loadScriptingPlugin import org.jetbrains.kotlin.scripting.compiler.plugin.TestDisposable import org.jetbrains.kotlin.scripting.compiler.plugin.impl.ScriptJvmCompilerFromEnvironment +import org.jetbrains.kotlin.scripting.compiler.plugin.updateWithBaseCompilerArguments import org.jetbrains.kotlin.scripting.configuration.ScriptingConfigurationKeys import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition import org.jetbrains.kotlin.scripting.definitions.ScriptDefinitionProvider @@ -94,6 +95,7 @@ class CompileTimeFibonacciTest : TestCase() { script: SourceCode ): ResultWithDiagnostics { val configuration = KotlinTestUtils.newConfiguration(ConfigurationKind.NO_KOTLIN_REFLECT, TestJdkKind.FULL_JDK).apply { + updateWithBaseCompilerArguments() val hostConfiguration = ScriptingHostConfiguration(defaultJvmScriptingHostConfiguration) add( ScriptingConfigurationKeys.SCRIPT_DEFINITIONS, diff --git a/plugins/scripting/scripting-compiler/tests/org/jetbrains/kotlin/scripting/compiler/test/ConstructAnnotationTest.kt b/plugins/scripting/scripting-compiler/tests/org/jetbrains/kotlin/scripting/compiler/test/ConstructAnnotationTest.kt index c7008338a3a..2ef7faf8f33 100644 --- a/plugins/scripting/scripting-compiler/tests/org/jetbrains/kotlin/scripting/compiler/test/ConstructAnnotationTest.kt +++ b/plugins/scripting/scripting-compiler/tests/org/jetbrains/kotlin/scripting/compiler/test/ConstructAnnotationTest.kt @@ -15,6 +15,7 @@ import org.jetbrains.kotlin.scripting.compiler.plugin.TestDisposable import org.jetbrains.kotlin.scripting.compiler.plugin.impl.ScriptDiagnosticsMessageCollector import org.jetbrains.kotlin.scripting.compiler.plugin.impl.createCompilationContextFromEnvironment import org.jetbrains.kotlin.scripting.compiler.plugin.impl.getScriptKtFile +import org.jetbrains.kotlin.scripting.compiler.plugin.updateWithBaseCompilerArguments import org.jetbrains.kotlin.scripting.resolve.InvalidScriptResolverAnnotation import org.jetbrains.kotlin.scripting.resolve.getScriptCollectedData import org.jetbrains.kotlin.test.ConfigurationKind @@ -99,6 +100,7 @@ class ConstructAnnotationTest : TestCase() { private fun annotations(filename: String, vararg classes: KClass): ResultWithDiagnostics> { val file = File(testDataPath, filename) val compilationConfiguration = KotlinTestUtils.newConfiguration(ConfigurationKind.NO_KOTLIN_REFLECT, TestJdkKind.MOCK_JDK).apply { + updateWithBaseCompilerArguments() addKotlinSourceRoot(file.path) loadScriptingPlugin(this) } diff --git a/plugins/scripting/scripting-compiler/tests/org/jetbrains/kotlin/scripting/compiler/test/ScriptCliCompilationTest.kt b/plugins/scripting/scripting-compiler/tests/org/jetbrains/kotlin/scripting/compiler/test/ScriptCliCompilationTest.kt index 50615b9dab6..5262ed4befc 100644 --- a/plugins/scripting/scripting-compiler/tests/org/jetbrains/kotlin/scripting/compiler/test/ScriptCliCompilationTest.kt +++ b/plugins/scripting/scripting-compiler/tests/org/jetbrains/kotlin/scripting/compiler/test/ScriptCliCompilationTest.kt @@ -15,6 +15,7 @@ import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.script.loadScriptingPlugin import org.jetbrains.kotlin.scripting.compiler.plugin.TestDisposable import org.jetbrains.kotlin.scripting.compiler.plugin.TestMessageCollector +import org.jetbrains.kotlin.scripting.compiler.plugin.updateWithBaseCompilerArguments import org.jetbrains.kotlin.scripting.configuration.ScriptingConfigurationKeys import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition import org.jetbrains.kotlin.test.ConfigurationKind @@ -67,6 +68,7 @@ class ScriptCliCompilationTest : TestCase() { val collector = TestMessageCollector() val configuration = KotlinTestUtils.newConfiguration(ConfigurationKind.NO_KOTLIN_REFLECT, TestJdkKind.FULL_JDK).apply { + updateWithBaseCompilerArguments() put(MESSAGE_COLLECTOR_KEY, collector) if (scriptDef != null) { val hostConfiguration = ScriptingHostConfiguration(defaultJvmScriptingHostConfiguration) { diff --git a/plugins/scripting/scripting-compiler/tests/org/jetbrains/kotlin/scripting/compiler/test/ScriptTemplateTest.kt b/plugins/scripting/scripting-compiler/tests/org/jetbrains/kotlin/scripting/compiler/test/ScriptTemplateTest.kt index 8db6a7b4c2f..3baeb006a5c 100644 --- a/plugins/scripting/scripting-compiler/tests/org/jetbrains/kotlin/scripting/compiler/test/ScriptTemplateTest.kt +++ b/plugins/scripting/scripting-compiler/tests/org/jetbrains/kotlin/scripting/compiler/test/ScriptTemplateTest.kt @@ -17,6 +17,7 @@ import org.jetbrains.kotlin.config.JVMConfigurationKeys import org.jetbrains.kotlin.script.loadScriptingPlugin import org.jetbrains.kotlin.scripting.compiler.plugin.TestMessageCollector import org.jetbrains.kotlin.scripting.compiler.plugin.assertHasMessage +import org.jetbrains.kotlin.scripting.compiler.plugin.updateWithBaseCompilerArguments import org.jetbrains.kotlin.scripting.configuration.ScriptingConfigurationKeys import org.jetbrains.kotlin.scripting.definitions.KotlinScriptDefinition import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition @@ -368,6 +369,7 @@ class ScriptTemplateTest : TestCase() { TestJdkKind.FULL_JDK, *additionalClasspath ) + configuration.updateWithBaseCompilerArguments() configuration.put(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, messageCollector) configuration.add( ScriptingConfigurationKeys.SCRIPT_DEFINITIONS, diff --git a/plugins/scripting/scripting-compiler/tests/org/jetbrains/kotlin/scripting/compiler/test/ScriptTest.kt b/plugins/scripting/scripting-compiler/tests/org/jetbrains/kotlin/scripting/compiler/test/ScriptTest.kt index e0f63bb36fa..0fc0bdac2e6 100644 --- a/plugins/scripting/scripting-compiler/tests/org/jetbrains/kotlin/scripting/compiler/test/ScriptTest.kt +++ b/plugins/scripting/scripting-compiler/tests/org/jetbrains/kotlin/scripting/compiler/test/ScriptTest.kt @@ -15,6 +15,7 @@ import org.jetbrains.kotlin.codegen.CompilationException import org.jetbrains.kotlin.config.JVMConfigurationKeys import org.jetbrains.kotlin.load.java.JvmAnnotationNames import org.jetbrains.kotlin.script.loadScriptingPlugin +import org.jetbrains.kotlin.scripting.compiler.plugin.updateWithBaseCompilerArguments import org.jetbrains.kotlin.scripting.configuration.ScriptingConfigurationKeys import org.jetbrains.kotlin.scripting.definitions.KotlinScriptDefinition import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition @@ -118,6 +119,7 @@ class ScriptTest : TestCase() { val rootDisposable = Disposer.newDisposable() try { val configuration = KotlinTestUtils.newConfiguration(ConfigurationKind.ALL, TestJdkKind.FULL_JDK) + configuration.updateWithBaseCompilerArguments() configuration.put(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, messageCollector) configuration.add( ScriptingConfigurationKeys.SCRIPT_DEFINITIONS,