[KN] CInterop: __attribute__((objc_direct)) support

Merge-request: KT-MR-8828
Merged-by: Gleb Lukianets <Gleb.Lukianets@jetbrains.com>
This commit is contained in:
Gleb Lukianets
2023-03-02 10:36:53 +00:00
committed by Space Team
parent ae07d0e9ce
commit fc96eb6d8d
17 changed files with 319 additions and 36 deletions
@@ -1150,14 +1150,15 @@ public open class NativeIndexImpl(val library: NativeLibrary, val verbose: Boole
}
return ObjCMethod(
selector, encoding, parameters, returnType,
isVariadic = clang_Cursor_isVariadic(cursor) != 0,
isClass = isClass,
nsConsumesSelf = clang_Cursor_isObjCConsumingSelfMethod(cursor) != 0,
nsReturnsRetained = clang_Cursor_isObjCReturningRetainedMethod(cursor) != 0,
isOptional = (clang_Cursor_isObjCOptional(cursor) != 0),
isInit = (clang_Cursor_isObjCInitMethod(cursor) != 0),
isExplicitlyDesignatedInitializer = hasAttribute(cursor, OBJC_DESGINATED_INITIALIZER)
selector, encoding, parameters, returnType,
isVariadic = clang_Cursor_isVariadic(cursor) != 0,
isClass = isClass,
nsConsumesSelf = clang_Cursor_isObjCConsumingSelfMethod(cursor) != 0,
nsReturnsRetained = clang_Cursor_isObjCReturningRetainedMethod(cursor) != 0,
isOptional = (clang_Cursor_isObjCOptional(cursor) != 0),
isInit = (clang_Cursor_isObjCInitMethod(cursor) != 0),
isExplicitlyDesignatedInitializer = hasAttribute(cursor, OBJC_DESIGNATED_INITIALIZER),
isDirect = hasAttribute(cursor, OBJC_DIRECT),
)
}
@@ -1201,7 +1202,8 @@ public open class NativeIndexImpl(val library: NativeLibrary, val verbose: Boole
}
private val NS_CONSUMED = "ns_consumed"
private val OBJC_DESGINATED_INITIALIZER = "objc_designated_initializer"
private val OBJC_DESIGNATED_INITIALIZER = "objc_designated_initializer"
private val OBJC_DIRECT = "objc_direct"
private fun hasAttribute(cursor: CValue<CXCursor>, name: String): Boolean {
var result = false
@@ -257,7 +257,7 @@ sealed class ObjCClassOrProtocol(val name: String) : ObjCContainer(), TypeDeclar
data class ObjCMethod(
val selector: String, val encoding: String, val parameters: List<Parameter>, private val returnType: Type,
val isVariadic: Boolean, val isClass: Boolean, val nsConsumesSelf: Boolean, val nsReturnsRetained: Boolean,
val isOptional: Boolean, val isInit: Boolean, val isExplicitlyDesignatedInitializer: Boolean
val isOptional: Boolean, val isInit: Boolean, val isExplicitlyDesignatedInitializer: Boolean, val isDirect: Boolean
) {
fun returnsInstancetype(): Boolean = returnType is ObjCInstanceType