diff --git a/Interop/Indexer/prebuilt/nativeInteropStubs/kotlin/clang/clang.kt b/Interop/Indexer/prebuilt/nativeInteropStubs/kotlin/clang/clang.kt index 636cd404beb..fdf2c911592 100644 --- a/Interop/Indexer/prebuilt/nativeInteropStubs/kotlin/clang/clang.kt +++ b/Interop/Indexer/prebuilt/nativeInteropStubs/kotlin/clang/clang.kt @@ -4707,37 +4707,37 @@ class IndexerCallbacks(override val rawPtr: NativePtr) : CStructVar() { companion object : Type(64, 8) - var abortQuery: CPointer Int>>? - get() = memberAt Int>>>(0).value - set(value) { memberAt Int>>>(0).value = value } + var abortQuery: CPointer Int>>? + get() = memberAt Int>>>(0).value + set(value) { memberAt Int>>>(0).value = value } - var diagnostic: CPointer Unit>>? - get() = memberAt Unit>>>(8).value - set(value) { memberAt Unit>>>(8).value = value } + var diagnostic: CPointer Unit>>? + get() = memberAt Unit>>>(8).value + set(value) { memberAt Unit>>>(8).value = value } - var enteredMainFile: CPointer COpaquePointer?>>? - get() = memberAt COpaquePointer?>>>(16).value - set(value) { memberAt COpaquePointer?>>>(16).value = value } + var enteredMainFile: CPointer CXIdxClientFile?>>? + get() = memberAt CXIdxClientFile?>>>(16).value + set(value) { memberAt CXIdxClientFile?>>>(16).value = value } - var ppIncludedFile: CPointer?) -> COpaquePointer?>>? - get() = memberAt?) -> COpaquePointer?>>>(24).value - set(value) { memberAt?) -> COpaquePointer?>>>(24).value = value } + var ppIncludedFile: CPointer?) -> CXIdxClientFile?>>? + get() = memberAt?) -> CXIdxClientFile?>>>(24).value + set(value) { memberAt?) -> CXIdxClientFile?>>>(24).value = value } - var importedASTFile: CPointer?) -> COpaquePointer?>>? - get() = memberAt?) -> COpaquePointer?>>>(32).value - set(value) { memberAt?) -> COpaquePointer?>>>(32).value = value } + var importedASTFile: CPointer?) -> CXIdxClientASTFile?>>? + get() = memberAt?) -> CXIdxClientASTFile?>>>(32).value + set(value) { memberAt?) -> CXIdxClientASTFile?>>>(32).value = value } - var startedTranslationUnit: CPointer COpaquePointer?>>? - get() = memberAt COpaquePointer?>>>(40).value - set(value) { memberAt COpaquePointer?>>>(40).value = value } + var startedTranslationUnit: CPointer CXIdxClientContainer?>>? + get() = memberAt CXIdxClientContainer?>>>(40).value + set(value) { memberAt CXIdxClientContainer?>>>(40).value = value } - var indexDeclaration: CPointer?) -> Unit>>? - get() = memberAt?) -> Unit>>>(48).value - set(value) { memberAt?) -> Unit>>>(48).value = value } + var indexDeclaration: CPointer?) -> Unit>>? + get() = memberAt?) -> Unit>>>(48).value + set(value) { memberAt?) -> Unit>>>(48).value = value } - var indexEntityReference: CPointer?) -> Unit>>? - get() = memberAt?) -> Unit>>>(56).value - set(value) { memberAt?) -> Unit>>>(56).value = value } + var indexEntityReference: CPointer?) -> Unit>>? + get() = memberAt?) -> Unit>>>(56).value + set(value) { memberAt?) -> Unit>>>(56).value = value } } @@ -5891,7 +5891,7 @@ typealias CXCursorSetVar = CPointerVarOf typealias CXCursorSet = CPointer typealias CXCursorVisitorVar = CPointerVarOf -typealias CXCursorVisitor = CPointer, CValue, COpaquePointer?) -> CXChildVisitResult>> +typealias CXCursorVisitor = CPointer, CValue, CXClientData?) -> CXChildVisitResult>> typealias CXModuleVar = CPointerVarOf typealias CXModule = COpaquePointer @@ -5900,7 +5900,7 @@ typealias CXCompletionStringVar = CPointerVarOf typealias CXCompletionString = COpaquePointer typealias CXInclusionVisitorVar = CPointerVarOf -typealias CXInclusionVisitor = CPointer?, Int, COpaquePointer?) -> Unit>> +typealias CXInclusionVisitor = CPointer?, Int, CXClientData?) -> Unit>> typealias CXEvalResultVar = CPointerVarOf typealias CXEvalResult = COpaquePointer @@ -5924,6 +5924,6 @@ typealias CXIndexActionVar = CPointerVarOf typealias CXIndexAction = COpaquePointer typealias CXFieldVisitorVar = CPointerVarOf -typealias CXFieldVisitor = CPointer, COpaquePointer?) -> CXVisitorResult>> +typealias CXFieldVisitor = CPointer, CXClientData?) -> CXVisitorResult>> private val loadLibrary = System.loadLibrary("clangstubs") diff --git a/Interop/Indexer/src/main/kotlin/org/jetbrains/kotlin/native/interop/indexer/Indexer.kt b/Interop/Indexer/src/main/kotlin/org/jetbrains/kotlin/native/interop/indexer/Indexer.kt index 4e1d6e5098b..6286afeca2b 100644 --- a/Interop/Indexer/src/main/kotlin/org/jetbrains/kotlin/native/interop/indexer/Indexer.kt +++ b/Interop/Indexer/src/main/kotlin/org/jetbrains/kotlin/native/interop/indexer/Indexer.kt @@ -234,11 +234,15 @@ internal class NativeIndexImpl(val library: NativeLibrary) : NativeIndex() { CXType_Elaborated -> convertType(clang_Type_getNamedType(type)) CXType_Unexposed -> { - val canonicalType = clang_getCanonicalType(type) - if (canonicalType.kind != CXType_Unexposed) { - convertType(canonicalType) + if (clang_getResultType(type).kind != CXTypeKind.CXType_Invalid) { + convertFunctionType(type) } else { - throw NotImplementedError() + val canonicalType = clang_getCanonicalType(type) + if (canonicalType.kind != CXType_Unexposed) { + convertType(canonicalType) + } else { + throw NotImplementedError() + } } } @@ -269,22 +273,29 @@ internal class NativeIndexImpl(val library: NativeLibrary) : NativeIndex() { } CXType_FunctionProto -> { - if (clang_isFunctionTypeVariadic(type) != 0) { - UnsupportedType - } else { - val returnType = convertType(clang_getResultType(type)) - val numArgs = clang_getNumArgTypes(type) - val paramTypes = (0..numArgs - 1).map { - convertType(clang_getArgType(type, it)) - } - FunctionType(paramTypes, returnType) - } + convertFunctionType(type) } else -> UnsupportedType } } + private fun convertFunctionType(type: CValue): Type { + val kind = type.kind + assert (kind == CXType_Unexposed || kind == CXType_FunctionProto) + + return if (clang_isFunctionTypeVariadic(type) != 0) { + UnsupportedType + } else { + val returnType = convertType(clang_getResultType(type)) + val numArgs = clang_getNumArgTypes(type) + val paramTypes = (0..numArgs - 1).map { + convertType(clang_getArgType(type, it)) + } + FunctionType(paramTypes, returnType) + } + } + fun indexDeclaration(info: CXIdxDeclInfo): Unit { val cursor = info.cursor.readValue() val entityInfo = info.entityInfo!!.pointed