@@ -378,17 +378,17 @@ open class KotlinUsesExtractor(
378378 } ? : c
379379 }
380380
381- fun tryReplaceAndroidSyntheticFunction (f : IrSimpleFunction ): IrSimpleFunction {
381+ private fun tryReplaceFunctionInSyntheticClass (f : IrFunction , getClassReplacement : ( IrClass ) -> IrClass ): IrFunction {
382382 val parentClass = f.parent as ? IrClass ? : return f
383- val replacementClass = tryReplaceAndroidSyntheticClass (parentClass)
383+ val replacementClass = getClassReplacement (parentClass)
384384 if (replacementClass == = parentClass)
385385 return f
386386 return globalExtensionState.syntheticToRealFunctionMap.getOrPut(f) {
387387 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)
390390 }
391- } as IrSimpleFunction ?
391+ } as IrFunction ?
392392 if (result == null ) {
393393 logger.warn(" Failed to replace synthetic class function ${f.name} " )
394394 } else {
@@ -398,6 +398,11 @@ open class KotlinUsesExtractor(
398398 } ? : f
399399 }
400400
401+ fun tryReplaceSyntheticFunction (f : IrFunction ): IrFunction {
402+ val androidReplacement = tryReplaceFunctionInSyntheticClass(f) { tryReplaceAndroidSyntheticClass(it) }
403+ return tryReplaceFunctionInSyntheticClass(androidReplacement) { tryReplaceParcelizeRawType(it)?.first ? : it }
404+ }
405+
401406 fun tryReplaceAndroidSyntheticField (f : IrField ): IrField {
402407 val parentClass = f.parent as ? IrClass ? : return f
403408 val replacementClass = tryReplaceAndroidSyntheticClass(parentClass)
0 commit comments