| 328 | } |
| 329 | |
| 330 | QPair<QWidget*, KTextEditor::Range> ClangSupport::specialLanguageObjectNavigationWidget(const QUrl& url, const KTextEditor::Cursor& position) |
| 331 | { |
| 332 | DUChainReadLocker lock; |
| 333 | const QPair<TopDUContextPointer, Use> macroExpansion = macroExpansionForPosition(url, position); |
| 334 | if (macroExpansion.first) { |
| 335 | Declaration* declaration = macroExpansion.second.usedDeclaration(macroExpansion.first.data()); |
| 336 | const MacroDefinition::Ptr macroDefinition(dynamic_cast<MacroDefinition*>(declaration)); |
| 337 | Q_ASSERT(macroDefinition); |
| 338 | auto rangeInRevision = macroExpansion.first->transformFromLocalRevision(macroExpansion.second.m_range.start); |
| 339 | return { |
| 340 | new ClangNavigationWidget(macroDefinition, DocumentCursor(IndexedString(url), rangeInRevision)), |
| 341 | macroExpansion.second.m_range.castToSimpleRange() |
| 342 | }; |
| 343 | } |
| 344 | |
| 345 | const QPair<TopDUContextPointer, KTextEditor::Range> import = importedContextForPosition(url, position); |
| 346 | |
| 347 | if (import.first) { |
| 348 | return {import.first->createNavigationWidget(), import.second}; |
| 349 | } |
| 350 | return {nullptr, KTextEditor::Range::invalid()}; |
| 351 | } |
| 352 | |
| 353 | QString ClangSupport::indentationSample() const |
| 354 | { |
no test coverage detected