Properly set jvmTarget from toolchain for KaptGenerateStubsTask

^KT-51415 Fixed
This commit is contained in:
Yahor Berdnikau
2022-04-26 16:31:01 +02:00
committed by Space
parent 663e843544
commit 0d38f293d5
2 changed files with 52 additions and 9 deletions
@@ -13,7 +13,6 @@ import org.gradle.util.GradleVersion
import org.jetbrains.kotlin.gradle.testbase.*
import org.junit.jupiter.api.DisplayName
import java.io.File
import kotlin.io.path.ExperimentalPathApi
import kotlin.io.path.createDirectories
import kotlin.io.path.deleteExisting
import kotlin.io.path.writeText
@@ -23,7 +22,6 @@ import kotlin.io.path.writeText
class JvmTargetValidationTest : KGPBaseTest() {
@DisplayName("Should produce warning if java and kotlin jvm targets are different")
@GradleTestVersions(minVersion = TestVersions.Gradle.G_6_7)
@GradleTest
internal fun shouldWarnIfJavaAndKotlinJvmTargetsAreDifferent(gradleVersion: GradleVersion) {
project(
@@ -44,7 +42,6 @@ class JvmTargetValidationTest : KGPBaseTest() {
}
@DisplayName("Should fail the build if verification mode is 'error' and kotlin and java targets are different")
@GradleTestVersions(minVersion = TestVersions.Gradle.G_6_7)
@GradleTest
internal fun shouldFailBuildIfJavaAndKotlinJvmTargetsAreDifferent(gradleVersion: GradleVersion) {
project(
@@ -71,7 +68,6 @@ class JvmTargetValidationTest : KGPBaseTest() {
}
@DisplayName("Should ignore if verification mode is 'ignore' and kotlin and java targets are different")
@GradleTestVersions(minVersion = TestVersions.Gradle.G_6_7)
@GradleTest
internal fun shouldNotPrintAnythingIfJavaAndKotlinJvmTargetsAreDifferent(
gradleVersion: GradleVersion
@@ -100,7 +96,6 @@ class JvmTargetValidationTest : KGPBaseTest() {
}
@DisplayName("Should not produce warning when java and kotlin jvm targets are the same")
@GradleTestVersions(minVersion = TestVersions.Gradle.G_6_7)
@GradleTest
internal fun shouldNotWarnOnJavaAndKotlinSameJvmTargets(gradleVersion: GradleVersion) {
project(
@@ -119,7 +114,6 @@ class JvmTargetValidationTest : KGPBaseTest() {
}
@DisplayName("Should produce Java-Kotlin jvm target incompatibility warning only for related tasks")
@GradleTestVersions(minVersion = TestVersions.Gradle.G_6_7)
@GradleTest
internal fun shouldProduceJavaKotlinJvmTargetDifferenceWarningOnlyForRelatedTasks(
gradleVersion: GradleVersion
@@ -161,7 +155,6 @@ class JvmTargetValidationTest : KGPBaseTest() {
}
@DisplayName("Should correctly validate JVM targets in mixed Kotlin/Java projects that are using <JDK1.8")
@GradleTestVersions(minVersion = TestVersions.Gradle.G_6_7)
@GradleTest
internal fun oldJdkMixedJavaKotlinTargetVerification(gradleVersion: GradleVersion) {
project(
@@ -193,7 +186,6 @@ class JvmTargetValidationTest : KGPBaseTest() {
}
@DisplayName("Should skip JVM target validation if no Kotlin sources are available")
@GradleTestVersions(minVersion = TestVersions.Gradle.G_6_7)
@GradleTest
internal fun shouldSkipJvmTargetValidationNoKotlinSources(gradleVersion: GradleVersion) {
project(
@@ -254,7 +246,6 @@ class JvmTargetValidationTest : KGPBaseTest() {
@DisplayName("Should do JVM target validation if java sources are added and configuration cache is reused")
@GradleTest
@ExperimentalPathApi
internal fun shouldDoJvmTargetValidationOnNewJavaSourcesAndConfigurationCacheReuse(gradleVersion: GradleVersion) {
project(
projectName = "simple".fullProjectName,
@@ -302,6 +293,43 @@ class JvmTargetValidationTest : KGPBaseTest() {
}
}
@DisplayName("Validation should work correctly for KaptGenerateStubs task")
@GradleTestVersions
@GradleTest
internal fun kaptGenerateStubsValidateCorrect(gradleVersion: GradleVersion) {
project(
projectName = "kapt2/simple",
gradleVersion = gradleVersion,
buildJdk = getJdk11().javaHome
) {
//language=properties
gradleProperties.append(
"""
# suppress inspection "UnusedProperty"
kotlin.jvm.target.validation.mode = error
""".trimIndent()
)
val toolchainJavaVersion = if (gradleVersion < GradleVersion.version("6.9")) {
15
} else {
16
}
buildGradle.append(
"""
kotlin {
jvmToolchain {
languageVersion.set(JavaLanguageVersion.of($toolchainJavaVersion))
}
}
""".trimIndent()
)
build("assemble", forceOutput = true)
}
}
private fun TestProject.setJavaCompilationCompatibility(
target: JavaVersion
) {
@@ -26,6 +26,7 @@ import org.gradle.work.NormalizeLineEndings
import org.gradle.workers.WorkerExecutor
import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptionsImpl
import org.jetbrains.kotlin.gradle.report.BuildReportMode
import org.jetbrains.kotlin.gradle.tasks.KaptGenerateStubs
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import org.jetbrains.kotlin.gradle.tasks.toSingleCompilerPluginOptions
@@ -123,6 +124,20 @@ abstract class KaptGenerateStubsTask @Inject constructor(
)
)
// Also use KotlinOptions configuration that was directly set to this task
// as 'compileKotlinArgumentsContributor' has KotlinOptions from linked KotlinCompile task
listOfNotNull(kotlinOptions, parentKotlinOptions.orNull)
.map { it as KotlinJvmOptionsImpl }
.forEach {
it.updateArguments(args)
}
// Copied from KotlinCompile
defaultKotlinJavaToolchain.get().updateJvmTarget(this, args)
if (reportingSettings().buildReportMode == BuildReportMode.VERBOSE) {
args.reportPerf = true
}
val pluginOptionsWithKapt = pluginOptions.toSingleCompilerPluginOptions().withWrappedKaptOptions(withApClasspath = kaptClasspath)
args.pluginOptions = (pluginOptionsWithKapt.arguments).toTypedArray()