diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 4a9452bd7f9..820c08bd933 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -22,6 +22,8 @@ jgit = "6.6.0.202305301015-r" junit4 = "4.13.2" junit5 = "5.10.0" junit-platform = "1.10.0" +android-gradle-plugin = "7.1.3" +android-tools = "30.3.1" [libraries] dexMemberList = { module = "com.jakewharton.dex:dex-member-list", version.ref = "dexMemberList" } @@ -64,5 +66,11 @@ junit-platform-launcher = { module = "org.junit.platform:junit-platform-launcher junit-platform-runner = { module = "org.junit.platform:junit-platform-runner", version.ref = "junit-platform" } junit-platform-suite-api = { module = "org.junit.platform:junit-platform-suite-api", version.ref = "junit-platform" } +android-gradle-plugin-gradle-api = { module = "com.android.tools.build:gradle-api", version.ref = "android-gradle-plugin" } +android-gradle-plugin-gradle = { module = "com.android.tools.build:gradle", version.ref = "android-gradle-plugin" } +android-gradle-plugin-builder = { module = "com.android.tools.build:builder", version.ref = "android-gradle-plugin" } +android-gradle-plugin-builder-model = { module = "com.android.tools.build:builder-model", version.ref = "android-gradle-plugin" } +android-tools-common = { module = "com.android.tools:common", version.ref = "android-tools" } + [plugins] jetbrains-ideaExt = { id = "org.jetbrains.gradle.plugin.idea-ext", version.ref = "jetbrains-ideaExt" } diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 9587e7e970d..3ffbf5d92ca 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -136,24 +136,12 @@ - - - - - - - - - - - - @@ -172,48 +160,42 @@ - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - @@ -232,36 +214,18 @@ - - - - - - - - - - - - - - - - - - @@ -304,12 +268,6 @@ - - - - - - @@ -322,12 +280,6 @@ - - - - - - @@ -346,10 +298,10 @@ - - - - + + + + @@ -370,10 +322,10 @@ - - - - + + + + @@ -406,10 +358,10 @@ - - - - + + + + @@ -424,10 +376,10 @@ - - - - + + + + @@ -448,12 +400,6 @@ - - - - - - @@ -484,12 +430,6 @@ - - - - - - @@ -502,12 +442,6 @@ - - - - - - @@ -1030,12 +964,6 @@ - - - - - - @@ -1480,12 +1408,6 @@ - - - - - - @@ -2222,12 +2144,6 @@ - - - - - - @@ -2588,12 +2504,6 @@ - - - - - - @@ -2654,24 +2564,12 @@ - - - - - - - - - - - - @@ -3182,12 +3080,6 @@ - - - - - - @@ -3200,12 +3092,6 @@ - - - - - - @@ -3740,12 +3626,6 @@ - - - - - - @@ -3816,12 +3696,6 @@ - - - - - - @@ -3918,12 +3792,6 @@ - - - - - - @@ -3948,12 +3816,6 @@ - - - - - - diff --git a/libraries/tools/kotlin-gradle-plugin-api/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-api/build.gradle.kts index 0ed255c6704..760bb92eebd 100644 --- a/libraries/tools/kotlin-gradle-plugin-api/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin-api/build.gradle.kts @@ -16,14 +16,6 @@ dependencies { commonApi(project(":kotlin-tooling-core")) commonCompileOnly(project(":kotlin-gradle-compiler-types")) - commonCompileOnly("com.android.tools.build:gradle-api:4.2.2") { - // Without it - Gradle dependency resolution fails with unexpected error - // Caused by: java.lang.IllegalStateException: Unexpected parent dependency id 131. Seen ids: [129, 2, 130, 9, 10, 138, 11, 139, 140, 14, 153, 154, 155, 156, 157, 158, 161, 164, 177, 178, 51, 179, 52, 180, 53, 54, 55, 183, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 195, 68, 200, 201, 202, 203, 206, 211, 212, 215, 222, 223, 224, 231, 232, 105, 233, 106, 107, 108, 109, 110, 111, 112, 113, 114, 242, 115, 243, 116, 244, 117, 118, 119, 120, 121, 122] - // at org.gradle.api.internal.artifacts.ivyservice.resolveengine.oldresult.TransientConfigurationResultsBuilder.deserialize(TransientConfigurationResultsBuilder.java:171) - // at org.gradle.api.internal.artifacts.ivyservice.resolveengine.oldresult.TransientConfigurationResultsBuilder.lambda$load$5(TransientConfigurationResultsBuilder.java:117) - // Could be reproduced by running `:kotlin-gradle-plugin-api:gPFFPMP` task - isTransitive = false - } embedded(project(":kotlin-gradle-compiler-types")) { isTransitive = false } } 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 4d0194853e7..55adedcd2fb 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 @@ -444,8 +444,6 @@ class CompilerOptionsProjectIT : KGPBaseTest() { @DisplayName("KT-57959: should be possible to configure module name in MPP/android") @GradleAndroidTest - @GradleTestVersions(minVersion = TestVersions.Gradle.G_7_0) - @AndroidTestVersions(minVersion = TestVersions.AGP.AGP_70) @AndroidGradlePluginTests @Disabled("DSL was demoted to 'internal'; Design is planned for 2.0") fun mppAndroidModuleName( diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/android/ExternalAndroidTargetIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/android/ExternalAndroidTargetIT.kt index faf209d705f..153d1da6230 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/android/ExternalAndroidTargetIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/android/ExternalAndroidTargetIT.kt @@ -19,7 +19,7 @@ import java.nio.file.Path import kotlin.io.path.readText import kotlin.test.fail -@GradleTestVersions(minVersion = TestVersions.Gradle.G_8_1) +@GradleTestVersions(minVersion = TestVersions.Gradle.G_8_2) @AndroidTestVersions(minVersion = TestVersions.AGP.AGP_82) @AndroidGradlePluginTests class ExternalAndroidTargetIT : KGPBaseTest() { diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/android/Kapt3AndroidExternalIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/android/Kapt3AndroidExternalIT.kt index 7bfdbc653d1..c61dc2b58ef 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/android/Kapt3AndroidExternalIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/android/Kapt3AndroidExternalIT.kt @@ -194,7 +194,6 @@ open class Kapt3AndroidExternalIT : Kapt3BaseIT() { @DisplayName("kapt works with androidx") @GradleAndroidTest - @AndroidTestVersions(minVersion = TestVersions.AGP.AGP_42, maxVersion = TestVersions.AGP.AGP_42) fun testDatabindingWithAndroidX( gradleVersion: GradleVersion, agpVersion: String, diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/android/KotlinAndroidMppIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/android/KotlinAndroidMppIT.kt index 33ae4ebf252..a68ecac1c1a 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/android/KotlinAndroidMppIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/android/KotlinAndroidMppIT.kt @@ -8,10 +8,6 @@ package org.jetbrains.kotlin.gradle.android 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.TestVersions.AGP.AGP_70 -import org.jetbrains.kotlin.gradle.testbase.TestVersions.AGP.AGP_71 -import org.jetbrains.kotlin.gradle.testbase.TestVersions.Gradle.G_7_1 -import org.jetbrains.kotlin.gradle.testbase.TestVersions.Gradle.G_7_2 import org.jetbrains.kotlin.gradle.tooling.BuildKotlinToolingMetadataTask import org.jetbrains.kotlin.gradle.util.AGPVersion import org.jetbrains.kotlin.gradle.util.replaceText @@ -28,8 +24,6 @@ import kotlin.test.* @DisplayName("kotlin-android with mpp") @AndroidGradlePluginTests -@GradleTestVersions(minVersion = G_7_1) -@AndroidTestVersions(minVersion = AGP_70) class KotlinAndroidMppIT : KGPBaseTest() { @DisplayName("KotlinToolingMetadataArtifact is bundled into apk") @@ -67,8 +61,6 @@ class KotlinAndroidMppIT : KGPBaseTest() { } } - @AndroidTestVersions(minVersion = AGP_71) - @GradleTestVersions(minVersion = G_7_2) @DisplayName("mpp source sets are registered in AGP") @GradleAndroidTest fun testAndroidMppSourceSets( @@ -133,8 +125,6 @@ class KotlinAndroidMppIT : KGPBaseTest() { } } - @AndroidTestVersions(minVersion = AGP_70) - @GradleTestVersions(minVersion = G_7_2) @DisplayName("android mpp lib flavors publication can be configured") @GradleAndroidTest fun testMppAndroidLibFlavorsPublication( @@ -266,17 +256,10 @@ class KotlinAndroidMppIT : KGPBaseTest() { build("publish") { listOf("fooBar", "fooBaz").forEach { flavorName -> val flavor = flavorName.lowercase() - - val flavorAttributes = if (AGPVersion.fromString(agpVersion) > AGPVersion.v7_0_0) { - arrayOf( - "foo" to flavorName, - "com.android.build.api.attributes.ProductFlavor:foo" to flavorName - ) - } else { - arrayOf( - "foo" to flavorName - ) - } + val flavorAttributes = arrayOf( + "foo" to flavorName, + "com.android.build.api.attributes.ProductFlavor:foo" to flavorName + ) assertFileExists(groupDir.resolve("lib-androidlib-$flavor/1.0/lib-androidlib-$flavor-1.0.aar")) assertFileExists(groupDir.resolve("lib-androidlib-$flavor/1.0/lib-androidlib-$flavor-1.0-sources.jar")) @@ -319,16 +302,10 @@ class KotlinAndroidMppIT : KGPBaseTest() { listOf("fooBar", "fooBaz").forEach { flavorName -> val flavor = flavorName.lowercase() - val flavorAttributes = if (AGPVersion.fromString(agpVersion) > AGPVersion.v7_0_0) { - arrayOf( - "foo" to flavorName, - "com.android.build.api.attributes.ProductFlavor:foo" to flavorName - ) - } else { - arrayOf( - "foo" to flavorName - ) - } + val flavorAttributes = arrayOf( + "foo" to flavorName, + "com.android.build.api.attributes.ProductFlavor:foo" to flavorName + ) listOf("-debug", "").forEach { buildType -> assertFileExists(groupDir.resolve("lib-androidlib-$flavor$buildType/1.0/lib-androidlib-$flavor$buildType-1.0.aar")) @@ -587,8 +564,6 @@ class KotlinAndroidMppIT : KGPBaseTest() { } } - @AndroidTestVersions(minVersion = AGP_70) - @GradleTestVersions(minVersion = G_7_2) @DisplayName("KT-27714: custom attributes are copied to android compilation configurations") @GradleAndroidTest fun testCustomAttributesInAndroidTargets( @@ -796,10 +771,9 @@ class KotlinAndroidMppIT : KGPBaseTest() { } } + // TODO: improve it via KT-63409 @DisplayName("produced artifacts are consumable by projects with various AGP versions") @GradleAndroidTest - @AndroidTestVersions(minVersion = TestVersions.AGP.AGP_71) - @GradleTestVersions(minVersion = TestVersions.Gradle.G_7_2) // due AGP version limit ^ fun testAndroidMultiplatformPublicationAGPCompatibility( gradleVersion: GradleVersion, agpVersion: String, @@ -822,30 +796,20 @@ class KotlinAndroidMppIT : KGPBaseTest() { } } - val checkedConsumerAGPVersions = AGPVersion.testedVersions - .filter { version -> version >= AGPVersion.fromString(TestVersions.AGP.AGP_42) } - .filter { version -> version < AGPVersion.fromString(TestVersions.AGP.MAX_SUPPORTED) } - .map { it.toString() } + val checkedConsumerAGPVersions = TestVersions.AgpCompatibilityMatrix + .values() + .filter { agp -> AGPVersion.fromString(agp.version) < AGPVersion.fromString(TestVersions.AGP.MAX_SUPPORTED) } checkedConsumerAGPVersions.forEach { consumerAgpVersion -> - val agpTestVersion = TestVersions.AgpCompatibilityMatrix.values().find { it.version == consumerAgpVersion } - ?: fail("AGP version $consumerAgpVersion is not defined in TestVersions.AGP!") - val consumerGradleVersion = when { - gradleVersion < agpTestVersion.minSupportedGradleVersion -> agpTestVersion.minSupportedGradleVersion - gradleVersion > agpTestVersion.maxSupportedGradleVersion -> agpTestVersion.maxSupportedGradleVersion - else -> gradleVersion - } - println("Testing compatibility for AGP consumer version $consumerAgpVersion on Gradle ${consumerGradleVersion.version} (Producer: $agpVersion)") + println( + "Testing compatibility for AGP consumer version $consumerAgpVersion on Gradle" + + " ${consumerAgpVersion.minSupportedGradleVersion} (Producer: $agpVersion)" + ) project( "new-mpp-android-agp-compatibility", - consumerGradleVersion, - buildOptions = defaultBuildOptions.copy(androidVersion = consumerAgpVersion) - .suppressDeprecationWarningsOn( - "AGP relies on FileTrees for ignoring empty directories when using @SkipWhenEmpty which has been deprecated." - ) { options -> - consumerGradleVersion >= GradleVersion.version(TestVersions.Gradle.G_7_4) && AGPVersion.fromString(options.safeAndroidVersion) < AGPVersion.v7_1_0 - }, - buildJdk = jdkVersion.location, + consumerAgpVersion.minSupportedGradleVersion, + buildOptions = defaultBuildOptions.copy(androidVersion = consumerAgpVersion.version), + buildJdk = File(System.getProperty("jdk${consumerAgpVersion.requiredJdkVersion.majorVersion}Home")), localRepoDir = tempDir ) { /* @@ -860,7 +824,10 @@ class KotlinAndroidMppIT : KGPBaseTest() { */ build(":plainAndroidConsumer:assemble") } - println("Successfully tested compatibility for AGP consumer version $consumerAgpVersion on Gradle ${consumerGradleVersion.version} (Producer: $agpVersion)") + println( + "Successfully tested compatibility for AGP consumer version $consumerAgpVersion on Gradle" + + " ${consumerAgpVersion.minSupportedGradleVersion} (Producer: $agpVersion)" + ) } } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/android/MultiplatformAndroidSourceSetLayoutV2IT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/android/MultiplatformAndroidSourceSetLayoutV2IT.kt index b67882730ac..9ae9851c09b 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/android/MultiplatformAndroidSourceSetLayoutV2IT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/android/MultiplatformAndroidSourceSetLayoutV2IT.kt @@ -7,7 +7,6 @@ package org.jetbrains.kotlin.gradle.android import org.gradle.util.GradleVersion import org.jetbrains.kotlin.gradle.testbase.* -import org.jetbrains.kotlin.gradle.util.AGPVersion import org.junit.jupiter.api.DisplayName import kotlin.test.assertNull @@ -17,18 +16,11 @@ class MultiplatformAndroidSourceSetLayoutV2IT : KGPBaseTest() { @GradleAndroidTest @DisplayName("test Android project with flavors") - @AndroidTestVersions(minVersion = "7.0.4") - @GradleTestVersions(minVersion = TestVersions.Gradle.G_7_0) // due AGP version limit ^ fun testProjectWithFlavors(gradleVersion: GradleVersion, agpVersion: String, jdkVersion: JdkVersions.ProvidedJdk) { project( "multiplatformAndroidSourceSetLayout2", gradleVersion, - defaultBuildOptions.copy(androidVersion = agpVersion) - .suppressDeprecationWarningsOn( - "AGP relies on FileTrees for ignoring empty directories when using @SkipWhenEmpty which has been deprecated." - ) { options -> - gradleVersion >= GradleVersion.version(TestVersions.Gradle.G_7_4) && AGPVersion.fromString(options.safeAndroidVersion) < AGPVersion.v7_1_0 - }, + defaultBuildOptions.copy(androidVersion = agpVersion), buildJdk = jdkVersion.location ) { build("test") { 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 811a6281593..f4de6e177ef 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 @@ -27,10 +27,11 @@ import java.lang.Boolean as RefBoolean // Tests are not working with AGP >= 7.1.0. See KT-57351 for details +@Ignore("TODO: update this test via KT-58298") class AndroidAndJavaConsumeMppLibBuiltByGradle7IT : AndroidAndJavaConsumeMppLibIT() { - override val producerAgpVersion: AGPVersion = AGPVersion.v7_0_0 + override val producerAgpVersion: AGPVersion = AGPVersion.v7_1_0 override val producerGradleVersion: GradleVersionRequired = GradleVersionRequired.InRange( - TestVersions.Gradle.G_7_0, + TestVersions.Gradle.G_7_1, TestVersions.Gradle.G_7_6 ) } @@ -67,8 +68,7 @@ abstract class AndroidAndJavaConsumeMppLibIT : BaseGradleIT() { @Parameterized.Parameters(name = "Consumer(AGP={3}, Gradle={4}), flavors={0}, debugOnly={1}, published={2}") fun testCases(): List> { val consumers = listOf( - AGPVersion.v4_2_0 to GradleVersionRequired.Exact(TestVersions.Gradle.G_6_9), - AGPVersion.v7_0_0 to GradleVersionRequired.AtLeast(TestVersions.Gradle.G_7_6), + AGPVersion.v7_1_0 to GradleVersionRequired.AtLeast(TestVersions.Gradle.G_7_6), ) val buildParams = listOf( /* useFlavors, isAndroidPublishDebugOnly, isPublishedLibrary */ @@ -120,16 +120,12 @@ abstract class AndroidAndJavaConsumeMppLibIT : BaseGradleIT() { val producerBuildOptions: BuildOptions dependencyProject = Project("new-mpp-android", producerGradleVersion, minLogLevel = LogLevel.INFO).apply { - val usedProducerGradleVersion = chooseWrapperVersionOrFinishTest() + chooseWrapperVersionOrFinishTest() producerBuildOptions = defaultBuildOptions().copy( javaHome = jdk11Home, androidHome = KtTestUtil.findAndroidSdk(), androidGradlePluginVersion = producerAgpVersion, - ).suppressDeprecationWarningsOn( - "AGP relies on FileTrees for ignoring empty directories when using @SkipWhenEmpty which has been deprecated (Gradle 7.4)" - ) { options -> - GradleVersion.version(usedProducerGradleVersion) >= GradleVersion.version(TestVersions.Gradle.G_7_4) && options.safeAndroidGradlePluginVersion < AGPVersion.v7_1_0 - } + ) producerBuildOptions.androidHome?.let { acceptAndroidSdkLicenses(it) } projectDir.deleteRecursively() setupWorkingDir() @@ -296,7 +292,11 @@ abstract class AndroidAndJavaConsumeMppLibIT : BaseGradleIT() { "AGP uses deprecated IncrementalTaskInputs (Gradle 7.5)" ) { options -> // looks a bit messy :/ - (!isPublishedLibrary && (withKotlinVersion != null || options.safeAndroidGradlePluginVersion >= AGPVersion.v7_0_0) || isPublishedLibrary && withKotlinVersion == oldKotlinVersion) && + (!isPublishedLibrary && + (withKotlinVersion != null || options.safeAndroidGradlePluginVersion >= AGPVersion.v7_1_0) || + isPublishedLibrary && + withKotlinVersion == oldKotlinVersion + ) && GradleVersion.version(usedConsumerGradleVersion) >= GradleVersion.version(TestVersions.Gradle.G_7_5) && options.safeAndroidGradlePluginVersion < AGPVersion.v7_3_0 } @@ -308,7 +308,7 @@ abstract class AndroidAndJavaConsumeMppLibIT : BaseGradleIT() { * This test asserts the existing incorrect behavior for older Gradle versions * in the absence of the Kotlin Gradle plugin, in order to detect unintentional changes */ - val expectedVariant = if (consumerAgpVersion < AGPVersion.v7_0_0 && withKotlinVersion == null && !isPublishedLibrary) { + val expectedVariant = if (withKotlinVersion == null && !isPublishedLibrary) { "jvmLibApiElements" } else expected @@ -375,7 +375,7 @@ class ResolvedVariantChecker { } } - fun getResolvedVariantsBatch( + private fun getResolvedVariantsBatch( project: BaseGradleIT.Project, requests: Iterable, buildOptions: BaseGradleIT.BuildOptions = project.testCase.defaultBuildOptions() diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/MppCompositeBuildIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/MppCompositeBuildIT.kt index 753da1a9218..ad906d04779 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/MppCompositeBuildIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/MppCompositeBuildIT.kt @@ -354,8 +354,6 @@ class MppCompositeBuildIT : KGPBaseTest() { } } - @GradleTestVersions(minVersion = TestVersions.Gradle.G_7_1) - @AndroidTestVersions(minVersion = TestVersions.AGP.AGP_70) @GradleAndroidTest fun `test - sample6-KT-56712-umbrella-composite`( gradleVersion: GradleVersion, agpVersion: String, jdkVersion: JdkVersions.ProvidedJdk, diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/TestVersions.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/TestVersions.kt index 947268031e9..26c96724a1a 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/TestVersions.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/TestVersions.kt @@ -42,17 +42,15 @@ interface TestVersions { } object AGP { - const val AGP_42 = "4.2.2" - const val AGP_70 = "7.0.4" const val AGP_71 = "7.1.3" const val AGP_72 = "7.2.2" const val AGP_73 = "7.3.1" const val AGP_74 = "7.4.2" const val AGP_80 = "8.0.2" - const val AGP_81 = "8.1.0-rc01" - const val AGP_82 = "8.2.0-alpha13" + const val AGP_81 = "8.1.3" + const val AGP_82 = "8.2.0-rc03" - const val MIN_SUPPORTED = AGP_42 // KotlinAndroidPlugin.minimalSupportedAgpVersion + const val MIN_SUPPORTED = AGP_71 // KotlinAndroidPlugin.minimalSupportedAgpVersion const val MAX_SUPPORTED = AGP_81 // Update once Gradle MAX_SUPPORTED version will be bumped } @@ -62,15 +60,13 @@ interface TestVersions { val maxSupportedGradleVersion: GradleVersion, val requiredJdkVersion: JavaVersion ) { - AGP_42(AGP.AGP_42, GradleVersion.version(Gradle.MIN_SUPPORTED), GradleVersion.version(Gradle.G_6_9), JavaVersion.VERSION_1_8), - AGP_70(AGP.AGP_70, GradleVersion.version(Gradle.G_7_0), GradleVersion.version(Gradle.G_7_4), JavaVersion.VERSION_11), AGP_71(AGP.AGP_71, GradleVersion.version(Gradle.G_7_2), GradleVersion.version(Gradle.G_7_4), JavaVersion.VERSION_11), AGP_72(AGP.AGP_72, GradleVersion.version(Gradle.G_7_3), GradleVersion.version(Gradle.G_7_4), JavaVersion.VERSION_11), AGP_73(AGP.AGP_73, GradleVersion.version(Gradle.G_7_4), GradleVersion.version(Gradle.G_7_5), JavaVersion.VERSION_11), AGP_74(AGP.AGP_74, GradleVersion.version(Gradle.G_7_5), GradleVersion.version(Gradle.G_7_6), JavaVersion.VERSION_11), AGP_80(AGP.AGP_80, GradleVersion.version(Gradle.G_8_0), GradleVersion.version(Gradle.G_8_0), JavaVersion.VERSION_17), AGP_81(AGP.AGP_81, GradleVersion.version(Gradle.G_8_1), GradleVersion.version(Gradle.G_8_1), JavaVersion.VERSION_17), - AGP_82(AGP.AGP_82, GradleVersion.version(Gradle.G_8_1), GradleVersion.version(Gradle.G_8_3), JavaVersion.VERSION_17), + AGP_82(AGP.AGP_82, GradleVersion.version(Gradle.G_8_2), GradleVersion.version(Gradle.G_8_3), JavaVersion.VERSION_17), ; } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/argumentProviders.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/argumentProviders.kt index deac4e4e5d6..f0fcc5c1d3b 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/argumentProviders.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/argumentProviders.kt @@ -177,14 +177,13 @@ class GradleAndAgpArgumentsProvider : GradleArgumentsProvider() { gradleVersions .filter { it in agpVersion.minSupportedGradleVersion..agpVersion.maxSupportedGradleVersion } + .ifEmpty { + // Falling back to the minimal supported Gradle version for this AGP version + listOf(agpVersion.minSupportedGradleVersion) + } .map { AgpTestArguments(it, agpVersion.version, providedJdk) } - .also { - require(it.isNotEmpty()) { - "Could not find suitable Gradle version for AGP $agpVersion version!" - } - } } .asSequence() .map { diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/util/AGPVersion.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/util/AGPVersion.kt index f1fb52178d3..71193a66b7c 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/util/AGPVersion.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/util/AGPVersion.kt @@ -18,14 +18,7 @@ class AGPVersion private constructor(private val versionNumber: VersionNumber) { fun fromString(versionString: String): AGPVersion = AGPVersion(VersionNumber.parse(versionString)) - val v4_1_0 = fromString("4.1.3") - val v4_2_0 = fromString("4.2.2") - val v7_0_0 = fromString("7.0.4") val v7_1_0 = fromString("7.1.3") - val v7_2_2 = fromString("7.2.2") val v7_3_0 = fromString("7.3.1") - val v7_4_0 = fromString("7.4.2") - - val testedVersions = listOf(v4_1_0, v4_2_0, v7_0_0, v7_1_0, v7_2_2, v7_3_0, v7_4_0) } } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/externalAndroidTarget-project2project/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/externalAndroidTarget-project2project/build.gradle.kts index be11214d48c..2b1685c4916 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/externalAndroidTarget-project2project/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/externalAndroidTarget-project2project/build.gradle.kts @@ -21,7 +21,7 @@ kotlin { compileSdk = 33 namespace = "org.jetbrains.sample" - withAndroidTestOnJvm() + withAndroidTestOnJvm {} sourceSets.getByName("androidTestOnJvm").dependencies { implementation("junit:junit:4.13.2") } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/externalAndroidTarget-simple/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/externalAndroidTarget-simple/build.gradle.kts index aaf36e47d72..87b20119fcb 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/externalAndroidTarget-simple/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/externalAndroidTarget-simple/build.gradle.kts @@ -17,7 +17,7 @@ kotlin { compileSdk = 33 namespace = "org.jetbrains.sample" - withAndroidTestOnJvm() + withAndroidTestOnJvm {} sourceSets.getByName("androidTestOnJvm").dependencies { implementation("junit:junit:4.13.2") } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/android-databinding-androidX/app/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/android-databinding-androidX/app/build.gradle index 4d289774050..831698204d3 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/android-databinding-androidX/app/build.gradle +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/android-databinding-androidX/app/build.gradle @@ -1,13 +1,16 @@ -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply plugin: 'kotlin-kapt' +plugins { + id 'com.android.application' + id 'org.jetbrains.kotlin.android' + id 'org.jetbrains.kotlin.kapt' +} android { - compileSdkVersion 24 + compileSdkVersion 34 + namespace = "com.example.databinding" defaultConfig { applicationId "com.example.databinding" minSdkVersion 21 - targetSdkVersion 24 + targetSdkVersion 34 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" @@ -24,6 +27,5 @@ android { } dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" - implementation 'com.android.support.constraint:constraint-layout:1.0.2' -} \ No newline at end of file + implementation 'androidx.constraintlayout:constraintlayout:2.1.4' +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/android-databinding-androidX/app/src/main/AndroidManifest.xml b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/android-databinding-androidX/app/src/main/AndroidManifest.xml index 9173ea53496..8f947d60393 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/android-databinding-androidX/app/src/main/AndroidManifest.xml +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/android-databinding-androidX/app/src/main/AndroidManifest.xml @@ -1,7 +1,4 @@ - - + - - \ No newline at end of file + diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/android-databinding-androidX/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/android-databinding-androidX/build.gradle index b51edd42440..3c1bbe9bffa 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/android-databinding-androidX/build.gradle +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/android-databinding-androidX/build.gradle @@ -1,26 +1,8 @@ -import org.gradle.util.VersionNumber - // Top-level build file where you can add configuration options common to all sub-projects/modules. - -buildscript { - repositories { - mavenLocal() - maven { url 'https://maven.google.com' } - mavenCentral() - } - dependencies { - classpath "com.android.tools.build:gradle:$android_tools_version" - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - - // NOTE: Do not place your application dependencies here; they belong - // in the individual module build.gradle files - } -} - allprojects { repositories { mavenLocal() - maven { url 'https://maven.google.com' } + google() mavenCentral() } -} \ No newline at end of file +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/android-databinding-androidX/gradle.properties b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/android-databinding-androidX/gradle.properties index 5465fec0eca..5d5dfe05b99 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/android-databinding-androidX/gradle.properties +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/android-databinding-androidX/gradle.properties @@ -1,2 +1,4 @@ android.enableJetifier=true -android.useAndroidX=true \ No newline at end of file +android.useAndroidX=true + +kotlin.jvm.target.validation.mode=warning diff --git a/libraries/tools/kotlin-gradle-plugin/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin/build.gradle.kts index 7f3c3b59d7e..7c03ad52bcf 100644 --- a/libraries/tools/kotlin-gradle-plugin/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin/build.gradle.kts @@ -67,25 +67,11 @@ dependencies { commonCompileOnly(project(":kotlin-compiler-runner-unshaded")) commonCompileOnly(project(":kotlin-gradle-statistics")) commonCompileOnly(project(":kotlin-gradle-build-metrics")) - commonCompileOnly("com.android.tools.build:gradle:4.2.2") { - exclude("org.ow2.asm") - exclude("net.sf.proguard") - exclude("net.sf.jopt-simple") - exclude("com.squareup") - exclude("com.google.crypto.tink") - exclude("com.google.guava") - exclude("com.google.protobuf") - exclude("com.google.testing.platform") - exclude("com.android.tools.lint") - exclude("androidx.databinding") - exclude("com.android.tools.analytics-library") - exclude("com.android.tools.build.jetifier") - exclude("com.android.tools.build", "transform-api") - exclude("com.android.tools.build", "builder-test-api") - exclude("com.android.tools.build", "bundletool") - exclude("com.android.tools.build", "aaptcompiler") - exclude("com.android.tools.build", "aapt2-proto") - } + commonCompileOnly(libs.android.gradle.plugin.gradle.api) { isTransitive = false } + commonCompileOnly(libs.android.gradle.plugin.gradle) { isTransitive = false } + commonCompileOnly(libs.android.gradle.plugin.builder) { isTransitive = false } + commonCompileOnly(libs.android.gradle.plugin.builder.model) { isTransitive = false } + commonCompileOnly(libs.android.tools.common) { isTransitive = false } commonCompileOnly(intellijPlatformUtil()) commonCompileOnly(commonDependency("org.jetbrains.teamcity:serviceMessages")) commonCompileOnly(libs.gradle.enterprise.gradlePlugin) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinAndroidPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinAndroidPlugin.kt index 6aab6dca152..0fd014d11a4 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinAndroidPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinAndroidPlugin.kt @@ -56,7 +56,7 @@ internal open class KotlinAndroidPlugin( } companion object { - private val minimalSupportedAgpVersion = AndroidGradlePluginVersion(4, 2, 2) + private val minimalSupportedAgpVersion = AndroidGradlePluginVersion(7, 1, 3) fun androidTargetHandler(): AndroidProjectHandler { val tasksProvider = KotlinTasksProvider() val androidGradlePluginVersion = AndroidGradlePluginVersion.currentOrNull diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt index 17ce61fa39b..0595cb8c319 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt @@ -186,6 +186,11 @@ abstract class DefaultKotlinBasePlugin : KotlinBasePlugin { ConfigurationCacheStartParameterAccessor.Factory::class, DefaultConfigurationCacheStartParameterAccessorVariantFactory() ) + + factories.putIfAbsent( + SourceSetCompatibilityHelper.SourceSetCompatibilityHelperVariantFactory::class, + DefaultSourceSetCompatibilityHelperVariantFactory() + ) } protected fun setupAttributeMatchingStrategy( diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetConfigurator.kt index e372190f1aa..409d5822a17 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetConfigurator.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetConfigurator.kt @@ -6,17 +6,9 @@ package org.jetbrains.kotlin.gradle.plugin import org.gradle.api.Named -import org.gradle.api.NamedDomainObjectContainer import org.gradle.api.Project import org.gradle.api.artifacts.Configuration -import org.gradle.api.artifacts.type.ArtifactTypeDefinition import org.gradle.api.attributes.* -import org.gradle.api.plugins.BasePlugin -import org.gradle.api.plugins.ExtensionAware -import org.gradle.api.plugins.JavaBasePlugin -import org.gradle.api.tasks.TaskProvider -import org.gradle.api.tasks.bundling.Jar -import org.gradle.api.tasks.bundling.Zip import org.jetbrains.kotlin.gradle.plugin.mpp.* import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.runKotlinCompilationSideEffects import org.jetbrains.kotlin.gradle.targets.js.KotlinJsCompilerAttribute @@ -24,11 +16,7 @@ import org.jetbrains.kotlin.gradle.targets.js.KotlinWasmTargetAttribute import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTarget import org.jetbrains.kotlin.gradle.targets.js.toAttribute import org.jetbrains.kotlin.gradle.targets.runKotlinTargetSideEffects -import org.jetbrains.kotlin.gradle.tasks.registerTask import org.jetbrains.kotlin.gradle.utils.* -import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly -import kotlin.reflect.KMutableProperty1 -import kotlin.reflect.full.memberProperties interface KotlinTargetConfigurator { fun configureTarget( diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/SourceSetCompatibilityHelper.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/SourceSetCompatibilityHelper.kt new file mode 100644 index 00000000000..82bf7114e04 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/SourceSetCompatibilityHelper.kt @@ -0,0 +1,30 @@ +/* + * 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.internal + +import org.gradle.api.tasks.SourceSet +import org.jetbrains.kotlin.gradle.plugin.VariantImplementationFactories + +interface SourceSetCompatibilityHelper { + + fun getCompileConfigurationName(sourceSet: SourceSet): String? + + fun getRuntimeConfigurationName(sourceSet: SourceSet): String? + + interface SourceSetCompatibilityHelperVariantFactory : VariantImplementationFactories.VariantImplementationFactory { + fun getInstance(): SourceSetCompatibilityHelper + } +} + +internal class DefaultSourceSetCompatibilityHelperVariantFactory : SourceSetCompatibilityHelper.SourceSetCompatibilityHelperVariantFactory { + override fun getInstance(): SourceSetCompatibilityHelper = DefaultSourceSetCompatibilityHelper() +} + +internal class DefaultSourceSetCompatibilityHelper() : SourceSetCompatibilityHelper { + override fun getCompileConfigurationName(sourceSet: SourceSet): String? = null + + override fun getRuntimeConfigurationName(sourceSet: SourceSet): String? = null +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmTarget.kt index 952fef453f9..8edc559ca3b 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmTarget.kt @@ -29,6 +29,7 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinPluginLifecycle.Stage.AfterFinal import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinToolingDiagnostics import org.jetbrains.kotlin.gradle.plugin.diagnostics.reportDiagnostic import org.jetbrains.kotlin.gradle.plugin.internal.JavaSourceSetsAccessor +import org.jetbrains.kotlin.gradle.plugin.internal.SourceSetCompatibilityHelper import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmCompilation import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinOnlyTarget import org.jetbrains.kotlin.gradle.plugin.mpp.internal @@ -41,10 +42,8 @@ import org.jetbrains.kotlin.gradle.utils.* import org.jetbrains.kotlin.gradle.utils.Future import org.jetbrains.kotlin.gradle.utils.findAppliedAndroidPluginIdOrNull import org.jetbrains.kotlin.gradle.utils.future -import org.jetbrains.kotlin.utils.addToStdlib.cast import java.util.concurrent.Callable import javax.inject.Inject -import kotlin.reflect.full.functions abstract class KotlinJvmTarget @Inject constructor( project: Project, @@ -168,8 +167,11 @@ abstract class KotlinJvmTarget @Inject constructor( } project.launchInStage(AfterFinaliseDsl) { + val sourceSetCompatibilityHelper = project + .variantImplementationFactory() + .getInstance() javaSourceSets.all { javaSourceSet -> - copyUserDefinedAttributesToJavaConfigurations(javaSourceSet) + copyUserDefinedAttributesToJavaConfigurations(javaSourceSet, sourceSetCompatibilityHelper) } } @@ -259,12 +261,13 @@ abstract class KotlinJvmTarget @Inject constructor( // Add the Java source set dependencies to the Kotlin compilation compile & runtime configurations: + val sourceSetCompatibilityHelper = project + .variantImplementationFactory() + .getInstance() + val compileConfigurationName = if (areRuntimeOrCompileConfigurationsAvailable()) { - javaSourceSet::class - .functions - .find { it.name == "getCompileConfigurationName" } - ?.call(javaSourceSet) - ?.cast() + sourceSetCompatibilityHelper + .getCompileConfigurationName(javaSourceSet) ?.takeIf { project.configurations.findByName(it) != null } } else null @@ -278,11 +281,8 @@ abstract class KotlinJvmTarget @Inject constructor( } val runtimeConfigurationName = if (areRuntimeOrCompileConfigurationsAvailable()) { - javaSourceSet::class - .functions - .find { it.name == "getRuntimeConfigurationName" } - ?.call(javaSourceSet) - ?.cast() + sourceSetCompatibilityHelper + .getRuntimeConfigurationName(javaSourceSet) ?.takeIf { project.configurations.findByName(it) != null } } else null @@ -296,22 +296,19 @@ abstract class KotlinJvmTarget @Inject constructor( } } - private fun copyUserDefinedAttributesToJavaConfigurations(javaSourceSet: SourceSet) { + private fun copyUserDefinedAttributesToJavaConfigurations( + javaSourceSet: SourceSet, + sourceSetCompatibilityHelper: SourceSetCompatibilityHelper + ) { val compileConfigurationName = if (areRuntimeOrCompileConfigurationsAvailable()) { - javaSourceSet::class - .functions - .find { it.name == "getCompileConfigurationName" } - ?.call(javaSourceSet) - ?.cast() + sourceSetCompatibilityHelper + .getCompileConfigurationName(javaSourceSet) ?.takeIf { project.configurations.findByName(it) != null } } else null val runtimeConfigurationName = if (areRuntimeOrCompileConfigurationsAvailable()) { - javaSourceSet::class - .functions - .find { it.name == "getRuntimeConfigurationName" } - ?.call(javaSourceSet) - ?.cast() + sourceSetCompatibilityHelper + .getRuntimeConfigurationName(javaSourceSet) ?.takeIf { project.configurations.findByName(it) != null } } else null diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt index 669ed1eca2c..24db536fa0a 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt @@ -10,7 +10,6 @@ import org.gradle.api.Named import org.gradle.api.NamedDomainObjectContainer import org.gradle.api.Project import org.gradle.api.file.SourceDirectorySet -import org.gradle.api.model.ObjectFactory import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry import org.jetbrains.kotlin.gradle.plugin.internal.* import org.jetbrains.kotlin.gradle.plugin.internal.JavaSourceSetsAccessorG6 @@ -161,4 +160,6 @@ private fun Project.registerVariantImplementations() { factories[UnameExecutor.UnameExecutorVariantFactory::class] = UnameExecutorG6.UnameExecutorVariantFactoryG6() factories[ConfigurationCacheStartParameterAccessor.Factory::class] = ConfigurationCacheStartParameterAccessorG6.Factory() + factories[SourceSetCompatibilityHelper.SourceSetCompatibilityHelperVariantFactory::class] = + SourceSetCompatibilityHelperG6VariantFactory() } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/SourceSetCompatibilityHelperG6.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/SourceSetCompatibilityHelperG6.kt new file mode 100644 index 00000000000..e27eb83a649 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/SourceSetCompatibilityHelperG6.kt @@ -0,0 +1,24 @@ +/* + * 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.internal + +import org.gradle.api.tasks.SourceSet + +internal class SourceSetCompatibilityHelperG6 : SourceSetCompatibilityHelper { + override fun getCompileConfigurationName(sourceSet: SourceSet): String { + @Suppress("DEPRECATION") + return sourceSet.compileConfigurationName + } + + override fun getRuntimeConfigurationName(sourceSet: SourceSet): String { + @Suppress("DEPRECATION") + return sourceSet.runtimeConfigurationName + } +} + +internal class SourceSetCompatibilityHelperG6VariantFactory : SourceSetCompatibilityHelper.SourceSetCompatibilityHelperVariantFactory { + override fun getInstance(): SourceSetCompatibilityHelper = SourceSetCompatibilityHelperG6() +}