Skip to content

Commit fce86eb

Browse files
committed
perf: 更新Kotlin到v1.8.0
1 parent 74f3d2a commit fce86eb

File tree

9 files changed

+260
-63
lines changed

9 files changed

+260
-63
lines changed

buildSrc/build.gradle.kts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ repositories {
88
gradlePluginPortal()
99
}
1010

11-
val kotlinVersion = "1.7.20"
11+
val kotlinVersion = "1.8.0"
1212
val dokkaPluginVersion = "1.7.20"
1313

1414
dependencies {
@@ -17,7 +17,7 @@ dependencies {
1717
api("org.jetbrains.dokka:dokka-gradle-plugin:$dokkaPluginVersion")
1818

1919
api("com.gradle.publish:plugin-publish-plugin:0.12.0")
20-
api("com.github.gmazzo:gradle-buildconfig-plugin:2.0.2")
20+
api("com.github.gmazzo:gradle-buildconfig-plugin:3.1.0")
2121
// see https://github.com/bnorm/kotlin-power-assert#compatibility
2222
api("gradle.plugin.com.bnorm.power:kotlin-power-assert-gradle:0.12.0")
2323
api("io.github.gradle-nexus:publish-plugin:1.1.0")
@@ -32,4 +32,4 @@ dependencies {
3232
//
3333
// tasks.withType<KotlinCompile> {
3434
// kotlinOptions.jvmTarget = "1.8"
35-
// }
35+
// }
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
object IProject {
2-
const val VERSION = "0.1.0"
2+
const val VERSION = "0.2.0"
33
const val GROUP = "love.forte.plugin.suspend-transform"
44
const val DESCRIPTION = "Generate platform-compatible functions for Kotlin suspend functions"
55

6-
}
6+
}

compiler/suspend-transform-plugin/src/main/kotlin/love/forte/plugin/suspendtrans/CliOptions.kt

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,15 @@ object CliOptions {
3131

3232
val ORIGIN_FUNCTION_INCLUDE_ANNOTATIONS = option("jvm.originFunctionIncludeAnnotations") {
3333
inc { jvm.originFunctionIncludeAnnotations = includeAnnotationDecode(it) }
34-
out { includeAnnotationEncode(jvm.originFunctionIncludeAnnotations) }
34+
// TODO
35+
out { includeAnnotationEncode(jvm.originFunctionIncludeAnnotations ?: emptyList()) }
3536
}
3637

3738

3839
//region blocking
3940
val JVM_BLOCKING_FUNCTION_NAME = option("jvm.jvmBlockingFunctionName") {
40-
withProp { jvm::jvmBlockingFunctionName }
41+
// TODO
42+
withNullableProp { jvm::jvmBlockingFunctionName }
4143
}
4244

4345
//region blocking mark
@@ -79,15 +81,17 @@ object CliOptions {
7981
val SYNTHETIC_BLOCKING_FUNCTION_INCLUDE_ANNOTATIONS =
8082
option("jvm.syntheticBlockingFunctionIncludeAnnotations") {
8183
inc { jvm.syntheticBlockingFunctionIncludeAnnotations = includeAnnotationDecode(it) }
82-
out { includeAnnotationEncode(jvm.syntheticBlockingFunctionIncludeAnnotations) }
84+
// TODO
85+
out { includeAnnotationEncode(jvm.syntheticBlockingFunctionIncludeAnnotations ?: emptyList()) }
8386
}
8487

8588
//endregion
8689

8790

8891
//region async
8992
val JVM_ASYNC_FUNCTION_NAME = option("jvm.jvmAsyncFunctionName") {
90-
withProp { jvm::jvmAsyncFunctionName }
93+
// TODO
94+
withNullableProp { jvm::jvmAsyncFunctionName }
9195
}
9296

9397
//region async mark
@@ -114,7 +118,8 @@ object CliOptions {
114118

115119
val SYNTHETIC_ASYNC_FUNCTION_INCLUDE_ANNOTATIONS = option("jvm.syntheticAsyncFunctionIncludeAnnotations") {
116120
inc { jvm.syntheticAsyncFunctionIncludeAnnotations = includeAnnotationDecode(it) }
117-
out { includeAnnotationEncode(jvm.syntheticAsyncFunctionIncludeAnnotations) }
121+
// TODO
122+
out { includeAnnotationEncode(jvm.syntheticAsyncFunctionIncludeAnnotations ?: emptyList()) }
118123
}
119124

120125
val COPY_ANNOTATIONS_TO_SYNTHETIC_ASYNC_FUNCTION =
@@ -179,6 +184,11 @@ private class ResolveBuilder {
179184
inc { block().setter.call(it) }
180185
out { block().getter.call() }
181186
}
187+
188+
fun withNullableProp(block: SuspendTransformConfiguration.() -> KMutableProperty<String?>) {
189+
inc { block().setter.call(it.takeIf { it.isNotEmpty() }) }
190+
out { block().getter.call() ?: "" }
191+
}
182192
}
183193

184194
private fun option(
@@ -240,4 +250,4 @@ class SimpleCliOption(
240250
override fun resolveToValue(configuration: SuspendTransformConfiguration): String = _resolveToValue(configuration)
241251
override fun resolveFromValue(configuration: SuspendTransformConfiguration, value: String) =
242252
_resolveFromValue(configuration, value)
243-
}
253+
}

compiler/suspend-transform-plugin/src/main/kotlin/love/forte/plugin/suspendtrans/SuspendTransformCommandLineProcessor.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,12 @@ import BuildConfig
44
import com.google.auto.service.AutoService
55
import org.jetbrains.kotlin.compiler.plugin.AbstractCliOption
66
import org.jetbrains.kotlin.compiler.plugin.CommandLineProcessor
7+
import org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerApi
78
import org.jetbrains.kotlin.config.CompilerConfiguration
89
import org.jetbrains.kotlin.config.CompilerConfigurationKey
910

1011

12+
@OptIn(ExperimentalCompilerApi::class)
1113
@AutoService(CommandLineProcessor::class)
1214
class SuspendTransformCommandLineProcessor : CommandLineProcessor {
1315
companion object {
Lines changed: 32 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,50 @@
11
package love.forte.plugin.suspendtrans
22

33
import com.google.auto.service.AutoService
4-
import com.intellij.mock.MockProject
54
import love.forte.plugin.suspendtrans.ir.SuspendTransformIrGenerationExtension
65
import love.forte.plugin.suspendtrans.symbol.SuspendTransformSyntheticResolveExtension
76
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
8-
import org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar
7+
import org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar
8+
import org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerApi
99
import org.jetbrains.kotlin.config.CompilerConfiguration
1010
import org.jetbrains.kotlin.resolve.extensions.SyntheticResolveExtension
1111

12-
@AutoService(ComponentRegistrar::class)
13-
class SuspendTransformComponentRegistrar : ComponentRegistrar {
12+
@OptIn(ExperimentalCompilerApi::class)
13+
@AutoService(CompilerPluginRegistrar::class)
14+
class SuspendTransformComponentRegistrar : CompilerPluginRegistrar() {
1415

1516
//internal var defaultConfiguration: SuspendTransformConfiguration? = null
1617

18+
override val supportsK2: Boolean
19+
get() = true
1720

18-
override fun registerProjectComponents(
19-
project: MockProject,
20-
configuration: CompilerConfiguration,
21-
) {
21+
override fun ExtensionStorage.registerExtensions(configuration: CompilerConfiguration) {
22+
val suspendTransformConfiguration =/* defaultConfiguration ?: */
23+
configuration.resolveToSuspendTransformConfiguration()
2224

23-
val suspendTransformConfiguration =/* defaultConfiguration ?: */configuration.resolveToSuspendTransformConfiguration()
25+
val suspendTransformSyntheticResolveExtension =
26+
SuspendTransformSyntheticResolveExtension(suspendTransformConfiguration)
2427

25-
if (suspendTransformConfiguration.enabled) {
26-
SyntheticResolveExtension.registerExtension(project, SuspendTransformSyntheticResolveExtension(suspendTransformConfiguration))
27-
IrGenerationExtension.registerExtension(project, SuspendTransformIrGenerationExtension(suspendTransformConfiguration))
28-
}
28+
val suspendTransformIrGenerationExtension = SuspendTransformIrGenerationExtension(suspendTransformConfiguration)
29+
30+
SyntheticResolveExtension.registerExtension(suspendTransformSyntheticResolveExtension)
31+
IrGenerationExtension.registerExtension(suspendTransformIrGenerationExtension)
2932
}
33+
34+
35+
36+
// override fun registerProjectComponents(
37+
// project: MockProject,
38+
// configuration: CompilerConfiguration,
39+
// ) {
40+
//
41+
// val suspendTransformConfiguration =/* defaultConfiguration ?: */configuration.resolveToSuspendTransformConfiguration()
42+
//
43+
// if (suspendTransformConfiguration.enabled) {
44+
// SyntheticResolveExtension.registerExtension(project, SuspendTransformSyntheticResolveExtension(suspendTransformConfiguration))
45+
// IrGenerationExtension.registerExtension(project, SuspendTransformIrGenerationExtension(suspendTransformConfiguration))
46+
// }
47+
// }
3048
}
3149

3250

@@ -36,4 +54,4 @@ private fun CompilerConfiguration.resolveToSuspendTransformConfiguration(): Susp
3654
// return SuspendTransformConfiguration().apply {
3755
// enabled = compilerConfiguration.get(SuspendTransformCommandLineProcessor.ENABLED, true)
3856
// }
39-
}
57+
}

compiler/suspend-transform-plugin/src/main/kotlin/love/forte/plugin/suspendtrans/SuspendTransformConfiguration.kt

Lines changed: 95 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,26 @@
11
package love.forte.plugin.suspendtrans
22

3+
data class FunctionInfo(
4+
val packageName: String,
5+
val className: String?,
6+
val functionName: String,
7+
)
8+
9+
data class ClassInfo @JvmOverloads constructor(
10+
val packageName: String,
11+
val className: String,
12+
val local: Boolean = false
13+
)
314

415
/**
516
*
617
* @author ForteScarlet
718
*/
8-
open class SuspendTransformConfiguration @JvmOverloads constructor(var enabled: Boolean = true, defaultJvm: Jvm = Jvm(), defaultJs: Js = Js()) {
19+
open class SuspendTransformConfiguration @JvmOverloads constructor(
20+
var enabled: Boolean = true,
21+
defaultJvm: Jvm = Jvm(),
22+
defaultJs: Js = Js()
23+
) {
924
var jvm: Jvm = defaultJvm
1025
private set
1126

@@ -34,6 +49,16 @@ open class SuspendTransformConfiguration @JvmOverloads constructor(var enabled:
3449
*/
3550
var jvmBlockingMarkAnnotation = MarkAnnotation(TO_JVM_BLOCKING_ANNOTATION_NAME)
3651

52+
53+
/**
54+
* 如果 [jvmBlockingFunctionName] 不为null,则会尝试优先解析。
55+
*
56+
* @see jvmBlockingFunctionInfo
57+
*/
58+
@Deprecated("Use jvmBlockingFunctionInfo")
59+
var jvmBlockingFunctionName: String? = null // JVM_RUN_IN_BLOCKING_FUNCTION_NAME
60+
61+
3762
/**
3863
* 格式必须为
3964
*
@@ -43,13 +68,26 @@ open class SuspendTransformConfiguration @JvmOverloads constructor(var enabled:
4368
* }
4469
* ```
4570
*/
46-
var jvmBlockingFunctionName: String = JVM_RUN_IN_BLOCKING_FUNCTION_NAME
71+
var jvmBlockingFunctionInfo: FunctionInfo = FunctionInfo(
72+
JVM_RUN_IN_BLOCKING_FUNCTION_PACKAGE_NAME,
73+
JVM_RUN_IN_BLOCKING_FUNCTION_CLASS_NAME,
74+
JVM_RUN_IN_BLOCKING_FUNCTION_FUNCTION_NAME,
75+
)
4776

4877
/**
4978
* 标记为异步函数的标记注解。
5079
*/
5180
var jvmAsyncMarkAnnotation = MarkAnnotation(TO_JVM_ASYNC_ANNOTATION_NAME)
5281

82+
/**
83+
* 如果 [jvmAsyncFunctionName] 不为null,则会尝试优先解析。
84+
*
85+
* @see jvmAsyncFunctionInfo
86+
*
87+
*/
88+
@Deprecated("Use jvmBlockingFunctionInfo")
89+
var jvmAsyncFunctionName: String? = null // JVM_RUN_IN_ASYNC_FUNCTION_NAME
90+
5391
/**
5492
* 格式必须为:
5593
*
@@ -73,21 +111,43 @@ open class SuspendTransformConfiguration @JvmOverloads constructor(var enabled:
73111
* 当前类型不属于 [kotlinx.coroutines.CoroutineScope] 类型时不会使用此参数。
74112
*
75113
*/
76-
var jvmAsyncFunctionName: String = JVM_RUN_IN_ASYNC_FUNCTION_NAME
114+
var jvmAsyncFunctionInfo: FunctionInfo = FunctionInfo(
115+
JVM_RUN_IN_ASYNC_FUNCTION_PACKAGE_NAME,
116+
JVM_RUN_IN_ASYNC_FUNCTION_CLASS_NAME,
117+
JVM_RUN_IN_ASYNC_FUNCTION_FUNCTION_NAME,
118+
)
119+
120+
121+
/**
122+
* @see originFunctionIncludeAnnotationInfos
123+
*/
124+
@Deprecated("Use 'originFunctionIncludeAnnotationInfos'")
125+
var originFunctionIncludeAnnotations: List<IncludeAnnotation>? = null
126+
// listOf(
127+
// IncludeAnnotation("kotlin.jvm.JvmSynthetic")
128+
// )
77129

78130
/**
79131
* 要在被合成的源函数上追加的注解。必须保证不存在参数。
80132
*/
81-
var originFunctionIncludeAnnotations: List<IncludeAnnotation> = listOf(
82-
IncludeAnnotation("kotlin.jvm.JvmSynthetic")
133+
var originFunctionIncludeAnnotationInfos: List<IncludeAnnotationInfo> = listOf(
134+
IncludeAnnotationInfo(ClassInfo("kotlin.jvm", "JvmSynthetic"))
83135
)
84136

137+
/**
138+
* @see syntheticBlockingFunctionIncludeAnnotationInfos
139+
*/
140+
@Deprecated("Use 'syntheticBlockingFunctionIncludeAnnotationInfos'")
141+
var syntheticBlockingFunctionIncludeAnnotations: List<IncludeAnnotation>? = null
142+
// listOf(
143+
// IncludeAnnotation("love.forte.plugin.suspendtrans.annotation.Api4J")
144+
// )
145+
85146
/**
86147
* 要在合成出来的 blocking 函数上追加的额外注解。(不需要指定 `@Generated`)。
87-
*
88148
*/
89-
var syntheticBlockingFunctionIncludeAnnotations: List<IncludeAnnotation> = listOf(
90-
IncludeAnnotation("love.forte.plugin.suspendtrans.annotation.Api4J")
149+
var syntheticBlockingFunctionIncludeAnnotationInfos: List<IncludeAnnotationInfo> = listOf(
150+
IncludeAnnotationInfo(ClassInfo("love.forte.plugin.suspendtrans.annotation", "Api4J"))
91151
)
92152

93153
/**
@@ -107,8 +167,17 @@ open class SuspendTransformConfiguration @JvmOverloads constructor(var enabled:
107167
* 要在合成出来的 async 函数上追加的额外注解。(不需要指定 `@Generated`)。
108168
*
109169
*/
110-
var syntheticAsyncFunctionIncludeAnnotations: List<IncludeAnnotation> = listOf(
111-
IncludeAnnotation("love.forte.plugin.suspendtrans.annotation.Api4J")
170+
@Deprecated("Use 'syntheticAsyncFunctionIncludeAnnotationInfos'")
171+
var syntheticAsyncFunctionIncludeAnnotations: List<IncludeAnnotation>? = null
172+
// listOf(
173+
// IncludeAnnotation("love.forte.plugin.suspendtrans.annotation.Api4J")
174+
// )
175+
/**
176+
* 要在合成出来的 async 函数上追加的额外注解。(不需要指定 `@Generated`)。
177+
*
178+
*/
179+
var syntheticAsyncFunctionIncludeAnnotationInfos: List<IncludeAnnotationInfo> = listOf(
180+
IncludeAnnotationInfo(ClassInfo("love.forte.plugin.suspendtrans.annotation", "Api4J"))
112181
)
113182

114183

@@ -136,6 +205,13 @@ open class SuspendTransformConfiguration @JvmOverloads constructor(var enabled:
136205
* JS platform config
137206
*/
138207
open class Js {
208+
209+
/**
210+
* @see jsPromiseFunctionInfo
211+
*/
212+
@Deprecated("Unused")
213+
var jsPromiseFunctionName: String? = null // JS_RUN_IN_ASYNC_FUNCTION_NAME
214+
139215
/**
140216
* 格式必须为
141217
* ```kotlin
@@ -144,7 +220,11 @@ open class SuspendTransformConfiguration @JvmOverloads constructor(var enabled:
144220
* }
145221
* ```
146222
*/
147-
var jsPromiseFunctionName: String = JS_RUN_IN_ASYNC_FUNCTION_NAME
223+
var jsPromiseFunctionInfo: FunctionInfo = FunctionInfo(
224+
JS_RUN_IN_ASYNC_FUNCTION_PACKAGE_NAME,
225+
JS_RUN_IN_ASYNC_FUNCTION_CLASS_NAME,
226+
JS_RUN_IN_ASYNC_FUNCTION_FUNCTION_NAME,
227+
)
148228

149229

150230
/**
@@ -191,6 +271,10 @@ open class SuspendTransformConfiguration @JvmOverloads constructor(var enabled:
191271
var name: String, var repeatable: Boolean = false
192272
)
193273

274+
data class IncludeAnnotationInfo(
275+
var classInfo: ClassInfo, var repeatable: Boolean = false
276+
)
277+
194278
data class ExcludeAnnotation(val name: String)
195279

196280
class MarkAnnotation(

0 commit comments

Comments
 (0)