More work on `Quick Fix'.

This commit is contained in:
Roberto Raggi
2009-06-09 13:52:27 +02:00
parent e5fcbba7fc
commit 132258753a
10 changed files with 396 additions and 2 deletions

View File

@@ -33,13 +33,21 @@
#include <QObject>
#include <QPointer>
#include <QFuture>
#include <QSharedPointer>
#include <QTextCursor.h>
#include <cplusplus/CppDocument.h>
QT_BEGIN_NAMESPACE
class QTimer;
QT_END_NAMESPACE
namespace CPlusPlus {
class AST;
}
namespace TextEditor {
class ITextEditor;
class ITextMark;
} // end of namespace TextEditor
namespace CppTools {
@@ -47,6 +55,46 @@ 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::AST *_node;
CPlusPlus::Document::Ptr _doc;
CPlusPlus::Snapshot _snapshot;
QTextCursor _textCursor;
};
class CppEditorSupport: public QObject
{
Q_OBJECT
@@ -55,6 +103,9 @@ public:
CppEditorSupport(CppModelManager *modelManager);
virtual ~CppEditorSupport();
QList<QuickFixOperationPtr> quickFixes() const
{ return _quickFixes; }
TextEditor::ITextEditor *textEditor() const;
void setTextEditor(TextEditor::ITextEditor *textEditor);
@@ -70,6 +121,9 @@ private Q_SLOTS:
void updateDocument();
void updateDocumentNow();
void checkDocument();
void checkDocumentNow();
private:
enum { UPDATE_DOCUMENT_DEFAULT_INTERVAL = 150 };
@@ -79,6 +133,10 @@ private:
int _updateDocumentInterval;
QFuture<void> _documentParser;
QByteArray _cachedContents;
QTimer *_quickFixTimer;
TextEditor::ITextMark *_quickFixMark;
QList<QuickFixOperationPtr> _quickFixes;
};
} // namespace Internal