Skip to content

Commit 80d30c7

Browse files
committed
Migrate frontend
1 parent 6d7a8aa commit 80d30c7

File tree

19 files changed

+471
-91
lines changed

19 files changed

+471
-91
lines changed

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
1313
import org.jetbrains.kotlin.ir.types.classOrNull
1414
import org.jetbrains.kotlin.ir.types.makeNullable
1515
import org.jetbrains.kotlin.ir.util.functions
16-
import org.jetbrains.kotlin.ir.util.hasShape
1716
import org.jetbrains.kotlin.ir.util.isVararg
1817
import org.jetbrains.kotlin.ir.util.nestedClasses
1918
import org.jetbrains.kotlin.ir.util.properties

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ object VersionSpecificApiImpl : VersionSpecificApi {
137137
}
138138

139139
override fun IrFunction.valueParametersVS(): List<IrValueParameter> {
140-
return parameters.filter { it.kind < IrParameterKind.Regular }
140+
return parameters.filter { it.kind == IrParameterKind.Regular }
141141
}
142142

143143
override val IrFunction.extensionReceiverParameterVS: IrValueParameter?

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@
44

55
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
66
import org.jetbrains.kotlin.gradle.dsl.ExplicitApiMode
7-
import util.enableContextReceivers
7+
import util.enableContextParameters
88
import util.otherwise
99
import util.whenForIde
10+
import util.whenKotlinIsAtLeast
1011

