TextEditor::QuickFixState *CppQuickFixCollector::initializeCompletion(TextEditor::BaseTextEditorWidget *editor) { if (CPPEditorWidget *cppEditor = qobject_cast<CPPEditorWidget *>(editor)) { const SemanticInfo info = cppEditor->semanticInfo(); if (info.revision != cppEditor->editorRevision()) { // outdated qWarning() << "TODO: outdated semantic info, force a reparse."; return 0; } if (info.doc) { CPlusPlus::ASTPath astPath(info.doc); const QList<CPlusPlus::AST *> path = astPath(cppEditor->textCursor()); if (! path.isEmpty()) { CppQuickFixState *state = new CppQuickFixState(editor); state->_path = path; state->_semanticInfo = info; state->_snapshot = CPlusPlus::CppModelManagerInterface::instance()->snapshot(); state->_context = CPlusPlus::LookupContext(info.doc, state->snapshot()); return state; } } } return 0; }
// -------------------------- // CppQuickFixAssistInterface // -------------------------- CppQuickFixInterface::CppQuickFixInterface(CppEditorWidget *editor, AssistReason reason) : AssistInterface(editor->document(), editor->position(), editor->textDocument()->filePath().toString(), reason) , m_editor(editor) , m_semanticInfo(editor->semanticInfo()) , m_snapshot(CppModelManager::instance()->snapshot()) , m_currentFile(CppRefactoringChanges::file(editor, m_semanticInfo.doc)) , m_context(m_semanticInfo.doc, m_snapshot) { QTC_CHECK(m_semanticInfo.doc); QTC_CHECK(m_semanticInfo.doc->translationUnit()); QTC_CHECK(m_semanticInfo.doc->translationUnit()->ast()); ASTPath astPath(m_semanticInfo.doc); m_path = astPath(editor->textCursor()); }