forked from qt-creator/qt-creator
Quickfix: Use a LookupContext instead of TypeOfExpression to get type.
There's no need to reparse something we already got the AST of.
This commit is contained in:
@@ -31,6 +31,7 @@
|
|||||||
#include "cppeditor.h"
|
#include "cppeditor.h"
|
||||||
|
|
||||||
#include <cplusplus/CppDocument.h>
|
#include <cplusplus/CppDocument.h>
|
||||||
|
#include <cplusplus/ResolveExpression.h>
|
||||||
|
|
||||||
#include <TranslationUnit.h>
|
#include <TranslationUnit.h>
|
||||||
#include <ASTVisitor.h>
|
#include <ASTVisitor.h>
|
||||||
@@ -843,7 +844,6 @@ Snapshot QuickFixOperation::snapshot() const
|
|||||||
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
|
||||||
@@ -1063,14 +1063,16 @@ void QuickFixOperation::apply()
|
|||||||
*
|
*
|
||||||
* NOTE: The fully specified types only stay valid until the next call to typeOf.
|
* NOTE: The fully specified types only stay valid until the next call to typeOf.
|
||||||
*/
|
*/
|
||||||
const QList<LookupItem> QuickFixOperation::typeOf(const CPlusPlus::ExpressionAST *ast)
|
const QList<LookupItem> QuickFixOperation::typeOf(CPlusPlus::ExpressionAST *ast)
|
||||||
{
|
{
|
||||||
unsigned line, column;
|
unsigned line, column;
|
||||||
document()->translationUnit()->getTokenStartPosition(ast->firstToken(), &line, &column);
|
document()->translationUnit()->getTokenStartPosition(ast->firstToken(), &line, &column);
|
||||||
Symbol *lastVisibleSymbol = document()->findSymbolAt(line, column);
|
Symbol *lastVisibleSymbol = document()->findSymbolAt(line, column);
|
||||||
|
|
||||||
return _typeOfExpression(textOf(ast), document(), lastVisibleSymbol,
|
_lookupContext = LookupContext(lastVisibleSymbol, document(), document(), snapshot());
|
||||||
TypeOfExpression::Preprocess);
|
|
||||||
|
ResolveExpression resolveExpression(_lookupContext);
|
||||||
|
return resolveExpression(ast);
|
||||||
}
|
}
|
||||||
|
|
||||||
CPPQuickFixCollector::CPPQuickFixCollector()
|
CPPQuickFixCollector::CPPQuickFixCollector()
|
||||||
|
|||||||
@@ -33,7 +33,7 @@
|
|||||||
#include <texteditor/icompletioncollector.h>
|
#include <texteditor/icompletioncollector.h>
|
||||||
|
|
||||||
#include <cplusplus/CppDocument.h>
|
#include <cplusplus/CppDocument.h>
|
||||||
#include <cplusplus/TypeOfExpression.h>
|
#include <cplusplus/LookupContext.h>
|
||||||
#include <ASTfwd.h>
|
#include <ASTfwd.h>
|
||||||
|
|
||||||
#include <utils/changeset.h>
|
#include <utils/changeset.h>
|
||||||
@@ -128,7 +128,7 @@ 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);
|
const QList<CPlusPlus::LookupItem> typeOf(CPlusPlus::ExpressionAST *ast);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
CPlusPlus::Document::Ptr _document;
|
CPlusPlus::Document::Ptr _document;
|
||||||
@@ -137,7 +137,7 @@ private:
|
|||||||
Utils::ChangeSet _changeSet;
|
Utils::ChangeSet _changeSet;
|
||||||
CPPEditor *_editor;
|
CPPEditor *_editor;
|
||||||
CPlusPlus::AST *_topLevelNode;
|
CPlusPlus::AST *_topLevelNode;
|
||||||
CPlusPlus::TypeOfExpression _typeOfExpression;
|
CPlusPlus::LookupContext _lookupContext;
|
||||||
};
|
};
|
||||||
|
|
||||||
class CPPQuickFixCollector: public TextEditor::IQuickFixCollector
|
class CPPQuickFixCollector: public TextEditor::IQuickFixCollector
|
||||||
|
|||||||
Reference in New Issue
Block a user