From 0a86f03457eb6df445b5b024b115ea43930e7294 Mon Sep 17 00:00:00 2001 From: Anton Lakotka Date: Tue, 13 Feb 2024 09:49:45 +0100 Subject: [PATCH] [Gradle] Don't pass -Xfragment-sources for non-mpp compilations It is unnecessary and confusing. ^KT-65768 Verification Pending --- .../kotlin/gradle/tasks/Kotlin2JsCompile.kt | 12 +++++++----- .../kotlin/gradle/tasks/KotlinCompile.kt | 10 ++++++---- .../unitTests/K2MultiplatformStructureTest.kt | 19 +++++++++++++++---- 3 files changed, 28 insertions(+), 13 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/Kotlin2JsCompile.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/Kotlin2JsCompile.kt index 949fc2c49e3..b41dcad75ce 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/Kotlin2JsCompile.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/Kotlin2JsCompile.kt @@ -138,7 +138,7 @@ abstract class Kotlin2JsCompile @Inject constructor( args.outputDir = destinationDirectory.get().asFile.normalize().absolutePath args.moduleName = compilerOptions.moduleName.get() - if (compilerOptions.usesK2.get()) { + if (compilerOptions.usesK2.get() && multiPlatformEnabled.get()) { args.fragments = multiplatformStructure.fragmentsCompilerArgs args.fragmentRefines = multiplatformStructure.fragmentRefinesCompilerArgs } @@ -176,10 +176,12 @@ abstract class Kotlin2JsCompile @Inject constructor( args.sourceMapBaseDirs = sourceMapBaseDir.get().asFile.absolutePath } - if (compilerOptions.usesK2.get()) { - args.fragmentSources = multiplatformStructure.fragmentSourcesCompilerArgs(sourceFileFilter) - } else { - args.commonSources = commonSourceSet.asFileTree.toPathsArray() + if (multiPlatformEnabled.get()) { + if (compilerOptions.usesK2.get()) { + args.fragmentSources = multiplatformStructure.fragmentSourcesCompilerArgs(sourceFileFilter) + } else { + args.commonSources = commonSourceSet.asFileTree.toPathsArray() + } } args.freeArgs += sources.asFileTree.files.map { it.absolutePath } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinCompile.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinCompile.kt index 69e7bc6807f..467bac4bfd7 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinCompile.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinCompile.kt @@ -263,10 +263,12 @@ abstract class KotlinCompile @Inject constructor( } sources { args -> - if (compilerOptions.usesK2.get()) { - args.fragmentSources = multiplatformStructure.fragmentSourcesCompilerArgs(sourceFileFilter) - } else { - args.commonSources = commonSourceSet.asFileTree.toPathsArray() + if (multiPlatformEnabled.get()) { + if (compilerOptions.usesK2.get()) { + args.fragmentSources = multiplatformStructure.fragmentSourcesCompilerArgs(sourceFileFilter) + } else { + args.commonSources = commonSourceSet.asFileTree.toPathsArray() + } } val sourcesFiles = sources.asFileTree.files.toList() diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/K2MultiplatformStructureTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/K2MultiplatformStructureTest.kt index 2f383453aef..9ca08a2b7af 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/K2MultiplatformStructureTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/K2MultiplatformStructureTest.kt @@ -21,12 +21,10 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinJsCompilerType.IR import org.jetbrains.kotlin.gradle.tasks.* import org.jetbrains.kotlin.gradle.tasks.K2MultiplatformStructure.Fragment import org.jetbrains.kotlin.gradle.tasks.K2MultiplatformStructure.RefinesEdge -import org.jetbrains.kotlin.gradle.util.applyMultiplatformPlugin -import org.jetbrains.kotlin.gradle.util.buildProject -import org.jetbrains.kotlin.gradle.util.enableDefaultStdlibDependency -import org.jetbrains.kotlin.gradle.util.main +import org.jetbrains.kotlin.gradle.util.* import kotlin.test.Test import kotlin.test.assertEquals +import kotlin.test.assertNull import kotlin.test.fail class K2MultiplatformStructureTest { @@ -87,6 +85,19 @@ class K2MultiplatformStructureTest { `test compilations multiplatformStructure configuration`(kotlin.js(IR).compilations.main) } + @Test + fun `KT-65768 - no fragment sources in pure jvm project`() { + val project = buildProject { + applyKotlinJvmPlugin() + } + project.evaluate() + + project.tasks.withType().forEach { task -> + val arguments = task.buildCompilerArguments() + assertNull(arguments.fragmentSources, "Task $task has -Xframent-sources but it shouldn't.") + } + } + private fun `test compilations multiplatformStructure configuration`(compilation: KotlinCompilation<*>) { val defaultSourceSet = compilation.defaultSourceSet /* Create an additional intermediate source set for testing */