Enable work-around for classpath updates
diff --git a/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/impl/K2ReplCompiler.kt b/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/impl/K2ReplCompiler.kt index d266785..ef26f40 100644 --- a/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/impl/K2ReplCompiler.kt +++ b/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/impl/K2ReplCompiler.kt
@@ -261,6 +261,16 @@ allSourceFiles, initialScriptCompilationConfiguration ) + + // CM: Unclear exactly what this does exactly, but it seems to allow us to use updateClasspath + // Without this, using `updateClasspath` doesn't work either + val (refineSourceFiles, newSourceDeps) = collectRefinedSourcesAndUpdateEnvironment( + state.compilerContext, + snippetKtFile, + initialScriptCompilationConfiguration, + messageCollector + ) + allSourceFiles.addAll(newSources) var hasSyntaxErrors = false
diff --git a/plugins/scripting/scripting-tests/test/org/jetbrains/kotlin/scripting/test/repl/example/exampleRepl.kt b/plugins/scripting/scripting-tests/test/org/jetbrains/kotlin/scripting/test/repl/example/exampleRepl.kt index b66eba4..440f7a4 100644 --- a/plugins/scripting/scripting-tests/test/org/jetbrains/kotlin/scripting/test/repl/example/exampleRepl.kt +++ b/plugins/scripting/scripting-tests/test/org/jetbrains/kotlin/scripting/test/repl/example/exampleRepl.kt
@@ -24,6 +24,7 @@ import org.jetbrains.kotlin.scripting.compiler.plugin.repl.configuration.ConsoleReplConfiguration import org.jetbrains.kotlin.scripting.compiler.plugin.repl.configuration.ReplConfiguration import org.jetbrains.kotlin.test.services.StandardLibrariesPathProviderForKotlinProject +import java.io.File import kotlin.script.experimental.api.* import kotlin.script.experimental.host.toScriptSource import kotlin.script.experimental.impl.internalScriptingRunSuspend @@ -31,8 +32,18 @@ import kotlin.script.experimental.jvm.jvm import kotlin.script.experimental.jvm.updateClasspath import kotlin.script.experimental.jvm.util.isIncomplete +import kotlin.script.experimental.jvm.withUpdatedClasspath import kotlin.script.experimental.util.LinkedSnippet +@Target(AnnotationTarget.FILE) +@Repeatable +@Retention(AnnotationRetention.SOURCE) +annotation class DependsOn(val value: String = "") + +class ReplBaseClass() { + fun helloFromBase() = println("Hello World") +} + /** * Test K2 REPL implementation. Very Experimental! Do not use! May break at any moment! */ @@ -56,12 +67,28 @@ private val messageCollector = ScriptDiagnosticsMessageCollector(ReplMessageCollector(replConfiguration)) private var lineCounter = 0 + val mutableClassPath: MutableList<File> = mutableListOf() + + fun onAnnotationsHandler(context: ScriptConfigurationRefinementContext): ResultWithDiagnostics<ScriptCompilationConfiguration> { + mutableClassPath.add(File("/Users/christian.melchior/JetBrains/kotlin-jupyter-2/src/test/testData/kernelTestPackage-1.0.jar")) + return context.compilationConfiguration.withUpdatedClasspath(listOf<File>( + File("/Users/christian.melchior/JetBrains/kotlin-jupyter-2/src/test/testData/kernelTestPackage-1.0.jar") + )).asSuccess() + } + private val scriptCompilationConfiguration = ScriptCompilationConfiguration { jvm { updateClasspath( - listOf(StandardLibrariesPathProviderForKotlinProject.runtimeJarForTests()) + listOf( + StandardLibrariesPathProviderForKotlinProject.runtimeJarForTests(), + File("/Users/christian.melchior/JetBrains/kotlin/plugins/scripting/scripting-tests/build/classes/kotlin/test"), + ) ) } + implicitReceivers(ReplBaseClass::class) + refineConfiguration { + onAnnotations(DependsOn::class, handler = ::onAnnotationsHandler) + } } private val replCompiler = @@ -78,6 +105,7 @@ jvm { baseClassLoader( ExampleRepl::class.java.classLoader) } + implicitReceivers.invoke(ReplBaseClass()) } val replEvaluator = K2ReplEvaluator() @@ -166,6 +194,7 @@ repl { currentLineId(lineId) } + updateClasspath(mutableClassPath) } ) }