JVM IR: Fix inline class mangling for calls to internal functions
...in a different module, e.g., using -Xfriend-paths.
This commit is contained in:
committed by
Ilmir Usmanov
parent
6747084fe2
commit
482e217b5e
+4
-1
@@ -134,7 +134,10 @@ class MethodSignatureMapper(private val context: JvmBackendContext) {
|
||||
origin != JvmLoweredDeclarationOrigin.SYNTHETIC_METHOD_FOR_PROPERTY_OR_TYPEALIAS_ANNOTATIONS &&
|
||||
!isPublishedApi()
|
||||
) {
|
||||
return this
|
||||
return originalFunction.takeIf { it != this }
|
||||
?.safeAs<IrSimpleFunction>()
|
||||
?.getInternalFunctionForManglingIfNeeded()
|
||||
?: this
|
||||
}
|
||||
originalForDefaultAdapter?.getInternalFunctionForManglingIfNeeded()?.let { return it }
|
||||
return null
|
||||
|
||||
+3
-2
@@ -383,12 +383,13 @@ fun IrSimpleType.isRawType(): Boolean =
|
||||
hasAnnotation(JvmGeneratorExtensions.RAW_TYPE_ANNOTATION_FQ_NAME)
|
||||
|
||||
internal fun classFileContainsMethod(classId: ClassId, function: IrFunction, context: JvmBackendContext): Boolean? {
|
||||
val originalDescriptor = context.methodSignatureMapper.mapSignatureWithGeneric(function).asmMethod.descriptor
|
||||
val originalSignature = context.methodSignatureMapper.mapSignatureWithGeneric(function).asmMethod
|
||||
val originalDescriptor = originalSignature.descriptor
|
||||
val descriptor = if (function.isSuspend)
|
||||
listOf(*Type.getArgumentTypes(originalDescriptor), Type.getObjectType("kotlin/coroutines/Continuation"))
|
||||
.joinToString(prefix = "(", postfix = ")", separator = "") + AsmTypes.OBJECT_TYPE
|
||||
else originalDescriptor
|
||||
return classFileContainsMethod(classId, context.state, Method(function.name.asString(), descriptor))
|
||||
return classFileContainsMethod(classId, context.state, Method(originalSignature.name, descriptor))
|
||||
}
|
||||
|
||||
val IrMemberWithContainerSource.parentClassId: ClassId?
|
||||
|
||||
Reference in New Issue
Block a user