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 17f0bef16fd..714ad14133f 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/K2JVMCompiler.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/K2JVMCompiler.kt @@ -33,6 +33,7 @@ import org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler import org.jetbrains.kotlin.cli.jvm.config.addJavaSourceRoot import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoots import org.jetbrains.kotlin.cli.jvm.config.jvmClasspathRoots +import org.jetbrains.kotlin.cli.jvm.plugins.PluginCliParser import org.jetbrains.kotlin.cli.jvm.repl.ReplFromTerminal import org.jetbrains.kotlin.codegen.CompilationException import org.jetbrains.kotlin.compiler.plugin.CliOptionProcessingException diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/PluginCliParser.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/plugins/PluginCliParser.kt similarity index 73% rename from compiler/cli/src/org/jetbrains/kotlin/cli/jvm/PluginCliParser.kt rename to compiler/cli/src/org/jetbrains/kotlin/cli/jvm/plugins/PluginCliParser.kt index 60211fc5402..6a470859847 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/PluginCliParser.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/plugins/PluginCliParser.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2015 JetBrains s.r.o. + * Copyright 2010-2017 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,20 +14,18 @@ * limitations under the License. */ -package org.jetbrains.kotlin.cli.jvm +package org.jetbrains.kotlin.cli.jvm.plugins import com.intellij.util.containers.MultiMap import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments +import org.jetbrains.kotlin.cli.jvm.BundledCompilerPlugins import org.jetbrains.kotlin.compiler.plugin.* import org.jetbrains.kotlin.config.CompilerConfiguration import java.io.File import java.net.URL -import java.net.URLClassLoader import java.util.* - object PluginCliParser { - @JvmStatic fun loadPlugins(arguments: CommonCompilerArguments, configuration: CompilerConfiguration) { val classLoader = PluginURLClassLoader( @@ -64,9 +62,7 @@ object PluginCliParser { for (optionValue in optionValuesByPlugin[processor.pluginId].orEmpty()) { val option = declaredOptions[optionValue!!.optionName] - if (option == null) { - throw CliOptionProcessingException("Unsupported plugin option: $optionValue") - } + ?: throw CliOptionProcessingException("Unsupported plugin option: $optionValue") optionsToValues.putValue(option, optionValue) } @@ -92,37 +88,3 @@ object PluginCliParser { } } } - -private class PluginURLClassLoader(urls: Array, parent: ClassLoader) : ClassLoader(Thread.currentThread().contextClassLoader) { - private val childClassLoader: SelfThenParentURLClassLoader = SelfThenParentURLClassLoader(urls, parent) - - @Synchronized - override fun loadClass(name: String, resolve: Boolean): Class<*> { - return try { - childClassLoader.findClass(name) - } - catch (e: ClassNotFoundException) { - super.loadClass(name, resolve) - } - } - - override fun getResources(name: String) = childClassLoader.getResources(name) - - private class SelfThenParentURLClassLoader(urls: Array, val onFail: ClassLoader) : URLClassLoader(urls, null) { - - public override fun findClass(name: String): Class<*> { - val loaded = findLoadedClass(name) - if (loaded != null) { - return loaded - } - - return try { - super.findClass(name) - } - catch (e: ClassNotFoundException) { - onFail.loadClass(name) - } - - } - } -} diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/plugins/PluginURLClassLoader.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/plugins/PluginURLClassLoader.kt new file mode 100644 index 00000000000..cd14bcbba3e --- /dev/null +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/plugins/PluginURLClassLoader.kt @@ -0,0 +1,54 @@ +/* + * Copyright 2010-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.cli.jvm.plugins + +import java.net.URL +import java.net.URLClassLoader +import java.util.* + +internal class PluginURLClassLoader(urls: Array, parent: ClassLoader) : ClassLoader(Thread.currentThread().contextClassLoader) { + private val childClassLoader: SelfThenParentURLClassLoader = SelfThenParentURLClassLoader(urls, parent) + + @Synchronized + override fun loadClass(name: String, resolve: Boolean): Class<*> { + return try { + childClassLoader.findClass(name) + } + catch (e: ClassNotFoundException) { + super.loadClass(name, resolve) + } + } + + override fun getResources(name: String): Enumeration = childClassLoader.getResources(name) + + private class SelfThenParentURLClassLoader(urls: Array, private val onFail: ClassLoader) : URLClassLoader(urls, null) { + + public override fun findClass(name: String): Class<*> { + val loaded = findLoadedClass(name) + if (loaded != null) { + return loaded + } + + return try { + super.findClass(name) + } + catch (e: ClassNotFoundException) { + onFail.loadClass(name) + } + } + } +}