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)
|
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()) {
|
if (state.history.isEmpty()) {
|
||||||
val updatedConfiguration = ScriptDependenciesProvider.getInstance(context.environment.project)
|
val updatedConfiguration = ScriptDependenciesProvider.getInstance(context.environment.project)
|
||||||
?.getScriptConfiguration(snippetKtFile)?.configuration
|
?.getScriptConfiguration(snippetKtFile)?.configuration
|
||||||
|
|||||||
+11
-3
@@ -159,9 +159,17 @@ internal fun registerPackageFragmentProvidersIfNeeded(
|
|||||||
scriptCompilationConfiguration: ScriptCompilationConfiguration,
|
scriptCompilationConfiguration: ScriptCompilationConfiguration,
|
||||||
environment: KotlinCoreEnvironment
|
environment: KotlinCoreEnvironment
|
||||||
) {
|
) {
|
||||||
scriptCompilationConfiguration[ScriptCompilationConfiguration.dependencies]?.forEach { dependency ->
|
val scriptDependencies = scriptCompilationConfiguration[ScriptCompilationConfiguration.dependencies] ?: return
|
||||||
if (dependency is JvmDependencyFromClassLoader) {
|
val scriptDependenciesFromClassLoader = scriptDependencies.filterIsInstance<JvmDependencyFromClassLoader>().takeIf { it.isNotEmpty() }
|
||||||
// TODO: consider implementing deduplication
|
?: 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(
|
PackageFragmentProviderExtension.registerExtension(
|
||||||
environment.project,
|
environment.project,
|
||||||
PackageFragmentFromClassLoaderProviderExtension(
|
PackageFragmentFromClassLoaderProviderExtension(
|
||||||
|
|||||||
Reference in New Issue
Block a user