MCPcopy Create free account
hub / github.com/KDE/kdevelop / visitCursor

Function visitCursor

plugins/clang/duchain/builder.cpp:1650–1736  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1648//END Visitor
1649
1650CXChildVisitResult visitCursor(CXCursor cursor, CXCursor parent, CXClientData data)
1651{
1652 auto *visitor = static_cast<Visitor*>(data);
1653
1654 const auto kind = clang_getCursorKind(cursor);
1655
1656 auto location = clang_getCursorLocation(cursor);
1657 CXFile file;
1658 clang_getFileLocation(location, &file, nullptr, nullptr, nullptr);
1659 if (!ClangUtils::isFileEqual(file, visitor->m_file)) {
1660 // don't skip MemberRefExpr with invalid location, see also:
1661 // http://lists.cs.uiuc.edu/pipermail/cfe-dev/2015-May/043114.html
1662 const auto invalidMemberRefExpr = !file && kind == CXCursor_MemberRefExpr;
1663 // also don't skip unexposed declarations, which may e.g. be an `extern "C"` directive
1664 const auto unexposedDecl = file && kind == CXCursor_UnexposedDecl;
1665 // newer clang properly reports LinkageSpec instead of UnexposedDecl
1666 const auto linkageSpec = file && kind == CXCursor_LinkageSpec;
1667 if (!invalidMemberRefExpr && !unexposedDecl && !linkageSpec) {
1668 return CXChildVisit_Continue;
1669 }
1670 }
1671
1672#define UseCursorKind(CursorKind, ...) case CursorKind: return visitor->dispatchCursor<CursorKind>(__VA_ARGS__);
1673 switch (kind)
1674 {
1675 UseCursorKind(CXCursor_UnexposedDecl, cursor, parent);
1676 UseCursorKind(CXCursor_StructDecl, cursor, parent);
1677 UseCursorKind(CXCursor_UnionDecl, cursor, parent);
1678 UseCursorKind(CXCursor_ClassDecl, cursor, parent);
1679 UseCursorKind(CXCursor_EnumDecl, cursor, parent);
1680 UseCursorKind(CXCursor_FieldDecl, cursor, parent);
1681 UseCursorKind(CXCursor_EnumConstantDecl, cursor, parent);
1682 UseCursorKind(CXCursor_FunctionDecl, cursor, parent);
1683 UseCursorKind(CXCursor_VarDecl, cursor, parent);
1684 UseCursorKind(CXCursor_TypeAliasDecl, cursor, parent);
1685 UseCursorKind(CXCursor_TypedefDecl, cursor, parent);
1686 UseCursorKind(CXCursor_CXXMethod, cursor, parent);
1687 UseCursorKind(CXCursor_Namespace, cursor, parent);
1688 UseCursorKind(CXCursor_NamespaceAlias, cursor, parent);
1689 UseCursorKind(CXCursor_Constructor, cursor, parent);
1690 UseCursorKind(CXCursor_Destructor, cursor, parent);
1691 UseCursorKind(CXCursor_ConversionFunction, cursor, parent);
1692 UseCursorKind(CXCursor_TemplateTypeParameter, cursor, parent);
1693 UseCursorKind(CXCursor_NonTypeTemplateParameter, cursor, parent);
1694 UseCursorKind(CXCursor_TemplateTemplateParameter, cursor, parent);
1695 UseCursorKind(CXCursor_FunctionTemplate, cursor, parent);
1696 UseCursorKind(CXCursor_ClassTemplate, cursor, parent);
1697 UseCursorKind(CXCursor_ClassTemplatePartialSpecialization, cursor, parent);
1698 UseCursorKind(CXCursor_ObjCInterfaceDecl, cursor, parent);
1699 UseCursorKind(CXCursor_ObjCCategoryDecl, cursor, parent);
1700 UseCursorKind(CXCursor_ObjCProtocolDecl, cursor, parent);
1701 UseCursorKind(CXCursor_ObjCPropertyDecl, cursor, parent);
1702 UseCursorKind(CXCursor_ObjCIvarDecl, cursor, parent);
1703 UseCursorKind(CXCursor_ObjCInstanceMethodDecl, cursor, parent);
1704 UseCursorKind(CXCursor_ObjCClassMethodDecl, cursor, parent);
1705 UseCursorKind(CXCursor_ObjCImplementationDecl, cursor, parent);
1706 UseCursorKind(CXCursor_ObjCCategoryImplDecl, cursor, parent);
1707 UseCursorKind(CXCursor_MacroDefinition, cursor, parent);

Callers 2

setDeclDataMethod · 0.70

Calls 6

isFileEqualFunction · 0.85
buildUseMethod · 0.80
buildMacroExpansionMethod · 0.80
buildCXXBaseSpecifierMethod · 0.80
buildParmDeclMethod · 0.80

Tested by

no test coverage detected