Skip to content

Commit 9218007

Browse files
committed
Fix all compiler versions
1 parent daf9e25 commit 9218007

File tree

18 files changed

+338
-65
lines changed

18 files changed

+338
-65
lines changed

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ import org.jetbrains.kotlin.descriptors.SourceElement
1414
import org.jetbrains.kotlin.ir.builders.declarations.IrFieldBuilder
1515
import org.jetbrains.kotlin.ir.declarations.*
1616
import org.jetbrains.kotlin.ir.expressions.IrCall
17+
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
18+
import org.jetbrains.kotlin.ir.expressions.IrExpression
1719
import org.jetbrains.kotlin.ir.expressions.IrMemberAccessExpression
1820
import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
1921
import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl
@@ -53,6 +55,12 @@ interface VersionSpecificApi {
5355

5456
var IrConstructor.isPrimaryVS: Boolean
5557

58+
val IrConstructor.parametersVS: List<IrValueParameter>
59+
60+
val IrConstructorCall.argumentsVS: List<IrExpression?>
61+
62+
fun IrType.isNullableVS(): Boolean
63+
5664
val messageCollectorKey: CompilerConfigurationKey<MessageCollector>
5765

5866
companion object {

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

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
2222
import org.jetbrains.kotlin.ir.symbols.IrSymbol
2323
import org.jetbrains.kotlin.ir.symbols.IrValueSymbol
2424
import org.jetbrains.kotlin.ir.types.*
25-
import org.jetbrains.kotlin.ir.util.isNullable
2625
import org.jetbrains.kotlin.ir.util.*
2726
import org.jetbrains.kotlin.name.Name
2827
import org.jetbrains.kotlin.name.SpecialNames
@@ -603,7 +602,7 @@ internal class RpcStubGenerator(
603602
}
604603
}
605604

606-
if (arg.type.isNullable()) {
605+
if (vsApi { arg.type.isNullableVS() }) {
607606
+irSafeAs(parameter, arg.type)
608607
} else {
609608
+irAs(parameter, arg.type)
@@ -1061,7 +1060,7 @@ internal class RpcStubGenerator(
10611060
elements = type.annotations
10621061
.filter { it.type.isSerializableAnnotation() }
10631062
.memoryOptimizedMap {
1064-
val kClassValue = it.arguments.singleOrNull()
1063+
val kClassValue = vsApi { it.argumentsVS }.singleOrNull()
10651064
as? IrClassReference
10661065
?: error("Expected single not null value parameter of KSerializer::class for @Serializable annotation on type '${type.dumpKotlinLike()}'")
10671066

@@ -1076,7 +1075,7 @@ internal class RpcStubGenerator(
10761075

10771076
private fun IrType.irCreateInstance(): IrExpression {
10781077
val classSymbol =
1079-
classOrNull ?: error("Expected class type for type to create instance '${type.dumpKotlinLike()}'")
1078+
classOrNull ?: error("Expected class type for type to create instance '${dumpKotlinLike()}'")
10801079

10811080
return if (classSymbol.owner.isObject) {
10821081
IrGetObjectValueImpl(
@@ -1089,10 +1088,10 @@ internal class RpcStubGenerator(
10891088
val constructor = classSymbol.owner.primaryConstructor
10901089
?: error("Expected primary constructor for a serializer '${dumpKotlinLike()}'")
10911090

1092-
if (constructor.parameters.isNotEmpty()) {
1091+
if (vsApi { constructor.parametersVS.isNotEmpty() }) {
10931092
error(
10941093
"Primary constructor for a serializer '${dumpKotlinLike()}' can't have parameters: " +
1095-
constructor.parameters.joinToString { it.dumpKotlinLike() }
1094+
vsApi { constructor.parametersVS }.joinToString { it.dumpKotlinLike() }
10961095
)
10971096
}
10981097

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ import org.jetbrains.kotlin.descriptors.SourceElement
1515
import org.jetbrains.kotlin.ir.builders.declarations.IrFieldBuilder
1616
import org.jetbrains.kotlin.ir.declarations.*
1717
import org.jetbrains.kotlin.ir.expressions.IrCall
18+
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
19+
import org.jetbrains.kotlin.ir.expressions.IrExpression
1820
import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
1921
import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl
2022
import org.jetbrains.kotlin.ir.expressions.impl.IrConstructorCallImpl
@@ -23,6 +25,7 @@ import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol
2325
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
2426
import org.jetbrains.kotlin.ir.types.IrType
2527
import org.jetbrains.kotlin.ir.util.copyTo
28+
import org.jetbrains.kotlin.ir.util.isNullable
2629
import org.jetbrains.kotlin.name.CallableId
2730
import org.jetbrains.kotlin.name.ClassId
2831
import org.jetbrains.kotlin.name.FqName
@@ -58,6 +61,16 @@ object VersionSpecificApiImpl : VersionSpecificApi {
5861
isPrimary = value
5962
}
6063

64+
override val IrConstructor.parametersVS: List<IrValueParameter>
65+
get() = parameters
66+
67+
override val IrConstructorCall.argumentsVS: List<IrExpression?>
68+
get() = arguments
69+
70+
override fun IrType.isNullableVS(): Boolean {
71+
return isNullable()
72+
}
73+
6174
override fun referenceClass(context: IrPluginContext, packageName: String, name: String): IrClassSymbol? {
6275
return context.referenceClass(
6376
ClassId(

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,20 @@ import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
1212
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
1313
import org.jetbrains.kotlin.config.CompilerConfigurationKey
1414
import org.jetbrains.kotlin.descriptors.SourceElement
15+
import org.jetbrains.kotlin.ir.backend.js.utils.valueArguments
1516
import org.jetbrains.kotlin.ir.builders.declarations.IrFieldBuilder
1617
import org.jetbrains.kotlin.ir.declarations.*
1718
import org.jetbrains.kotlin.ir.expressions.IrCall
19+
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
20+
import org.jetbrains.kotlin.ir.expressions.IrExpression
1821
import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
1922
import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl
2023
import org.jetbrains.kotlin.ir.expressions.impl.IrConstructorCallImpl
2124
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
2225
import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol
2326
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
2427
import org.jetbrains.kotlin.ir.types.IrType
28+
import org.jetbrains.kotlin.ir.types.isNullable
2529
import org.jetbrains.kotlin.ir.util.copyTo
2630
import org.jetbrains.kotlin.name.CallableId
2731
import org.jetbrains.kotlin.name.ClassId
@@ -56,6 +60,16 @@ object VersionSpecificApiImpl : VersionSpecificApi {
5660
isPrimary = value
5761
}
5862

63+
override val IrConstructor.parametersVS: List<IrValueParameter>
64+
get() = valueParameters
65+
66+
override val IrConstructorCall.argumentsVS: List<IrExpression?>
67+
get() = valueArguments
68+
69+
override fun IrType.isNullableVS(): Boolean {
70+
return isNullable()
71+
}
72+
5973
override fun referenceClass(context: IrPluginContext, packageName: String, name: String): IrClassSymbol? {
6074
return context.referenceClass(
6175
ClassId(

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,12 @@ import org.jetbrains.kotlin.cli.common.messages.MessageCollector
1111
import org.jetbrains.kotlin.config.CommonConfigurationKeys
1212
import org.jetbrains.kotlin.config.CompilerConfigurationKey
1313
import org.jetbrains.kotlin.descriptors.SourceElement
14+
import org.jetbrains.kotlin.ir.backend.js.utils.valueArguments
1415
import org.jetbrains.kotlin.ir.builders.declarations.IrFieldBuilder
1516
import org.jetbrains.kotlin.ir.declarations.*
1617
import org.jetbrains.kotlin.ir.expressions.IrCall
18+
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
19+
import org.jetbrains.kotlin.ir.expressions.IrExpression
1720
import org.jetbrains.kotlin.ir.expressions.IrMemberAccessExpression
1821
import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
1922
import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl
@@ -22,6 +25,7 @@ import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
2225
import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol
2326
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
2427
import org.jetbrains.kotlin.ir.types.IrType
28+
import org.jetbrains.kotlin.ir.types.isNullable
2529
import org.jetbrains.kotlin.ir.util.copyTo
2630
import org.jetbrains.kotlin.name.CallableId
2731
import org.jetbrains.kotlin.name.ClassId
@@ -56,6 +60,16 @@ object VersionSpecificApiImpl : VersionSpecificApi {
5660
isPrimary = value
5761
}
5862

63+
override val IrConstructor.parametersVS: List<IrValueParameter>
64+
get() = valueParameters
65+
66+
override val IrConstructorCall.argumentsVS: List<IrExpression?>
67+
get() = valueArguments
68+
69+
override fun IrType.isNullableVS(): Boolean {
70+
return isNullable()
71+
}
72+
5973
override fun referenceClass(context: IrPluginContext, packageName: String, name: String): IrClassSymbol? {
6074
return context.referenceClass(
6175
ClassId(
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/*
2+
* Copyright 2023-2025 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.
3+
*/
4+
5+
package kotlinx.rpc.codegen
6+
7+
import kotlinx.rpc.codegen.extension.RpcIrContext
8+
import kotlinx.rpc.codegen.extension.RpcIrServiceProcessor
9+
import org.jetbrains.kotlin.ir.IrStatement
10+
import org.jetbrains.kotlin.ir.declarations.IrClass
11+
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
12+
13+
internal class RpcIrServiceProcessorDelegate(
14+
val processor: RpcIrServiceProcessor,
15+
) : IrElementTransformer<RpcIrContext> {
16+
override fun visitClass(declaration: IrClass, data: RpcIrContext): IrStatement {
17+
processor.visitClass(declaration, data)
18+
19+
return super.visitClass(declaration, data)
20+
}
21+
}
Lines changed: 184 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,184 @@
1+
/*
2+
* Copyright 2023-2024 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.
3+
*/
4+
5+
package kotlinx.rpc.codegen
6+
7+
import kotlinx.rpc.codegen.extension.IrMemberAccessExpressionData
8+
import org.jetbrains.kotlin.ir.expressions.IrMemberAccessExpression
9+
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
10+
import org.jetbrains.kotlin.backend.common.ir.addExtensionReceiver
11+
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
12+
import org.jetbrains.kotlin.config.CommonConfigurationKeys
13+
import org.jetbrains.kotlin.config.CompilerConfigurationKey
14+
import org.jetbrains.kotlin.descriptors.SourceElement
15+
import org.jetbrains.kotlin.ir.backend.js.utils.valueArguments
16+
import org.jetbrains.kotlin.ir.builders.declarations.IrFieldBuilder
17+
import org.jetbrains.kotlin.ir.declarations.*
18+
import org.jetbrains.kotlin.ir.expressions.IrCall
19+
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
20+
import org.jetbrains.kotlin.ir.expressions.IrExpression
21+
import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
22+
import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl
23+
import org.jetbrains.kotlin.ir.expressions.impl.IrConstructorCallImpl
24+
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
25+
import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol
26+
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
27+
import org.jetbrains.kotlin.ir.types.IrType
28+
import org.jetbrains.kotlin.ir.types.isNullable
29+
import org.jetbrains.kotlin.ir.util.copyTo
30+
import org.jetbrains.kotlin.name.CallableId
31+
import org.jetbrains.kotlin.name.ClassId
32+
import org.jetbrains.kotlin.name.FqName
33+
import org.jetbrains.kotlin.name.Name
34+
import org.jetbrains.kotlin.platform.TargetPlatform
35+
import org.jetbrains.kotlin.platform.isJs
36+
import org.jetbrains.kotlin.platform.isWasm
37+
38+
object VersionSpecificApiImpl : VersionSpecificApi {
39+
override fun isJs(platform: TargetPlatform?): Boolean {
40+
return platform.isJs()
41+
}
42+
43+
override fun isWasm(platform: TargetPlatform?): Boolean {
44+
return platform.isWasm()
45+
}
46+
47+
override var IrFieldBuilder.isFinalVS: Boolean
48+
get() = isFinal
49+
set(value) {
50+
isFinal = value
51+
}
52+
53+
override var IrCall.originVS: IrStatementOrigin?
54+
get() = origin
55+
set(value) {
56+
origin = value
57+
}
58+
59+
override var IrConstructor.isPrimaryVS: Boolean
60+
get() = isPrimary
61+
set(value) {
62+
isPrimary = value
63+
}
64+
65+
override val IrConstructor.parametersVS: List<IrValueParameter>
66+
get() = valueParameters
67+
68+
override val IrConstructorCall.argumentsVS: List<IrExpression?>
69+
get() = valueArguments
70+
71+
override fun IrType.isNullableVS(): Boolean {
72+
return isNullable()
73+
}
74+
75+
override fun referenceClass(context: IrPluginContext, packageName: String, name: String): IrClassSymbol? {
76+
return context.referenceClass(
77+
ClassId(
78+
FqName(packageName),
79+
FqName(name),
80+
false
81+
)
82+
)
83+
}
84+
85+
override fun referenceFunctions(
86+
context: IrPluginContext,
87+
packageName: String,
88+
name: String,
89+
): Collection<IrSimpleFunctionSymbol> {
90+
return context.referenceFunctions(
91+
CallableId(
92+
FqName(packageName),
93+
Name.identifier(name),
94+
)
95+
)
96+
}
97+
98+
override fun IrValueParameter.copyToVS(irFunction: IrFunction, origin: IrDeclarationOrigin): IrValueParameter {
99+
return copyTo(irFunction, origin)
100+
}
101+
102+
override fun IrSimpleFunction.addExtensionReceiverVS(type: IrType, origin: IrDeclarationOrigin): IrValueParameter {
103+
return addExtensionReceiver(type, origin)
104+
}
105+
106+
override val messageCollectorKey: CompilerConfigurationKey<MessageCollector>
107+
get() = CommonConfigurationKeys.MESSAGE_COLLECTOR_KEY
108+
109+
override fun IrCallImplVS(
110+
startOffset: Int,
111+
endOffset: Int,
112+
type: IrType,
113+
symbol: IrSimpleFunctionSymbol,
114+
typeArgumentsCount: Int,
115+
valueArgumentsCount: Int,
116+
origin: IrStatementOrigin?,
117+
superQualifierSymbol: IrClassSymbol?,
118+
): IrCallImpl {
119+
return IrCallImpl(
120+
startOffset = startOffset,
121+
endOffset = endOffset,
122+
type = type,
123+
symbol = symbol,
124+
typeArgumentsCount = typeArgumentsCount,
125+
origin = origin,
126+
superQualifierSymbol = superQualifierSymbol,
127+
)
128+
}
129+
130+
override fun IrConstructorCallImplVS(
131+
startOffset: Int,
132+
endOffset: Int,
133+
type: IrType,
134+
symbol: IrConstructorSymbol,
135+
typeArgumentsCount: Int,
136+
valueArgumentsCount: Int,
137+
constructorTypeArgumentsCount: Int,
138+
origin: IrStatementOrigin?,
139+
source: SourceElement,
140+
): IrConstructorCallImpl {
141+
return IrConstructorCallImpl(
142+
startOffset = startOffset,
143+
endOffset = endOffset,
144+
type = type,
145+
symbol = symbol,
146+
typeArgumentsCount = typeArgumentsCount,
147+
constructorTypeArgumentsCount = constructorTypeArgumentsCount,
148+
origin = origin,
149+
source = source,
150+
)
151+
}
152+
153+
override fun IrFunction.valueParametersVS(): List<IrValueParameter> {
154+
return valueParameters
155+
}
156+
157+
override val IrFunction.extensionReceiverParameterVS: IrValueParameter?
158+
get() = extensionReceiverParameter
159+
160+
override var IrFunction.dispatchReceiverParameterVS: IrValueParameter?
161+
get() = dispatchReceiverParameter
162+
set(value) {
163+
dispatchReceiverParameter = value
164+
}
165+
166+
167+
override fun IrMemberAccessExpressionData.buildFor(access: IrMemberAccessExpression<*>) {
168+
if (dispatchReceiver != null) {
169+
access.dispatchReceiver = dispatchReceiver
170+
}
171+
172+
if (extensionReceiver != null) {
173+
access.extensionReceiver = extensionReceiver
174+
}
175+
176+
valueArguments.forEachIndexed { index, irExpression ->
177+
access.putValueArgument(index, irExpression)
178+
}
179+
180+
typeArguments.forEachIndexed { index, irType ->
181+
access.putTypeArgument(index, irType)
182+
}
183+
}
184+
}

0 commit comments

Comments
 (0)