@@ -322,17 +322,17 @@ open class KotlinUsesExtractor(
322322 } ? : c
323323 }
324324
325- fun tryReplaceAndroidSyntheticFunction (f : IrSimpleFunction ): IrSimpleFunction {
325+ private fun tryReplaceFunctionInSyntheticClass (f : IrFunction , getClassReplacement : ( IrClass ) -> IrClass ): IrFunction {
326326 val parentClass = f.parent as ? IrClass ? : return f
327- val replacementClass = tryReplaceAndroidSyntheticClass (parentClass)
327+ val replacementClass = getClassReplacement (parentClass)
328328 if (replacementClass == = parentClass)
329329 return f
330330 return globalExtensionState.syntheticToRealFunctionMap.getOrPut(f) {
331331 val result = replacementClass.declarations.find { replacementDecl ->
332- replacementDecl is IrSimpleFunction && replacementDecl.name == f.name && replacementDecl.valueParameters.zip(f.valueParameters).all {
333- it.first.type == it.second.type
332+ replacementDecl is IrSimpleFunction && replacementDecl.name == f.name && replacementDecl.valueParameters.size == f.valueParameters.size && replacementDecl.valueParameters. zip(f.valueParameters).all {
333+ erase( it.first.type) == erase( it.second.type)
334334 }
335- } as IrSimpleFunction ?
335+ } as IrFunction ?
336336 if (result == null ) {
337337 logger.warn(" Failed to replace synthetic class function ${f.name} " )
338338 } else {
@@ -342,6 +342,11 @@ open class KotlinUsesExtractor(
342342 } ? : f
343343 }
344344
345+ fun tryReplaceSyntheticFunction (f : IrFunction ): IrFunction {
346+ val androidReplacement = tryReplaceFunctionInSyntheticClass(f) { tryReplaceAndroidSyntheticClass(it) }
347+ return tryReplaceFunctionInSyntheticClass(androidReplacement) { tryReplaceParcelizeRawType(it)?.first ? : it }
348+ }
349+
345350 fun tryReplaceAndroidSyntheticField (f : IrField ): IrField {
346351 val parentClass = f.parent as ? IrClass ? : return f
347352 val replacementClass = tryReplaceAndroidSyntheticClass(parentClass)
0 commit comments