@@ -322,17 +322,17 @@ open class KotlinUsesExtractor(
322
322
} ? : c
323
323
}
324
324
325
- fun tryReplaceAndroidSyntheticFunction (f : IrSimpleFunction ): IrSimpleFunction {
325
+ private fun tryReplaceFunctionInSyntheticClass (f : IrFunction , getClassReplacement : ( IrClass ) -> IrClass ): IrFunction {
326
326
val parentClass = f.parent as ? IrClass ? : return f
327
- val replacementClass = tryReplaceAndroidSyntheticClass (parentClass)
327
+ val replacementClass = getClassReplacement (parentClass)
328
328
if (replacementClass == = parentClass)
329
329
return f
330
330
return globalExtensionState.syntheticToRealFunctionMap.getOrPut(f) {
331
331
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)
334
334
}
335
- } as IrSimpleFunction ?
335
+ } as IrFunction ?
336
336
if (result == null ) {
337
337
logger.warn(" Failed to replace synthetic class function ${f.name} " )
338
338
} else {
@@ -342,6 +342,11 @@ open class KotlinUsesExtractor(
342
342
} ? : f
343
343
}
344
344
345
+ fun tryReplaceSyntheticFunction (f : IrFunction ): IrFunction {
346
+ val androidReplacement = tryReplaceFunctionInSyntheticClass(f) { tryReplaceAndroidSyntheticClass(it) }
347
+ return tryReplaceFunctionInSyntheticClass(androidReplacement) { tryReplaceParcelizeRawType(it)?.first ? : it }
348
+ }
349
+
345
350
fun tryReplaceAndroidSyntheticField (f : IrField ): IrField {
346
351
val parentClass = f.parent as ? IrClass ? : return f
347
352
val replacementClass = tryReplaceAndroidSyntheticClass(parentClass)
0 commit comments