New code assist API

This is a re-work of our completion engine. Primary goals are:

- Allow the computation to run in a separate thread so the GUI is not locked.
- Support a model-based approach. QStrings are still needed (filtering, etc), but
internal structures are free to use more efficient representations.
- Unifiy all kinds of *assist* into a more reusable and extensible framework.
- Remove unnecessary dependencies on the text editor so we have more generic
and easily "plugable" components (still things to be resolved).
This commit is contained in:
Leandro Melo
2011-04-15 16:19:23 +02:00
parent d835b769c7
commit bec4f02495
119 changed files with 9347 additions and 6595 deletions

View File

@@ -53,40 +53,17 @@ class IPlugin;
namespace CppEditor {
namespace Internal {
class CppQuickFixCollector;
} // namespace Internal
class CPPEDITOR_EXPORT CppQuickFixState: public TextEditor::QuickFixState
{
friend class Internal::CppQuickFixCollector;
public:
CppQuickFixState(TextEditor::BaseTextEditorWidget *editor);
const QList<CPlusPlus::AST *> &path() const;
CPlusPlus::Snapshot snapshot() const;
CPlusPlus::Document::Ptr document() const;
CppEditor::Internal::SemanticInfo semanticInfo() const;
const CPlusPlus::LookupContext &context() const;
const CppTools::CppRefactoringFile currentFile() const;
bool isCursorOn(unsigned tokenIndex) const;
bool isCursorOn(const CPlusPlus::AST *ast) const;
private:
QList<CPlusPlus::AST *> _path;
CPlusPlus::Snapshot _snapshot;
CppEditor::Internal::SemanticInfo _semanticInfo;
CPlusPlus::LookupContext _context;
};
class CppQuickFixAssistInterface;
}
class CPPEDITOR_EXPORT CppQuickFixOperation: public TextEditor::QuickFixOperation
{
Q_DISABLE_COPY(CppQuickFixOperation)
public:
explicit CppQuickFixOperation(const CppQuickFixState &state, int priority = -1);
explicit CppQuickFixOperation(
const QSharedPointer<const Internal::CppQuickFixAssistInterface> &interface,
int priority = -1);
virtual ~CppQuickFixOperation();
virtual void perform();
@@ -97,10 +74,10 @@ protected:
QString fileName() const;
const CppQuickFixState &state() const;
const Internal::CppQuickFixAssistInterface *assistInterface() const;
private:
CppQuickFixState _state;
QSharedPointer<const Internal::CppQuickFixAssistInterface> m_interface;
};
class CPPEDITOR_EXPORT CppQuickFixFactory: public TextEditor::QuickFixFactory
@@ -111,12 +88,15 @@ public:
CppQuickFixFactory();
virtual ~CppQuickFixFactory();
virtual QList<TextEditor::QuickFixOperation::Ptr> matchingOperations(TextEditor::QuickFixState *state);
virtual QList<TextEditor::QuickFixOperation::Ptr>
matchingOperations(const QSharedPointer<const TextEditor::IAssistInterface> &interface);
/*!
Implement this method to match and create the appropriate
CppQuickFixOperation objects.
*/
virtual QList<CppQuickFixOperation::Ptr> match(const CppQuickFixState &state) = 0;
virtual QList<CppQuickFixOperation::Ptr> match(
const QSharedPointer<const Internal::CppQuickFixAssistInterface> &interface) = 0;
protected:
/*!