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)
             }
         )
     }