Skip to content

Commit 9d93d59

Browse files
authored
Merge pull request #977 from simple-robot/upgrade-kt
Update Kotlin to 2.1.0; Update Gradle to 8.6; Update kcp: KSP, SuspendTransform
2 parents 5c3bd51 + 2fe778c commit 9d93d59

File tree

17 files changed

+271
-336
lines changed

17 files changed

+271
-336
lines changed

.github/workflows/publish-v4-release.yml

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ jobs:
5353
test-and-publish-v4-release:
5454
name: Publish v4 Release
5555
needs: test-pre-release
56-
runs-on: macos-latest
56+
runs-on: ubuntu-latest
5757
steps:
5858
- uses: actions/checkout@v4
5959
- uses: actions/setup-java@v4
@@ -82,35 +82,35 @@ jobs:
8282
SIMBOT_RELEASES_ONLY: true
8383
SIMBOT_SNAPSHOT_ONLY: false
8484

85-
publish-v4-snapshot:
86-
name: Publish V4 snapshot
87-
runs-on: macos-latest
88-
needs: test-and-publish-v4-release
89-
steps:
90-
- uses: actions/checkout@v4
91-
- uses: actions/setup-java@v4
92-
with:
93-
distribution: ${{ env.JAVA_DISTRIBUTION }}
94-
java-version: ${{ env.JAVA_VERSION }}
95-
cache: 'gradle'
96-
97-
# setup Gradle
98-
- name: Gradle publish snapshot
99-
uses: gradle/actions/setup-gradle@v3
100-
with:
101-
gradle-version: ${{ env.GRADLE_VERSION }}
102-
arguments: |
103-
publishToSonatype
104-
closeAndReleaseStagingRepositories
105-
-s
106-
--warning-mode all
107-
-x test
108-
--build-cache
109-
-Porg.gradle.jvmargs="-XX:MaxMetaspaceSize=1g -Dfile.encoding=UTF-8"
110-
env:
111-
SIMBOT_IS_SNAPSHOT: true
112-
SIMBOT_SNAPSHOT_ONLY: true
113-
SIMBOT_RELEASES_ONLY: false
85+
# publish-v4-snapshot:
86+
# name: Publish V4 snapshot
87+
# runs-on: ubuntu-latest
88+
# needs: test-and-publish-v4-release
89+
# steps:
90+
# - uses: actions/checkout@v4
91+
# - uses: actions/setup-java@v4
92+
# with:
93+
# distribution: ${{ env.JAVA_DISTRIBUTION }}
94+
# java-version: ${{ env.JAVA_VERSION }}
95+
# cache: 'gradle'
96+
#
97+
# # setup Gradle
98+
# - name: Gradle publish snapshot
99+
# uses: gradle/actions/setup-gradle@v3
100+
# with:
101+
# gradle-version: ${{ env.GRADLE_VERSION }}
102+
# arguments: |
103+
# publishToSonatype
104+
# closeAndReleaseStagingRepositories
105+
# -s
106+
# --warning-mode all
107+
# -x test
108+
# --build-cache
109+
# -Porg.gradle.jvmargs="-XX:MaxMetaspaceSize=1g -Dfile.encoding=UTF-8"
110+
# env:
111+
# SIMBOT_IS_SNAPSHOT: true
112+
# SIMBOT_SNAPSHOT_ONLY: true
113+
# SIMBOT_RELEASES_ONLY: false
114114

115115
deploy-doc:
116116
name: Deploy V4 API Doc

.github/workflows/publish-v4-snapshot.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ jobs:
6969
publish-v4-snapshot:
7070
name: Publish v4 snapshot
7171
needs: run-tests
72-
runs-on: macos-latest
72+
runs-on: ubuntu-latest
7373
steps:
7474
# 检出仓库代码
7575
- uses: actions/checkout@v4

.idea/dictionaries/forte.xml

Lines changed: 5 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

build.gradle.kts

Lines changed: 203 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
*/
2323

