Skip to content

Commit 1339410

Browse files
pyosliamoberg
authored andcommitted
[Parcelize] Use the new IR parameter API
^KT-73366 Fixed
1 parent 90c9cad commit 1339410

File tree

7 files changed

+113
-144
lines changed

7 files changed

+113
-144
lines changed

plugins/parcelize/parcelize-compiler/parcelize.backend/src/org/jetbrains/kotlin/parcelize/AndroidIrBuilder.kt

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -28,50 +28,50 @@ class AndroidIrBuilder internal constructor(
2828

2929
fun parcelReadParcelable(receiver: IrExpression, loader: IrExpression): IrExpression {
3030
return irCall(androidSymbols.parcelReadParcelable).apply {
31-
dispatchReceiver = receiver
32-
putValueArgument(0, loader)
31+
arguments[0] = receiver
32+
arguments[1] = loader
3333
}
3434
}
3535

3636
fun parcelReadString(receiver: IrExpression): IrExpression {
3737
return irCall(androidSymbols.parcelReadString).apply {
38-
dispatchReceiver = receiver
38+
arguments[0] = receiver
3939
}
4040
}
4141

4242
fun parcelWriteInt(receiver: IrExpression, value: IrExpression): IrExpression {
4343
return irCall(androidSymbols.parcelWriteInt).apply {
44-
dispatchReceiver = receiver
45-
putValueArgument(0, value)
44+
arguments[0] = receiver
45+
arguments[1] = value
4646
}
4747
}
4848

4949
fun parcelWriteParcelable(receiver: IrExpression, p: IrExpression, parcelableFlags: IrExpression): IrExpression {
5050
return irCall(androidSymbols.parcelWriteParcelable).apply {
51-
dispatchReceiver = receiver
52-
putValueArgument(0, p)
53-
putValueArgument(1, parcelableFlags)
51+
arguments[0] = receiver
52+
arguments[1] = p
53+
arguments[2] = parcelableFlags
5454
}
5555
}
5656

5757
fun parcelWriteString(receiver: IrExpression, value: IrExpression): IrExpression {
5858
return irCall(androidSymbols.parcelWriteString).apply {
59-
dispatchReceiver = receiver
60-
putValueArgument(0, value)
59+
arguments[0] = receiver
60+
arguments[1] = value
6161
}
6262
}
6363

6464
fun textUtilsWriteToParcel(cs: IrExpression, p: IrExpression, parcelableFlags: IrExpression): IrExpression {
6565
return irCall(androidSymbols.textUtilsWriteToParcel).apply {
66-
putValueArgument(0, cs)
67-
putValueArgument(1, p)
68-
putValueArgument(2, parcelableFlags)
66+
arguments[0] = cs
67+
arguments[1] = p
68+
arguments[2] = parcelableFlags
6969
}
7070
}
7171

7272
fun classGetClassLoader(receiver: IrExpression): IrExpression {
7373
return irCall(androidSymbols.classGetClassLoader).apply {
74-
dispatchReceiver = receiver
74+
arguments[0] = receiver
7575
}
7676
}
7777

@@ -83,7 +83,7 @@ class AndroidIrBuilder internal constructor(
8383
return IrCallImpl.fromSymbolOwner(UNDEFINED_OFFSET, UNDEFINED_OFFSET, toType, androidSymbols.unsafeCoerceIntrinsic).apply {
8484
putTypeArgument(0, fromType)
8585
putTypeArgument(1, toType)
86-
putValueArgument(0, value)
86+
arguments[0] = value
8787
}
8888
}
8989
}

plugins/parcelize/parcelize-compiler/parcelize.backend/src/org/jetbrains/kotlin/parcelize/AndroidSymbols.kt

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -521,10 +521,7 @@ class AndroidSymbols(
521521
): IrSimpleFunctionSymbol {
522522
val callableId = CallableId(kotlinxCollectionsImmutable, Name.identifier(functionName))
523523
return pluginContext.referenceFunctions(callableId)
524-
.firstOrNull {
525-
it.owner.extensionReceiverParameter?.type?.classFqName == receiver &&
526-
it.owner.valueParameters.isEmpty()
527-
}
524+
.firstOrNull { it.owner.parameters.singleOrNull()?.type?.classFqName == receiver }
528525
?: error("Function from kotlinx.collections.immutable is not found on classpath: $callableId")
529526
}
530527

