From c13b8697d2ab5f2d3b901ae75156cf7cebe55a10 Mon Sep 17 00:00:00 2001 From: Roberto Raggi <roberto.raggi@nokia.com> Date: Fri, 13 Nov 2009 16:14:26 +0100 Subject: [PATCH] Introduced the quick fix engine --- src/plugins/cppeditor/cppeditor.cpp | 1 - src/plugins/cppeditor/cppeditor.pro | 6 +- src/plugins/cppeditor/cppplugin.cpp | 2 + src/plugins/cppeditor/cppquickfix.cpp | 141 ++++++++ src/plugins/cppeditor/cppquickfix.h | 111 ++++++ src/plugins/cpptools/cppcodecompletion.cpp | 53 --- src/plugins/cpptools/cppcodecompletion.h | 21 -- .../cpptools/cpptoolseditorsupport.cpp | 315 ------------------ src/plugins/cpptools/cpptoolseditorsupport.h | 49 --- src/plugins/cpptools/cpptoolsplugin.cpp | 2 - 10 files changed, 258 insertions(+), 443 deletions(-) create mode 100644 src/plugins/cppeditor/cppquickfix.cpp create mode 100644 src/plugins/cppeditor/cppquickfix.h diff --git a/src/plugins/cppeditor/cppeditor.cpp b/src/plugins/cppeditor/cppeditor.cpp index 1bbbf5a12bd..b9af8ad076b 100644 --- a/src/plugins/cppeditor/cppeditor.cpp +++ b/src/plugins/cppeditor/cppeditor.cpp @@ -31,7 +31,6 @@ #include "cppeditorconstants.h" #include "cppplugin.h" #include "cpphighlighter.h" - #include <cpptools/cpptoolsplugin.h> #include <AST.h> diff --git a/src/plugins/cppeditor/cppeditor.pro b/src/plugins/cppeditor/cppeditor.pro index 1a76a5f62f8..13f532e57a6 100644 --- a/src/plugins/cppeditor/cppeditor.pro +++ b/src/plugins/cppeditor/cppeditor.pro @@ -14,13 +14,15 @@ HEADERS += cppplugin.h \ cppeditorconstants.h \ cppeditorenums.h \ cppeditor_global.h \ - cppclasswizard.h + cppclasswizard.h \ + cppquickfix.h SOURCES += cppplugin.cpp \ cppeditor.cpp \ cpphighlighter.cpp \ cpphoverhandler.cpp \ cppfilewizard.cpp \ - cppclasswizard.cpp + cppclasswizard.cpp \ + cppquickfix.cpp RESOURCES += cppeditor.qrc OTHER_FILES += CppEditor.pluginspec CppEditor.mimetypes.xml diff --git a/src/plugins/cppeditor/cppplugin.cpp b/src/plugins/cppeditor/cppplugin.cpp index a4476d6d904..36883d54506 100644 --- a/src/plugins/cppeditor/cppplugin.cpp +++ b/src/plugins/cppeditor/cppplugin.cpp @@ -34,6 +34,7 @@ #include "cppeditorenums.h" #include "cppfilewizard.h" #include "cpphoverhandler.h" +#include "cppquickfix.h" #include <coreplugin/icore.h> #include <coreplugin/coreconstants.h> @@ -183,6 +184,7 @@ bool CppPlugin::initialize(const QStringList & /*arguments*/, QString *errorMess addAutoReleasedObject(new CppEditorFactory(this)); addAutoReleasedObject(new CppHoverHandler); + addAutoReleasedObject(new CPPQuickFixCollector); CppFileWizard::BaseFileWizardParameters wizardParameters(Core::IWizard::FileWizard); diff --git a/src/plugins/cppeditor/cppquickfix.cpp b/src/plugins/cppeditor/cppquickfix.cpp new file mode 100644 index 00000000000..4b098444ba5 --- /dev/null +++ b/src/plugins/cppeditor/cppquickfix.cpp @@ -0,0 +1,141 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** Commercial Usage +** +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Nokia. +** +** GNU Lesser General Public License Usage +** +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://qt.nokia.com/contact. +** +**************************************************************************/ + +#include "cppquickfix.h" +#include "cppeditor.h" +#include <TranslationUnit.h> +#include <Token.h> + +#include <cpptools/cppmodelmanagerinterface.h> +#include <QtDebug> + +using namespace CppEditor::Internal; +using namespace CPlusPlus; + +QuickFixOperation::QuickFixOperation(CPlusPlus::Document::Ptr doc, const CPlusPlus::Snapshot &snapshot) + : _doc(doc), _snapshot(snapshot) +{ } + +QuickFixOperation::~QuickFixOperation() +{ } + +QTextCursor QuickFixOperation::textCursor() const +{ return _textCursor; } + +void QuickFixOperation::setTextCursor(const QTextCursor &tc) +{ _textCursor = tc; } + +const CPlusPlus::Token &QuickFixOperation::tokenAt(unsigned index) const +{ return _doc->translationUnit()->tokenAt(index); } + +void QuickFixOperation::getTokenStartPosition(unsigned index, unsigned *line, unsigned *column) const +{ _doc->translationUnit()->getPosition(tokenAt(index).begin(), line, column); } + +void QuickFixOperation::getTokenEndPosition(unsigned index, unsigned *line, unsigned *column) const +{ _doc->translationUnit()->getPosition(tokenAt(index).end(), line, column); } + +QTextCursor QuickFixOperation::cursor(unsigned index) const +{ + const Token &tk = tokenAt(index); + + unsigned line, col; + getTokenStartPosition(index, &line, &col); + QTextCursor tc = _textCursor; + tc.setPosition(tc.document()->findBlockByNumber(line - 1).position() + col - 1); + tc.setPosition(tc.position() + tk.f.length, QTextCursor::KeepAnchor); + return tc; +} + +QTextCursor QuickFixOperation::moveAtStartOfToken(unsigned index) const +{ + unsigned line, col; + getTokenStartPosition(index, &line, &col); + QTextCursor tc = _textCursor; + tc.setPosition(tc.document()->findBlockByNumber(line - 1).position() + col - 1); + return tc; +} + +QTextCursor QuickFixOperation::moveAtEndOfToken(unsigned index) const +{ + const Token &tk = tokenAt(index); + + unsigned line, col; + getTokenStartPosition(index, &line, &col); + QTextCursor tc = _textCursor; + tc.setPosition(tc.document()->findBlockByNumber(line - 1).position() + col + tk.f.length - 1); + return tc; +} + +CPPQuickFixCollector::CPPQuickFixCollector() + : _modelManager(CppTools::CppModelManagerInterface::instance()), _editor(0) +{ } + +CPPQuickFixCollector::~CPPQuickFixCollector() +{ } + +bool CPPQuickFixCollector::supportsEditor(TextEditor::ITextEditable *editor) +{ return qobject_cast<CPPEditorEditable *>(editor) != 0; } + +bool CPPQuickFixCollector::triggersCompletion(TextEditor::ITextEditable *) +{ + qDebug() << Q_FUNC_INFO; + return false; +} + +int CPPQuickFixCollector::startCompletion(TextEditor::ITextEditable *editable) +{ + qDebug() << Q_FUNC_INFO; + Q_ASSERT(editable != 0); + _editor = qobject_cast<CPPEditor *>(editable->widget()); + return -1; +} + +void CPPQuickFixCollector::completions(QList<TextEditor::CompletionItem> *quicFixItems) +{ + quicFixItems->append(_quickFixItems); +} + +void CPPQuickFixCollector::complete(const TextEditor::CompletionItem &item) +{ + qDebug() << Q_FUNC_INFO; + + const int index = item.data.toInt(); + + QList<QuickFixOperationPtr> quickFixes; // ### get get the quick fixes. + + if (index < quickFixes.size()) { + QuickFixOperationPtr quickFix = quickFixes.at(index); + quickFix->apply(_editor->textCursor()); + } +} + +void CPPQuickFixCollector::cleanup() +{ + _quickFixItems.clear(); +} diff --git a/src/plugins/cppeditor/cppquickfix.h b/src/plugins/cppeditor/cppquickfix.h new file mode 100644 index 00000000000..88ffda075bb --- /dev/null +++ b/src/plugins/cppeditor/cppquickfix.h @@ -0,0 +1,111 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** Commercial Usage +** +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Nokia. +** +** GNU Lesser General Public License Usage +** +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://qt.nokia.com/contact. +** +**************************************************************************/ + +#ifndef CPPQUICKFIX_H +#define CPPQUICKFIX_H + +#include <texteditor/icompletioncollector.h> + +#include <cplusplus/CppDocument.h> + +#include <QtCore/QSharedPointer> +#include <QtGui/QTextCursor> + +namespace CppTools { + class CppModelManagerInterface; +} // end of namespace CppTools + +namespace CppEditor { +namespace Internal { + +class CPPEditor; +class QuickFixOperation; +typedef QSharedPointer<QuickFixOperation> QuickFixOperationPtr; + +class QuickFixOperation +{ + Q_DISABLE_COPY(QuickFixOperation) + +public: + QuickFixOperation(CPlusPlus::Document::Ptr doc, + const CPlusPlus::Snapshot &snapshot); + + virtual ~QuickFixOperation(); + + virtual QString description() const = 0; + virtual void apply(QTextCursor cursor) = 0; + + CPlusPlus::Document::Ptr document() const { return _doc; } + CPlusPlus::Snapshot snapshot() const { return _snapshot; } + + QTextCursor textCursor() const; + void setTextCursor(const QTextCursor &tc); + +protected: + const CPlusPlus::Token &tokenAt(unsigned index) const; + void getTokenStartPosition(unsigned index, unsigned *line, + unsigned *column) const; + void getTokenEndPosition(unsigned index, unsigned *line, + unsigned *column) const; + + QTextCursor cursor(unsigned index) const; + QTextCursor moveAtStartOfToken(unsigned index) const; + QTextCursor moveAtEndOfToken(unsigned index) const; + +private: + CPlusPlus::Document::Ptr _doc; + CPlusPlus::Snapshot _snapshot; + QTextCursor _textCursor; +}; + +class CPPQuickFixCollector: public TextEditor::IQuickFixCollector +{ + Q_OBJECT + +public: + CPPQuickFixCollector(); + virtual ~CPPQuickFixCollector(); + + virtual bool supportsEditor(TextEditor::ITextEditable *editor); + virtual bool triggersCompletion(TextEditor::ITextEditable *editor); + virtual int startCompletion(TextEditor::ITextEditable *editor); + virtual void completions(QList<TextEditor::CompletionItem> *completions); + virtual void complete(const TextEditor::CompletionItem &item); + virtual void cleanup(); + +private: + CppTools::CppModelManagerInterface *_modelManager; + CPPEditor *_editor; + QList<TextEditor::CompletionItem> _quickFixItems; +}; + +} // end of namespace Internal +} // end of namespace CppEditor + +#endif // CPPQUICKFIX_H diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp index 12d846b7742..5502e285440 100644 --- a/src/plugins/cpptools/cppcodecompletion.cpp +++ b/src/plugins/cpptools/cppcodecompletion.cpp @@ -463,59 +463,6 @@ void FunctionArgumentWidget::updateHintText() m_popupFrame->move(pos); } -CppQuickFixCollector::CppQuickFixCollector(CppModelManager *modelManager) - : _modelManager(modelManager), _editor(0) -{ } - -CppQuickFixCollector::~CppQuickFixCollector() -{ } - -bool CppQuickFixCollector::supportsEditor(TextEditor::ITextEditable *editor) -{ return _modelManager->isCppEditor(editor); } - -bool CppQuickFixCollector::triggersCompletion(TextEditor::ITextEditable *) -{ return false; } - -int CppQuickFixCollector::startCompletion(TextEditor::ITextEditable *editor) -{ - _editor = editor; - - if (CppEditorSupport *extra = _modelManager->editorSupport(editor)) { - const QList<QuickFixOperationPtr> quickFixes = extra->quickFixes(); - if (! quickFixes.isEmpty()) { - int i = 0; - foreach (QuickFixOperationPtr op, quickFixes) { - TextEditor::CompletionItem item(this); - item.text = op->description(); - item.data = QVariant::fromValue(i); - _completions.append(item); - ++i; - } - return editor->position(); - } - } - return -1; -} - -void CppQuickFixCollector::completions(QList<TextEditor::CompletionItem> *completions) -{ - completions->append(_completions); -} - -void CppQuickFixCollector::complete(const TextEditor::CompletionItem &item) -{ - CppEditorSupport *extra = _modelManager->editorSupport(_editor); - const QList<QuickFixOperationPtr> quickFixes = extra->quickFixes(); - QuickFixOperationPtr quickFix = quickFixes.at(item.data.toInt()); - TextEditor::BaseTextEditor *ed = qobject_cast<TextEditor::BaseTextEditor *>(_editor->widget()); - quickFix->apply(ed->textCursor()); -} - -void CppQuickFixCollector::cleanup() -{ - _completions.clear(); -} - CppCodeCompletion::CppCodeCompletion(CppModelManager *manager) : ICompletionCollector(manager), m_manager(manager), diff --git a/src/plugins/cpptools/cppcodecompletion.h b/src/plugins/cpptools/cppcodecompletion.h index cbf9322059e..8e93c6adc29 100644 --- a/src/plugins/cpptools/cppcodecompletion.h +++ b/src/plugins/cpptools/cppcodecompletion.h @@ -55,27 +55,6 @@ namespace Internal { class CppModelManager; class FunctionArgumentWidget; -class CppQuickFixCollector: public TextEditor::IQuickFixCollector -{ - Q_OBJECT - -public: - CppQuickFixCollector(CppModelManager *modelManager); - virtual ~CppQuickFixCollector(); - - virtual bool supportsEditor(TextEditor::ITextEditable *editor); - virtual bool triggersCompletion(TextEditor::ITextEditable *editor); - virtual int startCompletion(TextEditor::ITextEditable *editor); - virtual void completions(QList<TextEditor::CompletionItem> *completions); - virtual void complete(const TextEditor::CompletionItem &item); - virtual void cleanup(); - -private: - CppModelManager *_modelManager; - TextEditor::ITextEditable *_editor; - QList<TextEditor::CompletionItem> _completions; -}; - class CppCodeCompletion : public TextEditor::ICompletionCollector { Q_OBJECT diff --git a/src/plugins/cpptools/cpptoolseditorsupport.cpp b/src/plugins/cpptools/cpptoolseditorsupport.cpp index 90811aad5a3..c9c3e367a63 100644 --- a/src/plugins/cpptools/cpptoolseditorsupport.cpp +++ b/src/plugins/cpptools/cpptoolseditorsupport.cpp @@ -44,273 +44,6 @@ using namespace CppTools::Internal; using namespace CPlusPlus; -namespace { - -enum { - DEFAULT_QUICKFIX_INTERVAL = 500 -}; - -class QuickFixMark: public TextEditor::ITextMark -{ - QIcon _icon; - -public: - QuickFixMark(QObject *parent) - : TextEditor::ITextMark(parent), - _icon(QLatin1String(":/core/images/redo.png")) // ### FIXME - { } - - virtual ~QuickFixMark() - { } - - virtual QIcon icon() const - { return _icon; } - - virtual void updateLineNumber(int) - { } - - virtual void updateBlock(const QTextBlock &) - { } - - virtual void removedFromEditor() - { } - - virtual void documentClosing() - { } -}; - -class ReplaceCast: public QuickFixOperation -{ - CastExpressionAST *_castExpression; - -public: - ReplaceCast(CastExpressionAST *node, Document::Ptr doc, const Snapshot &snapshot) - : QuickFixOperation(doc, snapshot), - _castExpression(node) - { } - - virtual QString description() const - { return QLatin1String("Rewrite old C-style cast"); } - - virtual void apply(QTextCursor tc) - { - setTextCursor(tc); - - tc.beginEditBlock(); - - QTextCursor beginOfCast = cursor(_castExpression->lparen_token); - QTextCursor endOfCast = cursor(_castExpression->rparen_token); - QTextCursor beginOfExpr = moveAtStartOfToken(_castExpression->expression->firstToken()); - QTextCursor endOfExpr = moveAtEndOfToken(_castExpression->expression->lastToken() - 1); - - beginOfCast.insertText(QLatin1String("reinterpret_cast<")); - endOfCast.insertText(QLatin1String(">")); - - beginOfExpr.insertText(QLatin1String("(")); - endOfExpr.insertText(QLatin1String(")")); - - tc.endEditBlock(); - } -}; - -class RewriteConditional: public QuickFixOperation -{ - QString _source; - BinaryExpressionAST *_binaryExpression; - -public: - RewriteConditional(const QString &source, BinaryExpressionAST *node, - Document::Ptr doc, const Snapshot &snapshot) - : QuickFixOperation(doc, snapshot), - _source(source), - _binaryExpression(node) - { } - - virtual QString description() const - { return QString::fromUtf8("Rewrite conditional (%1)").arg(_source.simplified()); } - - virtual void apply(QTextCursor tc) - { - setTextCursor(tc); - - tc.beginEditBlock(); - - UnaryExpressionAST *left_unary_expr = _binaryExpression->left_expression->asUnaryExpression(); - UnaryExpressionAST *right_unary_expr = _binaryExpression->right_expression->asUnaryExpression(); - - QTextCursor left_not_op = cursor(left_unary_expr->unary_op_token); - QTextCursor right_not_op = cursor(right_unary_expr->unary_op_token); - QTextCursor log_and_op = cursor(_binaryExpression->binary_op_token); - - QTextCursor begin_of_expr = moveAtStartOfToken(_binaryExpression->firstToken()); - QTextCursor end_of_expr = moveAtEndOfToken(_binaryExpression->lastToken() - 1); - - left_not_op.removeSelectedText(); - right_not_op.removeSelectedText(); - log_and_op.insertText(QLatin1String("||")); - begin_of_expr.insertText(QLatin1String("!(")); - end_of_expr.insertText(QLatin1String(")")); - - tc.endEditBlock(); - } -}; -class CheckDocument: protected ASTVisitor -{ - QTextCursor _textCursor; - Document::Ptr _doc; - Snapshot _snapshot; - unsigned _line; - unsigned _column; - QList<QuickFixOperationPtr> _quickFixes; - -public: - CheckDocument(Document::Ptr doc, Snapshot snapshot) - : ASTVisitor(doc->control()), _doc(doc), _snapshot(snapshot), - _line(0), _column(0) - { } - - QList<QuickFixOperationPtr> operator()(QTextCursor tc) - { - _quickFixes.clear(); - _textCursor = tc; - _line = tc.blockNumber() + 1; - _column = tc.columnNumber() + 1; - accept(_doc->translationUnit()->ast()); - return _quickFixes; - } - -protected: - using ASTVisitor::visit; - - bool checkPosition(AST *ast) const - { - unsigned startLine, startColumn; - unsigned endLine, endColumn; - - getTokenStartPosition(ast->firstToken(), &startLine, &startColumn); - getTokenEndPosition(ast->lastToken() - 1, &endLine, &endColumn); - - if (_line < startLine || (_line == startLine && _column < startColumn)) - return false; - else if (_line > endLine || (_line == endLine && _column >= endColumn)) - return false; - - return true; - } - - QTextCursor moveAtStartOfToken(unsigned index) const - { - unsigned line, col; - getTokenStartPosition(index, &line, &col); - QTextCursor tc = _textCursor; - tc.setPosition(tc.document()->findBlockByNumber(line - 1).position() + col - 1); - return tc; - } - - QTextCursor moveAtEndOfToken(unsigned index) const - { - const Token &tk = tokenAt(index); - - unsigned line, col; - getTokenStartPosition(index, &line, &col); - QTextCursor tc = _textCursor; - tc.setPosition(tc.document()->findBlockByNumber(line - 1).position() + col + tk.f.length - 1); - return tc; - } - - virtual bool visit(BinaryExpressionAST *ast) - { - if (ast->left_expression && ast->right_expression && tokenKind(ast->binary_op_token) == T_AMPER_AMPER && - checkPosition(ast)) { - UnaryExpressionAST *left_unary_expr = ast->left_expression->asUnaryExpression(); - UnaryExpressionAST *right_unary_expr = ast->right_expression->asUnaryExpression(); - if (left_unary_expr && left_unary_expr->expression && tokenKind(left_unary_expr->unary_op_token) == T_NOT && - right_unary_expr && right_unary_expr->expression && tokenKind(right_unary_expr->unary_op_token) == T_NOT) { - // replace !a && !b with !(a || b) - QTextCursor beg = moveAtStartOfToken(ast->firstToken()); - QTextCursor end = moveAtEndOfToken(ast->lastToken() - 1); - beg.setPosition(end.position(), QTextCursor::KeepAnchor); - QString source = beg.selectedText(); - - QuickFixOperationPtr op(new RewriteConditional(source, ast, _doc, _snapshot)); - _quickFixes.append(op); - return true; - } - } - - return true; - } - - virtual bool visit(CastExpressionAST *ast) - { - if (! checkPosition(ast)) - return true; - - if (ast->type_id && ast->lparen_token && ast->rparen_token && ast->expression) { - QuickFixOperationPtr op(new ReplaceCast(ast, _doc, _snapshot)); - _quickFixes.append(op); - } - - return true; - } -}; - -} // end of anonymous namespace - -QuickFixOperation::QuickFixOperation(CPlusPlus::Document::Ptr doc, const CPlusPlus::Snapshot &snapshot) - : _doc(doc), _snapshot(snapshot) -{ } - -QuickFixOperation::~QuickFixOperation() -{ } - -QTextCursor QuickFixOperation::textCursor() const -{ return _textCursor; } - -void QuickFixOperation::setTextCursor(const QTextCursor &tc) -{ _textCursor = tc; } - -const CPlusPlus::Token &QuickFixOperation::tokenAt(unsigned index) const -{ return _doc->translationUnit()->tokenAt(index); } - -void QuickFixOperation::getTokenStartPosition(unsigned index, unsigned *line, unsigned *column) const -{ _doc->translationUnit()->getPosition(tokenAt(index).begin(), line, column); } - -void QuickFixOperation::getTokenEndPosition(unsigned index, unsigned *line, unsigned *column) const -{ _doc->translationUnit()->getPosition(tokenAt(index).end(), line, column); } - -QTextCursor QuickFixOperation::cursor(unsigned index) const -{ - const Token &tk = tokenAt(index); - - unsigned line, col; - getTokenStartPosition(index, &line, &col); - QTextCursor tc = _textCursor; - tc.setPosition(tc.document()->findBlockByNumber(line - 1).position() + col - 1); - tc.setPosition(tc.position() + tk.f.length, QTextCursor::KeepAnchor); - return tc; -} - -QTextCursor QuickFixOperation::moveAtStartOfToken(unsigned index) const -{ - unsigned line, col; - getTokenStartPosition(index, &line, &col); - QTextCursor tc = _textCursor; - tc.setPosition(tc.document()->findBlockByNumber(line - 1).position() + col - 1); - return tc; -} - -QTextCursor QuickFixOperation::moveAtEndOfToken(unsigned index) const -{ - const Token &tk = tokenAt(index); - - unsigned line, col; - getTokenStartPosition(index, &line, &col); - QTextCursor tc = _textCursor; - tc.setPosition(tc.document()->findBlockByNumber(line - 1).position() + col + tk.f.length - 1); - return tc; -} - CppEditorSupport::CppEditorSupport(CppModelManager *modelManager) : QObject(modelManager), _modelManager(modelManager), @@ -320,14 +53,6 @@ CppEditorSupport::CppEditorSupport(CppModelManager *modelManager) _updateDocumentTimer->setSingleShot(true); _updateDocumentTimer->setInterval(_updateDocumentInterval); connect(_updateDocumentTimer, SIGNAL(timeout()), this, SLOT(updateDocumentNow())); - _quickFixMark = new QuickFixMark(this); - - _quickFixTimer = new QTimer(this); - _quickFixTimer->setSingleShot(true); - _quickFixTimer->setInterval(DEFAULT_QUICKFIX_INTERVAL); -#ifdef QTCREATOR_WITH_QUICKFIX - connect(_quickFixTimer, SIGNAL(timeout()), this, SLOT(checkDocumentNow())); -#endif } CppEditorSupport::~CppEditorSupport() @@ -344,12 +69,6 @@ void CppEditorSupport::setTextEditor(TextEditor::ITextEditor *textEditor) return; connect(_textEditor, SIGNAL(contentsChanged()), this, SIGNAL(contentsChanged())); - -#ifdef QTCREATOR_WITH_QUICKFIX - connect(qobject_cast<TextEditor::BaseTextEditor *>(_textEditor->widget()), SIGNAL(cursorPositionChanged()), - this, SLOT(checkDocument())); -#endif - connect(this, SIGNAL(contentsChanged()), this, SLOT(updateDocument())); updateDocument(); @@ -396,37 +115,3 @@ void CppEditorSupport::updateDocumentNow() } } -void CppEditorSupport::checkDocument() -{ - _quickFixTimer->start(DEFAULT_QUICKFIX_INTERVAL); -} - -void CppEditorSupport::checkDocumentNow() -{ - _textEditor->markableInterface()->removeMark(_quickFixMark); - _quickFixes.clear(); - - TextEditor::BaseTextEditor *ed = - qobject_cast<TextEditor::BaseTextEditor *>(_textEditor->widget()); - - Snapshot snapshot = _modelManager->snapshot(); - const QString plainText = contents(); - const QString fileName = _textEditor->file()->fileName(); - const QByteArray preprocessedCode = snapshot.preprocessedCode(plainText, fileName); - - if (Document::Ptr doc = snapshot.documentFromSource(preprocessedCode, fileName)) { - doc->parse(); - - CheckDocument checkDocument(doc, snapshot); - QList<QuickFixOperationPtr> quickFixes = checkDocument(ed->textCursor()); - if (! quickFixes.isEmpty()) { - int line, col; - ed->convertPosition(ed->position(), &line, &col); - - _textEditor->markableInterface()->addMark(_quickFixMark, line); - _quickFixes = quickFixes; - } - } -} - - diff --git a/src/plugins/cpptools/cpptoolseditorsupport.h b/src/plugins/cpptools/cpptoolseditorsupport.h index 86f5867493c..d0c2b1b01de 100644 --- a/src/plugins/cpptools/cpptoolseditorsupport.h +++ b/src/plugins/cpptools/cpptoolseditorsupport.h @@ -55,45 +55,6 @@ namespace Internal { class CppModelManager; -class QuickFixOperation; -typedef QSharedPointer<QuickFixOperation> QuickFixOperationPtr; - -class QuickFixOperation -{ - Q_DISABLE_COPY(QuickFixOperation) - -public: - QuickFixOperation(CPlusPlus::Document::Ptr doc, - const CPlusPlus::Snapshot &snapshot); - - virtual ~QuickFixOperation(); - - virtual QString description() const = 0; - virtual void apply(QTextCursor cursor) = 0; - - CPlusPlus::Document::Ptr document() const { return _doc; } - CPlusPlus::Snapshot snapshot() const { return _snapshot; } - - QTextCursor textCursor() const; - void setTextCursor(const QTextCursor &tc); - -protected: - const CPlusPlus::Token &tokenAt(unsigned index) const; - void getTokenStartPosition(unsigned index, unsigned *line, - unsigned *column) const; - void getTokenEndPosition(unsigned index, unsigned *line, - unsigned *column) const; - - QTextCursor cursor(unsigned index) const; - QTextCursor moveAtStartOfToken(unsigned index) const; - QTextCursor moveAtEndOfToken(unsigned index) const; - -private: - CPlusPlus::Document::Ptr _doc; - CPlusPlus::Snapshot _snapshot; - QTextCursor _textCursor; -}; - class CppEditorSupport: public QObject { Q_OBJECT @@ -102,9 +63,6 @@ public: CppEditorSupport(CppModelManager *modelManager); virtual ~CppEditorSupport(); - QList<QuickFixOperationPtr> quickFixes() const - { return _quickFixes; } - TextEditor::ITextEditor *textEditor() const; void setTextEditor(TextEditor::ITextEditor *textEditor); @@ -120,9 +78,6 @@ private Q_SLOTS: void updateDocument(); void updateDocumentNow(); - void checkDocument(); - void checkDocumentNow(); - private: enum { UPDATE_DOCUMENT_DEFAULT_INTERVAL = 150 }; @@ -132,10 +87,6 @@ private: int _updateDocumentInterval; QFuture<void> _documentParser; QString _cachedContents; - - QTimer *_quickFixTimer; - TextEditor::ITextMark *_quickFixMark; - QList<QuickFixOperationPtr> _quickFixes; }; } // namespace Internal diff --git a/src/plugins/cpptools/cpptoolsplugin.cpp b/src/plugins/cpptools/cpptoolsplugin.cpp index d321b7c39b3..354ecf63544 100644 --- a/src/plugins/cpptools/cpptoolsplugin.cpp +++ b/src/plugins/cpptools/cpptoolsplugin.cpp @@ -108,8 +108,6 @@ bool CppToolsPlugin::initialize(const QStringList &arguments, QString *error) m_completion = new CppCodeCompletion(m_modelManager); addAutoReleasedObject(m_completion); - addAutoReleasedObject(new CppQuickFixCollector(m_modelManager)); - CppLocatorFilter *locatorFilter = new CppLocatorFilter(m_modelManager, core->editorManager()); addAutoReleasedObject(locatorFilter); -- GitLab