Scripting: refactor processing of JvmDependencyFromClassLoader in repl
This commit is contained in:
+3
@@ -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
|
||||
|
||||
+11
-3
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user