plugins/parcelize/parcelize-compiler/parcelize.backend/src/org/jetbrains/kotlin/parcelize/IrParcelSerializerFactory.kt

Lines changed: 9 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -252,14 +252,10 @@ class IrParcelSerializerFactory(private val symbols: AndroidSymbols, private val
252252
val listSerializer = IrListParcelSerializer(classifier, elementType, getChild(elementType))
253253
val actualSerializer =
254254
when (classifierFqName) {
255-
in BuiltinParcelableTypes.IMMUTABLE_LIST_FQNAMES -> IrExtensionFunctionOnReadCallingSerializer(
256-
delegated = listSerializer,
257-
converterExtensionFunction = symbols.kotlinIterableToPersistentListExtension
258-
)
259-
in BuiltinParcelableTypes.IMMUTABLE_SET_FQNAMES -> IrExtensionFunctionOnReadCallingSerializer(
260-
delegated = listSerializer,
261-
converterExtensionFunction = symbols.kotlinIterableToPersistentSetExtension
262-
)
255+
in BuiltinParcelableTypes.IMMUTABLE_LIST_FQNAMES ->
256+
listSerializer.withDeserializationPostprocessing(symbols.kotlinIterableToPersistentListExtension)
257+
in BuiltinParcelableTypes.IMMUTABLE_SET_FQNAMES ->
258+
listSerializer.withDeserializationPostprocessing(symbols.kotlinIterableToPersistentSetExtension)
263259
else -> listSerializer
264260
}
265261

@@ -276,14 +272,10 @@ class IrParcelSerializerFactory(private val symbols: AndroidSymbols, private val
276272
IrMapParcelSerializer(classifier, keyType, valueType, getChild(keyType), getChild(valueType))
277273

278274
val actualSerializer =
279-
if (classifierFqName in BuiltinParcelableTypes.IMMUTABLE_MAP_FQNAMES) {
280-
IrExtensionFunctionOnReadCallingSerializer(
281-
mapSerializer,
282-
symbols.kotlinMapToPersistentMapExtension
283-
)
284-
} else {
275+
if (classifierFqName in BuiltinParcelableTypes.IMMUTABLE_MAP_FQNAMES)
276+
mapSerializer.withDeserializationPostprocessing(symbols.kotlinMapToPersistentMapExtension)
277+
else
285278
mapSerializer
286-
}
287279
return wrapNullableSerializerIfNeeded(irType, actualSerializer)
288280
}
289281
}
@@ -358,19 +350,13 @@ class IrParcelSerializerFactory(private val symbols: AndroidSymbols, private val
358350
private val stringArraySerializer = IrSimpleParcelSerializer(symbols.parcelCreateStringArray, symbols.parcelWriteStringArray)
359351
private val stringListSerializer = IrSimpleParcelSerializer(symbols.parcelCreateStringArrayList, symbols.parcelWriteStringList)
360352
private val stringPersistentListSerializer by lazy {
361-
IrExtensionFunctionOnReadCallingSerializer(
362-
delegated = stringListSerializer,
363-
converterExtensionFunction = symbols.kotlinIterableToPersistentListExtension,
364-
)
353+
stringListSerializer.withDeserializationPostprocessing(symbols.kotlinIterableToPersistentListExtension)
365354
}
366355
private val iBinderSerializer = IrSimpleParcelSerializer(symbols.parcelReadStrongBinder, symbols.parcelWriteStrongBinder)
367356
private val iBinderArraySerializer = IrSimpleParcelSerializer(symbols.parcelCreateBinderArray, symbols.parcelWriteBinderArray)
368357
private val iBinderListSerializer = IrSimpleParcelSerializer(symbols.parcelCreateBinderArrayList, symbols.parcelWriteBinderList)
369358
private val iBinderPersistentListSerializer by lazy {
370-
IrExtensionFunctionOnReadCallingSerializer(
371-
delegated = iBinderListSerializer,
372-
converterExtensionFunction = symbols.kotlinIterableToPersistentListExtension,
373-
)
359+
iBinderListSerializer.withDeserializationPostprocessing(symbols.kotlinIterableToPersistentListExtension)
374360
}
375361
private val serializableSerializer = IrSimpleParcelSerializer(symbols.parcelReadSerializable, symbols.parcelWriteSerializable)
376362
private val stringSerializer = IrSimpleParcelSerializer(symbols.parcelReadString, symbols.parcelWriteString)

0 commit comments

Comments
 (0)