Fix false positive non-public API App Store rejection (#3739)

Fix #3652
 #KT-35453 Fixed
This commit is contained in:
SvyatoslavScherbina
2019-12-31 16:32:09 +03:00
committed by GitHub
parent ac0301444b
commit 4635fa6f86
@@ -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))
} }