From 36e85fec95516c83e28cc8b7f78383024ce2b238 Mon Sep 17 00:00:00 2001 From: Yahor Berdnikau Date: Tue, 5 Dec 2023 22:59:43 +0100 Subject: [PATCH] [Gradle] Introduce public KotlinGradlePluginDsl marker annotation The purpose of this annotation is to distinguish different levels of DSL in KGP: - top level extension - target level DSL - compilation level DSL With this marker user should not be able to call implicit methods from upper levels of DSL, and it should reduce confusion with DSL usage. ^KT-57292 In Progress --- .../kotlin-dom-api-compat/build.gradle.kts | 26 +++++++++---------- .../api/kotlin-gradle-plugin-api.api | 3 +++ .../gradle/dsl/KotlinGradlePluginDsl.kt | 14 ++++++++++ .../dsl/kotlinTopLevelExtensionConfig.kt | 1 + .../kotlin/gradle/plugin/KotlinCompilation.kt | 2 ++ .../kotlin/gradle/plugin/KotlinTarget.kt | 2 ++ .../build.gradle.kts | 7 ++--- .../build.gradle.kts | 7 ++--- .../mpp-empty-sources/build.gradle.kts | 2 +- .../app/build.gradle.kts | 9 ++++--- .../libb/build.gradle.kts | 8 +++--- .../build.gradle.kts | 9 ++++--- .../app/build.gradle.kts | 9 ++++--- .../libb/build.gradle.kts | 8 +++--- .../app/build.gradle.kts | 3 ++- 15 files changed, 68 insertions(+), 42 deletions(-) create mode 100644 libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinGradlePluginDsl.kt diff --git a/libraries/kotlin-dom-api-compat/build.gradle.kts b/libraries/kotlin-dom-api-compat/build.gradle.kts index a3058ea79bf..5dc012d0eae 100644 --- a/libraries/kotlin-dom-api-compat/build.gradle.kts +++ b/libraries/kotlin-dom-api-compat/build.gradle.kts @@ -11,22 +11,20 @@ val jsStdlibSources = "${projectDir}/../stdlib/js/src" @Suppress("UNUSED_VARIABLE") kotlin { explicitApi() - js { - sourceSets { - val main by getting { - if (!kotlinBuildProperties.isInIdeaSync) { - kotlin.srcDir("$jsStdlibSources/org.w3c") - kotlin.srcDir("$jsStdlibSources/kotlinx") - kotlin.srcDir("$jsStdlibSources/kotlin/browser") - kotlin.srcDir("$jsStdlibSources/kotlin/dom") - } - dependencies { - api(project(":kotlin-stdlib")) - } + js() + + sourceSets { + val main by getting { + if (!kotlinBuildProperties.isInIdeaSync) { + kotlin.srcDir("$jsStdlibSources/org.w3c") + kotlin.srcDir("$jsStdlibSources/kotlinx") + kotlin.srcDir("$jsStdlibSources/kotlin/browser") + kotlin.srcDir("$jsStdlibSources/kotlin/dom") + } + dependencies { + api(project(":kotlin-stdlib")) } } - val main by compilations.getting - val test by compilations.getting } } 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 630b45a478b..ac9db54acde 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 @@ -257,6 +257,9 @@ public final class org/jetbrains/kotlin/gradle/dsl/KotlinCompile$DefaultImpls { public static fun kotlinOptions (Lorg/jetbrains/kotlin/gradle/dsl/KotlinCompile;Lorg/gradle/api/Action;)V } +public abstract interface annotation class org/jetbrains/kotlin/gradle/dsl/KotlinGradlePluginDsl : java/lang/annotation/Annotation { +} + public abstract interface class org/jetbrains/kotlin/gradle/dsl/KotlinHierarchyDsl { public abstract fun applyHierarchyTemplate (Lkotlin/jvm/functions/Function1;)V public abstract fun applyHierarchyTemplate (Lorg/jetbrains/kotlin/gradle/plugin/KotlinHierarchyTemplate;)V diff --git a/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinGradlePluginDsl.kt b/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinGradlePluginDsl.kt new file mode 100644 index 00000000000..bc7753c4904 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinGradlePluginDsl.kt @@ -0,0 +1,14 @@ +/* + * 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.dsl + +/** + * Marks a Kotlin Gradle plugin DSL language. + * + * @see DslMarker + */ +@DslMarker +annotation class KotlinGradlePluginDsl diff --git a/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/kotlinTopLevelExtensionConfig.kt b/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/kotlinTopLevelExtensionConfig.kt index 4e307a84383..bc4af149e27 100644 --- a/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/kotlinTopLevelExtensionConfig.kt +++ b/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/kotlinTopLevelExtensionConfig.kt @@ -15,6 +15,7 @@ package org.jetbrains.kotlin.gradle.dsl * } * ``` */ +@KotlinGradlePluginDsl interface KotlinTopLevelExtensionConfig { /** diff --git a/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinCompilation.kt b/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinCompilation.kt index 23df2348ad8..b3d5a3b1795 100644 --- a/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinCompilation.kt +++ b/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinCompilation.kt @@ -18,9 +18,11 @@ import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi import org.jetbrains.kotlin.gradle.dsl.KotlinCommonCompilerOptions import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptionsDeprecated import org.jetbrains.kotlin.gradle.dsl.KotlinCompileDeprecated +import org.jetbrains.kotlin.gradle.dsl.KotlinGradlePluginDsl import org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask import org.jetbrains.kotlin.tooling.core.HasMutableExtras +@KotlinGradlePluginDsl interface KotlinCompilation : Named, HasProject, HasMutableExtras, diff --git a/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTarget.kt b/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTarget.kt index 12f16e34125..4027c14dfb2 100644 --- a/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTarget.kt @@ -20,8 +20,10 @@ import org.jetbrains.kotlin.gradle.InternalKotlinGradlePluginApi import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi import org.jetbrains.kotlin.gradle.dsl.KotlinCommonCompilerOptions import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptionsDeprecated +import org.jetbrains.kotlin.gradle.dsl.KotlinGradlePluginDsl import org.jetbrains.kotlin.tooling.core.HasMutableExtras +@KotlinGradlePluginDsl interface KotlinTarget : Named, HasAttributes, HasProject, HasMutableExtras { val targetName: String val disambiguationClassifier: String? get() = targetName 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 2b1685c4916..51a6def58cc 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 @@ -22,9 +22,6 @@ kotlin { namespace = "org.jetbrains.sample" withAndroidTestOnJvm {} - sourceSets.getByName("androidTestOnJvm").dependencies { - implementation("junit:junit:4.13.2") - } } sourceSets { @@ -33,6 +30,10 @@ kotlin { api(project(":lib")) } } + + 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 87b20119fcb..5ad87bb8aae 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 @@ -18,8 +18,9 @@ kotlin { namespace = "org.jetbrains.sample" withAndroidTestOnJvm {} - sourceSets.getByName("androidTestOnJvm").dependencies { - implementation("junit:junit:4.13.2") - } + } + + sourceSets.getByName("androidTestOnJvm").dependencies { + implementation("junit:junit:4.13.2") } } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-empty-sources/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-empty-sources/build.gradle.kts index cdce99dfc55..f57aefc49b6 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-empty-sources/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-empty-sources/build.gradle.kts @@ -12,8 +12,8 @@ repositories { } kotlin { + jvmToolchain(8) jvm { - jvmToolchain(8) withJava() } js(IR) { diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-ir-linker-issues-gone-declaration/app/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-ir-linker-issues-gone-declaration/app/build.gradle.kts index 681ea1dccae..8883cd8d29a 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-ir-linker-issues-gone-declaration/app/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-ir-linker-issues-gone-declaration/app/build.gradle.kts @@ -20,10 +20,11 @@ kotlin { freeCompilerArgs.add("-Xpartial-linkage=disable") } } - sourceSets["commonMain"].dependencies { - implementation("org.sample:libb:1.0") // libb:1.0 is compatible with liba:1.0 only! - implementation("org.sample:liba:2.0") // liba:1.0 -> liba:2.0 - } + } + + sourceSets["commonMain"].dependencies { + implementation("org.sample:libb:1.0") // libb:1.0 is compatible with liba:1.0 only! + implementation("org.sample:liba:2.0") // liba:1.0 -> liba:2.0 } } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-ir-linker-issues-gone-declaration/libb/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-ir-linker-issues-gone-declaration/libb/build.gradle.kts index 3ab0e7ce61b..cdb144199a2 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-ir-linker-issues-gone-declaration/libb/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-ir-linker-issues-gone-declaration/libb/build.gradle.kts @@ -13,10 +13,10 @@ repositories { } kotlin { - ("native") { - sourceSets["nativeMain"].dependencies { - implementation("org.sample:liba:1.0") - } + ("native") + + sourceSets["nativeMain"].dependencies { + implementation("org.sample:liba:1.0") } } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-ir-linker-issues-ktor-and-coroutines/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-ir-linker-issues-ktor-and-coroutines/build.gradle.kts index 992e26da27f..e21bd04e0e5 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-ir-linker-issues-ktor-and-coroutines/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-ir-linker-issues-ktor-and-coroutines/build.gradle.kts @@ -19,10 +19,11 @@ kotlin { freeCompilerArgs.add("-Xpartial-linkage=disable") } } - sourceSets["commonMain"].dependencies { - implementation("io.ktor:ktor-client-core:1.5.4") - implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.0-RC-native-mt") - } + } + + sourceSets["commonMain"].dependencies { + implementation("io.ktor:ktor-client-core:1.5.4") + implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.0-RC-native-mt") } } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-ir-linker-issues-symbol-mismatch/app/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-ir-linker-issues-symbol-mismatch/app/build.gradle.kts index a3373c6d9f3..f83ac5ef295 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-ir-linker-issues-symbol-mismatch/app/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-ir-linker-issues-symbol-mismatch/app/build.gradle.kts @@ -20,10 +20,11 @@ kotlin { freeCompilerArgs.add("-Xpartial-linkage=disable") } } - sourceSets["commonMain"].dependencies { - implementation("org.sample:libb:1.0") - implementation("org.sample:liba:2.0") - } + } + + sourceSets["commonMain"].dependencies { + implementation("org.sample:libb:1.0") + implementation("org.sample:liba:2.0") } } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-ir-linker-issues-symbol-mismatch/libb/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-ir-linker-issues-symbol-mismatch/libb/build.gradle.kts index 3ab0e7ce61b..cdb144199a2 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-ir-linker-issues-symbol-mismatch/libb/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-ir-linker-issues-symbol-mismatch/libb/build.gradle.kts @@ -13,10 +13,10 @@ repositories { } kotlin { - ("native") { - sourceSets["nativeMain"].dependencies { - implementation("org.sample:liba:1.0") - } + ("native") + + sourceSets["nativeMain"].dependencies { + implementation("org.sample:liba:1.0") } } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/newMppMultipleTargetsSamePlatform/app/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/newMppMultipleTargetsSamePlatform/app/build.gradle.kts index d88a08de299..67afaf0fcd5 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/newMppMultipleTargetsSamePlatform/app/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/newMppMultipleTargetsSamePlatform/app/build.gradle.kts @@ -11,9 +11,10 @@ kotlin { } } + val commonMainSourceSet = sourceSets.commonMain.get() jvm("mixed") { configure(listOf(compilations.create("junit"), compilations.create("testng"))) { - defaultSourceSet.dependsOn(sourceSets["commonMain"]) + defaultSourceSet.dependsOn(commonMainSourceSet) attributes { attribute(testFrameworkAttribute, compilationName) }