Kapt: Fix NPE on JDK 10-11 (KT-26203)
Gradle worker throws NPE when the parameter to the runnable is null. This patch works that around by passing URL spec as String instead of File?
This commit is contained in:
committed by
Yan Zhulanow
parent
2314ca7a94
commit
4f64a52d33
@@ -125,6 +125,8 @@ tasks.withType<Test> {
|
||||
|
||||
systemProperty("kotlinVersion", rootProject.extra["kotlinVersion"] as String)
|
||||
systemProperty("runnerGradleVersion", gradle.gradleVersion)
|
||||
systemProperty("jdk10Home", rootProject.extra["JDK_10"] as String)
|
||||
systemProperty("jdk11Home", rootProject.extra["JDK_11"] as String)
|
||||
|
||||
val mavenLocalRepo = System.getProperty("maven.repo.local")
|
||||
if (mavenLocalRepo != null) {
|
||||
|
||||
+25
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.gradle
|
||||
import org.jetbrains.kotlin.gradle.tasks.USING_JVM_INCREMENTAL_COMPILATION_MESSAGE
|
||||
import org.jetbrains.kotlin.gradle.util.*
|
||||
import org.junit.Assert
|
||||
import org.junit.Assume
|
||||
import org.junit.Test
|
||||
import java.io.File
|
||||
import java.util.zip.ZipFile
|
||||
@@ -67,6 +68,30 @@ class Kapt3WorkersIT : Kapt3IT() {
|
||||
assertSuccessful()
|
||||
}
|
||||
}
|
||||
|
||||
private fun testSimpleWithCustomJdk(gradleVersion: String, javaHome: File, jdkDescription: String) {
|
||||
val gradleVersionRequired = GradleVersionRequired.AtLeast(gradleVersion)
|
||||
|
||||
Assume.assumeTrue("$jdkDescription isn't available", javaHome.isDirectory)
|
||||
val options = defaultBuildOptions().copy(javaHome = javaHome)
|
||||
|
||||
val project =
|
||||
Project("simple", directoryPrefix = "kapt2", gradleVersionRequirement = gradleVersionRequired)
|
||||
project.build("build", options = options) {
|
||||
assertSuccessful()
|
||||
assertKaptSuccessful()
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testSimpleWithJdk10() {
|
||||
testSimpleWithCustomJdk("4.7", File(System.getProperty("jdk10Home")!!), "JDK 10")
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testSimpleWithJdk11() {
|
||||
testSimpleWithCustomJdk("5.0", File(System.getProperty("jdk11Home")!!), "JDK 11")
|
||||
}
|
||||
}
|
||||
|
||||
open class Kapt3IT : Kapt3BaseIT() {
|
||||
|
||||
+5
-4
@@ -21,6 +21,7 @@ import org.jetbrains.kotlin.gradle.tasks.findToolsJar
|
||||
import org.jetbrains.kotlin.utils.PathUtil
|
||||
import java.io.File
|
||||
import java.io.Serializable
|
||||
import java.net.URL
|
||||
import java.net.URLClassLoader
|
||||
import javax.inject.Inject
|
||||
|
||||
@@ -98,7 +99,7 @@ open class KaptWithoutKotlincTask @Inject constructor(private val workerExecutor
|
||||
"none" -> IsolationMode.NONE
|
||||
else -> IsolationMode.NONE
|
||||
}
|
||||
config.params(optionsForWorker, findToolsJar(), kaptClasspath)
|
||||
config.params(optionsForWorker, findToolsJar()?.toURI()?.toURL()?.toString().orEmpty(), kaptClasspath)
|
||||
if (project.findProperty("kapt.workers.log.classloading") == "true") {
|
||||
// for tests
|
||||
config.forkOptions.jvmArgs("-verbose:class")
|
||||
@@ -110,7 +111,7 @@ open class KaptWithoutKotlincTask @Inject constructor(private val workerExecutor
|
||||
|
||||
private class KaptExecution @Inject constructor(
|
||||
val optionsForWorker: KaptOptionsForWorker,
|
||||
val toolsJar: File?,
|
||||
val toolsJarURLSpec: String,
|
||||
val kaptClasspath: List<File>
|
||||
) : Runnable {
|
||||
private companion object {
|
||||
@@ -125,8 +126,8 @@ private class KaptExecution @Inject constructor(
|
||||
val kaptClasspathUrls = kaptClasspath.map { it.toURI().toURL() }.toTypedArray()
|
||||
val rootClassLoader = findRootClassLoader()
|
||||
|
||||
val classLoaderWithToolsJar = cachedClassLoaderWithToolsJar ?: if (toolsJar != null && !javacIsAlreadyHere()) {
|
||||
URLClassLoader(arrayOf(toolsJar.toURI().toURL()), rootClassLoader)
|
||||
val classLoaderWithToolsJar = cachedClassLoaderWithToolsJar ?: if (!toolsJarURLSpec.isEmpty() && !javacIsAlreadyHere()) {
|
||||
URLClassLoader(arrayOf(URL(toolsJarURLSpec)), rootClassLoader)
|
||||
} else {
|
||||
rootClassLoader
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user