From 517e5e8954a8bf673be641a9632003087921bd74 Mon Sep 17 00:00:00 2001 From: Ilya Chernikov Date: Wed, 25 Sep 2019 21:54:30 +0200 Subject: [PATCH] Fix loading scripting plugin from the current classloader previous code was completely wrong - wrong package and wrong procedure #KT-34011 fixed --- .../jetbrains/kotlin/cli/jvm/K2JVMCompiler.kt | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/K2JVMCompiler.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/K2JVMCompiler.kt index 66312628ee9..e493bfa6f1e 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/K2JVMCompiler.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/K2JVMCompiler.kt @@ -37,6 +37,7 @@ import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler import org.jetbrains.kotlin.cli.jvm.plugins.PluginCliParser import org.jetbrains.kotlin.codegen.CompilationException +import org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar import org.jetbrains.kotlin.config.* import org.jetbrains.kotlin.incremental.components.ExpectActualTracker import org.jetbrains.kotlin.incremental.components.LookupTracker @@ -204,12 +205,7 @@ class K2JVMCompiler : CLICompiler() { if (!arguments.disableDefaultScriptingPlugin) { val explicitOrLoadedScriptingPlugin = pluginClasspaths.any { File(it).name.startsWith(PathUtil.KOTLIN_SCRIPTING_COMPILER_PLUGIN_NAME) } || - try { - PluginCliParser::class.java.classLoader.loadClass("org.jetbrains.kotlin.extensions.ScriptingCompilerConfigurationExtension") - true - } catch (_: Throwable) { - false - } + tryLoadScriptingPluginFromCurrentClassLoader(configuration) // if scripting plugin is not enabled explicitly (probably from another path) and not in the classpath already, // try to find and enable it implicitly if (!explicitOrLoadedScriptingPlugin) { @@ -243,6 +239,20 @@ class K2JVMCompiler : CLICompiler() { return PluginCliParser.loadPluginsSafe(pluginClasspaths, pluginOptions, configuration) } + private fun tryLoadScriptingPluginFromCurrentClassLoader(configuration: CompilerConfiguration): Boolean = try { + val pluginRegistrarClass = PluginCliParser::class.java.classLoader.loadClass( + "org.jetbrains.kotlin.scripting.compiler.plugin.ScriptingCompilerConfigurationComponentRegistrar" + ) + val pluginRegistrar = pluginRegistrarClass.newInstance() as? ComponentRegistrar + if (pluginRegistrar != null) { + configuration.add(ComponentRegistrar.PLUGIN_COMPONENT_REGISTRARS, pluginRegistrar) + true + } else false + } catch (_: Throwable) { + // TODO: add finer error processing and logging + false + } + private fun createCoreEnvironment( rootDisposable: Disposable, configuration: CompilerConfiguration,