Skip to content

Commit c177544

Browse files
committed
Update project for K1 usage (#155)
1 parent 467deaf commit c177544

File tree

29 files changed

+215
-270
lines changed

29 files changed

+215
-270
lines changed

compiler-plugin/compiler-plugin-backend/build.gradle.kts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@ plugins {
1111

1212
kotlin {
1313
explicitApi = ExplicitApiMode.Disabled
14+
15+
sourceSets.all {
16+
languageSettings.optIn("org.jetbrains.kotlin.ir.symbols.UnsafeDuringIrConstructionAPI")
17+
}
1418
}
1519

1620
dependencies {

compiler-plugin/compiler-plugin-backend/src/main/core/kotlinx/rpc/codegen/VersionSpecificApi.kt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,7 @@ package kotlinx.rpc.codegen
66

77
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
88
import org.jetbrains.kotlin.ir.builders.declarations.IrFieldBuilder
9-
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
10-
import org.jetbrains.kotlin.ir.declarations.IrFunction
11-
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
12-
import org.jetbrains.kotlin.ir.declarations.IrValueParameter
9+
import org.jetbrains.kotlin.ir.declarations.*
1310
import org.jetbrains.kotlin.ir.expressions.IrCall
1411
import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
1512
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
@@ -42,6 +39,8 @@ interface VersionSpecificApi {
4239

4340
var IrCall.originVS: IrStatementOrigin?
4441

42+
var IrConstructor.isPrimaryVS: Boolean
43+
4544
companion object {
4645
lateinit var INSTANCE: VersionSpecificApi
4746
}

compiler-plugin/compiler-plugin-backend/src/main/core/kotlinx/rpc/codegen/extension/RPCDeclarationScanner.kt

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,16 @@
22
* Copyright 2023-2024 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.
33
*/
44

5-
@file:OptIn(UnsafeDuringIrConstructionAPI::class)
6-
75
package kotlinx.rpc.codegen.extension
86

97
import kotlinx.rpc.codegen.common.RpcNames
108
import org.jetbrains.kotlin.ir.declarations.IrClass
119
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
1210
import org.jetbrains.kotlin.ir.declarations.IrProperty
1311
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
14-
import org.jetbrains.kotlin.ir.symbols.UnsafeDuringIrConstructionAPI
1512
import org.jetbrains.kotlin.ir.types.classOrNull
1613
import org.jetbrains.kotlin.ir.util.dumpKotlinLike
14+
import org.jetbrains.kotlin.ir.util.packageFqName
1715

1816
/**
1917
* This class scans user declared RPC service
@@ -73,8 +71,15 @@ internal object RPCDeclarationScanner {
7371
}
7472
}
7573

74+
val packageName = service.packageFqName?.asString()
75+
?: error("Expected package name of the ${service.name.asString()}")
76+
7677
val stubClassNotNull = stubClass
77-
?: error("Expected ${RpcNames.SERVICE_STUB_NAME} nested declaration in ${service.name}")
78+
// only for KSP generation
79+
?: ctx.getIrClassSymbol(
80+
packageName = packageName,
81+
name = "${service.name.asString()}${RpcNames.SERVICE_STUB_NAME_KSP.asString()}"
82+
).owner
7883

7984
return ServiceDeclaration(
8085
service = service,

compiler-plugin/compiler-plugin-backend/src/main/core/kotlinx/rpc/codegen/extension/RPCIrContext.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,7 @@ internal class RPCIrContext(
242242
return getIrClassSymbol("kotlinx.rpc$suffix", name)
243243
}
244244

245-
private fun getIrClassSymbol(packageName: String, name: String): IrClassSymbol {
245+
fun getIrClassSymbol(packageName: String, name: String): IrClassSymbol {
246246
return versionSpecificApi.referenceClass(pluginContext, packageName, name)
247247
?: error("Unable to find symbol. Package: $packageName, name: $name")
248248
}

compiler-plugin/compiler-plugin-backend/src/main/core/kotlinx/rpc/codegen/extension/RPCStubGenerator.kt

Lines changed: 21 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,11 @@
22
* Copyright 2023-2024 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.
33
*/
44

5-
@file:OptIn(UnsafeDuringIrConstructionAPI::class)
6-
75
package kotlinx.rpc.codegen.extension
86

97
import kotlinx.rpc.codegen.VersionSpecificApi
108
import kotlinx.rpc.codegen.common.rpcMethodClassName
9+
import kotlinx.rpc.codegen.common.rpcMethodClassNameKsp
1110
import org.jetbrains.kotlin.backend.common.lower.DeclarationIrBuilder
1211
import org.jetbrains.kotlin.backend.jvm.functionByName
1312
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
@@ -25,7 +24,6 @@ import org.jetbrains.kotlin.ir.expressions.impl.*
2524
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
2625
import org.jetbrains.kotlin.ir.symbols.IrSymbol
2726
import org.jetbrains.kotlin.ir.symbols.IrValueSymbol
28-
import org.jetbrains.kotlin.ir.symbols.UnsafeDuringIrConstructionAPI
2927
import org.jetbrains.kotlin.ir.types.*
3028
import org.jetbrains.kotlin.ir.util.*
3129
import org.jetbrains.kotlin.name.Name
@@ -175,7 +173,7 @@ internal class RPCStubGenerator(
175173
addBackingFieldUtil {
176174
visibility = DescriptorVisibilities.PRIVATE
177175
type = propertyType
178-
isFinal = true
176+
vsApi { isFinalVS = true }
179177
}.apply {
180178
initializer = factory.createExpressionBody(
181179
IrGetValueImpl(
@@ -214,7 +212,7 @@ internal class RPCStubGenerator(
214212
addBackingFieldUtil {
215213
visibility = DescriptorVisibilities.PRIVATE
216214
type = ctx.coroutineContext.defaultType
217-
isFinal = true
215+
vsApi { isFinalVS = true }
218216
}.apply {
219217
val coroutineContextClass = ctx.coroutineContext.owner
220218

@@ -280,7 +278,6 @@ internal class RPCStubGenerator(
280278
"detekt.NestedBlockDepth",
281279
"detekt.LongMethod",
282280
"detekt.CyclomaticComplexMethod",
283-
"detekt.MagicNumber",
284281
)
285282
private fun IrClass.rpcFlowField(field: ServiceDeclaration.FlowField) {
286283
val isLazy = !field.property.hasAnnotation(ctx.rpcEagerFieldAnnotation)
@@ -362,7 +359,7 @@ internal class RPCStubGenerator(
362359
addBackingFieldUtil {
363360
type = fieldType
364361
visibility = DescriptorVisibilities.PRIVATE
365-
isFinal = true
362+
vsApi { isFinalVS = true }
366363
}.apply {
367364
initializer = factory.createExpressionBody(registerCall)
368365
}
@@ -379,7 +376,7 @@ internal class RPCStubGenerator(
379376
name = propertyDelegateName(this@apply.name)
380377
visibility = DescriptorVisibilities.PRIVATE
381378
type = lazyFieldType
382-
isFinal = true
379+
vsApi { isFinalVS = true }
383380
}.apply {
384381
val propertyDelegate = this
385382

@@ -539,7 +536,8 @@ internal class RPCStubGenerator(
539536
val isMethodObject = method.arguments.isEmpty()
540537

541538
val methodClassName = method.function.name.rpcMethodClassName
542-
val methodClass: IrClass = initiateAndGetMethodClass(methodClassName, method)
539+
val methodClassNameKsp = method.function.name.rpcMethodClassNameKsp
540+
val methodClass: IrClass = initiateAndGetMethodClass(methodClassName, methodClassNameKsp, method)
543541

544542
addFunction {
545543
name = method.function.name
@@ -653,17 +651,22 @@ internal class RPCStubGenerator(
653651
* }
654652
* ```
655653
*/
656-
private fun IrClass.initiateAndGetMethodClass(methodClassName: Name, method: ServiceDeclaration.Method): IrClass {
657-
val methodClass = findDeclaration<IrClass> { it.name == methodClassName }
658-
?: error(
659-
"Expected $methodClassName class to be present in stub class " +
660-
"${declaration.service.name}${declaration.stubClass.name}"
661-
)
654+
private fun IrClass.initiateAndGetMethodClass(
655+
methodClassName: Name,
656+
methodClassNameKsp: Name,
657+
method: ServiceDeclaration.Method
658+
): IrClass {
659+
val methodClass = findDeclaration<IrClass> {
660+
it.name == methodClassName || it.name == methodClassNameKsp
661+
} ?: error(
662+
"Expected $methodClassName or $methodClassNameKsp class to be present in stub class " +
663+
"${declaration.service.name}${declaration.stubClass.name}"
664+
)
662665

663666
methodClasses.add(methodClass)
664667

665668
val methodClassThisReceiver = methodClass.thisReceiver
666-
?: error("Expected $methodClassName of ${declaration.stubClass.name} to have a thisReceiver")
669+
?: error("Expected ${methodClass.name} of ${declaration.stubClass.name} to have a thisReceiver")
667670

668671
val properties = if (methodClass.isClass) {
669672
val argNames = method.arguments.memoryOptimizedMap { it.value.name }.toSet()
@@ -677,7 +680,7 @@ internal class RPCStubGenerator(
677680
method.arguments.size == it.valueParameters.size
678681
}
679682

680-
constructor.isPrimary = true
683+
vsApi { constructor.isPrimaryVS = true }
681684
methodClass.addDefaultConstructor(constructor)
682685

683686
constructor.valueParameters.memoryOptimizedMap { valueParam ->
@@ -754,10 +757,7 @@ internal class RPCStubGenerator(
754757
* ))
755758
* ```
756759
*/
757-
@Suppress(
758-
"detekt.NestedBlockDepth",
759-
"detekt.MagicNumber",
760-
)
760+
@Suppress("detekt.NestedBlockDepth")
761761
private fun IrBlockBodyBuilder.irRpcMethodClientCall(
762762
method: ServiceDeclaration.Method,
763763
functionThisReceiver: IrValueParameter,
@@ -970,7 +970,6 @@ internal class RPCStubGenerator(
970970

971971
addBackingFieldUtil {
972972
type = mapType
973-
isFinal = true
974973
vsApi { isFinalVS = true }
975974
visibility = DescriptorVisibilities.PRIVATE
976975
}.apply {

compiler-plugin/compiler-plugin-backend/src/main/latest/kotlinx/rpc/codegen/VersionSpecificApiImpl.kt

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,7 @@ package kotlinx.rpc.codegen
77
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
88
import org.jetbrains.kotlin.backend.common.ir.addExtensionReceiver
99
import org.jetbrains.kotlin.ir.builders.declarations.IrFieldBuilder
10-
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
11-
import org.jetbrains.kotlin.ir.declarations.IrFunction
12-
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
13-
import org.jetbrains.kotlin.ir.declarations.IrValueParameter
10+
import org.jetbrains.kotlin.ir.declarations.*
1411
import org.jetbrains.kotlin.ir.expressions.IrCall
1512
import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
1613
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
@@ -39,6 +36,12 @@ object VersionSpecificApiImpl : VersionSpecificApi {
3936
get() = origin
4037
set(value) { origin = value }
4138

39+
override var IrConstructor.isPrimaryVS: Boolean
40+
get() = isPrimary
41+
set(value) {
42+
isPrimary = value
43+
}
44+
4245
override fun referenceClass(context: IrPluginContext, packageName: String, name: String): IrClassSymbol? {
4346
return context.referenceClass(
4447
ClassId(

compiler-plugin/compiler-plugin-backend/src/main/v_1_7/kotlinx/rpc/codegen/VersionSpecificApiImpl.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,9 @@ package kotlinx.rpc.codegen
66

77
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
88
import org.jetbrains.kotlin.backend.common.ir.copyTo
9-
import org.jetbrains.kotlin.descriptors.Modality
109
import org.jetbrains.kotlin.ir.builders.declarations.IrFieldBuilder
1110
import org.jetbrains.kotlin.ir.builders.declarations.addExtensionReceiver
12-
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
13-
import org.jetbrains.kotlin.ir.declarations.IrFunction
14-
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
15-
import org.jetbrains.kotlin.ir.declarations.IrValueParameter
11+
import org.jetbrains.kotlin.ir.declarations.*
1612
import org.jetbrains.kotlin.ir.expressions.IrCall
1713
import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
1814
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
@@ -34,6 +30,10 @@ object VersionSpecificApiImpl : VersionSpecificApi {
3430
get() = origin
3531
set(_) {}
3632

33+
override var IrConstructor.isPrimaryVS: Boolean
34+
get() = isPrimary
35+
set(_) {}
36+
3737
override fun referenceClass(context: IrPluginContext, packageName: String, name: String): IrClassSymbol? {
3838
return context.referenceClass(FqName("$packageName.$name"))
3939
}

compiler-plugin/compiler-plugin-backend/src/main/v_1_7_2/kotlinx/rpc/codegen/VersionSpecificApiImpl.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,8 @@ package kotlinx.rpc.codegen
66

77
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
88
import org.jetbrains.kotlin.backend.common.ir.addExtensionReceiver
9-
import org.jetbrains.kotlin.descriptors.Modality
109
import org.jetbrains.kotlin.ir.builders.declarations.IrFieldBuilder
11-
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
12-
import org.jetbrains.kotlin.ir.declarations.IrFunction
13-
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
14-
import org.jetbrains.kotlin.ir.declarations.IrValueParameter
10+
import org.jetbrains.kotlin.ir.declarations.*
1511
import org.jetbrains.kotlin.ir.expressions.IrCall
1612
import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
1713
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
@@ -37,6 +33,10 @@ object VersionSpecificApiImpl : VersionSpecificApi {
3733
get() = origin
3834
set(_) {}
3935

36+
override var IrConstructor.isPrimaryVS: Boolean
37+
get() = isPrimary
38+
set(_) {}
39+
4040
override fun referenceClass(context: IrPluginContext, packageName: String, name: String): IrClassSymbol? {
4141
return context.referenceClass(
4242
ClassId(

compiler-plugin/compiler-plugin-backend/src/main/v_1_8/kotlinx/rpc/codegen/VersionSpecificApiImpl.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,7 @@ import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
88
import org.jetbrains.kotlin.backend.common.ir.addExtensionReceiver
99
import org.jetbrains.kotlin.descriptors.Modality
1010
import org.jetbrains.kotlin.ir.builders.declarations.IrFieldBuilder
11-
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
12-
import org.jetbrains.kotlin.ir.declarations.IrFunction
13-
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
14-
import org.jetbrains.kotlin.ir.declarations.IrValueParameter
11+
import org.jetbrains.kotlin.ir.declarations.*
1512
import org.jetbrains.kotlin.ir.expressions.IrCall
1613
import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
1714
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
@@ -37,6 +34,10 @@ object VersionSpecificApiImpl : VersionSpecificApi {
3734
get() = origin
3835
set(_) {}
3936

37+
override var IrConstructor.isPrimaryVS: Boolean
38+
get() = isPrimary
39+
set(_) {}
40+
4041
override fun referenceClass(context: IrPluginContext, packageName: String, name: String): IrClassSymbol? {
4142
return context.referenceClass(
4243
ClassId(

compiler-plugin/compiler-plugin-backend/src/main/v_1_9/kotlinx/rpc/codegen/VersionSpecificApiImpl.kt

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,13 @@ import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
88
import org.jetbrains.kotlin.backend.common.ir.addExtensionReceiver
99
import org.jetbrains.kotlin.descriptors.Modality
1010
import org.jetbrains.kotlin.ir.builders.declarations.IrFieldBuilder
11-
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
12-
import org.jetbrains.kotlin.ir.declarations.IrFunction
13-
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
14-
import org.jetbrains.kotlin.ir.declarations.IrValueParameter
11+
import org.jetbrains.kotlin.ir.declarations.*
1512
import org.jetbrains.kotlin.ir.expressions.IrCall
1613
import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
1714
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
1815
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
1916
import org.jetbrains.kotlin.ir.types.IrType
17+
import org.jetbrains.kotlin.ir.types.impl.IrErrorClassImpl.modality
2018
import org.jetbrains.kotlin.ir.util.copyTo
2119
import org.jetbrains.kotlin.name.CallableId
2220
import org.jetbrains.kotlin.name.ClassId
@@ -40,6 +38,12 @@ object VersionSpecificApiImpl : VersionSpecificApi {
4038
get() = origin
4139
set(value) { origin = value }
4240

41+
override var IrConstructor.isPrimaryVS: Boolean
42+
get() = isPrimary
43+
set(value) {
44+
isPrimary = value
45+
}
46+
4347
override fun referenceClass(context: IrPluginContext, packageName: String, name: String): IrClassSymbol? {
4448
return context.referenceClass(
4549
ClassId(

0 commit comments

Comments
 (0)