Skip to content

Commit 070c8c3

Browse files
committed
Fixed bundled KGP with the plugin
1 parent b20c38b commit 070c8c3

File tree

29 files changed

+133
-49
lines changed

29 files changed

+133
-49
lines changed

gradle-plugin/build.gradle.kts

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ tasks.withType<KotlinCompile>().configureEach {
2929
}
3030

3131
dependencies {
32-
implementation(libs.kotlin.gradle.plugin)
32+
compileOnly(libs.kotlin.gradle.plugin)
33+
compileOnly(libs.android.gradle.plugin)
3334

3435
testImplementation(libs.kotlin.gradle.plugin)
3536
testImplementation(gradleTestKit())
@@ -50,9 +51,17 @@ tasks.test {
5051

5152
useJUnitPlatform()
5253

53-
val includedBuild = gradle.includedBuild("protoc-gen")
54-
dependsOn(includedBuild.task(":grpc:publishAllPublicationsToBuildRepoRepository"))
55-
dependsOn(includedBuild.task(":protobuf:publishAllPublicationsToBuildRepoRepository"))
54+
val protocGen = gradle.includedBuild("protoc-gen")
55+
dependsOn(protocGen.task(":grpc:publishAllPublicationsToBuildRepoRepository"))
56+
dependsOn(protocGen.task(":protobuf:publishAllPublicationsToBuildRepoRepository"))
57+
58+
val compilerPlugin = gradle.includedBuild("compiler-plugin")
59+
dependsOn(compilerPlugin.task(":compiler-plugin-cli:publishAllPublicationsToBuildRepoRepository"))
60+
dependsOn(compilerPlugin.task(":compiler-plugin-k2:publishAllPublicationsToBuildRepoRepository"))
61+
dependsOn(compilerPlugin.task(":compiler-plugin-backend:publishAllPublicationsToBuildRepoRepository"))
62+
dependsOn(compilerPlugin.task(":compiler-plugin-common:publishAllPublicationsToBuildRepoRepository"))
63+
64+
dependsOn(":publishAllPublicationsToBuildRepoRepository")
5665
}
5766

5867
// This block is needed to show plugin tasks on --dry-run
@@ -103,7 +112,7 @@ generateSource(
103112
text = """
104113
package kotlinx.rpc
105114
106-
const val KOTLIN_VERSION: String = "${libs.versions.kotlin.lang.get()}"
115+
const val RPC_VERSION: String = "${libs.versions.kotlinx.rpc.get()}"
107116
108117
const val BUILD_REPO: String = "${File(globalRootDir).resolve("build/repo").absolutePath}"
109118
""".trimIndent(),

gradle-plugin/src/main/kotlin/kotlinx/rpc/RpcGradlePlugin.kt

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,16 @@ package kotlinx.rpc
66

77
import kotlinx.rpc.protoc.configurePluginProtections
88
import kotlinx.rpc.protoc.createProtoExtensions
9+
import org.gradle.api.GradleException
910
import org.gradle.api.Plugin
1011
import org.gradle.api.Project
1112
import org.gradle.kotlin.dsl.create
1213

1314
@Suppress("unused")
1415
public class RpcGradlePlugin : Plugin<Project> {
1516
override fun apply(target: Project) {
17+
checkKGPIsInTheClasspath()
18+
1619
target.extensions.create<RpcExtension>("rpc")
1720

1821
applyCompilerPlugin(target)
@@ -28,3 +31,22 @@ public class RpcGradlePlugin : Plugin<Project> {
2831
target.plugins.apply(CompilerPluginCli::class.java)
2932
}
3033
}
34+
35+
private fun checkKGPIsInTheClasspath() {
36+
try {
37+
Class.forName("org.jetbrains.kotlin.gradle.plugin.KotlinCompilerPluginSupportPlugin")
38+
} catch (_: ClassNotFoundException) {
39+
throw GradleException(
40+
"""
41+
Kotlin Gradle plugin is not applied to the project.
42+
Please ensure that Kotlin Gradle plugin is applied to the project in the plugins block:
43+
44+
plugins {
45+
kotlin("jvm") version "..." // or
46+
kotlin("multiplatform") version "..." // or
47+
kotlin("android") version "..."
48+
}
49+
""".trimIndent()
50+
)
51+
}
52+
}

gradle-plugin/src/main/kotlin/kotlinx/rpc/protoc/DefaultProtoSourceSet.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ import org.gradle.kotlin.dsl.property
2626
import org.gradle.kotlin.dsl.setProperty
2727
import org.gradle.kotlin.dsl.the
2828
import org.jetbrains.kotlin.gradle.dsl.ExplicitApiMode
29-
import org.jetbrains.kotlin.gradle.dsl.KotlinBaseExtension
29+
import org.jetbrains.kotlin.gradle.dsl.KotlinProjectExtension
3030
import java.io.File
3131
import java.util.*
3232
import java.util.function.Consumer
@@ -57,7 +57,7 @@ internal open class DefaultProtoSourceSet(
5757
)
5858

5959
private val explicitApiModeEnabled = project.provider {
60-
project.the<KotlinBaseExtension>().explicitApi != ExplicitApiMode.Disabled
60+
project.the<KotlinProjectExtension>().explicitApi != ExplicitApiMode.Disabled
6161
}
6262

6363
val plugins = project.objects.setProperty<ProtocPlugin>()
@@ -137,7 +137,8 @@ internal fun Project.createProtoExtensions() {
137137
findOrCreateAndConfigure(name, this)
138138
}
139139

140-
project.extensions.configure<SourceSetContainer>("sourceSets") {
140+
// this@createProtoExtensions: fails on KGP 2.0.0 otherwise
141+
this@createProtoExtensions.project.extensions.configure<SourceSetContainer>("sourceSets") {
141142
all {
142143
val protoSourceSet = findOrCreateAndConfigure(name, this)
143144

gradle-plugin/src/test/kotlin/kotlinx/rpc/base/BaseTest.kt

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import kotlin.io.path.copyToRecursively
1717
import kotlin.io.path.readText
1818
import kotlin.io.path.writeText
1919
import kotlinx.rpc.BUILD_REPO
20+
import kotlinx.rpc.RPC_VERSION
2021
import org.junit.jupiter.api.DynamicTest
2122
import java.util.stream.Stream
2223
import kotlin.io.path.absolute
@@ -26,7 +27,17 @@ import kotlin.io.path.deleteRecursively
2627
class VersionsEnv(
2728
val gradle: String,
2829
val kotlin: String,
29-
)
30+
) {
31+
val kotlinSemver = run {
32+
val (major, minor, patch) = kotlin.split(".").map { it.toInt() }
33+
KotlinVersion(major, minor, patch)
34+
}
35+
}
36+
37+
internal object KtVersion {
38+
val v2_2_20 = KotlinVersion(2, 2, 20)
39+
val v2_0_0 = KotlinVersion(2, 0, 0)
40+
}
3041

3142
private val GradleVersions = listOf(
3243
VersionsEnv("9.2.1", "2.2.21"),
@@ -103,6 +114,7 @@ abstract class BaseTest {
103114
val buildScriptFile = projectDir.resolve("build.gradle.kts")
104115
buildScriptFile
105116
.replace("<kotlin-version>", versions.kotlin)
117+
.replace("<rpc-version>", RPC_VERSION)
106118

107119
println("""
108120
Setup project '$projectName'
@@ -121,7 +133,6 @@ abstract class BaseTest {
121133
.withProjectDir(projectDir.absolute().toFile())
122134
.withTestKitDir(TEST_KIT_PATH.absolute().toFile())
123135
.withGradleVersion(versions.gradle)
124-
.withPluginClasspath()
125136
.withArguments(
126137
listOfNotNull(
127138
task,
@@ -193,8 +204,9 @@ abstract class BaseTest {
193204
}
194205
}
195206

196-
protected fun Path.replace(oldValue: String, newValue: String) {
207+
protected fun Path.replace(oldValue: String, newValue: String): Path {
197208
writeText(readText().replace(oldValue, newValue))
209+
return this
198210
}
199211

200212
companion object {

gradle-plugin/src/test/kotlin/kotlinx/rpc/base/GrpcBaseTest.kt

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -247,13 +247,25 @@ abstract class GrpcBaseTest : BaseTest() {
247247
sourceSet: SSets,
248248
vararg imports: SSets,
249249
) {
250+
if (!sourceSet.applicable()) {
251+
println("Skipping ${sourceSet.capital} source set because it's not applicable for the current Kotlin version")
252+
return
253+
}
254+
250255
val ktFile = "${sourceSet.capital}.kt"
251-
val importsSet = imports.toSet()
256+
val importsSet = imports
257+
.onEach {
258+
if (!it.applicable()) {
259+
println("Skipping ${it.capital} import source set because it's not applicable for the current Kotlin version")
260+
}
261+
}
262+
.filter { it.applicable() }
263+
.toSet()
252264

253265
assertTaskExecuted(
254266
sourceSet = sourceSet,
255267
protoFiles = listOf(Path("${sourceSet.name}.proto")),
256-
importProtoFiles = imports.map {
268+
importProtoFiles = importsSet.map {
257269
Path("${it.name}.proto")
258270
},
259271
generatedFiles = listOf(
@@ -319,16 +331,20 @@ abstract class GrpcBaseTest : BaseTest() {
319331
.resolve(name)
320332
.resolve("proto")
321333
}
334+
335+
fun SSets.applicable(): Boolean {
336+
return versions.kotlinSemver >= minKotlin
337+
}
322338
}
323339

324-
@Suppress("EnumEntryName")
325-
enum class SSets {
340+
@Suppress("EnumEntryName", "detekt.EnumNaming")
341+
enum class SSets(val minKotlin: KotlinVersion = KtVersion.v2_0_0) {
326342
main, test,
327343

328344
commonMain, commonTest,
329345
jvmMain, jvmTest,
330346
androidMain, androidTest,
331-
webMain, webTest,
347+
webMain(KtVersion.v2_2_20), webTest(KtVersion.v2_2_20),
332348
jsMain, jsTest,
333349
nativeMain, nativeTest,
334350
appleMain, appleTest,

gradle-plugin/src/test/resources/projects/GrpcJvmProjectTest/buf_tasks/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import javax.inject.Inject
1212

1313
plugins {
1414
kotlin("jvm") version "<kotlin-version>"
15-
id("org.jetbrains.kotlinx.rpc.plugin")
15+
id("org.jetbrains.kotlinx.rpc.plugin") version "<rpc-version>"
1616
}
1717

1818
public abstract class BufLintTask @Inject constructor(properties: BufExecTask.Properties) : BufExecTask(properties) {

gradle-plugin/src/test/resources/projects/GrpcJvmProjectTest/can_add_custom_protoc_plugins/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import kotlinx.rpc.protoc.*
77

88
plugins {
99
kotlin("jvm") version "<kotlin-version>"
10-
id("org.jetbrains.kotlinx.rpc.plugin")
10+
id("org.jetbrains.kotlinx.rpc.plugin") version "<rpc-version>"
1111
}
1212

1313
rpc {

gradle-plugin/src/test/resources/projects/GrpcJvmProjectTest/custom_buf_cli_flags/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import kotlin.time.Duration.Companion.seconds
1010

1111
plugins {
1212
kotlin("jvm") version "<kotlin-version>"
13-
id("org.jetbrains.kotlinx.rpc.plugin")
13+
id("org.jetbrains.kotlinx.rpc.plugin") version "<rpc-version>"
1414
}
1515

1616
rpc {

gradle-plugin/src/test/resources/projects/GrpcJvmProjectTest/custom_protoc_plugins_must_declare_an_artifact/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import kotlinx.rpc.protoc.*
77

88
plugins {
99
kotlin("jvm") version "<kotlin-version>"
10-
id("org.jetbrains.kotlinx.rpc.plugin")
10+
id("org.jetbrains.kotlinx.rpc.plugin") version "<rpc-version>"
1111
}
1212

1313
kotlin.sourceSets.main.proto {

gradle-plugin/src/test/resources/projects/GrpcJvmProjectTest/exclude_and_include_in_proto_sourcesets/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import kotlinx.rpc.protoc.*
77

88
plugins {
99
kotlin("jvm") version "<kotlin-version>"
10-
id("org.jetbrains.kotlinx.rpc.plugin")
10+
id("org.jetbrains.kotlinx.rpc.plugin") version "<rpc-version>"
1111
}
1212

1313
kotlin.sourceSets.apply {

0 commit comments

Comments
 (0)