Avoid requesting selectors in Objective-C interop stubs
Selector references aren't DCEed and thus can cause false positive API usage report from AppStore online validation. Generate selectors by compiler instead.
This commit is contained in:
committed by
SvyatoslavScherbina
parent
0ff1209d0a
commit
f8393819fc
@@ -125,6 +125,10 @@ annotation class InteropStubs()
|
||||
@Retention(AnnotationRetention.SOURCE)
|
||||
internal annotation class ObjCMethodImp(val selector: String, val encoding: String)
|
||||
|
||||
@PublishedApi
|
||||
@TypedIntrinsic(IntrinsicType.OBJC_GET_SELECTOR)
|
||||
internal external fun objCGetSelector(selector: String): COpaquePointer
|
||||
|
||||
@kotlin.native.internal.ExportForCppRuntime("Kotlin_Interop_getObjCClass")
|
||||
private fun getObjCClassByName(name: NativePtr): NativePtr {
|
||||
val result = objc_lookUpClass(name)
|
||||
|
||||
+5
-2
@@ -178,6 +178,7 @@ class ObjCMethodStub(private val stubGenerator: StubGenerator,
|
||||
|
||||
val kniReceiverParameter = "kniR"
|
||||
val kniSuperClassParameter = "kniSC"
|
||||
val kniSelectorParameter = "kniSEL"
|
||||
|
||||
val voidPtr = PointerType(VoidType)
|
||||
|
||||
@@ -199,6 +200,9 @@ class ObjCMethodStub(private val stubGenerator: StubGenerator,
|
||||
TypedKotlinValue(voidPtr,
|
||||
"getReceiverOrSuper($kniReceiverParameter, $kniSuperClassParameter)"))
|
||||
|
||||
kotlinObjCBridgeParameters.add(KotlinParameter(kniSelectorParameter, KotlinTypes.cOpaquePointer))
|
||||
nativeBridgeArguments.add(TypedKotlinValue(voidPtr, kniSelectorParameter))
|
||||
|
||||
val kotlinParameterNames = method.getKotlinParameterNames()
|
||||
|
||||
method.parameters.forEachIndexed { index, it ->
|
||||
@@ -224,7 +228,6 @@ class ObjCMethodStub(private val stubGenerator: StubGenerator,
|
||||
returnType,
|
||||
nativeBridgeArguments
|
||||
) { nativeValues ->
|
||||
val selector = "@selector(${method.selector})"
|
||||
val messengerParameterTypes = mutableListOf<String>()
|
||||
messengerParameterTypes.add("void*")
|
||||
messengerParameterTypes.add("SEL")
|
||||
@@ -239,7 +242,7 @@ class ObjCMethodStub(private val stubGenerator: StubGenerator,
|
||||
|
||||
val messenger = "(($messengerType) ${nativeValues.first()})"
|
||||
|
||||
val messengerArguments = listOf(nativeValues[1]) + selector + nativeValues.drop(2)
|
||||
val messengerArguments = nativeValues.drop(1)
|
||||
|
||||
"$messenger(${messengerArguments.joinToString()})"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user