[Gradle] Migrate warning about inconsistent JVM target
This commit is contained in:
+22
-59
@@ -10,6 +10,7 @@ import org.gradle.api.logging.LogLevel
|
||||
import org.gradle.internal.jvm.JavaInfo
|
||||
import org.gradle.internal.jvm.Jvm
|
||||
import org.gradle.util.GradleVersion
|
||||
import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinToolingDiagnostics
|
||||
import org.jetbrains.kotlin.gradle.testbase.*
|
||||
import org.junit.jupiter.api.DisplayName
|
||||
import java.io.File
|
||||
@@ -40,13 +41,7 @@ class JvmTargetValidationTest : KGPBaseTest() {
|
||||
)
|
||||
|
||||
buildAndFail("assemble") {
|
||||
assertOutputContains(
|
||||
"'compileJava' task (current target is 1.8) and 'compileKotlin' task (current target is 11) jvm target compatibility " +
|
||||
"should be set to the same Java version.\n" +
|
||||
"By default will become an error since Gradle 8.0+! " +
|
||||
"Read more: https://kotl.in/gradle/jvm/target-validation\n" +
|
||||
"Consider using JVM toolchain: https://kotl.in/gradle/jvm/toolchain"
|
||||
)
|
||||
assertHasDiagnostic(KotlinToolingDiagnostics.InconsistentTargetCompatibilityForKotlinAndJavaTasks)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -79,13 +74,7 @@ class JvmTargetValidationTest : KGPBaseTest() {
|
||||
)
|
||||
|
||||
build("assemble") {
|
||||
assertOutputDoesNotContain(
|
||||
"'compileJava' task (current target is 1.8) and 'compileKotlin' task (current target is 11) jvm target compatibility " +
|
||||
"should be set to the same Java version.\n" +
|
||||
"By default will become an error since Gradle 8.0+! " +
|
||||
"Read more: https://kotl.in/gradle/jvm/target-validation\n" +
|
||||
"Consider using JVM toolchain: https://kotl.in/gradle/jvm/toolchain"
|
||||
)
|
||||
assertNoDiagnostic(KotlinToolingDiagnostics.InconsistentTargetCompatibilityForKotlinAndJavaTasks)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -108,10 +97,7 @@ class JvmTargetValidationTest : KGPBaseTest() {
|
||||
)
|
||||
|
||||
build("assemble") {
|
||||
assertOutputContains(
|
||||
"'compileJava' task (current target is 1.8) and 'compileKotlin' task (current target is 11) jvm target compatibility " +
|
||||
"should be set to the same Java version.\n"
|
||||
)
|
||||
assertHasDiagnostic(KotlinToolingDiagnostics.InconsistentTargetCompatibilityForKotlinAndJavaTasks)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -136,10 +122,7 @@ class JvmTargetValidationTest : KGPBaseTest() {
|
||||
)
|
||||
|
||||
build("assemble") {
|
||||
assertOutputDoesNotContain(
|
||||
"'compileJava' task (current target is 1.8) and 'compileKotlin' task (current target is 11) jvm target compatibility " +
|
||||
"should be set to the same Java version."
|
||||
)
|
||||
assertNoDiagnostic(KotlinToolingDiagnostics.InconsistentTargetCompatibilityForKotlinAndJavaTasks)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -160,10 +143,7 @@ class JvmTargetValidationTest : KGPBaseTest() {
|
||||
)
|
||||
|
||||
build("build") {
|
||||
assertOutputDoesNotContain(
|
||||
"'compileJava' task (current target is 1.8) and 'compileKotlin' task (current target is 11) jvm target compatibility " +
|
||||
"should be set to the same Java version."
|
||||
)
|
||||
assertNoDiagnostic(KotlinToolingDiagnostics.InconsistentTargetCompatibilityForKotlinAndJavaTasks)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -204,13 +184,13 @@ class JvmTargetValidationTest : KGPBaseTest() {
|
||||
)
|
||||
|
||||
build("build") {
|
||||
assertOutputContains(
|
||||
"'compileTestJava' task (current target is 1.8) and 'compileTestKotlin' task (current target is 11) jvm target " +
|
||||
"compatibility should be set to the same Java version."
|
||||
assertHasDiagnostic(
|
||||
KotlinToolingDiagnostics.InconsistentTargetCompatibilityForKotlinAndJavaTasks,
|
||||
withSubstring = "compileTestKotlin"
|
||||
)
|
||||
assertOutputDoesNotContain(
|
||||
"'compileJava' task (current target is 1.8) and 'compileKotlin' task (current target is 11) jvm target compatibility " +
|
||||
"should be set to the same Java version."
|
||||
assertNoDiagnostic(
|
||||
KotlinToolingDiagnostics.InconsistentTargetCompatibilityForKotlinAndJavaTasks,
|
||||
withSubstring = "compileKotlin"
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -266,10 +246,7 @@ class JvmTargetValidationTest : KGPBaseTest() {
|
||||
javaSourcesDir().resolve("demo/HelloWorld.java").deleteExisting()
|
||||
|
||||
build("assemble") {
|
||||
assertOutputDoesNotContain(
|
||||
"'compileJava' task (current target is 1.8) and 'compileKotlin' task (current target is 11) jvm target compatibility " +
|
||||
"should be set to the same Java version."
|
||||
)
|
||||
assertNoDiagnostic(KotlinToolingDiagnostics.InconsistentTargetCompatibilityForKotlinAndJavaTasks)
|
||||
}
|
||||
|
||||
javaSourcesDir().resolve("demo/Greeter.java").modify {
|
||||
@@ -277,10 +254,7 @@ class JvmTargetValidationTest : KGPBaseTest() {
|
||||
}
|
||||
|
||||
build("assemble") {
|
||||
assertOutputDoesNotContain(
|
||||
"'compileJava' task (current target is 1.8) and 'compileKotlin' task (current target is 11) jvm target compatibility " +
|
||||
"should be set to the same Java version."
|
||||
)
|
||||
assertNoDiagnostic(KotlinToolingDiagnostics.InconsistentTargetCompatibilityForKotlinAndJavaTasks)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -302,10 +276,7 @@ class JvmTargetValidationTest : KGPBaseTest() {
|
||||
)
|
||||
|
||||
build("assemble") {
|
||||
assertOutputContains(
|
||||
"'compileJava' task (current target is 11) and 'compileKotlin' task (current target is 1.8) jvm target compatibility " +
|
||||
"should be set to the same Java version.\n"
|
||||
)
|
||||
assertHasDiagnostic(KotlinToolingDiagnostics.InconsistentTargetCompatibilityForKotlinAndJavaTasks)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -330,9 +301,7 @@ class JvmTargetValidationTest : KGPBaseTest() {
|
||||
)
|
||||
|
||||
build("assemble") {
|
||||
assertOutputContains(
|
||||
"'compileJava' task (current target is 11) and 'compileKotlin' task (current target is 1.8) jvm target compatibility should be set to the same Java version."
|
||||
)
|
||||
assertHasDiagnostic(KotlinToolingDiagnostics.InconsistentTargetCompatibilityForKotlinAndJavaTasks)
|
||||
}
|
||||
|
||||
javaSourcesDir().resolve("demo").run {
|
||||
@@ -352,9 +321,7 @@ class JvmTargetValidationTest : KGPBaseTest() {
|
||||
}
|
||||
|
||||
build("assemble") {
|
||||
assertOutputContains(
|
||||
"'compileJava' task (current target is 11) and 'compileKotlin' task (current target is 1.8) jvm target compatibility should be set to the same Java version."
|
||||
)
|
||||
assertHasDiagnostic(KotlinToolingDiagnostics.InconsistentTargetCompatibilityForKotlinAndJavaTasks)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -400,6 +367,7 @@ class JvmTargetValidationTest : KGPBaseTest() {
|
||||
internal fun errorByDefaultWithGradle8(gradleVersion: GradleVersion) {
|
||||
project("simple".fullProjectName, gradleVersion) {
|
||||
//language=Groovy
|
||||
@Suppress("UnnecessaryQualifiedReference")
|
||||
buildGradle.appendText(
|
||||
"""
|
||||
|
|
||||
@@ -411,15 +379,11 @@ class JvmTargetValidationTest : KGPBaseTest() {
|
||||
|
||||
if (gradleVersion.baseVersion >= GradleVersion.version("8.0")) {
|
||||
buildAndFail("assemble") {
|
||||
assertOutputContains(
|
||||
"'compileJava' task (current target is 1.8) and 'compileKotlin' task (current target is 11) jvm target compatibility should be set to the same Java version."
|
||||
)
|
||||
assertHasDiagnostic(KotlinToolingDiagnostics.InconsistentTargetCompatibilityForKotlinAndJavaTasks)
|
||||
}
|
||||
} else {
|
||||
build("assemble") {
|
||||
assertOutputContains(
|
||||
"'compileJava' task (current target is 1.8) and 'compileKotlin' task (current target is 11) jvm target compatibility should be set to the same Java version."
|
||||
)
|
||||
assertHasDiagnostic(KotlinToolingDiagnostics.InconsistentTargetCompatibilityForKotlinAndJavaTasks)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -447,8 +411,7 @@ class JvmTargetValidationTest : KGPBaseTest() {
|
||||
)
|
||||
|
||||
buildAndFail(":lib:compileKotlinJvmWithJava") {
|
||||
assertOutputContains("'compileJava' task (current target is 17) and 'compileKotlinJvmWithJava' task" +
|
||||
" (current target is 1.8) jvm target compatibility should be set to the same Java version.")
|
||||
assertHasDiagnostic(KotlinToolingDiagnostics.InconsistentTargetCompatibilityForKotlinAndJavaTasks)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -522,4 +485,4 @@ class JvmTargetValidationTest : KGPBaseTest() {
|
||||
private fun getJdk11(): JavaInfo = Jvm.forHome(File(System.getProperty("jdk11Home")))
|
||||
|
||||
private val String.fullProjectName get() = "kotlin-java-toolchain/$this"
|
||||
}
|
||||
}
|
||||
|
||||
+17
@@ -280,4 +280,21 @@ object KotlinToolingDiagnostics {
|
||||
""".trimIndent()
|
||||
)
|
||||
}
|
||||
|
||||
object InconsistentTargetCompatibilityForKotlinAndJavaTasks : ToolingDiagnosticFactory(predefinedSeverity = null) {
|
||||
operator fun invoke(
|
||||
javaTaskName: String,
|
||||
targetCompatibility: String,
|
||||
kotlinTaskName: String,
|
||||
jvmTarget: String,
|
||||
severity: ToolingDiagnostic.Severity
|
||||
) = build(
|
||||
"""
|
||||
Inconsistent JVM-target compatibility detected for tasks '$javaTaskName' ($targetCompatibility) and '$kotlinTaskName' ($jvmTarget).
|
||||
${if (severity == WARNING) "This will become an error in Gradle 8.0." else ""}
|
||||
Read more: https://kotl.in/gradle/jvm/target-validation
|
||||
""".trimIndent(),
|
||||
severity
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+3
-1
@@ -40,6 +40,7 @@ import org.jetbrains.kotlin.gradle.logging.kotlinDebug
|
||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_SUPPRESS_EXPERIMENTAL_IC_OPTIMIZATIONS_WARNING
|
||||
import org.jetbrains.kotlin.gradle.plugin.UsesBuildFinishedListenerService
|
||||
import org.jetbrains.kotlin.gradle.plugin.UsesVariantImplementationFactories
|
||||
import org.jetbrains.kotlin.gradle.plugin.diagnostics.UsesKotlinToolingDiagnostics
|
||||
import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatsService
|
||||
import org.jetbrains.kotlin.gradle.report.*
|
||||
import org.jetbrains.kotlin.gradle.utils.*
|
||||
@@ -62,6 +63,7 @@ abstract class AbstractKotlinCompile<T : CommonCompilerArguments> @Inject constr
|
||||
UsesVariantImplementationFactories,
|
||||
UsesBuildFinishedListenerService,
|
||||
UsesClassLoadersCachingBuildService,
|
||||
UsesKotlinToolingDiagnostics,
|
||||
BaseKotlinCompile {
|
||||
|
||||
init {
|
||||
@@ -359,4 +361,4 @@ abstract class AbstractKotlinCompile<T : CommonCompilerArguments> @Inject constr
|
||||
inputChanges: InputChanges,
|
||||
taskOutputsBackup: TaskOutputsBackup?
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+18
-23
@@ -5,7 +5,6 @@
|
||||
|
||||
package org.jetbrains.kotlin.gradle.tasks
|
||||
|
||||
import org.gradle.api.GradleException
|
||||
import org.gradle.api.file.ConfigurableFileCollection
|
||||
import org.gradle.api.file.DirectoryProperty
|
||||
import org.gradle.api.file.FileCollection
|
||||
@@ -19,7 +18,6 @@ import org.gradle.api.tasks.*
|
||||
import org.gradle.api.tasks.compile.AbstractCompile
|
||||
import org.gradle.api.tasks.compile.JavaCompile
|
||||
import org.gradle.api.tasks.util.PatternFilterable
|
||||
import org.gradle.util.GradleVersion
|
||||
import org.gradle.work.Incremental
|
||||
import org.gradle.work.InputChanges
|
||||
import org.gradle.work.NormalizeLineEndings
|
||||
@@ -39,6 +37,8 @@ import org.jetbrains.kotlin.gradle.logging.GradlePrintingMessageCollector
|
||||
import org.jetbrains.kotlin.gradle.logging.kotlinDebug
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilerArgumentsProducer
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilerArgumentsProducer.CreateCompilerArgumentsContext.Companion.create
|
||||
import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinToolingDiagnostics
|
||||
import org.jetbrains.kotlin.gradle.plugin.diagnostics.ToolingDiagnostic
|
||||
import org.jetbrains.kotlin.gradle.plugin.getKotlinPluginVersion
|
||||
import org.jetbrains.kotlin.gradle.report.BuildReportMode
|
||||
import org.jetbrains.kotlin.gradle.tasks.internal.KotlinJvmOptionsCompat
|
||||
@@ -311,7 +311,8 @@ abstract class KotlinCompile @Inject constructor(
|
||||
validateKotlinAndJavaHasSameTargetCompatibility(args)
|
||||
|
||||
val gradlePrintingMessageCollector = GradlePrintingMessageCollector(logger, args.allWarningsAsErrors)
|
||||
val gradleMessageCollector = GradleErrorMessageCollector(
|
||||
val gradleMessageCollector =
|
||||
GradleErrorMessageCollector(
|
||||
gradlePrintingMessageCollector, kotlinPluginVersion = getKotlinPluginVersion(logger)
|
||||
)
|
||||
val outputItemCollector = OutputItemsCollectorImpl()
|
||||
@@ -356,8 +357,11 @@ abstract class KotlinCompile @Inject constructor(
|
||||
private fun validateKotlinAndJavaHasSameTargetCompatibility(
|
||||
args: K2JVMCompilerArguments,
|
||||
) {
|
||||
val jvmTargetValidationMode: JvmTargetValidationMode = jvmTargetValidationMode.get()
|
||||
if (jvmTargetValidationMode == JvmTargetValidationMode.IGNORE) return
|
||||
val severity = when (jvmTargetValidationMode.get()) {
|
||||
JvmTargetValidationMode.ERROR -> ToolingDiagnostic.Severity.FATAL
|
||||
JvmTargetValidationMode.WARNING -> ToolingDiagnostic.Severity.WARNING
|
||||
else -> return
|
||||
}
|
||||
|
||||
associatedJavaCompileTaskTargetCompatibility.orNull?.let { targetCompatibility ->
|
||||
val normalizedJavaTarget = when (targetCompatibility) {
|
||||
@@ -370,24 +374,15 @@ abstract class KotlinCompile @Inject constructor(
|
||||
|
||||
val jvmTarget = args.jvmTarget ?: JvmTarget.DEFAULT.toString()
|
||||
if (normalizedJavaTarget != jvmTarget) {
|
||||
val javaTaskName = associatedJavaCompileTaskName.get()
|
||||
|
||||
val errorMessage = buildString {
|
||||
append("'$javaTaskName' task (current target is $targetCompatibility) and ")
|
||||
append("'$name' task (current target is $jvmTarget) ")
|
||||
appendLine("jvm target compatibility should be set to the same Java version.")
|
||||
if (GradleVersion.current().baseVersion < GradleVersion.version("8.0")) {
|
||||
append("By default will become an error since Gradle 8.0+! ")
|
||||
appendLine("Read more: https://kotl.in/gradle/jvm/target-validation")
|
||||
}
|
||||
appendLine("Consider using JVM toolchain: https://kotl.in/gradle/jvm/toolchain")
|
||||
}
|
||||
|
||||
when (jvmTargetValidationMode) {
|
||||
JvmTargetValidationMode.ERROR -> throw GradleException(errorMessage)
|
||||
JvmTargetValidationMode.WARNING -> logger.warn(errorMessage)
|
||||
else -> Unit
|
||||
}
|
||||
reportDiagnostic(
|
||||
KotlinToolingDiagnostics.InconsistentTargetCompatibilityForKotlinAndJavaTasks(
|
||||
javaTaskName = associatedJavaCompileTaskName.get(),
|
||||
targetCompatibility = targetCompatibility,
|
||||
kotlinTaskName = name,
|
||||
jvmTarget = args.jvmTarget ?: "not provided explicitly, picked up default ${JvmTarget.DEFAULT}",
|
||||
severity = severity
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user