Skip to content

Commit 68324d1

Browse files
committed
Update Kotlin to 2.2.0-Beta2
1 parent ea57a37 commit 68324d1

File tree

7 files changed

+53
-34
lines changed

7 files changed

+53
-34
lines changed

buildSrc/src/main/kotlin/IProject.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ object IProject : ProjectDetail() {
1010
const val HOMEPAGE = "https://github.com/ForteScarlet/kotlin-suspend-transform-compiler-plugin"
1111

1212
// Remember the libs.versions.toml!
13-
val ktVersion = "2.2.0-Beta1"
13+
val ktVersion = "2.2.0-Beta2"
1414
val pluginVersion = "0.12.0"
1515

1616
override val version: String = "$ktVersion-$pluginVersion"

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

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.fir.types.ConeTypeParameterType
1717
import org.jetbrains.kotlin.fir.types.classId
1818
import org.jetbrains.kotlin.fir.types.coneTypeOrNull
1919
import org.jetbrains.kotlin.ir.declarations.IrFunction
20+
import org.jetbrains.kotlin.ir.declarations.IrParameterKind
2021
import org.jetbrains.kotlin.ir.declarations.IrTypeParameter
2122
import org.jetbrains.kotlin.ir.declarations.IrValueParameter
2223
import org.jetbrains.kotlin.ir.expressions.IrConst
@@ -89,8 +90,8 @@ fun OriginFunctionSymbol.isSame(irFunction: IrFunction): Boolean {
8990

9091

9192
// valueParameters
92-
val irFunctionValueParameters = irFunction.valueParameters
93-
if (irFunction.valueParameters.size != valueParameters.size) return false
93+
val irFunctionValueParameters = irFunction.valueParameters0()
94+
if (irFunctionValueParameters.size != valueParameters.size) return false
9495

9596
for ((index, valueParameter) in irFunctionValueParameters.withIndex()) {
9697
val targetValueParameter = valueParameters[index]
@@ -305,7 +306,7 @@ fun OriginSymbol.checkSame(markerId: String, declaration: IrFunction): Boolean {
305306
}
306307

307308
// valueParameters
308-
val declarationValueParameters = declaration.valueParameters
309+
val declarationValueParameters = declaration.valueParameters0()
309310
if (valueParameters.size != declarationValueParameters.size) return false
310311
for ((index, valueParameter) in declarationValueParameters.withIndex()) {
311312
val targetValueParameter = valueParameters[index]
@@ -334,3 +335,7 @@ private infix fun IrValueParameter.isSameAs(valueParameter: ValueParameter): Boo
334335
if (indexInParameters != valueParameter.index) return false
335336
return type.classFqName == valueParameter.type?.asSingleFqName()
336337
}
338+
339+
340+
internal fun IrFunction.valueParameters0() =
341+
parameters.filter { it.kind == IrParameterKind.Regular || it.kind == IrParameterKind.Context }

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

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import org.jetbrains.kotlin.fir.*
1313
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
1414
import org.jetbrains.kotlin.fir.analysis.checkers.context.MutableCheckerContext
1515
import org.jetbrains.kotlin.fir.analysis.checkers.getContainingClassSymbol
16-
import org.jetbrains.kotlin.fir.analysis.checkers.processOverriddenFunctions
16+
import org.jetbrains.kotlin.fir.analysis.checkers.processOverriddenFunctionsSafe
1717
import org.jetbrains.kotlin.fir.caches.FirCache
1818
import org.jetbrains.kotlin.fir.caches.firCachesFactory
1919
import org.jetbrains.kotlin.fir.caches.getValue
@@ -839,7 +839,8 @@ class SuspendTransformFirTransformer(
839839
val markAnnotation = syntheticFunData.transformer.markAnnotation
840840

841841
if (func.isOverride && !isOverride) {
842-
func.processOverriddenFunctions(
842+
// func.processOverriddenFunctionsSafe()
843+
func.processOverriddenFunctionsSafe(
843844
checkContext
844845
) processOverridden@{ overriddenFunction ->
845846
if (!isOverride) {
@@ -1189,7 +1190,8 @@ class SuspendTransformFirTransformer(
11891190
it.toRegularClassSymbol(session)
11901191
}
11911192
.flatMap {
1192-
it.declarationSymbols.filterIsInstance<FirPropertySymbol>()
1193+
it.declaredProperties(session)
1194+
// it.declarationSymbols.filterIsInstance<FirPropertySymbol>()
11931195
}
11941196
.filter { !it.isFinal }
11951197
.filter { it.callableId.callableName == functionName }
@@ -1205,7 +1207,8 @@ class SuspendTransformFirTransformer(
12051207
it.toRegularClassSymbol(session)
12061208
}
12071209
.flatMap {
1208-
it.declarationSymbols.filterIsInstance<FirNamedFunctionSymbol>()
1210+
it.declaredFunctions(session)
1211+
// it.declarationSymbols.filterIsInstance<FirNamedFunctionSymbol>()
12091212
}
12101213
// not final, overridable
12111214
.filter { !it.isFinal }

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

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import love.forte.plugin.suspendtrans.fir.SuspendTransformK2V3Key
1010
import love.forte.plugin.suspendtrans.fir.SuspendTransformPluginKey
1111
import love.forte.plugin.suspendtrans.fqn
1212
import love.forte.plugin.suspendtrans.utils.*
13+
import love.forte.plugin.suspendtrans.valueParameters0
1314
import org.jetbrains.kotlin.backend.common.IrElementTransformerVoidWithContext
1415
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
1516
import org.jetbrains.kotlin.backend.wasm.ir2wasm.getSourceLocation
@@ -370,8 +371,8 @@ private fun generateTransformBodyForFunction(
370371
transformTargetFunctionCall: IrSimpleFunctionSymbol,
371372
): IrBody {
372373
// default params
373-
val originValueParameters = originFunction.valueParameters
374-
function.valueParameters.forEachIndexed { index, parameter ->
374+
val originValueParameters = originFunction.valueParameters0()
375+
function.valueParameters0().forEachIndexed { index, parameter ->
375376
val originFunctionValueParameter = originValueParameters[index]
376377
parameter.defaultValue = originFunctionValueParameter.defaultValue
377378
}
@@ -385,18 +386,18 @@ private fun generateTransformBodyForFunction(
385386
).also { +it }
386387

387388
+irReturn(irCall(transformTargetFunctionCall).apply {
388-
putValueArgument(0, irCall(suspendLambda.primaryConstructor!!).apply {
389+
arguments[0] = irCall(suspendLambda.primaryConstructor!!).apply {
389390
for ((index, parameter) in function.paramsAndReceiversAsParamsList().withIndex()) {
390-
putValueArgument(index, irGet(parameter))
391+
arguments[index] = irGet(parameter)
391392
}
392-
})
393+
}
393394
// argument: 1, if is CoroutineScope, and this is CoroutineScope.
394395
//println("transformTargetFunctionCall.owner: ${transformTargetFunctionCall.owner}")
395396
//println(transformTargetFunctionCall.owner.valueParameters)
396397
val owner = transformTargetFunctionCall.owner
397398

398399
// CoroutineScope
399-
val ownerValueParameters = owner.valueParameters
400+
val ownerValueParameters = owner.valueParameters0()
400401

401402
if (ownerValueParameters.size > 1) {
402403
for (index in 1..ownerValueParameters.lastIndex) {
@@ -421,8 +422,8 @@ private fun generateTransformBodyForFunctionLambda(
421422
transformTargetFunctionCall: IrSimpleFunctionSymbol,
422423
): IrBody {
423424
// 不为null,说明是直接生成。否则是bridge
424-
originFunction?.valueParameters?.also { originValueParameters ->
425-
function.valueParameters.forEachIndexed { index, parameter ->
425+
originFunction?.valueParameters0()?.also { originValueParameters ->
426+
function.valueParameters0().forEachIndexed { index, parameter ->
426427
val originFunctionValueParameter = originValueParameters[index]
427428
parameter.defaultValue = originFunctionValueParameter.defaultValue
428429
}
@@ -447,17 +448,17 @@ private fun generateTransformBodyForFunctionLambda(
447448
)
448449
} else {
449450
// is bridge fun, use the first param `block`
450-
val blockParameter = function.valueParameters.first()
451+
val blockParameter = function.valueParameters0().first()
451452
irGet(blockParameter)
452453
}
453454

454455
+irReturn(irCall(transformTargetFunctionCall).apply {
455-
putValueArgument(0, lambdaExpression)
456+
arguments[0] = lambdaExpression
456457

457458
val transformFunctionOwner = transformTargetFunctionCall.owner
458459

459460
// CoroutineScope
460-
val ownerValueParameters = transformFunctionOwner.valueParameters
461+
val ownerValueParameters = transformFunctionOwner.valueParameters0()
461462

462463
// argument: 1, if is CoroutineScope, and this is CoroutineScope.
463464
if (ownerValueParameters.size > 1) {
@@ -507,11 +508,11 @@ private fun IrCall.tryResolveCoroutineScopeValueParameter(
507508
context.referenceClass(coroutineScopeTypeClassId)?.also { coroutineScopeRef ->
508509
if (dispatchReceiverParameter.type.isSubtypeOfClass(coroutineScopeRef)) {
509510
// put 'this' to the arg
510-
putValueArgument(index, builderWithScope.irGet(dispatchReceiverParameter))
511+
arguments[index] = builderWithScope.irGet(dispatchReceiverParameter)
511512
} else {
512513
val scopeType = coroutineScopeRef.defaultType
513514

514-
val scopeParameter = owner.valueParameters.getOrNull(1)
515+
val scopeParameter = owner.valueParameters0().getOrNull(1)
515516

516517
if (scopeParameter?.type?.isNullable() == true) {
517518
val irSafeAs = IrTypeOperatorCallImpl(
@@ -523,7 +524,7 @@ private fun IrCall.tryResolveCoroutineScopeValueParameter(
523524
builderWithScope.irGet(dispatchReceiverParameter)
524525
)
525526

526-
putValueArgument(index, irSafeAs)
527+
arguments[index] = irSafeAs
527528
}
528529
// irAs(irGet(dispatchReceiverParameter), coroutineScopeRef.defaultType)
529530
}

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

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package love.forte.plugin.suspendtrans.utils
22

3+
import love.forte.plugin.suspendtrans.valueParameters0
34
import org.jetbrains.kotlin.backend.common.descriptors.synthesizedName
45
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
56
import org.jetbrains.kotlin.backend.jvm.ir.fileParent
@@ -10,6 +11,8 @@ import org.jetbrains.kotlin.ir.builders.*
1011
import org.jetbrains.kotlin.ir.builders.declarations.*
1112
import org.jetbrains.kotlin.ir.declarations.*
1213
import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl
14+
import org.jetbrains.kotlin.ir.expressions.IrExpression
15+
import org.jetbrains.kotlin.ir.expressions.IrFunctionAccessExpression
1316
import org.jetbrains.kotlin.ir.expressions.impl.IrGetFieldImpl
1417
import org.jetbrains.kotlin.ir.types.IrSimpleType
1518
import org.jetbrains.kotlin.ir.types.getClass
@@ -126,13 +129,13 @@ fun IrPluginContext.createSuspendLambdaWithCoroutineScope(
126129
if (originFunction.dispatchReceiverParameter != null) {
127130
this@call.dispatchReceiver = arguments.pop().irGetField0()
128131
}
129-
if (originFunction.extensionReceiverParameter != null) {
130-
this@call.extensionReceiver = arguments.pop().irGetField0()
132+
if (originFunction.extensionReceiverParameter0() != null) {
133+
this@call.extensionReceiver0(arguments.pop().irGetField0())
131134
}
132135

133136
// this@call.putValueArgument(0, irGet(scopeParam))
134137
for ((index, irField) in arguments.withIndex()) {
135-
this@call.putValueArgument(index, irField.irGetField0())
138+
this@call.arguments[index] = irField.irGetField0()
136139
}
137140
}
138141
}
@@ -163,12 +166,12 @@ fun IrPluginContext.createSuspendLambdaFunctionWithCoroutineScope(
163166
this@call.dispatchReceiver = irGet(it)
164167
}
165168

166-
function.extensionReceiverParameter?.also {
167-
this@call.extensionReceiver = irGet(it)
169+
function.extensionReceiverParameter0()?.also {
170+
this@call.extensionReceiver0(irGet(it))
168171
}
169172

170-
for ((index, parameter) in function.valueParameters.withIndex()) {
171-
this@call.putValueArgument(index, irGet(parameter))
173+
for ((index, parameter) in function.valueParameters0().withIndex()) {
174+
this@call.arguments[index] = irGet(parameter)
172175
}
173176
})
174177
}
@@ -181,8 +184,8 @@ fun IrFunction.paramsAndReceiversAsParamsList(): List<IrValueParameter> {
181184
if (!isStatic) {
182185
dispatchReceiverParameter?.let(this::add)
183186
}
184-
extensionReceiverParameter?.let(this::add)
185-
valueParameters.let(this::addAll)
187+
extensionReceiverParameter0()?.let(this::add)
188+
valueParameters0().let(this::addAll)
186189
}
187190
}
188191

@@ -198,3 +201,10 @@ val Name.identifierOrMappedSpecialName: String
198201

199202
val IrDeclarationContainer.functionsSequence: Sequence<IrSimpleFunction>
200203
get() = declarations.asSequence().filterIsInstance<IrSimpleFunction>()
204+
205+
internal fun IrFunction.extensionReceiverParameter0() =
206+
parameters.firstOrNull { it.kind == IrParameterKind.ExtensionReceiver }
207+
208+
internal fun IrFunctionAccessExpression.extensionReceiver0(value: IrExpression?) {
209+
arguments[symbol.owner.parameters.indexOfFirst { it.kind == IrParameterKind.ExtensionReceiver }] = value
210+
}

compiler/suspend-transform-plugin/src/testData/codegen/implOverridenGeneric.fir.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ FILE: Main.kt
157157
)
158158
}
159159

160-
@R|love/forte/plugin/suspendtrans/annotation/Api4J|() public open fun R|kotlin/Int|.data3Blocking(): R|T| {
160+
@R|love/forte/plugin/suspendtrans/annotation/Api4J|() public open override fun R|kotlin/Int|.data3Blocking(): R|T| {
161161
^data3Blocking R|love/forte/plugin/suspendtrans/runtime/$runInBlocking$|(suspend fun <anonymous>(): R|T| <inline=Unknown> {
162162
^ (this@R|/FooInterface3Impl|, this@R|/FooInterface3Impl.data3Blocking|).R|/FooInterface3Impl.data3|()
163163
}
@@ -225,7 +225,7 @@ FILE: Main.kt
225225
)
226226
}
227227

228-
@R|love/forte/plugin/suspendtrans/annotation/Api4J|() public open fun R|kotlin/Int|.data3Blocking(): R|T| {
228+
@R|love/forte/plugin/suspendtrans/annotation/Api4J|() public open override fun R|kotlin/Int|.data3Blocking(): R|T| {
229229
^data3Blocking R|love/forte/plugin/suspendtrans/runtime/$runInBlocking$|(suspend fun <anonymous>(): R|T| <inline=Unknown> {
230230
^ (this@R|/FooInterface4Impl|, this@R|/FooInterface4Impl.data3Blocking|).R|/FooInterface4Impl.data3|()
231231
}

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ kotlinx-coroutines = "1.8.0"
33
kotlinx-serialization = "1.7.1"
44
google-auto-service = "1.0.1"
55
# Remember the `IProject.ktVersion`!
6-
kotlin = "2.2.0-Beta1"
6+
kotlin = "2.2.0-Beta2"
77

88
[libraries]
99

0 commit comments

Comments
 (0)