Scripting: refactor processing of JvmDependencyFromClassLoader in repl

This commit is contained in:
Ilya Chernikov
2022-05-18 12:51:37 +02:00
committed by teamcity
parent 597677dae3
commit 120ecce753
2 changed files with 14 additions and 3 deletions
@@ -96,6 +96,9 @@ open class KJvmReplCompilerBase<AnalyzerT : ReplCodeAnalyzerBase>(
if (messageCollector.hasErrors()) return failure(messageCollector)
// TODO: support case then JvmDependencyFromClassLoader is registered in non-first line
// registerPackageFragmentProvidersIfNeeded already tries to avoid duplicated registering, but impact on
// executing it on every snippet needs to be evaluated first
if (state.history.isEmpty()) {
val updatedConfiguration = ScriptDependenciesProvider.getInstance(context.environment.project)
?.getScriptConfiguration(snippetKtFile)?.configuration
@@ -159,9 +159,17 @@ internal fun registerPackageFragmentProvidersIfNeeded(
scriptCompilationConfiguration: ScriptCompilationConfiguration,
environment: KotlinCoreEnvironment
) {
scriptCompilationConfiguration[ScriptCompilationConfiguration.dependencies]?.forEach { dependency ->
if (dependency is JvmDependencyFromClassLoader) {
// TODO: consider implementing deduplication
val scriptDependencies = scriptCompilationConfiguration[ScriptCompilationConfiguration.dependencies] ?: return
val scriptDependenciesFromClassLoader = scriptDependencies.filterIsInstance<JvmDependencyFromClassLoader>().takeIf { it.isNotEmpty() }
?: return
// TODO: consider implementing deduplication/diff processing
val alreadyRegistered =
environment.project.extensionArea.getExtensionPoint(PackageFragmentProviderExtension.extensionPointName).extensions.any {
(it is PackageFragmentFromClassLoaderProviderExtension) &&
it.scriptCompilationConfiguration[ScriptCompilationConfiguration.dependencies] == scriptDependencies
}
if (!alreadyRegistered) {
scriptDependenciesFromClassLoader.forEach { dependency ->
PackageFragmentProviderExtension.registerExtension(
environment.project,
PackageFragmentFromClassLoaderProviderExtension(