From d6e5551237ba12efa7a5c62924db4787fb44560a Mon Sep 17 00:00:00 2001 From: Leonid Startsev Date: Thu, 9 Nov 2017 18:15:52 +0300 Subject: [PATCH] More entry points for compiler plugins * In Kotlin/JS JPS compilation * In kotlin-common CLI compiler * In kotlin-common gradle build --- .../kotlin/cli/metadata/K2MetadataCompiler.kt | 4 +++ .../kotlin/jps/build/KotlinBuilder.kt | 26 +++++++++---------- .../kotlin/gradle/plugin/KotlinPlugin.kt | 9 +++++++ 3 files changed, 26 insertions(+), 13 deletions(-) diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/metadata/K2MetadataCompiler.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/metadata/K2MetadataCompiler.kt index 54db1c42c20..c4416d7c6b1 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/metadata/K2MetadataCompiler.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/metadata/K2MetadataCompiler.kt @@ -27,6 +27,7 @@ import org.jetbrains.kotlin.cli.common.messages.OutputMessageUtil import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoots +import org.jetbrains.kotlin.cli.jvm.plugins.PluginCliParser import org.jetbrains.kotlin.codegen.CompilationException import org.jetbrains.kotlin.config.CommonConfigurationKeys import org.jetbrains.kotlin.config.CompilerConfiguration @@ -53,6 +54,9 @@ class K2MetadataCompiler : CLICompiler() { ): ExitCode { val collector = configuration.getNotNull(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY) + val pluginLoadResult = PluginCliParser.loadPluginsSafe(arguments, configuration) + if (pluginLoadResult != ExitCode.OK) return pluginLoadResult + for (arg in arguments.freeArgs) { configuration.addKotlinSourceRoot(arg) } diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt index ce03d27e1f9..01671dd9e51 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt @@ -431,19 +431,6 @@ class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) { project: JpsProject ): OutputItemsCollector? { - if (JpsUtils.isJsKotlinModule(chunk.representativeTarget())) { - LOG.debug("Compiling to JS ${filesToCompile.values().size} files in ${filesToCompile.keySet().joinToString { it.presentableName }}") - return compileToJs(chunk, commonArguments, environment, project) - } - - if (IncrementalCompilation.isEnabled()) { - for (target in chunk.targets) { - val cache = incrementalCaches[target]!! - val removedAndDirtyFiles = filesToCompile[target] + dirtyFilesHolder.getRemovedFiles(target).map(::File) - cache.markDirty(removedAndDirtyFiles) - } - } - val representativeTarget = chunk.representativeTarget() fun concatenate(strings: Array?, cp: List) = arrayOf(*strings.orEmpty(), *cp.toTypedArray()) @@ -459,6 +446,19 @@ class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) { LOG.debug("Plugin loaded: ${argumentProvider::class.java.simpleName}") } + if (JpsUtils.isJsKotlinModule(chunk.representativeTarget())) { + LOG.debug("Compiling to JS ${filesToCompile.values().size} files in ${filesToCompile.keySet().joinToString { it.presentableName }}") + return compileToJs(chunk, commonArguments, environment, project) + } + + if (IncrementalCompilation.isEnabled()) { + for (target in chunk.targets) { + val cache = incrementalCaches[target]!! + val removedAndDirtyFiles = filesToCompile[target] + dirtyFilesHolder.getRemovedFiles(target).map(::File) + cache.markDirty(removedAndDirtyFiles) + } + } + return compileToJvm(allCompiledFiles, chunk, commonArguments, context, dirtyFilesHolder, environment, filesToCompile) } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt index 932066f705b..3fb65680083 100755 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt @@ -347,11 +347,20 @@ internal class KotlinCommonSourceSetProcessor( project.afterEvaluate { project -> kotlinTask.source(kotlinSourceSet.kotlin) + + val subpluginEnvironment: SubpluginEnvironment = loadSubplugins(project) + val appliedPlugins = subpluginEnvironment.addSubpluginOptions( + project, kotlinTask, kotlinTask, null, null, sourceSet) + project.tasks.findByName(sourceSet.classesTaskName).dependsOn(kotlinTask) // can be missing (e.g. in case of tests) project.tasks.findByName(sourceSet.jarTaskName)?.dependsOn(kotlinTask) val javaTask = project.tasks.findByName(sourceSet.compileJavaTaskName) project.tasks.remove(javaTask) + + appliedPlugins + .flatMap { it.getSubpluginKotlinTasks(project, kotlinTask) } + .forEach { it.source(kotlinSourceSet.kotlin) } } }