2424
import io.gitlab.arturbosch.detekt.Detekt
25+
import love.forte.plugin.suspendtrans.*
26+
import love.forte.plugin.suspendtrans.gradle.SuspendTransformGradleExtension
2527

2628
plugins {
2729
idea
@@ -30,6 +32,9 @@ plugins {
3032
alias(libs.plugins.detekt)
3133
id("simbot.nexus-publish")
3234
id("simbot.changelog-generator")
35+
alias(libs.plugins.suspendTransform) apply false
36+
// id("love.forte.plugin.suspend-transform") version "2.1.0-0.9.4" apply false
37+
3338

3439
// https://www.jetbrains.com/help/qodana/code-coverage.html
3540
// https://github.com/Kotlin/kotlinx-kover
@@ -81,8 +86,11 @@ subprojects {
8186
}
8287

8388
applyKover(root)
84-
}
8589

90+
if (plugins.hasPlugin(libs.plugins.suspendTransform.get().pluginId)) {
91+
configureSuspendTransform()
92+
}
93+
}
8694
}
8795

8896
dependencies {
@@ -173,12 +181,199 @@ idea {
173181
}
174182

175183
// https://kotlinlang.org/docs/js-project-setup.html#node-js
176-
rootProject.plugins.withType<org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin> {
177-
rootProject.the<org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootExtension>().apply {
178-
// CI 中配置环境,不再单独下载
179-
if (isCi) {
180-
download = false
181-
}
184+
// rootProject.plugins.withType<org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin> {
185+
// rootProject.the<org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootExtension>().apply {
186+
// // CI 中配置环境,不再单独下载
187+
// // if (isCi) {
188+
// // download = false
189+
// // }
190+
// }
191+
// // "true" for default behavior
192+
// }
193+
194+
// region Suspend Transform configs
195+
@Suppress("MaxLineLength")
196+
object SuspendTransforms {
197+
private val javaIncludeAnnotationApi4JClassInfo = ClassInfo("love.forte.simbot.annotations", "Api4J")
198+
private val javaIncludeAnnotationApi4J = IncludeAnnotation(javaIncludeAnnotationApi4JClassInfo).apply {
199+
includeProperty = true
200+
}
201+
private val javaIncludeAnnotations = listOf(javaIncludeAnnotationApi4J)
202+
203+
private val jsIncludeAnnotationApi4JsClassInfo = ClassInfo("love.forte.simbot.annotations", "Api4Js")
204+
private val jsIncludeAnnotationApi4Js = IncludeAnnotation(jsIncludeAnnotationApi4JsClassInfo).apply {
205+
includeProperty = true
206+
}
207+
private val jsIncludeAnnotations = listOf(jsIncludeAnnotationApi4Js)
208+
209+
210+
private val SuspendReserveClassInfo = ClassInfo(
211+
packageName = "love.forte.simbot.suspendrunner.reserve",
212+
className = "SuspendReserve",
213+
)
214+
215+
/**
216+
* JvmBlocking
217+
*/
218+
val jvmBlockingTransformer = SuspendTransformConfiguration.jvmBlockingTransformer.copy(
219+
syntheticFunctionIncludeAnnotations = javaIncludeAnnotations,
220+
transformFunctionInfo = FunctionInfo("love.forte.simbot.suspendrunner", null, "$\$runInBlocking"),
221+
copyAnnotationExcludes = SuspendTransformConfiguration.jvmBlockingTransformer.copyAnnotationExcludes + SuspendTransformConfiguration.jvmBlockingTransformer.markAnnotation.classInfo
222+
)
223+
224+
/**
225+
* JvmAsync
226+
*/
227+
val jvmAsyncTransformer = SuspendTransformConfiguration.jvmAsyncTransformer.copy(
228+
syntheticFunctionIncludeAnnotations = javaIncludeAnnotations,
229+
transformFunctionInfo = FunctionInfo("love.forte.simbot.suspendrunner", null, "$\$runInAsyncNullable"),
230+
copyAnnotationExcludes = SuspendTransformConfiguration.jvmAsyncTransformer.copyAnnotationExcludes + SuspendTransformConfiguration.jvmAsyncTransformer.markAnnotation.classInfo
231+
)
232+
233+
/**
234+
* JvmReserve
235+
*/
236+
val jvmReserveTransformer = SuspendTransformConfiguration.jvmAsyncTransformer.copy(
237+
syntheticFunctionIncludeAnnotations = javaIncludeAnnotations,
238+
transformFunctionInfo = FunctionInfo("love.forte.simbot.suspendrunner", null, "$\$asReserve"),
239+
copyAnnotationExcludes = SuspendTransformConfiguration.jvmAsyncTransformer.copyAnnotationExcludes + SuspendTransformConfiguration.jvmAsyncTransformer.markAnnotation.classInfo,
240+
transformReturnType = SuspendReserveClassInfo,
241+
transformReturnTypeGeneric = true,
242+
)
243+
244+
/**
245+
* JsPromise
246+
*/
247+
val jsPromiseTransformer = SuspendTransformConfiguration.jsPromiseTransformer.copy(
248+
syntheticFunctionIncludeAnnotations = javaIncludeAnnotations,
249+
transformFunctionInfo = FunctionInfo("love.forte.simbot.suspendrunner", null, "$\$runInPromise"),
250+
copyAnnotationExcludes = SuspendTransformConfiguration.jsPromiseTransformer.copyAnnotationExcludes + SuspendTransformConfiguration.jsPromiseTransformer.markAnnotation.classInfo,
251+
)
252+
253+
//region @JvmSuspendTrans
254+
private val suspendTransMarkAnnotationClassInfo = ClassInfo("love.forte.simbot.suspendrunner", "SuspendTrans")
255+
256+
private val jvmSuspendTransMarkAnnotationForBlocking = MarkAnnotation(
257+
suspendTransMarkAnnotationClassInfo,
258+
baseNameProperty = "blockingBaseName",
259+
suffixProperty = "blockingSuffix",
260+
asPropertyProperty = "blockingAsProperty",
261+
defaultSuffix = SuspendTransformConfiguration.jvmBlockingAnnotationInfo.defaultSuffix,
262+
)
263+
private val jvmSuspendTransMarkAnnotationForAsync = MarkAnnotation(
264+
suspendTransMarkAnnotationClassInfo,
265+
baseNameProperty = "asyncBaseName",
266+
suffixProperty = "asyncSuffix",
267+
asPropertyProperty = "asyncAsProperty",
268+
defaultSuffix = SuspendTransformConfiguration.jvmAsyncAnnotationInfo.defaultSuffix,
269+
)
270+
private val jvmSuspendTransMarkAnnotationForReserve = MarkAnnotation(
271+
suspendTransMarkAnnotationClassInfo,
272+
baseNameProperty = "reserveBaseName",
273+
suffixProperty = "reserveSuffix",
274+
asPropertyProperty = "reserveAsProperty",
275+
defaultSuffix = "Reserve",
276+
)
277+
private val jsSuspendTransMarkAnnotationForPromise = MarkAnnotation(
278+
suspendTransMarkAnnotationClassInfo,
279+
baseNameProperty = "jsPromiseBaseName",
280+
suffixProperty = "jsPromiseSuffix",
281+
asPropertyProperty = "jsPromiseAsProperty",
282+
defaultSuffix = "Async",
283+
)
284+
285+
val suspendTransTransformerForJvmBlocking = jvmBlockingTransformer.copy(
286+
markAnnotation = jvmSuspendTransMarkAnnotationForBlocking,
287+
copyAnnotationExcludes = SuspendTransformConfiguration.jvmBlockingTransformer.copyAnnotationExcludes + jvmSuspendTransMarkAnnotationForBlocking.classInfo
288+
)
289+
290+
val suspendTransTransformerForJvmAsync = jvmAsyncTransformer.copy(
291+
markAnnotation = jvmSuspendTransMarkAnnotationForAsync,
292+
copyAnnotationExcludes = SuspendTransformConfiguration.jvmAsyncTransformer.copyAnnotationExcludes + jvmSuspendTransMarkAnnotationForAsync.classInfo
293+
)
294+
295+
val suspendTransTransformerForJvmReserve = jvmReserveTransformer.copy(
296+
markAnnotation = jvmSuspendTransMarkAnnotationForReserve,
297+
copyAnnotationExcludes = jvmReserveTransformer.copyAnnotationExcludes + jvmSuspendTransMarkAnnotationForReserve.classInfo,
298+
)
299+
300+
val suspendTransTransformerForJsPromise = jsPromiseTransformer.copy(
301+
markAnnotation = jvmSuspendTransMarkAnnotationForReserve,
302+
copyAnnotationExcludes = jsPromiseTransformer.copyAnnotationExcludes + jsSuspendTransMarkAnnotationForPromise.classInfo,
303+
)
304+
//endregion
305+
306+
//region @JvmSuspendTransProperty
307+
private val jvmSuspendTransPropMarkAnnotationClassInfo =
308+
ClassInfo("love.forte.simbot.suspendrunner", "SuspendTransProperty")
309+
310+
private val jvmSuspendTransPropMarkAnnotationForBlocking = MarkAnnotation(
311+
jvmSuspendTransPropMarkAnnotationClassInfo,
312+
baseNameProperty = "blockingBaseName",
313+
suffixProperty = "blockingSuffix",
314+
asPropertyProperty = "blockingAsProperty",
315+
defaultSuffix = "",
316+
defaultAsProperty = true
317+
)
318+
private val jvmSuspendTransPropMarkAnnotationForAsync = MarkAnnotation(
319+
jvmSuspendTransPropMarkAnnotationClassInfo,
320+
baseNameProperty = "asyncBaseName",
321+
suffixProperty = "asyncSuffix",
322+
asPropertyProperty = "asyncAsProperty",
323+
defaultSuffix = SuspendTransformConfiguration.jvmAsyncAnnotationInfo.defaultSuffix,
324+
defaultAsProperty = true
325+
)
326+
private val jvmSuspendTransPropMarkAnnotationForReserve = MarkAnnotation(
327+
jvmSuspendTransPropMarkAnnotationClassInfo,
328+
baseNameProperty = "reserveBaseName",
329+
suffixProperty = "reserveSuffix",
330+
asPropertyProperty = "reserveAsProperty",
331+
defaultSuffix = "Reserve",
332+
defaultAsProperty = true
333+
)
334+
335+
val jvmSuspendTransPropTransformerForBlocking = jvmBlockingTransformer.copy(
336+
markAnnotation = jvmSuspendTransPropMarkAnnotationForBlocking,
337+
copyAnnotationExcludes = SuspendTransformConfiguration.jvmBlockingTransformer.copyAnnotationExcludes + jvmSuspendTransPropMarkAnnotationForBlocking.classInfo
338+
)
339+
340+
val jvmSuspendTransPropTransformerForAsync = jvmAsyncTransformer.copy(
341+
markAnnotation = jvmSuspendTransPropMarkAnnotationForAsync,
342+
copyAnnotationExcludes = SuspendTransformConfiguration.jvmAsyncTransformer.copyAnnotationExcludes + jvmSuspendTransPropMarkAnnotationForAsync.classInfo
343+
)
344+
345+
val jvmSuspendTransPropTransformerForReserve = jvmReserveTransformer.copy(
346+
markAnnotation = jvmSuspendTransPropMarkAnnotationForReserve,
347+
copyAnnotationExcludes = jvmReserveTransformer.copyAnnotationExcludes + jvmSuspendTransPropMarkAnnotationForReserve.classInfo
348+
)
349+
//endregion
350+
}
351+
352+
fun Project.configureSuspendTransform() {
353+
extensions.configure<SuspendTransformGradleExtension>("suspendTransform") {
354+
includeRuntime = false
355+
includeAnnotation = false
356+
357+
addJvmTransformers(
358+
// @JvmBlocking
359+
SuspendTransforms.jvmBlockingTransformer,
360+
// @JvmAsync
361+
SuspendTransforms.jvmAsyncTransformer,
362+
363+
// @JvmSuspendTrans
364+
SuspendTransforms.suspendTransTransformerForJvmBlocking,
365+
SuspendTransforms.suspendTransTransformerForJvmAsync,
366+
SuspendTransforms.suspendTransTransformerForJvmReserve,
367+
368+
// @JvmSuspendTransProperty
369+
SuspendTransforms.jvmSuspendTransPropTransformerForBlocking,
370+
SuspendTransforms.jvmSuspendTransPropTransformerForAsync,
371+
SuspendTransforms.jvmSuspendTransPropTransformerForReserve,
372+
)
373+
374+
// addJsTransformers(
375+
// SuspendTransforms.suspendTransTransformerForJsPromise,
376+
// )
182377
}
183-
// "true" for default behavior
184378
}
379+
// endregion

buildSrc/build.gradle.kts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ plugins {
2929
repositories {
3030
mavenCentral()
3131
gradlePluginPortal()
32-
mavenLocal()
32+
// mavenLocal()
3333
}
3434

3535
val kotlinVersion: String = libs.versions.kotlin.get()
@@ -38,13 +38,15 @@ dependencies {
3838
implementation(kotlin("gradle-plugin", kotlinVersion))
3939
implementation(kotlin("serialization", kotlinVersion))
4040
implementation(kotlin("power-assert", kotlinVersion))
41+
// compileOnly(kotlin("compiler", kotlinVersion))
42+
// compileOnly(kotlin("compiler-embeddable", kotlinVersion))
4143
implementation(libs.bundles.dokka)
4244

4345
// see https://github.com/gradle-nexus/publish-plugin
4446
implementation(libs.gradleNexusPublishPlugin)
4547

4648
// suspend transform
47-
implementation(libs.suspend.transform.gradle)
49+
// implementation(libs.suspend.transform.gradle)
4850

4951
// gradle common
5052
implementation(libs.bundles.gradle.common)

buildSrc/src/main/kotlin/JvmConfig.kt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,13 @@ import org.gradle.kotlin.dsl.get
2828
import org.gradle.kotlin.dsl.getByName
2929
import org.gradle.kotlin.dsl.withType
3030
import org.gradle.process.CommandLineArgumentProvider
31-
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
3231
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
32+
import org.jetbrains.kotlin.gradle.dsl.KotlinBaseExtension
3333
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension
3434
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
35-
import org.jetbrains.kotlin.gradle.dsl.KotlinTopLevelExtension
3635
import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget
3736

3837

39-
@OptIn(ExperimentalKotlinGradlePluginApi::class)
4038
inline fun KotlinJvmTarget.configJava(crossinline block: KotlinJvmTarget.() -> Unit = {}) {
4139
withJava()
4240
compilerOptions {
@@ -56,7 +54,7 @@ inline fun KotlinJvmTarget.configJava(crossinline block: KotlinJvmTarget.() -> U
5654
}
5755

5856

59-
fun KotlinTopLevelExtension.configJavaToolchain(jdkVersion: Int) {
57+
fun KotlinBaseExtension.configJavaToolchain(jdkVersion: Int) {
6058
jvmToolchain(jdkVersion)
6159
}
6260

buildSrc/src/main/kotlin/P.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,8 @@ fun isSnapshot(): Boolean = _isSnapshot
4747
@Suppress("MemberVisibilityCanBePrivate")
4848
sealed class P(override val group: String) : ProjectDetail() {
4949
companion object {
50-
const val VERSION = "4.8.0"
51-
const val NEXT_VERSION = "4.8.1"
50+
const val VERSION = "4.9.0"
51+
const val NEXT_VERSION = "4.9.0"
5252
const val SNAPSHOT_VERSION = "$VERSION-SNAPSHOT"
5353
const val NEXT_SNAPSHOT_VERSION = "$NEXT_VERSION-SNAPSHOT"
5454

0 commit comments

Comments
 (0)