1112
plugins {
1213
alias(libs.plugins.conventions.jvm)
@@ -68,7 +69,9 @@ tasks.jar {
6869
kotlin {
6970
explicitApi = ExplicitApiMode.Disabled
7071

71-
enableContextReceivers()
72+
rootProject.whenKotlinIsAtLeast(2, 2, 0) {
73+
enableContextParameters()
74+
}
7275
}
7376

7477
dependencies {

compiler-plugin/compiler-plugin-k2/src/main/core/kotlinx/rpc/codegen/FirRpcServiceGenerator.kt

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,19 +11,17 @@ import kotlinx.rpc.codegen.common.rpcMethodName
1111
import kotlinx.rpc.codegen.serialization.addAnnotation
1212
import kotlinx.rpc.codegen.serialization.generateCompanionDeclaration
1313
import kotlinx.rpc.codegen.serialization.generateSerializerImplClass
14-
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
1514
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
1615
import org.jetbrains.kotlin.descriptors.ClassKind
1716
import org.jetbrains.kotlin.descriptors.Modality
1817
import org.jetbrains.kotlin.descriptors.Visibilities
1918
import org.jetbrains.kotlin.fir.FirSession
20-
import org.jetbrains.kotlin.fir.declarations.FirFunction
19+
import org.jetbrains.kotlin.fir.declarations.declaredFunctions
2120
import org.jetbrains.kotlin.fir.declarations.utils.isInterface
2221
import org.jetbrains.kotlin.fir.declarations.utils.visibility
2322
import org.jetbrains.kotlin.fir.extensions.*
2423
import org.jetbrains.kotlin.fir.moduleData
2524
import org.jetbrains.kotlin.fir.plugin.*
26-
import org.jetbrains.kotlin.fir.symbols.SymbolInternals
2725
import org.jetbrains.kotlin.fir.symbols.impl.*
2826
import org.jetbrains.kotlin.fir.types.ConeKotlinType
2927
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
@@ -261,10 +259,7 @@ class FirRpcServiceGenerator(
261259
* Scrapes the functions from the [owner] to generate method classes.
262260
*/
263261
private fun generateRpcServiceStubClass(owner: FirClassSymbol<*>): FirRegularClassSymbol? {
264-
@OptIn(SymbolInternals::class)
265-
val functions = owner.fir.declarations
266-
.filterIsInstance<FirFunction>()
267-
.map { it.symbol }
262+
val functions = owner.declaredFunctions(session)
268263

269264
return createNestedClass(owner, RpcNames.SERVICE_STUB_NAME, RpcGeneratedStubKey(owner.name, functions)) {
270265
visibility = Visibilities.Public

compiler-plugin/compiler-plugin-k2/src/main/core/kotlinx/rpc/codegen/checkers/FirCheckedAnnotationCheckers.kt

Lines changed: 16 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,7 @@ import org.jetbrains.kotlin.diagnostics.reportOn
1616
import org.jetbrains.kotlin.fir.FirElement
1717
import org.jetbrains.kotlin.fir.FirSession
1818
import org.jetbrains.kotlin.fir.analysis.checkers.FirTypeRefSource
19-
import org.jetbrains.kotlin.fir.analysis.checkers.MppCheckerKind
2019
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
21-
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirClassChecker
22-
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirFunctionChecker
23-
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirTypeParameterChecker
24-
import org.jetbrains.kotlin.fir.analysis.checkers.expression.FirFunctionCallChecker
2520
import org.jetbrains.kotlin.fir.analysis.checkers.extractArgumentsTypeRefAndSource
2621
import org.jetbrains.kotlin.fir.caches.getValue
2722
import org.jetbrains.kotlin.fir.declarations.FirClass
@@ -33,15 +28,15 @@ import org.jetbrains.kotlin.fir.extensions.predicateBasedProvider
3328
import org.jetbrains.kotlin.fir.references.toResolvedCallableSymbol
3429
import org.jetbrains.kotlin.fir.resolve.defaultType
3530
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
31+
import org.jetbrains.kotlin.fir.symbols.SymbolInternals
3632
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
3733
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
3834
import org.jetbrains.kotlin.fir.types.*
3935
import org.jetbrains.kotlin.name.ClassId
4036

41-
class FirCheckedAnnotationFunctionCallChecker(
42-
private val ctx: FirCheckersContext,
43-
) : FirFunctionCallChecker(MppCheckerKind.Common) {
44-
override fun check(
37+
object FirCheckedAnnotationFunctionCallChecker {
38+
fun check(
39+
ctx: FirCheckersContext,
4540
expression: FirFunctionCall,
4641
context: CheckerContext,
4742
reporter: DiagnosticReporter,
@@ -61,10 +56,9 @@ class FirCheckedAnnotationFunctionCallChecker(
6156
}
6257
}
6358

64-
class FirCheckedAnnotationTypeParameterChecker(
65-
private val ctx: FirCheckersContext,
66-
) : FirTypeParameterChecker(MppCheckerKind.Common) {
67-
override fun check(
59+
object FirCheckedAnnotationTypeParameterChecker {
60+
fun check(
61+
ctx: FirCheckersContext,
6862
declaration: FirTypeParameter,
6963
context: CheckerContext,
7064
reporter: DiagnosticReporter,
@@ -87,10 +81,9 @@ class FirCheckedAnnotationTypeParameterChecker(
8781
}
8882
}
8983

90-
class FirCheckedAnnotationFirClassChecker(
91-
private val ctx: FirCheckersContext,
92-
) : FirClassChecker(MppCheckerKind.Common) {
93-
override fun check(
84+
object FirCheckedAnnotationFirClassChecker {
85+
fun check(
86+
ctx: FirCheckersContext,
9487
declaration: FirClass,
9588
context: CheckerContext,
9689
reporter: DiagnosticReporter,
@@ -113,10 +106,9 @@ class FirCheckedAnnotationFirClassChecker(
113106
}
114107
}
115108

116-
class FirCheckedAnnotationFirFunctionChecker(
117-
private val ctx: FirCheckersContext,
118-
) : FirFunctionChecker(MppCheckerKind.Common) {
119-
override fun check(
109+
object FirCheckedAnnotationFirFunctionChecker {
110+
fun check(
111+
ctx: FirCheckersContext,
120112
declaration: FirFunction,
121113
context: CheckerContext,
122114
reporter: DiagnosticReporter,
@@ -240,7 +232,7 @@ object FirCheckedAnnotationHelper {
240232
?.let { FirTypeRefSource(it.typeRef, it.source) }
241233
?: (origin as? FirTypeRef)?.let { FirTypeRefSource(it, it.source) }
242234

243-
checkTypeArguments<TypeArgument, ConeKotlinType, FirClassSymbol<*>, ConeTypeProjection>(
235+
checkTypeArguments(
244236
context = context,
245237
reporter = reporter,
246238
ctx = ctx,
@@ -283,6 +275,7 @@ object FirCheckedAnnotationHelper {
283275
}
284276
}
285277

278+
@OptIn(SymbolInternals::class)
286279
fun checkedAnnotations(
287280
session: FirSession,
288281
symbol: FirBasedSymbol<*>,
@@ -327,6 +320,7 @@ object FirCheckedAnnotationHelper {
327320
}
328321
}
329322

323+
@OptIn(SymbolInternals::class)
330324
private fun hasCheckedAnnotation(
331325
session: FirSession,
332326
symbol: FirBasedSymbol<*>,

compiler-plugin/compiler-plugin-k2/src/main/core/kotlinx/rpc/codegen/checkers/FirRpcAnnotationChecker.kt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,15 @@ import kotlinx.rpc.codegen.rpcAnnotationSource
1515
import org.jetbrains.kotlin.descriptors.ClassKind
1616
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
1717
import org.jetbrains.kotlin.diagnostics.reportOn
18-
import org.jetbrains.kotlin.fir.analysis.checkers.MppCheckerKind
1918
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
20-
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirRegularClassChecker
2119
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
2220
import org.jetbrains.kotlin.fir.declarations.utils.isInterface
2321
import org.jetbrains.kotlin.fir.extensions.predicateBasedProvider
2422
import org.jetbrains.kotlin.fir.types.resolvedType
2523

26-
class FirRpcAnnotationChecker(private val ctx: FirCheckersContext) : FirRegularClassChecker(MppCheckerKind.Common) {
27-
override fun check(
24+
object FirRpcAnnotationChecker {
25+
fun check(
26+
ctx: FirCheckersContext,
2827
declaration: FirRegularClass,
2928
context: CheckerContext,
3029
reporter: DiagnosticReporter,

compiler-plugin/compiler-plugin-k2/src/main/core/kotlinx/rpc/codegen/checkers/FirRpcCheckers.kt

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,27 +15,27 @@ import org.jetbrains.kotlin.fir.analysis.checkers.expression.FirFunctionCallChec
1515

1616
class FirRpcDeclarationCheckers(ctx: FirCheckersContext) : DeclarationCheckers() {
1717
override val regularClassCheckers: Set<FirRegularClassChecker> = setOfNotNull(
18-
FirRpcAnnotationChecker(ctx),
19-
if (ctx.serializationIsPresent) FirRpcStrictModeClassChecker(ctx) else null,
20-
FirRpcServiceDeclarationChecker(ctx),
18+
FirRpcAnnotationCheckerVS(ctx),
19+
if (ctx.serializationIsPresent) FirRpcStrictModeClassCheckerVS(ctx) else null,
20+
FirRpcServiceDeclarationCheckerVS(ctx),
2121
)
2222

2323
override val classCheckers: Set<FirClassChecker> = setOf(
24-
FirCheckedAnnotationFirClassChecker(ctx),
24+
FirCheckedAnnotationFirClassCheckerVS(ctx),
2525
)
2626

2727
override val functionCheckers: Set<FirFunctionChecker> = setOf(
28-
FirCheckedAnnotationFirFunctionChecker(ctx)
28+
FirCheckedAnnotationFirFunctionCheckerVS(ctx)
2929
)
3030

3131
override val typeParameterCheckers: Set<FirTypeParameterChecker> = setOf(
32-
FirCheckedAnnotationTypeParameterChecker(ctx)
32+
FirCheckedAnnotationTypeParameterCheckerVS(ctx)
3333
)
3434
}
3535

3636
class FirRpcExpressionCheckers(ctx: FirCheckersContext) : ExpressionCheckers() {
3737
override val functionCallCheckers: Set<FirFunctionCallChecker> = setOf(
38-
FirCheckedAnnotationFunctionCallChecker(ctx),
39-
FirRpcStrictModeExpressionChecker(ctx),
38+
FirCheckedAnnotationFunctionCallCheckerVS(ctx),
39+
FirRpcStrictModeExpressionCheckerVS(ctx),
4040
)
4141
}

compiler-plugin/compiler-plugin-k2/src/main/core/kotlinx/rpc/codegen/checkers/FirRpcServiceDeclarationChecker.kt

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,21 +11,17 @@ import kotlinx.rpc.codegen.common.RpcClassId
1111
import kotlinx.rpc.codegen.vsApi
1212
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
1313
import org.jetbrains.kotlin.diagnostics.reportOn
14-
import org.jetbrains.kotlin.fir.analysis.checkers.MppCheckerKind
1514
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
16-
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirClassChecker
17-
import org.jetbrains.kotlin.fir.declarations.FirClass
18-
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
15+
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
16+
import org.jetbrains.kotlin.fir.declarations.processAllDeclarations
1917
import org.jetbrains.kotlin.fir.declarations.utils.isSuspend
2018
import org.jetbrains.kotlin.fir.extensions.predicateBasedProvider
21-
import org.jetbrains.kotlin.fir.types.coneType
19+
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
2220

23-
class FirRpcServiceDeclarationChecker(
24-
@Suppress("unused")
25-
private val ctx: FirCheckersContext,
26-
) : FirClassChecker(MppCheckerKind.Common) {
27-
override fun check(
28-
declaration: FirClass,
21+
object FirRpcServiceDeclarationChecker {
22+
fun check(
23+
@Suppress("unused") ctx: FirCheckersContext,
24+
declaration: FirRegularClass,
2925
context: CheckerContext,
3026
reporter: DiagnosticReporter,
3127
) {
@@ -41,16 +37,23 @@ class FirRpcServiceDeclarationChecker(
4137
)
4238
}
4339

44-
declaration.declarations.filterIsInstance<FirSimpleFunction>().onEach { function ->
45-
if (function.typeParameters.isNotEmpty()) {
40+
val functions = mutableListOf<FirNamedFunctionSymbol>()
41+
declaration.processAllDeclarations(context.session) { symbol ->
42+
if (symbol is FirNamedFunctionSymbol) {
43+
functions.add(symbol)
44+
}
45+
}
46+
47+
functions.onEach { function ->
48+
if (function.typeParameterSymbols.isNotEmpty()) {
4649
reporter.reportOn(
4750
source = function.source,
4851
factory = FirRpcDiagnostics.TYPE_PARAMETERS_IN_RPC_FUNCTION,
4952
context = context,
5053
)
5154
}
5255

53-
val returnType = vsApi { function.returnTypeRef.coneType.toClassSymbolVS(context.session) }
56+
val returnType = vsApi { function.resolvedReturnTypeRef.coneType.toClassSymbolVS(context.session) }
5457
?: return@onEach
5558

5659
if (returnType.classId != RpcClassId.flow && !function.isSuspend) {

compiler-plugin/compiler-plugin-k2/src/main/core/kotlinx/rpc/codegen/checkers/FirRpcStrictModeClassChecker.kt

Lines changed: 21 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -14,40 +14,36 @@ import org.jetbrains.kotlin.KtSourceElement
1414
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
1515
import org.jetbrains.kotlin.diagnostics.KtDiagnosticFactory0
1616
import org.jetbrains.kotlin.diagnostics.reportOn
17-
import org.jetbrains.kotlin.fir.analysis.checkers.MppCheckerKind
1817
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
19-
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirClassChecker
20-
import org.jetbrains.kotlin.fir.analysis.checkers.expression.FirFunctionCallChecker
2118
import org.jetbrains.kotlin.fir.analysis.checkers.extractArgumentsTypeRefAndSource
2219
import org.jetbrains.kotlin.fir.analysis.checkers.toClassLikeSymbol
23-
import org.jetbrains.kotlin.fir.declarations.FirClass
24-
import org.jetbrains.kotlin.fir.declarations.FirProperty
25-
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
20+
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
21+
import org.jetbrains.kotlin.fir.declarations.processAllDeclarations
2622
import org.jetbrains.kotlin.fir.declarations.utils.isSuspend
2723
import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
2824
import org.jetbrains.kotlin.fir.extensions.predicateBasedProvider
2925
import org.jetbrains.kotlin.fir.references.toResolvedCallableSymbol
3026
import org.jetbrains.kotlin.fir.scopes.impl.toConeType
3127
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
3228
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
29+
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
30+
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
3331
import org.jetbrains.kotlin.fir.types.FirTypeRef
34-
import org.jetbrains.kotlin.fir.types.coneType
3532
import org.jetbrains.kotlin.utils.memoryOptimizedMap
3633
import org.jetbrains.kotlin.utils.memoryOptimizedPlus
3734
import org.jetbrains.kotlinx.serialization.compiler.fir.services.FirSerializablePropertiesProvider
3835
import org.jetbrains.kotlinx.serialization.compiler.fir.services.serializablePropertiesProvider
3936

40-
class FirRpcStrictModeExpressionChecker(
41-
private val ctx: FirCheckersContext,
42-
) : FirFunctionCallChecker(MppCheckerKind.Common) {
37+
object FirRpcStrictModeExpressionChecker {
4338
private val streamScopeFunctions = setOf(
4439
RpcCallableId.StreamScope,
4540
RpcCallableId.streamScoped,
4641
RpcCallableId.withStreamScope,
4742
RpcCallableId.invokeOnStreamScopeCompletion,
4843
)
4944

50-
override fun check(
45+
fun check(
46+
ctx: FirCheckersContext,
5147
expression: FirFunctionCall,
5248
context: CheckerContext,
5349
reporter: DiagnosticReporter,
@@ -62,9 +58,10 @@ class FirRpcStrictModeExpressionChecker(
6258
}
6359
}
6460

65-
class FirRpcStrictModeClassChecker(private val ctx: FirCheckersContext) : FirClassChecker(MppCheckerKind.Common) {
66-
override fun check(
67-
declaration: FirClass,
61+
object FirRpcStrictModeClassChecker {
62+
fun check(
63+
ctx: FirCheckersContext,
64+
declaration: FirRegularClass,
6865
context: CheckerContext,
6966
reporter: DiagnosticReporter,
7067
) {
@@ -73,16 +70,16 @@ class FirRpcStrictModeClassChecker(private val ctx: FirCheckersContext) : FirCla
7370
}
7471

7572
val serializablePropertiesProvider = context.session.serializablePropertiesProvider
76-
declaration.declarations.forEach { declaration ->
73+
declaration.processAllDeclarations(context.session) { declaration ->
7774
when (declaration) {
78-
is FirProperty -> {
75+
is FirPropertySymbol -> {
7976
ctx.strictModeDiagnostics.FIELD_IN_RPC_SERVICE?.let {
8077
reporter.reportOn(declaration.source, it, context)
8178
}
8279
}
8380

84-
is FirSimpleFunction -> {
85-
checkFunction(declaration, context, reporter, serializablePropertiesProvider)
81+
is FirNamedFunctionSymbol -> {
82+
checkFunction(ctx, declaration, context, reporter, serializablePropertiesProvider)
8683
}
8784

8885
else -> {}
@@ -91,7 +88,8 @@ class FirRpcStrictModeClassChecker(private val ctx: FirCheckersContext) : FirCla
9188
}
9289

9390
private fun checkFunction(
94-
function: FirSimpleFunction,
91+
ctx: FirCheckersContext,
92+
function: FirNamedFunctionSymbol,
9593
context: CheckerContext,
9694
reporter: DiagnosticReporter,
9795
serializablePropertiesProvider: FirSerializablePropertiesProvider,
@@ -101,14 +99,14 @@ class FirRpcStrictModeClassChecker(private val ctx: FirCheckersContext) : FirCla
10199
}
102100

103101
val returnClassSymbol = vsApi {
104-
function.returnTypeRef.coneType.toClassSymbolVS(context.session)
102+
function.resolvedReturnTypeRef.coneType.toClassSymbolVS(context.session)
105103
}
106104

107-
val types = function.valueParameters.memoryOptimizedMap { parameter ->
105+
val types = function.valueParameterSymbols.memoryOptimizedMap { parameter ->
108106
parameter.source to vsApi {
109-
parameter.returnTypeRef
107+
parameter.resolvedReturnTypeRef
110108
}
111-
} memoryOptimizedPlus (function.returnTypeRef.source to function.returnTypeRef)
109+
} memoryOptimizedPlus (function.resolvedReturnTypeRef.source to function.resolvedReturnTypeRef)
112110

113111
types.forEach { (source, symbol) ->
114112
checkSerializableTypes<FirClassLikeSymbol<*>>(

0 commit comments

Comments
 (0)