@@ -18,7 +18,7 @@ data class ClassInfo @JvmOverloads constructor(
18
18
19
19
@Serializable
20
20
enum class TargetPlatform {
21
- JVM , JS
21
+ COMMON , JVM , JS
22
22
}
23
23
24
24
/* *
@@ -55,6 +55,7 @@ data class Transformer(
55
55
*/
56
56
val transformFunctionInfo : FunctionInfo ,
57
57
58
+
58
59
/* *
59
60
* 转化后的返回值类型, 为null时代表与原函数一致。
60
61
*/
@@ -128,122 +129,164 @@ data class IncludeAnnotation(
128
129
*
129
130
* @author ForteScarlet
130
131
*/
132
+ @Suppress(" unused" )
131
133
@Serializable
132
134
open class SuspendTransformConfiguration {
133
135
var enabled: Boolean = true
134
136
135
- var transformers: MutableMap <TargetPlatform , MutableList <Transformer >> =
136
- LinkedHashMap <TargetPlatform , MutableList <Transformer >>().apply {
137
- // jvm
138
- val jvmOriginFunctionIncludeAnnotations = listOf (
139
- IncludeAnnotation (ClassInfo (" kotlin.jvm" , " JvmSynthetic" ))
140
- )
141
-
142
- val jvmCopyExcludes = listOf (
143
- ClassInfo (" kotlin.jvm" , " JvmSynthetic" )
144
- )
145
-
146
- val jvmSyntheticFunctionIncludeAnnotations = listOf (
147
- IncludeAnnotation (ClassInfo (" love.forte.plugin.suspendtrans.annotation" , " Api4J" ))
148
- )
149
-
150
- // jvm to blocking
151
- val jvmBlockingMarkAnnotationClassInfo =
152
- ClassInfo (" love.forte.plugin.suspendtrans.annotation" , " JvmBlocking" )
153
- val jvmBlockingAnnotationInfo = MarkAnnotation (jvmBlockingMarkAnnotationClassInfo)
154
- val jvmBlockingTransformFunction = FunctionInfo (
155
- JVM_RUN_IN_BLOCKING_FUNCTION_PACKAGE_NAME ,
156
- JVM_RUN_IN_BLOCKING_FUNCTION_CLASS_NAME ,
157
- JVM_RUN_IN_BLOCKING_FUNCTION_FUNCTION_NAME ,
158
- )
159
-
160
- val jvmBlockingTransformer = Transformer (
161
- markAnnotation = jvmBlockingAnnotationInfo,
162
- transformFunctionInfo = jvmBlockingTransformFunction,
163
- transformReturnType = null ,
164
- transformReturnTypeGeneric = false ,
165
- originFunctionIncludeAnnotations = jvmOriginFunctionIncludeAnnotations,
166
- copyAnnotationsToSyntheticFunction = true ,
167
- copyAnnotationExcludes = jvmCopyExcludes,
168
- syntheticFunctionIncludeAnnotations = jvmSyntheticFunctionIncludeAnnotations
169
- )
170
- // jvm to async
171
-
172
- val jvmAsyncMarkAnnotationClassInfo = ClassInfo (" love.forte.plugin.suspendtrans.annotation" , " JvmAsync" )
173
- val jvmAsyncAnnotationInfo = MarkAnnotation (jvmAsyncMarkAnnotationClassInfo)
174
- val jvmAsyncTransformFunction = FunctionInfo (
175
- JVM_RUN_IN_ASYNC_FUNCTION_PACKAGE_NAME ,
176
- JVM_RUN_IN_ASYNC_FUNCTION_CLASS_NAME ,
177
- JVM_RUN_IN_ASYNC_FUNCTION_FUNCTION_NAME ,
178
- )
179
-
180
- val jvmAsyncTransformer = Transformer (
181
- markAnnotation = jvmAsyncAnnotationInfo,
182
- transformFunctionInfo = jvmAsyncTransformFunction,
183
- transformReturnType = ClassInfo (" java.util.concurrent" , " CompletableFuture" ),
184
- transformReturnTypeGeneric = true ,
185
- originFunctionIncludeAnnotations = jvmOriginFunctionIncludeAnnotations,
186
- copyAnnotationsToSyntheticFunction = true ,
187
- copyAnnotationExcludes = jvmCopyExcludes,
188
- syntheticFunctionIncludeAnnotations = jvmSyntheticFunctionIncludeAnnotations
189
- )
190
-
191
- put(TargetPlatform .JVM , mutableListOf (jvmBlockingTransformer, jvmAsyncTransformer))
192
-
193
-
194
- // js to async
195
- val jsSyntheticFunctionIncludeAnnotations = listOf (
196
- IncludeAnnotation (ClassInfo (" love.forte.plugin.suspendtrans.annotation" , " Api4Js" ))
197
- )
198
-
199
- val jsAsyncMarkAnnotationClassInfo = ClassInfo (" love.forte.plugin.suspendtrans.annotation" , " JsPromise" )
200
- val jsAsyncAnnotationInfo = MarkAnnotation (jsAsyncMarkAnnotationClassInfo)
201
- val jsAsyncTransformFunction = FunctionInfo (
202
- JS_RUN_IN_ASYNC_FUNCTION_PACKAGE_NAME ,
203
- JS_RUN_IN_ASYNC_FUNCTION_CLASS_NAME ,
204
- JS_RUN_IN_ASYNC_FUNCTION_FUNCTION_NAME ,
205
- )
206
-
207
- val jsPromiseTransformer = Transformer (
208
- markAnnotation = jsAsyncAnnotationInfo,
209
- transformFunctionInfo = jsAsyncTransformFunction,
210
- transformReturnType = ClassInfo (" kotlin.js" , " Promise" ),
211
- transformReturnTypeGeneric = true ,
212
- originFunctionIncludeAnnotations = listOf (),
213
- copyAnnotationsToSyntheticFunction = true ,
214
- copyAnnotationExcludes = listOf (),
215
- syntheticFunctionIncludeAnnotations = jsSyntheticFunctionIncludeAnnotations
216
- )
217
-
218
- put(TargetPlatform .JS , mutableListOf (jsPromiseTransformer))
219
- }
137
+ var transformers: MutableMap <TargetPlatform , List <Transformer >> = mutableMapOf ()
138
+
139
+ fun clear () {
140
+ transformers.clear()
141
+ }
142
+
143
+ fun useJvmDefault () {
144
+ transformers[TargetPlatform .JVM ] = mutableListOf (jvmBlockingTransformer, jvmAsyncTransformer)
145
+ }
146
+
147
+ fun useJsDefault () {
148
+ transformers[TargetPlatform .JS ] = mutableListOf (jsPromiseTransformer)
149
+ }
150
+
151
+ fun useDefault () {
152
+ useJvmDefault()
153
+ useJsDefault()
154
+ }
220
155
221
156
fun addTransformers (target : TargetPlatform , vararg transformers : Transformer ) {
222
- this .transformers.computeIfAbsent(target) { mutableListOf () }.addAll(transformers)
157
+ this .transformers.compute(target) { _, list ->
158
+ if (list != null ) {
159
+ list + transformers
160
+ } else {
161
+ listOf (elements = transformers)
162
+ }
163
+ }
223
164
}
224
165
225
166
fun addTransformers (target : TargetPlatform , transformers : Collection <Transformer >) {
226
- this .transformers.computeIfAbsent(target) { mutableListOf () }.addAll(transformers)
167
+ this .transformers.compute(target) { _, list ->
168
+ if (list != null ) {
169
+ list + transformers
170
+ } else {
171
+ transformers.toList()
172
+ }
173
+ }
227
174
}
228
175
229
- fun jvmTransformers (vararg transformers : Transformer ) {
176
+ fun addJvmTransformers (vararg transformers : Transformer ) {
230
177
addTransformers(target = TargetPlatform .JVM , transformers = transformers)
231
178
}
232
179
233
- fun jsTransformers ( vararg transformers : Transformer ) {
234
- addTransformers(target = TargetPlatform .JS , transformers = transformers)
180
+ fun addJvmTransformers ( transformers : Collection < Transformer > ) {
181
+ addTransformers(target = TargetPlatform .JVM , transformers = transformers)
235
182
}
236
183
237
- fun jvmTransformers ( transformers : Collection < Transformer > ) {
238
- addTransformers(target = TargetPlatform .JVM , transformers = transformers)
184
+ fun addJsTransformers ( vararg transformers : Transformer ) {
185
+ addTransformers(target = TargetPlatform .JS , transformers = transformers)
239
186
}
240
187
241
- fun jsTransformers (transformers : Collection <Transformer >) {
188
+ fun addJsTransformers (transformers : Collection <Transformer >) {
242
189
addTransformers(target = TargetPlatform .JS , transformers = transformers)
243
190
}
244
191
245
192
override fun toString (): String {
246
193
return " SuspendTransformConfiguration(enabled=$enabled , transformers=$transformers )"
247
194
}
195
+
196
+ companion object {
197
+ // region JVM defaults
198
+ @JvmStatic
199
+ val jvmSyntheticClassInfo = ClassInfo (" kotlin.jvm" , " JvmSynthetic" )
200
+
201
+ @JvmStatic
202
+ val jvmApi4JAnnotationClassInfo = ClassInfo (" love.forte.plugin.suspendtrans.annotation" , " Api4J" )
203
+ // endregion
204
+
205
+ // region JVM blocking defaults
206
+
207
+ @JvmStatic
208
+ val jvmBlockingMarkAnnotationClassInfo = ClassInfo (" love.forte.plugin.suspendtrans.annotation" , " JvmBlocking" )
209
+
210
+ @JvmStatic
211
+ val jvmBlockingAnnotationInfo = MarkAnnotation (jvmBlockingMarkAnnotationClassInfo, defaultSuffix = " Blocking" )
212
+
213
+ @JvmStatic
214
+ val jvmBlockingTransformFunction = FunctionInfo (
215
+ JVM_RUN_IN_BLOCKING_FUNCTION_PACKAGE_NAME ,
216
+ JVM_RUN_IN_BLOCKING_FUNCTION_CLASS_NAME ,
217
+ JVM_RUN_IN_BLOCKING_FUNCTION_FUNCTION_NAME ,
218
+ )
219
+
220
+ @JvmStatic
221
+ val jvmBlockingTransformer = Transformer (
222
+ markAnnotation = jvmBlockingAnnotationInfo,
223
+ transformFunctionInfo = jvmBlockingTransformFunction,
224
+ transformReturnType = null ,
225
+ transformReturnTypeGeneric = false ,
226
+ originFunctionIncludeAnnotations = listOf (IncludeAnnotation (jvmSyntheticClassInfo)),
227
+ copyAnnotationsToSyntheticFunction = true ,
228
+ copyAnnotationExcludes = listOf (jvmSyntheticClassInfo),
229
+ syntheticFunctionIncludeAnnotations = listOf (IncludeAnnotation (jvmApi4JAnnotationClassInfo))
230
+ )
231
+ // endregion
232
+
233
+ // region JVM async defaults
234
+ @JvmStatic
235
+ val jvmAsyncMarkAnnotationClassInfo = ClassInfo (" love.forte.plugin.suspendtrans.annotation" , " JvmAsync" )
236
+
237
+ @JvmStatic
238
+ val jvmAsyncAnnotationInfo = MarkAnnotation (jvmAsyncMarkAnnotationClassInfo, defaultSuffix = " Async" )
239
+
240
+ @JvmStatic
241
+ val jvmAsyncTransformFunction = FunctionInfo (
242
+ JVM_RUN_IN_ASYNC_FUNCTION_PACKAGE_NAME ,
243
+ JVM_RUN_IN_ASYNC_FUNCTION_CLASS_NAME ,
244
+ JVM_RUN_IN_ASYNC_FUNCTION_FUNCTION_NAME ,
245
+ )
246
+
247
+ @JvmStatic
248
+ val jvmAsyncTransformer = Transformer (
249
+ markAnnotation = jvmAsyncAnnotationInfo,
250
+ transformFunctionInfo = jvmAsyncTransformFunction,
251
+ transformReturnType = ClassInfo (" java.util.concurrent" , " CompletableFuture" ),
252
+ transformReturnTypeGeneric = true ,
253
+ originFunctionIncludeAnnotations = listOf (IncludeAnnotation (jvmSyntheticClassInfo)),
254
+ copyAnnotationsToSyntheticFunction = true ,
255
+ copyAnnotationExcludes = listOf (jvmSyntheticClassInfo),
256
+ syntheticFunctionIncludeAnnotations = listOf (IncludeAnnotation (jvmApi4JAnnotationClassInfo))
257
+ )
258
+ // endregion
259
+
260
+ // region JS defaults
261
+ @JvmStatic
262
+ val jsApi4JsAnnotationInfo = ClassInfo (" love.forte.plugin.suspendtrans.annotation" , " Api4Js" )
263
+
264
+ @JvmStatic
265
+ val jsAsyncMarkAnnotationClassInfo = ClassInfo (" love.forte.plugin.suspendtrans.annotation" , " JsPromise" )
266
+
267
+ @JvmStatic
268
+ val jsAsyncAnnotationInfo = MarkAnnotation (jsAsyncMarkAnnotationClassInfo, defaultSuffix = " Async" )
269
+
270
+ @JvmStatic
271
+ val jsAsyncTransformFunction = FunctionInfo (
272
+ JS_RUN_IN_ASYNC_FUNCTION_PACKAGE_NAME ,
273
+ JS_RUN_IN_ASYNC_FUNCTION_CLASS_NAME ,
274
+ JS_RUN_IN_ASYNC_FUNCTION_FUNCTION_NAME ,
275
+ )
276
+
277
+ @JvmStatic
278
+ val jsPromiseTransformer = Transformer (
279
+ markAnnotation = jsAsyncAnnotationInfo,
280
+ transformFunctionInfo = jsAsyncTransformFunction,
281
+ transformReturnType = ClassInfo (" kotlin.js" , " Promise" ),
282
+ transformReturnTypeGeneric = true ,
283
+ originFunctionIncludeAnnotations = listOf (),
284
+ copyAnnotationsToSyntheticFunction = true ,
285
+ copyAnnotationExcludes = listOf (),
286
+ syntheticFunctionIncludeAnnotations = listOf (IncludeAnnotation (jsApi4JsAnnotationInfo))
287
+ )
288
+ // endregion
289
+
290
+ }
248
291
}
249
292
0 commit comments