Skip to content
Snippets Groups Projects
Commit 0daf22c7 authored by Christian Kamm's avatar Christian Kamm
Browse files

Quickfix: Add a typeOf helper to conveniently get the type of an expr.

Reviewed-by: Erik Verbruggen
parent 77b59b02
No related branches found
No related tags found
No related merge requests found
...@@ -841,7 +841,10 @@ Snapshot QuickFixOperation::snapshot() const ...@@ -841,7 +841,10 @@ Snapshot QuickFixOperation::snapshot() const
{ return _snapshot; } { return _snapshot; }
void QuickFixOperation::setSnapshot(const CPlusPlus::Snapshot &snapshot) void QuickFixOperation::setSnapshot(const CPlusPlus::Snapshot &snapshot)
{ _snapshot = snapshot; } {
_snapshot = snapshot;
_typeOfExpression.setSnapshot(snapshot);
}
CPPEditor *QuickFixOperation::editor() const CPPEditor *QuickFixOperation::editor() const
{ return _editor; } { return _editor; }
...@@ -1032,7 +1035,7 @@ QString QuickFixOperation::textOf(int firstOffset, int lastOffset) const ...@@ -1032,7 +1035,7 @@ QString QuickFixOperation::textOf(int firstOffset, int lastOffset) const
return tc.selectedText(); return tc.selectedText();
} }
QString QuickFixOperation::textOf(AST *ast) const QString QuickFixOperation::textOf(const AST *ast) const
{ {
return textOf(startOf(ast), endOf(ast)); return textOf(startOf(ast), endOf(ast));
} }
...@@ -1054,6 +1057,22 @@ void QuickFixOperation::apply() ...@@ -1054,6 +1057,22 @@ void QuickFixOperation::apply()
_textCursor.endEditBlock(); _textCursor.endEditBlock();
} }
/**
* Returns a list of possible fully specified types associated with the
* given expression.
*
* NOTE: The fully specified types only stay valid until the next call to typeOf.
*/
const QList<LookupItem> QuickFixOperation::typeOf(const CPlusPlus::ExpressionAST *ast)
{
unsigned line, column;
document()->translationUnit()->getTokenStartPosition(ast->firstToken(), &line, &column);
Symbol *lastVisibleSymbol = document()->findSymbolAt(line, column);
return _typeOfExpression(textOf(ast), document(), lastVisibleSymbol,
TypeOfExpression::Preprocess);
}
CPPQuickFixCollector::CPPQuickFixCollector() CPPQuickFixCollector::CPPQuickFixCollector()
: _modelManager(CppTools::CppModelManagerInterface::instance()), _editor(0) : _modelManager(CppTools::CppModelManagerInterface::instance()), _editor(0)
{ } { }
......
...@@ -33,6 +33,7 @@ ...@@ -33,6 +33,7 @@
#include <texteditor/icompletioncollector.h> #include <texteditor/icompletioncollector.h>
#include <cplusplus/CppDocument.h> #include <cplusplus/CppDocument.h>
#include <cplusplus/TypeOfExpression.h>
#include <ASTfwd.h> #include <ASTfwd.h>
#include <utils/changeset.h> #include <utils/changeset.h>
...@@ -114,7 +115,7 @@ protected: ...@@ -114,7 +115,7 @@ protected:
void copy(const CPlusPlus::AST *ast, int to); void copy(const CPlusPlus::AST *ast, int to);
QString textOf(int firstOffset, int lastOffset) const; QString textOf(int firstOffset, int lastOffset) const;
QString textOf(CPlusPlus::AST *ast) const; QString textOf(const CPlusPlus::AST *ast) const;
struct Range { struct Range {
Range() {} Range() {}
...@@ -127,6 +128,8 @@ protected: ...@@ -127,6 +128,8 @@ protected:
Range createRange(CPlusPlus::AST *ast) const; // ### rename me Range createRange(CPlusPlus::AST *ast) const; // ### rename me
void reindent(const Range &range); void reindent(const Range &range);
const QList<CPlusPlus::LookupItem> typeOf(const CPlusPlus::ExpressionAST *ast);
private: private:
CPlusPlus::Document::Ptr _document; CPlusPlus::Document::Ptr _document;
CPlusPlus::Snapshot _snapshot; CPlusPlus::Snapshot _snapshot;
...@@ -134,6 +137,7 @@ private: ...@@ -134,6 +137,7 @@ private:
Utils::ChangeSet _changeSet; Utils::ChangeSet _changeSet;
CPPEditor *_editor; CPPEditor *_editor;
CPlusPlus::AST *_topLevelNode; CPlusPlus::AST *_topLevelNode;
CPlusPlus::TypeOfExpression _typeOfExpression;
}; };
class CPPQuickFixCollector: public TextEditor::IQuickFixCollector class CPPQuickFixCollector: public TextEditor::IQuickFixCollector
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment