From fb8ca13e71a7c6e04865d85f85e2dc6b684b2311 Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Fri, 17 Oct 2014 19:52:39 +0400 Subject: [PATCH] Providing plugin classpath through JPS extensions Original commit: af9c5cc45df13cd553d34cb6854adaae5678e5f5 --- .../build/KotlinJpsCompilerArgumentsProvider.kt | 1 + .../jetbrains/kotlin/jps/build/KotlinBuilder.kt | 15 ++++++++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/jps/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinJpsCompilerArgumentsProvider.kt b/jps/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinJpsCompilerArgumentsProvider.kt index 065b2644b37..3a3833d83e6 100644 --- a/jps/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinJpsCompilerArgumentsProvider.kt +++ b/jps/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinJpsCompilerArgumentsProvider.kt @@ -22,4 +22,5 @@ import org.jetbrains.jps.incremental.CompileContext public trait KotlinJpsCompilerArgumentsProvider { public fun getExtraArguments(moduleBuildTarget: ModuleBuildTarget, context: CompileContext): List + public fun getClasspath(moduleBuildTarget: ModuleBuildTarget, context: CompileContext): List } \ No newline at end of file diff --git a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt index 72b007a0d10..cb10338f474 100644 --- a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt +++ b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt @@ -142,11 +142,20 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR val representativeTarget = chunk.representativeTarget() + fun concatenate(strings: Array?, cp: List) = array(*(strings ?: array()), *cp.copyToArray()) + for (argumentProvider in ServiceLoader.load(javaClass())) { // appending to pluginOptions - commonArguments.pluginOptions = array( - *(commonArguments.pluginOptions ?: array()), - *argumentProvider.getExtraArguments(representativeTarget, context).copyToArray() + commonArguments.pluginOptions = concatenate(commonArguments.pluginOptions, + argumentProvider.getExtraArguments(representativeTarget, context)) + // appending to classpath + commonArguments.pluginClasspaths = concatenate(commonArguments.pluginClasspaths, + argumentProvider.getClasspath(representativeTarget, context)) + + messageCollector.report( + INFO, + "Plugin loaded: ${argumentProvider.javaClass.getSimpleName()}", + NO_LOCATION ) }