From 047041dc6e446f8809ce34a732c9df77c4821c45 Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Thu, 8 Jul 2021 15:39:42 +0300 Subject: [PATCH] [Gradle, JS] Await worker which builds cache --- .../GradleCompilerRunnerWithWorkers.kt | 5 ++++- .../GradleKotlinCompilerRunner.kt | 20 ++++++++++--------- .../gradle/targets/js/ir/KotlinJsIrLink.kt | 2 +- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/GradleCompilerRunnerWithWorkers.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/GradleCompilerRunnerWithWorkers.kt index 25c1a7a3467..81fcb901818 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/GradleCompilerRunnerWithWorkers.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/GradleCompilerRunnerWithWorkers.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.compilerRunner import org.gradle.api.provider.Property import org.gradle.workers.WorkAction import org.gradle.workers.WorkParameters +import org.gradle.workers.WorkQueue import org.gradle.workers.WorkerExecutor import org.jetbrains.kotlin.gradle.logging.kotlinDebug import org.jetbrains.kotlin.gradle.tasks.GradleCompileTaskProvider @@ -21,13 +22,15 @@ internal class GradleCompilerRunnerWithWorkers( jdkToolsJar: File?, private val workerExecutor: WorkerExecutor ) : GradleCompilerRunner(taskProvider, jdkToolsJar) { - override fun runCompilerAsync(workArgs: GradleKotlinCompilerWorkArguments) { + + override fun runCompilerAsync(workArgs: GradleKotlinCompilerWorkArguments): WorkQueue { loggerProvider.kotlinDebug { "Starting Kotlin compiler work from task '${pathProvider}'" } val workQueue = workerExecutor.noIsolation() workQueue.submit(GradleKotlinCompilerWorkAction::class.java) { it.compilerWorkArguments.set(workArgs) } + return workQueue } internal abstract class GradleKotlinCompilerWorkAction diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/GradleKotlinCompilerRunner.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/GradleKotlinCompilerRunner.kt index d4c3da96d39..5c296c516bc 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/GradleKotlinCompilerRunner.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/GradleKotlinCompilerRunner.kt @@ -11,6 +11,7 @@ import org.gradle.api.logging.Logger import org.gradle.api.plugins.JavaPluginConvention import org.gradle.api.tasks.bundling.AbstractArchiveTask import org.gradle.jvm.tasks.Jar +import org.gradle.workers.WorkQueue import org.jetbrains.kotlin.cli.common.arguments.* import org.jetbrains.kotlin.cli.common.messages.MessageCollector import org.jetbrains.kotlin.daemon.client.CompileServiceSession @@ -82,14 +83,14 @@ internal open class GradleCompilerRunner( args: K2JVMCompilerArguments, environment: GradleCompilerEnvironment, jdkHome: File - ) { + ): WorkQueue? { args.freeArgs += sourcesToCompile.map { it.absolutePath } args.commonSources = commonSources.map { it.absolutePath }.toTypedArray() args.javaSourceRoots = javaSourceRoots.map { it.absolutePath }.toTypedArray() args.javaPackagePrefix = javaPackagePrefix if (args.jdkHome == null) args.jdkHome = jdkHome.absolutePath loggerProvider.kotlinInfo("Kotlin compilation 'jdkHome' argument: ${args.jdkHome}") - runCompilerAsync(KotlinCompilerClass.JVM, args, environment) + return runCompilerAsync(KotlinCompilerClass.JVM, args, environment) } /** @@ -101,10 +102,10 @@ internal open class GradleCompilerRunner( kotlinCommonSources: List, args: K2JSCompilerArguments, environment: GradleCompilerEnvironment - ) { + ): WorkQueue? { args.freeArgs += kotlinSources.map { it.absolutePath } args.commonSources = kotlinCommonSources.map { it.absolutePath }.toTypedArray() - runCompilerAsync(KotlinCompilerClass.JS, args, environment) + return runCompilerAsync(KotlinCompilerClass.JS, args, environment) } /** @@ -115,16 +116,16 @@ internal open class GradleCompilerRunner( kotlinSources: List, args: K2MetadataCompilerArguments, environment: GradleCompilerEnvironment - ) { + ): WorkQueue? { args.freeArgs += kotlinSources.map { it.absolutePath } - runCompilerAsync(KotlinCompilerClass.METADATA, args, environment) + return runCompilerAsync(KotlinCompilerClass.METADATA, args, environment) } private fun runCompilerAsync( compilerClassName: String, compilerArgs: CommonCompilerArguments, environment: GradleCompilerEnvironment - ) { + ): WorkQueue? { if (compilerArgs.version) { loggerProvider.lifecycle( "Kotlin version " + loadCompilerVersion(environment.compilerClasspath) + @@ -187,12 +188,13 @@ internal open class GradleCompilerRunner( allWarningsAsErrors = compilerArgs.allWarningsAsErrors ) TaskLoggers.put(pathProvider, loggerProvider) - runCompilerAsync(workArgs) + return runCompilerAsync(workArgs) } - protected open fun runCompilerAsync(workArgs: GradleKotlinCompilerWorkArguments) { + protected open fun runCompilerAsync(workArgs: GradleKotlinCompilerWorkArguments): WorkQueue? { val kotlinCompilerRunnable = GradleKotlinCompilerWork(workArgs) kotlinCompilerRunnable.run() + return null } companion object { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrLink.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrLink.kt index 47f1e1e57dd..4130766eb74 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrLink.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrLink.kt @@ -318,7 +318,7 @@ internal class CacheBuilder( emptyList(), compilerArgs, environment - ) + )?.await() } companion object {