diff --git a/buildSrc/src/main/kotlin/GradleCommon.kt b/buildSrc/src/main/kotlin/GradleCommon.kt index b9f9a6f7d65..1a6e42c4a4a 100644 --- a/buildSrc/src/main/kotlin/GradleCommon.kt +++ b/buildSrc/src/main/kotlin/GradleCommon.kt @@ -104,6 +104,8 @@ fun Project.excludeGradleCommonDependencies(sourceSet: SourceSet) { configurations[sourceSet.runtimeOnlyConfigurationName].excludeGradleCommonDependencies() } +private val testPlugins = listOf("kotlin-gradle-plugin-api", "android-test-fixes", "gradle-warnings-detector", "kotlin-compiler-args-properties") + /** * Common sources for all variants. * Should contain classes that are independent of Gradle API version or using minimal supported Gradle api. @@ -123,10 +125,7 @@ fun Project.createGradleCommonSourceSet(): SourceSet { dependencies { compileOnlyConfigurationName(kotlinStdlib()) "commonGradleApiCompileOnly"("dev.gradleplugins:gradle-api:7.6") - if (this@createGradleCommonSourceSet.name != "kotlin-gradle-plugin-api" && - this@createGradleCommonSourceSet.name != "android-test-fixes" && - this@createGradleCommonSourceSet.name != "gradle-warnings-detector" - ) { + if (this@createGradleCommonSourceSet.name !in testPlugins) { compileOnlyConfigurationName(project(":kotlin-gradle-plugin-api")) { capabilities { requireCapability("org.jetbrains.kotlin:kotlin-gradle-plugin-api-common") @@ -276,10 +275,7 @@ fun Project.reconfigureMainSourcesSetForGradlePlugin( // Decoupling gradle-api artifact from current project Gradle version. Later would be useful for // gradle plugin variants "compileOnly"("dev.gradleplugins:gradle-api:${GradlePluginVariant.GRADLE_MIN.gradleApiVersion}") - if (this@reconfigureMainSourcesSetForGradlePlugin.name != "kotlin-gradle-plugin-api" && - this@reconfigureMainSourcesSetForGradlePlugin.name != "android-test-fixes" && - this@reconfigureMainSourcesSetForGradlePlugin.name != "gradle-warnings-detector" - ) { + if (this@reconfigureMainSourcesSetForGradlePlugin.name !in testPlugins) { "api"(project(":kotlin-gradle-plugin-api")) } } @@ -463,10 +459,7 @@ fun Project.createGradlePluginVariant( dependencies { variantSourceSet.compileOnlyConfigurationName(kotlinStdlib()) variantSourceSet.compileOnlyConfigurationName("dev.gradleplugins:gradle-api:${variant.gradleApiVersion}") - if (this@createGradlePluginVariant.name != "kotlin-gradle-plugin-api" && - this@createGradlePluginVariant.name != "android-test-fixes" && - this@createGradlePluginVariant.name != "gradle-warnings-detector" - ) { + if (this@createGradlePluginVariant.name !in testPlugins) { variantSourceSet.apiConfigurationName(project(":kotlin-gradle-plugin-api")) { capabilities { requireCapability("org.jetbrains.kotlin:kotlin-gradle-plugin-api-${variant.sourceSetName}") @@ -567,6 +560,7 @@ fun Project.addBomCheckTask() { val exceptions = listOf( project(":gradle:android-test-fixes").path, project(":gradle:gradle-warnings-detector").path, + project(":gradle:kotlin-compiler-args-properties").path, project(":kotlin-gradle-build-metrics").path, project(":kotlin-gradle-statistics").path, ) diff --git a/libraries/tools/gradle/kotlin-compiler-args-properties/Readme.md b/libraries/tools/gradle/kotlin-compiler-args-properties/Readme.md new file mode 100644 index 00000000000..bd29b7bddb4 --- /dev/null +++ b/libraries/tools/gradle/kotlin-compiler-args-properties/Readme.md @@ -0,0 +1,3 @@ +## Description + +Contains a plugin for Gradle tests to set Kotlin arguments (api and language version) via 'gradle.properties' \ No newline at end of file diff --git a/libraries/tools/gradle/kotlin-compiler-args-properties/build.gradle.kts b/libraries/tools/gradle/kotlin-compiler-args-properties/build.gradle.kts new file mode 100644 index 00000000000..8803606c14f --- /dev/null +++ b/libraries/tools/gradle/kotlin-compiler-args-properties/build.gradle.kts @@ -0,0 +1,37 @@ +import plugins.KotlinBuildPublishingPlugin + +plugins { + id("gradle-plugin-common-configuration") +} + + +dependencies { + commonApi(project(":kotlin-gradle-plugin-api")) + commonApi(project(":kotlin-gradle-plugin")) + commonCompileOnly(gradleKotlinDsl()) +} + + +gradlePlugin { + plugins { + create("kotlin-compiler-args-properties") { + id = "org.jetbrains.kotlin.test.kotlin-compiler-args-properties" + displayName = "GradleKotlinCompilerArgumentsPlugin" + description = displayName + implementationClass = "org.jetbrains.kotlin.gradle.arguments.GradleKotlinCompilerArgumentsPlugin" + } + } +} + +// Disable releasing for this plugin +// It is not intended to be released publicly +tasks.withType() + .configureEach { + if (name.endsWith("PublicationTo${KotlinBuildPublishingPlugin.REPOSITORY_NAME}Repository")) { + enabled = false + } + } + +tasks.named("publishPlugins") { + enabled = false +} \ No newline at end of file diff --git a/libraries/tools/gradle/kotlin-compiler-args-properties/src/common/kotlin/org/jetbrains/kotlin/gradle/arguments/GradleKotlinCompilerArgumentsPlugin.kt b/libraries/tools/gradle/kotlin-compiler-args-properties/src/common/kotlin/org/jetbrains/kotlin/gradle/arguments/GradleKotlinCompilerArgumentsPlugin.kt new file mode 100644 index 00000000000..1fc39b0becc --- /dev/null +++ b/libraries/tools/gradle/kotlin-compiler-args-properties/src/common/kotlin/org/jetbrains/kotlin/gradle/arguments/GradleKotlinCompilerArgumentsPlugin.kt @@ -0,0 +1,58 @@ +/* + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.gradle.arguments + +import org.gradle.api.Action +import org.gradle.api.Project +import org.gradle.api.plugins.ExtensionContainer +import org.gradle.api.provider.Provider +import org.gradle.api.provider.ProviderFactory +import org.gradle.kotlin.dsl.withType +import org.jetbrains.kotlin.gradle.plugin.KotlinBasePlugin +import org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask +import org.jetbrains.kotlin.gradle.dsl.KotlinAndroidProjectExtension +import org.jetbrains.kotlin.gradle.dsl.KotlinCommonCompilerOptions +import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension +import org.jetbrains.kotlin.gradle.dsl.KotlinVersion +import javax.inject.Inject + +class GradleKotlinCompilerArgumentsPlugin @Inject constructor( + private val providerFactory: ProviderFactory +) : KotlinBasePlugin { + override val pluginVersion = "test" + + override fun apply(project: Project) { + val properties = KotlinTaskProperties(providerFactory) + project.configureKotlinVersions(properties) + } + + private fun Project.configureKotlinVersions(properties: KotlinTaskProperties) { + plugins.withType().configureEach(configureTask(properties)) + } + + private fun Project.configureTask(properties: KotlinTaskProperties): Action = Action { + tasks.withType>().configureEach { + configureKotlinOption(properties, it.compilerOptions) + } + } + + private fun ExtensionContainer.projectCompilerOptions(): KotlinCommonCompilerOptions? = + findByType(KotlinJvmProjectExtension::class.java)?.compilerOptions + ?: findByType(KotlinAndroidProjectExtension::class.java)?.compilerOptions + + private fun Project.projectLevelLanguageVersion(): Provider { + return extensions.projectCompilerOptions()?.languageVersion ?: providers.provider { null } + } + + private fun Project.projectLevelApiVersion(): Provider { + return extensions.projectCompilerOptions()?.apiVersion ?: providers.provider { null } + } + + private fun Project.configureKotlinOption(properties: KotlinTaskProperties, taskOptions: KotlinCommonCompilerOptions) { + taskOptions.languageVersion.convention(properties.kotlinLanguageVersion.orElse(projectLevelLanguageVersion())) + taskOptions.apiVersion.convention(properties.kotlinApiVersion.orElse(projectLevelApiVersion())) + } +} diff --git a/libraries/tools/gradle/kotlin-compiler-args-properties/src/common/kotlin/org/jetbrains/kotlin/gradle/arguments/KotlinTaskProperties.kt b/libraries/tools/gradle/kotlin-compiler-args-properties/src/common/kotlin/org/jetbrains/kotlin/gradle/arguments/KotlinTaskProperties.kt new file mode 100644 index 00000000000..c0fc288ee67 --- /dev/null +++ b/libraries/tools/gradle/kotlin-compiler-args-properties/src/common/kotlin/org/jetbrains/kotlin/gradle/arguments/KotlinTaskProperties.kt @@ -0,0 +1,35 @@ +/* + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.gradle.arguments + +import org.gradle.api.provider.Provider +import org.gradle.api.provider.ProviderFactory +import org.gradle.util.GradleVersion +import org.jetbrains.kotlin.gradle.dsl.KotlinVersion + +class KotlinTaskProperties(providerFactory: ProviderFactory) { + val kotlinLanguageVersion: Provider = readKotlinVersionProperty(KOTLIN_LANGUAGE_VERSION_PROPERTY, providerFactory) + val kotlinApiVersion: Provider = readKotlinVersionProperty(KOTLIN_API_VERSION_PROPERTY, providerFactory) + + companion object { + private const val KOTLIN_LANGUAGE_VERSION_PROPERTY = "kotlin.test.languageVersion" + private const val KOTLIN_API_VERSION_PROPERTY = "kotlin.test.apiVersion" + + @Suppress("DEPRECATION") + private fun readKotlinVersionProperty(propertyName: String, providerFactory: ProviderFactory): Provider { + return if (GradleVersion.current() < GradleVersion.version("7.4")) { + providerFactory.gradleProperty(propertyName) + .forUseAtConfigurationTime() + .map { KotlinVersion.fromVersion(it as String) } + } else { + providerFactory.gradleProperty(propertyName) + .map { KotlinVersion.fromVersion(it as String) } + } + } + } + + +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/build.gradle.kts index e38733d2794..c302d98ae5f 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/build.gradle.kts @@ -333,6 +333,7 @@ tasks.withType { dependsOnKotlinGradlePluginInstall() dependsOn(":gradle:android-test-fixes:install") dependsOn(":gradle:gradle-warnings-detector:install") + dependsOn(":gradle:kotlin-compiler-args-properties:install") dependsOn(":examples:annotation-processor-example:install") dependsOn(":kotlin-dom-api-compat:install") diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BaseGradleIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BaseGradleIT.kt index 6fb6239baa1..16490f2bd16 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BaseGradleIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BaseGradleIT.kt @@ -274,8 +274,8 @@ abstract class BaseGradleIT { val configurationCache: Boolean = false, val configurationCacheProblems: ConfigurationCacheProblems = ConfigurationCacheProblems.FAIL, val warningMode: WarningMode = WarningMode.Fail, - val useFir: Boolean = false, val languageVersion: String? = null, + val languageApiVersion: String? = null, val customEnvironmentVariables: Map = mapOf(), val dryRun: Boolean = false, val abiSnapshot: Boolean = false, @@ -312,7 +312,7 @@ abstract class BaseGradleIT { open val resourcesRoot = File(resourcesRootFile, "testProject/$resourceDirName") val projectDir = File(workingDir.canonicalFile, projectName) - open fun setupWorkingDir(enableCacheRedirector: Boolean = true, applyAndroidTestFixes: Boolean = true) { + open fun setupWorkingDir(enableCacheRedirector: Boolean = true, applyAndroidTestFixes: Boolean = true, applyLanguageVersion: Boolean = true) { if (!projectDir.isDirectory || projectDir.listFiles().isEmpty()) { copyRecursively(this.resourcesRoot, workingDir) if (addHeapDumpOptions) { @@ -323,6 +323,7 @@ abstract class BaseGradleIT { addPluginManagementToSettings() if (enableCacheRedirector) enableCacheRedirector() if (applyAndroidTestFixes) applyAndroidTestFixes() + if (applyLanguageVersion) applyKotlinCompilerArgsPlugin() } } } @@ -937,14 +938,6 @@ abstract class BaseGradleIT { add("-Pkotlin.js.compiler=$it") } - if (options.useFir) { - add("-Pkotlin.useK2=true") - } - - if(options.languageVersion != null) { - add("-Pkotlin.internal.languageVersion=${options.languageVersion}") - } - if (options.dryRun) { add("--dry-run") } @@ -979,6 +972,9 @@ abstract class BaseGradleIT { if (supportFailingBuildOnWarning && options.warningMode == WarningMode.Fail) { add("--warning-mode=${WarningMode.Fail.name.lowercase(Locale.getDefault())}") } + options.languageVersion?.also { add("-Pkotlin.test.languageVersion=$it") } + options.languageApiVersion?.also { add("-Pkotlin.test.apiVersion=$it") } + addAll(options.freeCommandLineArgs) } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/IncrementalCompilationMultiProjectIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/IncrementalCompilationMultiProjectIT.kt index ed27f9bce3b..82ea5f77d9e 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/IncrementalCompilationMultiProjectIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/IncrementalCompilationMultiProjectIT.kt @@ -317,7 +317,7 @@ class IncrementalCompilationJvmMultiProjectWithPreciseBackupIT : IncrementalComp } class IncrementalCompilationFirJvmMultiProjectIT : IncrementalCompilationJvmMultiProjectIT() { - override val defaultBuildOptions: BuildOptions = super.defaultBuildOptions.copy(useFir = true) + override val defaultBuildOptions: BuildOptions = super.defaultBuildOptions.copy(languageVersion = "2.0") } open class IncrementalCompilationOldICJvmMultiProjectIT : IncrementalCompilationJvmMultiProjectIT() { diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/IncrementalJavaChangeIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/IncrementalJavaChangeIT.kt index 83bb2644168..ac879ea9f19 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/IncrementalJavaChangeIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/IncrementalJavaChangeIT.kt @@ -239,7 +239,7 @@ open class IncrementalJavaChangeDisablePreciseIT : IncrementalCompilationJavaCha @DisplayName("Default incremental compilation with disabled precise java tracking and enabled FIR") class IncrementalFirJavaChangeDisablePreciseIT : IncrementalJavaChangeDisablePreciseIT() { - override val defaultBuildOptions = super.defaultBuildOptions.copy(useFir = true) + override val defaultBuildOptions = super.defaultBuildOptions.copy(languageVersion = "2.0") } @JvmGradlePluginTests diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinJsLibraryGradlePluginIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinJsLibraryGradlePluginIT.kt index 2137bba45e4..f36c3b400e0 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinJsLibraryGradlePluginIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinJsLibraryGradlePluginIT.kt @@ -77,16 +77,12 @@ abstract class KotlinJsIrLibraryGradlePluginITBase : KGPBaseTest() { @DisplayName("Kotlin/JS K1 IR library") @JsGradlePluginTests class KotlinK1JsIrLibraryGradlePluginIT : KotlinJsIrLibraryGradlePluginITBase() { - override val defaultBuildOptions = super.defaultBuildOptions.copy( - useFir = false - ) + override val defaultBuildOptions = super.defaultBuildOptions.copy(languageVersion = null) } @GradleTestVersions(minVersion = TestVersions.Gradle.G_7_0) @DisplayName("Kotlin/JS K2 IR library") @JsGradlePluginTests class KotlinK2JsIrLibraryGradlePluginIT : KotlinJsIrLibraryGradlePluginITBase() { - override val defaultBuildOptions = super.defaultBuildOptions.copy( - useFir = true - ) + override val defaultBuildOptions = super.defaultBuildOptions.copy(languageVersion = "2.0") } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/AndroidAndJavaConsumeMppLibIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/AndroidAndJavaConsumeMppLibIT.kt index 24aeb134aa6..a0d5d014a38 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/AndroidAndJavaConsumeMppLibIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/AndroidAndJavaConsumeMppLibIT.kt @@ -232,7 +232,8 @@ abstract class AndroidAndJavaConsumeMppLibIT : BaseGradleIT() { "\ninclude(\":${dependencyProject.projectName}:lib\")" ) } - setupWorkingDir() + + setupWorkingDir(applyLanguageVersion = withKotlinVersion != oldKotlinVersion) gradleBuildScript("Lib").apply { writeText( diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/BuildOptions.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/BuildOptions.kt index d08d0c37248..4b216e873cc 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/BuildOptions.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/BuildOptions.kt @@ -34,9 +34,9 @@ data class BuildOptions( val androidVersion: String? = null, val jsOptions: JsOptions? = null, val buildReport: List = emptyList(), - val useFir: Boolean = false, val usePreciseJavaTracking: Boolean? = null, val languageVersion: String? = null, + val languageApiVersion: String? = null, val freeArgs: List = emptyList(), val statisticsForceValidation: Boolean = true, val usePreciseOutputsBackup: Boolean? = null, @@ -140,14 +140,6 @@ data class BuildOptions( arguments.add("-Pkotlin.build.report.output=${buildReport.joinToString()}") } - if (useFir) { - arguments.add("-Pkotlin.useK2=true") - } - - if (languageVersion != null) { - arguments.add("-Pkotlin.internal.languageVersion=$languageVersion") - } - if (usePreciseJavaTracking != null) { arguments.add("-Pkotlin.incremental.usePreciseJavaTracking=$usePreciseJavaTracking") } @@ -159,6 +151,12 @@ data class BuildOptions( if (usePreciseOutputsBackup != null) { arguments.add("-Pkotlin.compiler.preciseCompilationResultsBackup=$usePreciseOutputsBackup") } + if (languageApiVersion != null) { + arguments.add("-Pkotlin.test.apiVersion=$languageApiVersion") + } + if (languageVersion != null) { + arguments.add("-Pkotlin.test.languageVersion=$languageVersion") + } if (keepIncrementalCompilationCachesInMemory != null) { arguments.add("-Pkotlin.compiler.keepIncrementalCompilationCachesInMemory=$keepIncrementalCompilationCachesInMemory") diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/kotlinCompilerArgsPlugin.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/kotlinCompilerArgsPlugin.kt new file mode 100644 index 00000000000..5ca26fe173b --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/kotlinCompilerArgsPlugin.kt @@ -0,0 +1,74 @@ +/* + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.gradle.testbase + +import org.jetbrains.kotlin.gradle.util.modify +import java.io.File +import java.nio.file.Path + +fun Path.applyKotlinCompilerArgsPlugin() { + toFile().walkTopDown() + .filter { it.name in listOf("build.gradle", "build.gradle.kts", "settings.gradle", "settings.gradle.kts") } + .forEach { file -> + when (file.name) { + "build.gradle" -> file.updateBuildGradle() + "build.gradle.kts" -> file.updateBuildKtsGradle() + "settings.gradle.kts" -> file.updateSettingsKtsGradle() + "settings.gradle" -> file.updateSettingsGradle() + } + } +} + +private fun File.updateSettingsKtsGradle() { + modify { + if (it.contains("pluginManagement {")) { + it.replaceFirst( + "plugins {", "plugins {\n" + + "id(\"org.jetbrains.kotlin.test.kotlin-compiler-args-properties\") version test_fixes_version" + ) + } else it + } +} + +private fun File.updateSettingsGradle() { + modify { + if (it.contains("pluginManagement {")) { + it.replaceFirst("plugins {", "plugins {\n"+ + "id \"org.jetbrains.kotlin.test.kotlin-compiler-args-properties\" version \"${'$'}test_fixes_version\"") + } else it + } +} + +private fun File.updateBuildKtsGradle() { + modify { + if (it.contains("buildscript {")) { + it.replaceFirst( + "dependencies {", "dependencies {\n" + + "classpath(\"org.jetbrains.kotlin:kotlin-compiler-args-properties:${'$'}test_fixes_version\")" + ) + } else { + it.replace( + "plugins {", + "plugins {\nid(\"org.jetbrains.kotlin.test.kotlin-compiler-args-properties\")" + ) + } + } +} +private fun File.updateBuildGradle() { + modify { + if (it.contains("buildscript {")) { + it.replaceFirst( + "dependencies {", "dependencies {\n" + + "classpath \"org.jetbrains.kotlin:kotlin-compiler-args-properties:${'$'}test_fixes_version\"" + ) + } else { + it.replace( + "plugins {", + "plugins {\nid \"org.jetbrains.kotlin.test.kotlin-compiler-args-properties\"" + ) + } + } +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/projectSetupDefaults.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/projectSetupDefaults.kt index 8c67f1ac957..abaa7b544e8 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/projectSetupDefaults.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/projectSetupDefaults.kt @@ -37,6 +37,7 @@ internal val DEFAULT_GROOVY_SETTINGS_FILE = id "org.jetbrains.kotlin.gradle-subplugin-example" version "${'$'}kotlin_version" id "org.jetbrains.kotlin.plugin.atomicfu" version "${'$'}kotlin_version" id "org.jetbrains.kotlin.test.gradle-warnings-detector" version "${'$'}test_fixes_version" + id "org.jetbrains.kotlin.test.kotlin-compiler-args-properties" version "${'$'}test_fixes_version" } resolutionStrategy { @@ -96,6 +97,7 @@ internal val DEFAULT_KOTLIN_SETTINGS_FILE = id("org.jetbrains.kotlin.gradle-subplugin-example") version kotlin_version id("org.jetbrains.kotlin.plugin.atomicfu") version kotlin_version id("org.jetbrains.kotlin.test.gradle-warnings-detector") version test_fixes_version + id("org.jetbrains.kotlin.test.kotlin-compiler-args-properties") version test_fixes_version } resolutionStrategy { diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/testDsl.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/testDsl.kt index f39ad48ab06..91e4fcd59f8 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/testDsl.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/testDsl.kt @@ -74,6 +74,7 @@ fun KGPBaseTest.project( ) localRepoDir?.let { testProject.configureLocalRepository(localRepoDir) } if (buildJdk != null) testProject.setupNonDefaultJdk(buildJdk) + testProject.addKotlinCompilerArgumentsPlugin() val result = runCatching { testProject.test() @@ -314,6 +315,27 @@ class TestProject( ) : GradleProject(projectName, projectPath) { fun subProject(name: String) = GradleProject(name, projectPath.resolve(name)) + fun addKotlinCompilerArgumentsPlugin() { + if (buildOptions.languageVersion != null || buildOptions.languageApiVersion != null ) { + projectPath.toFile().walkTopDown().forEach { file -> + when { + file.name.equals("build.gradle") -> file.modify { + it.replaceFirst( + "plugins {", + "plugins {\nid \"org.jetbrains.kotlin.test.kotlin-compiler-args-properties\"" + ) + } + file.name.equals("build.gradle.kts") -> file.modify { + it.replaceFirst( + "plugins {", + "plugins {\nid(\"org.jetbrains.kotlin.test.kotlin-compiler-args-properties\")" + ) + } + } + } + } + } + fun includeOtherProjectAsSubmodule( otherProjectName: String, pathPrefix: String diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-source-set-hierarchy-analysis/settings.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-source-set-hierarchy-analysis/settings.gradle.kts index 0f0194bd711..85bcb7c6ca4 100755 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-source-set-hierarchy-analysis/settings.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-source-set-hierarchy-analysis/settings.gradle.kts @@ -3,9 +3,10 @@ pluginManagement { mavenLocal() gradlePluginPortal() } + + val test_fixes_version: String by settings plugins { val kotlin_version: String by settings - val test_fixes_version: String by settings kotlin("multiplatform").version(kotlin_version) id("org.jetbrains.kotlin.test.fixes.android") version test_fixes_version } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-sources-publication/producer/settings.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-sources-publication/producer/settings.gradle.kts index d6c2165e907..a892e6417d2 100755 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-sources-publication/producer/settings.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-sources-publication/producer/settings.gradle.kts @@ -3,8 +3,8 @@ pluginManagement { mavenLocal() gradlePluginPortal() } + val kotlin_version: String by settings plugins { - val kotlin_version: String by settings val test_fixes_version: String by settings kotlin("multiplatform").version(kotlin_version) id("org.jetbrains.kotlin.test.fixes.android") version test_fixes_version diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/PropertiesProvider.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/PropertiesProvider.kt index 6d9e6108d73..06ea89d5143 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/PropertiesProvider.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/PropertiesProvider.kt @@ -197,9 +197,6 @@ internal class PropertiesProvider private constructor(private val project: Proje val useK2: Boolean? get() = booleanProperty("kotlin.useK2") - val languageVersion: String? - get() = property("kotlin.internal.languageVersion") - val keepMppDependenciesIntactInPoms: Boolean? get() = booleanProperty("kotlin.mpp.keepMppDependenciesIntactInPoms") diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/DefautlKotlinCompilationPreConfigure.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/DefautlKotlinCompilationPreConfigure.kt index fb82248694b..881cdcd32fb 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/DefautlKotlinCompilationPreConfigure.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/DefautlKotlinCompilationPreConfigure.kt @@ -8,5 +8,5 @@ package org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory.KotlinCompilationImplFactory internal val DefaultKotlinCompilationPreConfigure = KotlinCompilationImplFactory.PreConfigure.composite( - KotlinCompilationLanguageVersionConfigurator, KotlinCompilationK2MultiplatformConfigurator + KotlinCompilationK2MultiplatformConfigurator ) \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/KotlinCompilationLanguageVersionConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/KotlinCompilationLanguageVersionConfigurator.kt deleted file mode 100644 index 8bf297c55be..00000000000 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/KotlinCompilationLanguageVersionConfigurator.kt +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. - * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. - */ - -package org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl - -import org.jetbrains.kotlin.gradle.dsl.KotlinVersion -import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.Companion.kotlinPropertiesProvider -import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory.KotlinCompilationImplFactory - -internal object KotlinCompilationLanguageVersionConfigurator : KotlinCompilationImplFactory.PreConfigure { - override fun configure(compilation: KotlinCompilationImpl) { - compilation.project.kotlinPropertiesProvider.languageVersion?.let { languageVersionString -> - compilation.compilerOptions.options.languageVersion.convention(KotlinVersion.fromVersion(languageVersionString)) - } - } -} \ No newline at end of file diff --git a/repo/codebase-tests/tests/org/jetbrains/kotlin/code/CodeConformanceTest.kt b/repo/codebase-tests/tests/org/jetbrains/kotlin/code/CodeConformanceTest.kt index 1625f5b2b7d..289c8129dfb 100644 --- a/repo/codebase-tests/tests/org/jetbrains/kotlin/code/CodeConformanceTest.kt +++ b/repo/codebase-tests/tests/org/jetbrains/kotlin/code/CodeConformanceTest.kt @@ -111,6 +111,7 @@ class CodeConformanceTest : TestCase() { "libraries/tools/atomicfu/build", "libraries/tools/gradle/android-test-fixes/build", "libraries/tools/gradle/gradle-warnings-detector/build", + "libraries/tools/gradle/kotlin-compiler-args-properties/build", "libraries/tools/kotlin-allopen/build", "libraries/tools/kotlin-assignment/build", "libraries/tools/kotlin-gradle-build-metrics/build", diff --git a/settings.gradle b/settings.gradle index e8564a1a3c1..a15cd98150d 100644 --- a/settings.gradle +++ b/settings.gradle @@ -203,6 +203,7 @@ include ":kotlin-imports-dumper-compiler-plugin", ":kotlin-gradle-plugins-bom", ":gradle:android-test-fixes", ":gradle:gradle-warnings-detector", + ":gradle:kotlin-compiler-args-properties", ":gradle:regression-benchmark-templates", ":gradle:regression-benchmarks", ":kotlin-tooling-metadata", @@ -716,6 +717,7 @@ project(':kotlin-gradle-plugin-integration-tests').projectDir = "$rootDir/librar project(':kotlin-gradle-plugins-bom').projectDir = "$rootDir/libraries/tools/kotlin-gradle-plugins-bom" as File project(':gradle:android-test-fixes').projectDir = "$rootDir/libraries/tools/gradle/android-test-fixes" as File project(':gradle:gradle-warnings-detector').projectDir = "$rootDir/libraries/tools/gradle/gradle-warnings-detector" as File +project(':gradle:kotlin-compiler-args-properties').projectDir = "$rootDir/libraries/tools/gradle/kotlin-compiler-args-properties" as File project(":gradle:regression-benchmark-templates").projectDir = "$rootDir/libraries/tools/gradle/regression-benchmark-templates" as File project(":gradle:regression-benchmarks").projectDir = "$rootDir/libraries/tools/gradle/regression-benchmarks" as File project(':kotlin-tooling-metadata').projectDir = "$rootDir/libraries/tools/kotlin-tooling-metadata" as File