From f7522ec796645d661cfa4165c2e2a2244665662d Mon Sep 17 00:00:00 2001 From: Yahor Berdnikau Date: Wed, 5 Apr 2023 22:10:17 +0200 Subject: [PATCH] Better approach to handle 'moduleName' in project level DSL Now project level DSL only configures base part of module name, which latter is enhanced by Kotlin compilation suffix. In this case 'KotlinCompilation.moduleName' is not used. Additionally, 'KotlinJvmTask.moduleName' usage was deprecated in favor of 'compilerOptions.moduleName'. Though warning is only produced in case project is using 'org.jetbrains.kotlin.jvm' or 'org.jetbrains.kotlin.android' plugins. - 'moduleName' is always required to be non-null. ^KT-57688 Fixed --- .../api/kotlin-gradle-plugin-api.api | 2 + .../kotlin/gradle/tasks/KotlinTaskConfigs.kt | 16 ++++++ .../kotlin/gradle/CompilerOptionsProjectIT.kt | 56 +++++++++++++++++++ .../android/KotlinAndroidIncrementalIT.kt | 2 +- .../internal/kapt/KaptGenerateStubsTask.kt | 3 + .../kotlin/gradle/plugin/KotlinJvmPlugin.kt | 13 ++--- .../compilationImpl/KotlinCompilationImpl.kt | 11 +--- .../gradle/plugin/mpp/kotlinCompilations.kt | 15 +++++ .../kotlin/gradle/tasks/KotlinCompile.kt | 32 ++++++++++- .../tasks/KotlinCompileArgumentsProvider.kt | 3 + .../AbstractKotlinCompileConfig.kt | 4 +- .../configuration/KaptGenerateStubsConfig.kt | 1 + .../configuration/Kotlin2JsCompileConfig.kt | 1 + .../KotlinCompileCommonConfig.kt | 1 + .../configuration/KotlinCompileConfig.kt | 10 ++++ .../gradle/unitTests/KotlinCompileApiTest.kt | 1 + .../internal/BasePluginConfigurationG70.kt | 13 ++++- .../internal/BasePluginConfigurationG6.kt | 11 +++- 18 files changed, 168 insertions(+), 27 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin-api/api/kotlin-gradle-plugin-api.api b/libraries/tools/kotlin-gradle-plugin-api/api/kotlin-gradle-plugin-api.api index 1d531cf625b..1eaa8b1994c 100644 --- a/libraries/tools/kotlin-gradle-plugin-api/api/kotlin-gradle-plugin-api.api +++ b/libraries/tools/kotlin-gradle-plugin-api/api/kotlin-gradle-plugin-api.api @@ -1540,6 +1540,7 @@ public abstract interface class org/jetbrains/kotlin/gradle/tasks/Kapt : org/jet public abstract interface class org/jetbrains/kotlin/gradle/tasks/KaptGenerateStubs : org/jetbrains/kotlin/gradle/tasks/KotlinJvmCompile { public abstract fun getKaptClasspath ()Lorg/gradle/api/file/ConfigurableFileCollection; + public abstract fun getModuleName ()Lorg/gradle/api/provider/Property; public abstract fun getStubsDir ()Lorg/gradle/api/file/DirectoryProperty; } @@ -1606,6 +1607,7 @@ public final class org/jetbrains/kotlin/gradle/tasks/KotlinJavaToolchain$JdkSett } public abstract interface class org/jetbrains/kotlin/gradle/tasks/KotlinJvmCompile : org/jetbrains/kotlin/gradle/dsl/KotlinCompile, org/jetbrains/kotlin/gradle/tasks/BaseKotlinCompile, org/jetbrains/kotlin/gradle/tasks/KotlinCompilationTask { + public abstract fun getModuleName ()Lorg/gradle/api/provider/Property; public abstract fun getParentKotlinOptions ()Lorg/gradle/api/provider/Property; } diff --git a/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinTaskConfigs.kt b/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinTaskConfigs.kt index 6f7bf639931..1a20755381e 100644 --- a/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinTaskConfigs.kt +++ b/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinTaskConfigs.kt @@ -81,6 +81,14 @@ interface KotlinJvmCompile : BaseKotlinCompile, KotlinCompileDeprecated, KotlinCompilationTask { + @get:Deprecated( + message = "Please migrate to compilerOptions.moduleName", + replaceWith = ReplaceWith("compilerOptions.moduleName") + ) + @get:Optional + @get:Input + override val moduleName: Property + // JVM specific @get:Internal("Takes part in compiler args.") @Deprecated( @@ -96,6 +104,14 @@ interface KaptGenerateStubs : KotlinJvmCompile { @get:Internal("Not an input, just passed as kapt args. ") val kaptClasspath: ConfigurableFileCollection + + @get:Deprecated( + message = "Please migrate to compilerOptions.moduleName", + replaceWith = ReplaceWith("compilerOptions.moduleName") + ) + @get:Optional + @get:Input + override val moduleName: Property } interface BaseKapt : Task { diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/CompilerOptionsProjectIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/CompilerOptionsProjectIT.kt index 3b2a10a113e..f2a2e4bd044 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/CompilerOptionsProjectIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/CompilerOptionsProjectIT.kt @@ -205,6 +205,10 @@ class CompilerOptionsProjectIT : KGPBaseTest() { build("compileKotlin") { assertTasksExecuted(":compileKotlin") + assertOutputDoesNotContain( + "w: :compileKotlin 'KotlinJvmCompile.moduleName' is deprecated, please migrate to 'compilerOptions.moduleName'!" + ) + val compilationArgs = output.lineSequence().first { it.contains("Kotlin compiler args:") } assert(compilationArgs.contains("-module-name customModule")) { @@ -236,6 +240,7 @@ class CompilerOptionsProjectIT : KGPBaseTest() { |kotlin { | compilerOptions { | javaParameters = true + | moduleName = "my_app" | } |} """.trimMargin() @@ -244,12 +249,63 @@ class CompilerOptionsProjectIT : KGPBaseTest() { build("compileDebugKotlin") { assertTasksExecuted(":compileDebugKotlin") + assertOutputDoesNotContain( + "w: :compileKotlin 'KotlinJvmCompile.moduleName' is deprecated, please migrate to 'compilerOptions.moduleName'!" + ) + val compilationArgs = output.lineSequence().first { it.contains("Kotlin compiler args:") } assert(compilationArgs.contains("-java-parameters")) { printBuildOutput() "Compiler arguments does not contain '-java-parameters': $compilationArgs" } + + assert(compilationArgs.contains("-module-name my_app_debug")) { + printBuildOutput() + "Compiler arguments does not contain '-module-name my_app_debug': $compilationArgs" + } + } + } + } + + @DisplayName("KT-57688: task moduleName input overrides project level moduleName") + @JvmGradlePluginTests + @GradleTest + fun moduleNameTaskOverrideProject(gradleVersion: GradleVersion) { + project( + projectName = "simpleProject", + gradleVersion = gradleVersion, + buildOptions = defaultBuildOptions.copy(logLevel = LogLevel.DEBUG) + ) { + buildGradle.appendText( + //language=Groovy + """ + | + |kotlin { + | compilerOptions { + | moduleName = "customModule" + | } + |} + | + |tasks.named("compileKotlin", org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile.class).configure { + | moduleName = "otherCustomModuleName" + |} + """.trimMargin() + ) + + build("compileKotlin") { + assertTasksExecuted(":compileKotlin") + + assertOutputContains( + "w: :compileKotlin 'KotlinJvmCompile.moduleName' is deprecated, please migrate to 'compilerOptions.moduleName'!" + ) + + val compilationArgs = output.lineSequence().first { it.contains("Kotlin compiler args:") } + + assert(compilationArgs.contains("-module-name otherCustomModuleName")) { + printBuildOutput() + "Compiler arguments does not contain '-module-name otherCustomModuleName': $compilationArgs" + } } } } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/android/KotlinAndroidIncrementalIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/android/KotlinAndroidIncrementalIT.kt index 5beaa117efb..c83235bfcc1 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/android/KotlinAndroidIncrementalIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/android/KotlinAndroidIncrementalIT.kt @@ -163,7 +163,7 @@ open class KotlinAndroidIncrementalIT : KGPBaseTest() { ) build("assembleDebug") { - assertFileInProjectExists("libAndroid/build/tmp/kotlin-classes/debug/META-INF/custom_path.kotlin_module") + assertFileInProjectExists("libAndroid/build/tmp/kotlin-classes/debug/META-INF/custom_path_debug.kotlin_module") } val libAndroidUtilKt = subProject("libAndroid").kotlinSourcesDir().resolve("com/example/libAndroidUtil.kt") diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/KaptGenerateStubsTask.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/KaptGenerateStubsTask.kt index 7644752e843..03dea277f86 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/KaptGenerateStubsTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/KaptGenerateStubsTask.kt @@ -111,6 +111,9 @@ abstract class KaptGenerateStubsTask @Inject constructor( args.freeArgs = emptyList() KotlinJvmCompilerOptionsHelper.fillCompilerArguments(compilerOptions, args) + overrideArgsUsingTaskModuleNameWithWarning(args) + requireNotNull(args.moduleName) + // Copied from KotlinCompile if (reportingSettings().buildReportMode == BuildReportMode.VERBOSE) { args.reportPerf = true diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinJvmPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinJvmPlugin.kt index c2f0e70e6bf..19e124aba5e 100755 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinJvmPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinJvmPlugin.kt @@ -36,17 +36,16 @@ internal open class KotlinJvmPlugin( @Suppress("DEPRECATION") compilationsContainer: NamedDomainObjectContainer> ) { extensionCompilerOptions.verbose.convention(logger.isDebugEnabled) + extensionCompilerOptions.moduleName.convention(baseModuleName()) compilationsContainer.configureEach { val jvmCompilerOptions = it.compilerOptions.options as KotlinJvmCompilerOptions KotlinJvmCompilerOptionsHelper.syncOptionsAsConvention( from = extensionCompilerOptions, into = jvmCompilerOptions ) + jvmCompilerOptions.moduleName.convention( - extensionCompilerOptions.moduleName.orElse( - @Suppress("DEPRECATION") - project.providers.provider { it.moduleName } - ) + it.moduleNameForCompilation(extensionCompilerOptions.moduleName) ) } } @@ -77,16 +76,16 @@ internal open class KotlinJvmPlugin( .apply { disambiguationClassifier = null // don't add anything to the task names } - val kotlinExtension = project.kotlinExtension as KotlinJvmProjectExtension kotlinExtension.target = target + + super.apply(project) + project.configureCompilerOptionsForTarget( kotlinExtension.compilerOptions, target.compilations ) - super.apply(project) - project.pluginManager.apply(ScriptingGradleSubplugin::class.java) } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/KotlinCompilationImpl.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/KotlinCompilationImpl.kt index 024e6cac2f0..65950cfe71a 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/KotlinCompilationImpl.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/KotlinCompilationImpl.kt @@ -15,11 +15,10 @@ import org.gradle.api.tasks.TaskProvider import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions import org.jetbrains.kotlin.gradle.dsl.KotlinCompile import org.jetbrains.kotlin.gradle.plugin.* -import org.jetbrains.kotlin.gradle.plugin.mpp.HierarchyAttributeContainer +import org.jetbrains.kotlin.gradle.plugin.mpp.* import org.jetbrains.kotlin.gradle.plugin.mpp.InternalKotlinCompilation -import org.jetbrains.kotlin.gradle.plugin.mpp.filterModuleName import org.jetbrains.kotlin.gradle.plugin.mpp.internal -import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.archivesName +import org.jetbrains.kotlin.gradle.plugin.mpp.moduleNameForCompilation import org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask import org.jetbrains.kotlin.gradle.tasks.locateTask import org.jetbrains.kotlin.gradle.utils.ObservableSet @@ -151,11 +150,7 @@ internal class KotlinCompilationImpl constructor( @Suppress("OVERRIDE_DEPRECATION") override val moduleName: String - get() { - val baseName = target.project.archivesName.orNull ?: target.project.name - val suffix = if (compilationName == KotlinCompilation.MAIN_COMPILATION_NAME) "" else "_$compilationName" - return filterModuleName("$baseName$suffix") - } + get() = moduleNameForCompilation(target.project.baseModuleName()).get() //endregion diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinCompilations.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinCompilations.kt index 216a804a360..5d826c3c0da 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinCompilations.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinCompilations.kt @@ -6,10 +6,12 @@ package org.jetbrains.kotlin.gradle.plugin.mpp import org.gradle.api.Project +import org.gradle.api.provider.Provider import org.jetbrains.kotlin.gradle.dsl.KotlinCommonCompilerOptions import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions import org.jetbrains.kotlin.gradle.plugin.HasCompilerOptions import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation +import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.archivesName import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile import org.jetbrains.kotlin.gradle.utils.fileExtensionCasePermutations import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName @@ -76,6 +78,19 @@ internal fun KotlinCompilation<*>.disambiguateName(simpleName: String): String { private val invalidModuleNameCharactersRegex = """[\\/\r\n\t]""".toRegex() +internal fun Project.baseModuleName(): Provider = archivesName.orElse(project.name) + +internal fun KotlinCompilation<*>.moduleNameForCompilation( + baseName: Provider +): Provider = baseName.map { + val suffix = if (compilationName == KotlinCompilation.MAIN_COMPILATION_NAME) { + "" + } else { + "_${compilationName}" + } + filterModuleName("$it$suffix") +} + internal fun filterModuleName(moduleName: String): String = moduleName.replace(invalidModuleNameCharactersRegex, "_") 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 1411dc26615..321ff664fe2 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 @@ -66,9 +66,6 @@ abstract class KotlinCompile @Inject constructor( KotlinCompilationTask, UsesKotlinJavaToolchain { - @get:Internal // covered by compiler options - abstract override val moduleName: Property - final override val kotlinOptions: KotlinJvmOptions = KotlinJvmOptionsCompat( { this }, compilerOptions @@ -111,6 +108,14 @@ abstract class KotlinCompile @Inject constructor( set(value) = libraries.setFrom(value) get() = libraries + @get:Deprecated( + message = "Please migrate to compilerOptions.moduleName", + replaceWith = ReplaceWith("compilerOptions.moduleName") + ) + @get:Optional + @get:Input + abstract override val moduleName: Property + @get:Input abstract val useKotlinAbiSnapshot: Property @@ -163,6 +168,9 @@ abstract class KotlinCompile @Inject constructor( @get:Input internal abstract val jvmTargetValidationMode: Property + @get:Internal + internal val nagTaskModuleNameUsage: Property = objectFactory.propertyWithConvention(false) + @get:Internal internal val scriptDefinitions: ConfigurableFileCollection = objectFactory.fileCollection() @@ -239,6 +247,9 @@ abstract class KotlinCompile @Inject constructor( KotlinJvmCompilerOptionsHelper.fillCompilerArguments(compilerOptions, args) + overrideArgsUsingTaskModuleNameWithWarning(args) + requireNotNull(args.moduleName) + val localExecutionTimeFreeCompilerArgs = executionTimeFreeCompilerArgs if (localExecutionTimeFreeCompilerArgs != null) { args.freeArgs = localExecutionTimeFreeCompilerArgs @@ -282,6 +293,21 @@ abstract class KotlinCompile @Inject constructor( } } + @Suppress("DEPRECATION") + protected fun overrideArgsUsingTaskModuleNameWithWarning( + args: K2JVMCompilerArguments + ) { + val taskModuleName = moduleName.orNull + if (taskModuleName != null) { + if (nagTaskModuleNameUsage.get()) { + logger.warn( + "w: $path 'KotlinJvmCompile.moduleName' is deprecated, please migrate to 'compilerOptions.moduleName'!" + ) + } + args.moduleName = taskModuleName + } + } + override fun callCompilerAsync( args: K2JVMCompilerArguments, inputChanges: InputChanges, diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinCompileArgumentsProvider.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinCompileArgumentsProvider.kt index 9ffc6ef851f..a9a80db825e 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinCompileArgumentsProvider.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinCompileArgumentsProvider.kt @@ -26,5 +26,8 @@ class KotlinJvmCompilerArgumentsProvider val friendPaths: FileCollection = taskProvider.friendPaths val compileClasspath: Iterable = taskProvider.libraries val destinationDir: File = taskProvider.destinationDirectory.get().asFile + @Suppress("DEPRECATION") + val taskModuleName: String? = taskProvider.moduleName.orNull + val nagTaskModuleNameUsage: Boolean = taskProvider.nagTaskModuleNameUsage.get() internal val compilerOptions: KotlinJvmCompilerOptions = taskProvider.compilerOptions } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/AbstractKotlinCompileConfig.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/AbstractKotlinCompileConfig.kt index d539fe1ca97..b09b5905d4b 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/AbstractKotlinCompileConfig.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/AbstractKotlinCompileConfig.kt @@ -39,7 +39,7 @@ import org.jetbrains.kotlin.project.model.LanguageSettings */ internal abstract class AbstractKotlinCompileConfig>( project: Project, - private val ext: KotlinTopLevelExtension, + val ext: KotlinTopLevelExtension, private val languageSettings: Provider ) : TaskConfigAction(project) { @@ -146,7 +146,7 @@ internal abstract class AbstractKotlinCompileConfig val kotlinCompileTask = kotlinTaskProvider.get() task.useModuleDetection.value(kotlinCompileTask.useModuleDetection).disallowChanges() + @Suppress("DEPRECATION") task.moduleName.value(kotlinCompileTask.moduleName).disallowChanges() task.libraries.from({ kotlinCompileTask.libraries - project.files(kaptClassesDir) }) task.compileTaskCompilerOptions.set(providers.provider { kotlinCompileTask.compilerOptions }) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/Kotlin2JsCompileConfig.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/Kotlin2JsCompileConfig.kt index f7ad362df6d..5056c0ca1c7 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/Kotlin2JsCompileConfig.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/Kotlin2JsCompileConfig.kt @@ -28,6 +28,7 @@ internal open class BaseKotlin2JsCompileConfig( configureAdditionalFreeCompilerArguments(task, compilation) task.compilerOptions.moduleName.convention(compilation.moduleName) + task.moduleName.set(providers.provider { compilation.moduleName }) @Suppress("DEPRECATION") task.outputFileProperty.value( diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/KotlinCompileCommonConfig.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/KotlinCompileCommonConfig.kt index 2d1e9cfa39c..92a95cc66cd 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/KotlinCompileCommonConfig.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/KotlinCompileCommonConfig.kt @@ -22,6 +22,7 @@ internal class KotlinCompileCommonConfig( } ).disallowChanges() task.refinesMetadataPaths.from(compilationInfo.refinesPaths).disallowChanges() + task.moduleName.set(providers.provider { compilationInfo.moduleName }) } } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/KotlinCompileConfig.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/KotlinCompileConfig.kt index 6d16d696b2c..3bef6e135ff 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/KotlinCompileConfig.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/KotlinCompileConfig.kt @@ -8,6 +8,8 @@ package org.jetbrains.kotlin.gradle.tasks.configuration import org.gradle.api.Project import org.gradle.api.attributes.Attribute import org.gradle.api.provider.Provider +import org.jetbrains.kotlin.gradle.dsl.KotlinAndroidProjectExtension +import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension import org.jetbrains.kotlin.gradle.dsl.KotlinTopLevelExtension import org.jetbrains.kotlin.gradle.internal.transforms.ClasspathEntrySnapshotTransform import org.jetbrains.kotlin.gradle.plugin.KotlinCompilationInfo @@ -84,6 +86,14 @@ internal open class BaseKotlinCompileConfig : AbstractKotl providers.provider { task.parentKotlinOptions.orNull?.moduleName ?: compilationInfo.moduleName }) + + // In case of 'org.jetbrains.kotlin.jvm' and 'org.jetbrains.kotlin.android' plugins module name will be pre-configured + if (ext !is KotlinJvmProjectExtension && ext !is KotlinAndroidProjectExtension) { + @Suppress("DEPRECATION") + task.moduleName.set(providers.provider { compilationInfo.moduleName }) + } else { + task.nagTaskModuleNameUsage.set(true) + } } } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/KotlinCompileApiTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/KotlinCompileApiTest.kt index 4034267802c..ac7d2d85c77 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/KotlinCompileApiTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/KotlinCompileApiTest.kt @@ -91,6 +91,7 @@ class KotlinCompileApiTest { assertEquals(setOf(pluginDependency, anotherCompilerPlugin), taskImpl.pluginClasspath.files) } + @Suppress("DEPRECATION") @Test fun testModuleName() { taskApi.moduleName.set("foo") diff --git a/libraries/tools/kotlin-gradle-plugin/src/gradle70/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/BasePluginConfigurationG70.kt b/libraries/tools/kotlin-gradle-plugin/src/gradle70/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/BasePluginConfigurationG70.kt index 2ebf78b4601..7e205968ef6 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/gradle70/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/BasePluginConfigurationG70.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/gradle70/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/BasePluginConfigurationG70.kt @@ -10,16 +10,22 @@ import org.gradle.api.file.DirectoryProperty import org.gradle.api.model.ObjectFactory import org.gradle.api.plugins.BasePluginConvention import org.gradle.api.provider.Property +import org.gradle.api.provider.ProviderFactory import org.jetbrains.kotlin.gradle.utils.chainedFinalizeValueOnRead import org.jetbrains.kotlin.gradle.utils.propertyWithConvention internal class BasePluginConfigurationG70( private val basePluginConvention: BasePluginConvention, - private val objects: ObjectFactory + private val objects: ObjectFactory, + private val providerFactory: ProviderFactory, ) : BasePluginConfiguration { override val archivesName: Property get() = objects - .propertyWithConvention(basePluginConvention.archivesBaseName) + .propertyWithConvention( + providerFactory.provider { + basePluginConvention.archivesBaseName + } + ) .chainedFinalizeValueOnRead() override val distsDirectory: DirectoryProperty @@ -32,7 +38,8 @@ internal class BasePluginConfigurationG70( override fun getInstance(project: Project): BasePluginConfiguration { return BasePluginConfigurationG70( project.convention.getPlugin(BasePluginConvention::class.java), - project.objects + project.objects, + project.providers ) } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/BasePluginConfigurationG6.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/BasePluginConfigurationG6.kt index 037308f4ee9..a80ae3654e7 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/BasePluginConfigurationG6.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/BasePluginConfigurationG6.kt @@ -10,16 +10,20 @@ import org.gradle.api.file.DirectoryProperty import org.gradle.api.model.ObjectFactory import org.gradle.api.plugins.BasePluginConvention import org.gradle.api.provider.Property +import org.gradle.api.provider.ProviderFactory import org.jetbrains.kotlin.gradle.utils.chainedFinalizeValueOnRead import org.jetbrains.kotlin.gradle.utils.propertyWithConvention internal class BasePluginConfigurationG6( private val basePluginConvention: BasePluginConvention, - private val objects: ObjectFactory + private val objects: ObjectFactory, + private val providerFactory: ProviderFactory, ) : BasePluginConfiguration { override val archivesName: Property get() = objects - .propertyWithConvention(basePluginConvention.archivesBaseName) + .propertyWithConvention( + providerFactory.provider { basePluginConvention.archivesBaseName } + ) .chainedFinalizeValueOnRead() override val distsDirectory: DirectoryProperty @@ -32,7 +36,8 @@ internal class BasePluginConfigurationG6( override fun getInstance(project: Project): BasePluginConfiguration { return BasePluginConfigurationG6( project.convention.getPlugin(BasePluginConvention::class.java), - project.objects + project.objects, + project.providers ) } }