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