Wrap null values into serializable optional
Otherwise worker executor fails with NPE
This commit is contained in:
+8
-2
@@ -6,9 +6,11 @@
|
||||
package org.jetbrains.kotlin.compilerRunner
|
||||
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.workers.ForkMode
|
||||
import org.gradle.workers.IsolationMode
|
||||
import org.gradle.workers.WorkerExecutor
|
||||
import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments
|
||||
import org.jetbrains.kotlin.gradle.utils.SerializableOptional
|
||||
|
||||
internal class GradleCompilerRunnerWithWorkers(
|
||||
project: Project,
|
||||
@@ -19,16 +21,20 @@ internal class GradleCompilerRunnerWithWorkers(
|
||||
compilerArgs: CommonCompilerArguments,
|
||||
environment: GradleCompilerEnvironment
|
||||
) {
|
||||
val icEnv = environment.incrementalCompilationEnvironment
|
||||
val modulesInfo = icEnv?.let { buildModulesInfo(project.gradle) }
|
||||
|
||||
workersExecutor.submit(KotlinCompilerRunnable::class.java) { config ->
|
||||
config.isolationMode = IsolationMode.NONE
|
||||
config.forkMode = ForkMode.NEVER
|
||||
config.params(
|
||||
ProjectFilesForCompilation(project),
|
||||
environment.compilerFullClasspath,
|
||||
compilerClassName,
|
||||
ArgumentUtils.convertArgumentsToStringList(compilerArgs).toTypedArray(),
|
||||
compilerArgs.verbose,
|
||||
environment.incrementalCompilationEnvironment,
|
||||
buildModulesInfo(project.gradle)
|
||||
SerializableOptional(icEnv),
|
||||
SerializableOptional(modulesInfo)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+3
-2
@@ -30,6 +30,7 @@ import org.jetbrains.kotlin.daemon.client.CompileServiceSession
|
||||
import org.jetbrains.kotlin.daemon.common.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.kotlinDebug
|
||||
import org.jetbrains.kotlin.gradle.tasks.*
|
||||
import org.jetbrains.kotlin.gradle.utils.SerializableOptional
|
||||
import org.jetbrains.kotlin.gradle.utils.newTmpFile
|
||||
import org.jetbrains.kotlin.gradle.utils.relativeToRoot
|
||||
import org.jetbrains.kotlin.incremental.*
|
||||
@@ -130,8 +131,8 @@ internal open class GradleCompilerRunner(protected val project: Project) {
|
||||
compilerClassName = compilerClassName,
|
||||
compilerArgs = ArgumentUtils.convertArgumentsToStringList(compilerArgs).toTypedArray(),
|
||||
isVerbose = compilerArgs.verbose,
|
||||
incrementalCompilationEnvironment = environment.incrementalCompilationEnvironment,
|
||||
incrementalModuleInfo = buildModulesInfo(project.gradle)
|
||||
incrementalCompilationEnvironment = SerializableOptional(environment.incrementalCompilationEnvironment),
|
||||
incrementalModuleInfo = SerializableOptional(buildModulesInfo(project.gradle))
|
||||
)
|
||||
kotlinCompilerRunnable.run()
|
||||
}
|
||||
|
||||
+6
-5
@@ -16,6 +16,7 @@ import org.jetbrains.kotlin.daemon.common.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.kotlinDebug
|
||||
import org.jetbrains.kotlin.gradle.tasks.GradleMessageCollector
|
||||
import org.jetbrains.kotlin.gradle.tasks.throwGradleExceptionIfError
|
||||
import org.jetbrains.kotlin.gradle.utils.SerializableOptional
|
||||
import org.jetbrains.kotlin.incremental.ChangedFiles
|
||||
import org.slf4j.LoggerFactory
|
||||
import java.io.ByteArrayOutputStream
|
||||
@@ -48,15 +49,15 @@ internal class KotlinCompilerRunnable @Inject constructor(
|
||||
private val compilerClassName: String,
|
||||
private val compilerArgs: Array<String>,
|
||||
private val isVerbose: Boolean,
|
||||
private val incrementalCompilationEnvironment: IncrementalCompilationEnvironment?,
|
||||
private val incrementalModuleInfo: IncrementalModuleInfo?
|
||||
private val incrementalCompilationEnvironment: SerializableOptional<IncrementalCompilationEnvironment>,
|
||||
private val incrementalModuleInfo: SerializableOptional<IncrementalModuleInfo>
|
||||
) : Runnable {
|
||||
private val log: KotlinLogger =
|
||||
SL4JKotlinLogger(LoggerFactory.getLogger("KotlinCompilerRunnable"))
|
||||
private val messageCollector = GradleMessageCollector(log)
|
||||
|
||||
private val isIncremental: Boolean
|
||||
get() = incrementalCompilationEnvironment != null
|
||||
get() = incrementalCompilationEnvironment.value != null
|
||||
|
||||
override fun run() {
|
||||
val exitCode = compileWithDaemonOrFallbackImpl()
|
||||
@@ -165,7 +166,7 @@ internal class KotlinCompilerRunnable @Inject constructor(
|
||||
sessionId: Int,
|
||||
targetPlatform: CompileService.TargetPlatform
|
||||
): CompileService.CallResult<Int> {
|
||||
val icEnv = incrementalCompilationEnvironment ?: error("incrementalCompilationEnvironment is null!")
|
||||
val icEnv = incrementalCompilationEnvironment.value ?: error("incrementalCompilationEnvironment is null!")
|
||||
val knownChangedFiles = icEnv.changedFiles as? ChangedFiles.Known
|
||||
|
||||
val compilationOptions = IncrementalCompilationOptions(
|
||||
@@ -181,7 +182,7 @@ internal class KotlinCompilerRunnable @Inject constructor(
|
||||
usePreciseJavaTracking = icEnv.usePreciseJavaTracking,
|
||||
localStateDirs = icEnv.localStateDirs,
|
||||
multiModuleICSettings = icEnv.multiModuleICSettings,
|
||||
modulesInfo = incrementalModuleInfo!!
|
||||
modulesInfo = incrementalModuleInfo.value!!
|
||||
)
|
||||
|
||||
log.info("Options for KOTLIN DAEMON: $compilationOptions")
|
||||
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.gradle.utils
|
||||
|
||||
import java.io.Serializable
|
||||
|
||||
internal class SerializableOptional<T>(val value: T?) : Serializable {
|
||||
companion object {
|
||||
const val serialVersionUID: Long = 0
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user