Fix false positive non-public API App Store rejection (#3739)
Fix #3652 #KT-35453 Fixed
This commit is contained in:
committed by
GitHub
parent
ac0301444b
commit
4635fa6f86
+13
-3
@@ -112,7 +112,7 @@ internal class ObjCExportCodeGenerator(
|
|||||||
val mapper: ObjCExportMapper
|
val mapper: ObjCExportMapper
|
||||||
) : ObjCExportCodeGeneratorBase(codegen) {
|
) : ObjCExportCodeGeneratorBase(codegen) {
|
||||||
|
|
||||||
val referencedSelectors = mutableMapOf<String, MethodBridge>()
|
val selectorsToDefine = mutableMapOf<String, MethodBridge>()
|
||||||
|
|
||||||
val externalGlobalInitializers = mutableMapOf<LLVMValueRef, ConstValue>()
|
val externalGlobalInitializers = mutableMapOf<LLVMValueRef, ConstValue>()
|
||||||
|
|
||||||
@@ -354,7 +354,7 @@ internal class ObjCExportCodeGenerator(
|
|||||||
unreachable()
|
unreachable()
|
||||||
}
|
}
|
||||||
|
|
||||||
val methods = referencedSelectors.map { (selector, bridge) ->
|
val methods = selectorsToDefine.map { (selector, bridge) ->
|
||||||
ObjCDataGenerator.Method(selector, getEncoding(bridge), constPointer(imp))
|
ObjCDataGenerator.Method(selector, getEncoding(bridge), constPointer(imp))
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -878,7 +878,8 @@ private fun ObjCExportCodeGenerator.generateKotlinToObjCBridge(
|
|||||||
MethodBridgeReceiver.Instance -> kotlinReferenceToObjC(parameters[parameter]!!)
|
MethodBridgeReceiver.Instance -> kotlinReferenceToObjC(parameters[parameter]!!)
|
||||||
MethodBridgeSelector -> {
|
MethodBridgeSelector -> {
|
||||||
val selector = namer.getSelector(baseMethod)
|
val selector = namer.getSelector(baseMethod)
|
||||||
referencedSelectors.getOrPut(selector) { methodBridge }
|
// Selector is referenced thus should be defined to avoid false positive non-public API rejection:
|
||||||
|
selectorsToDefine[selector] = methodBridge
|
||||||
genSelector(selector)
|
genSelector(selector)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1010,6 +1011,9 @@ private fun ObjCExportCodeGenerator.createMethodVirtualAdapter(
|
|||||||
|
|
||||||
val methodBridge = mapper.bridgeMethod(baseMethod.descriptor)
|
val methodBridge = mapper.bridgeMethod(baseMethod.descriptor)
|
||||||
val objCToKotlin = constPointer(generateObjCImp(baseMethod, methodBridge, isVirtual = true))
|
val objCToKotlin = constPointer(generateObjCImp(baseMethod, methodBridge, isVirtual = true))
|
||||||
|
|
||||||
|
selectorsToDefine[selector] = methodBridge
|
||||||
|
|
||||||
return ObjCToKotlinMethodAdapter(selector, getEncoding(methodBridge), objCToKotlin)
|
return ObjCToKotlinMethodAdapter(selector, getEncoding(methodBridge), objCToKotlin)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1034,6 +1038,8 @@ private fun ObjCExportCodeGenerator.createMethodAdapter(
|
|||||||
val objCEncoding = getEncoding(methodBridge)
|
val objCEncoding = getEncoding(methodBridge)
|
||||||
val objCToKotlin = constPointer(generateObjCImp(request.implementation, methodBridge))
|
val objCToKotlin = constPointer(generateObjCImp(request.implementation, methodBridge))
|
||||||
|
|
||||||
|
selectorsToDefine[selectorName] = methodBridge
|
||||||
|
|
||||||
ObjCToKotlinMethodAdapter(selectorName, objCEncoding, objCToKotlin)
|
ObjCToKotlinMethodAdapter(selectorName, objCEncoding, objCToKotlin)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1049,6 +1055,8 @@ private fun ObjCExportCodeGenerator.createArrayConstructorAdapter(
|
|||||||
val objCEncoding = getEncoding(methodBridge)
|
val objCEncoding = getEncoding(methodBridge)
|
||||||
val objCToKotlin = constPointer(generateObjCImpForArrayConstructor(irConstructor, methodBridge))
|
val objCToKotlin = constPointer(generateObjCImpForArrayConstructor(irConstructor, methodBridge))
|
||||||
|
|
||||||
|
selectorsToDefine[selectorName] = methodBridge
|
||||||
|
|
||||||
return ObjCToKotlinMethodAdapter(selectorName, objCEncoding, objCToKotlin)
|
return ObjCToKotlinMethodAdapter(selectorName, objCEncoding, objCToKotlin)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1310,6 +1318,8 @@ private inline fun ObjCExportCodeGenerator.generateObjCToKotlinSyntheticGetter(
|
|||||||
|
|
||||||
LLVMSetLinkage(imp, LLVMLinkage.LLVMPrivateLinkage)
|
LLVMSetLinkage(imp, LLVMLinkage.LLVMPrivateLinkage)
|
||||||
|
|
||||||
|
selectorsToDefine[selector] = methodBridge
|
||||||
|
|
||||||
return ObjCToKotlinMethodAdapter(selector, encoding, constPointer(imp))
|
return ObjCToKotlinMethodAdapter(selector, encoding, constPointer(imp))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user