@@ -378,17 +378,17 @@ open class KotlinUsesExtractor(
378
378
} ? : c
379
379
}
380
380
381
- fun tryReplaceAndroidSyntheticFunction (f : IrSimpleFunction ): IrSimpleFunction {
381
+ private fun tryReplaceFunctionInSyntheticClass (f : IrFunction , getClassReplacement : ( IrClass ) -> IrClass ): IrFunction {
382
382
val parentClass = f.parent as ? IrClass ? : return f
383
- val replacementClass = tryReplaceAndroidSyntheticClass (parentClass)
383
+ val replacementClass = getClassReplacement (parentClass)
384
384
if (replacementClass == = parentClass)
385
385
return f
386
386
return globalExtensionState.syntheticToRealFunctionMap.getOrPut(f) {
387
387
val result = replacementClass.declarations.find { replacementDecl ->
388
- replacementDecl is IrSimpleFunction && replacementDecl.name == f.name && replacementDecl.valueParameters.zip(f.valueParameters).all {
389
- it.first.type == it.second.type
388
+ replacementDecl is IrSimpleFunction && replacementDecl.name == f.name && replacementDecl.valueParameters.size == f.valueParameters.size && replacementDecl.valueParameters. zip(f.valueParameters).all {
389
+ erase( it.first.type) == erase( it.second.type)
390
390
}
391
- } as IrSimpleFunction ?
391
+ } as IrFunction ?
392
392
if (result == null ) {
393
393
logger.warn(" Failed to replace synthetic class function ${f.name} " )
394
394
} else {
@@ -398,6 +398,11 @@ open class KotlinUsesExtractor(
398
398
} ? : f
399
399
}
400
400
401
+ fun tryReplaceSyntheticFunction (f : IrFunction ): IrFunction {
402
+ val androidReplacement = tryReplaceFunctionInSyntheticClass(f) { tryReplaceAndroidSyntheticClass(it) }
403
+ return tryReplaceFunctionInSyntheticClass(androidReplacement) { tryReplaceParcelizeRawType(it)?.first ? : it }
404
+ }
405
+
401
406
fun tryReplaceAndroidSyntheticField (f : IrField ): IrField {
402
407
val parentClass = f.parent as ? IrClass ? : return f
403
408
val replacementClass = tryReplaceAndroidSyntheticClass(parentClass)
0 commit comments