forked from qt-creator/qt-creator
Fixed crash on updating function argument widget
Crashed for example in the case of template instantiation. To make sure the Function* stays valid, we need to not only keep around the Snapshot but the whole LookupContext. Done with Roberto Raggi.
This commit is contained in:
@@ -78,7 +78,7 @@ class FunctionArgumentWidget : public QLabel
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
FunctionArgumentWidget();
|
FunctionArgumentWidget();
|
||||||
void showFunctionHint(Function *functionSymbol, const Snapshot &snapshot);
|
void showFunctionHint(Function *functionSymbol, const LookupContext &context);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool eventFilter(QObject *obj, QEvent *e);
|
bool eventFilter(QObject *obj, QEvent *e);
|
||||||
@@ -95,7 +95,7 @@ private:
|
|||||||
|
|
||||||
QFrame *m_popupFrame;
|
QFrame *m_popupFrame;
|
||||||
Function *m_item;
|
Function *m_item;
|
||||||
Snapshot m_snapshot;
|
LookupContext m_context;
|
||||||
};
|
};
|
||||||
|
|
||||||
class ConvertToCompletionItem: protected NameVisitor
|
class ConvertToCompletionItem: protected NameVisitor
|
||||||
@@ -215,10 +215,10 @@ FunctionArgumentWidget::FunctionArgumentWidget()
|
|||||||
}
|
}
|
||||||
|
|
||||||
void FunctionArgumentWidget::showFunctionHint(Function *functionSymbol,
|
void FunctionArgumentWidget::showFunctionHint(Function *functionSymbol,
|
||||||
const Snapshot &snapshot)
|
const LookupContext &context)
|
||||||
{
|
{
|
||||||
m_item = functionSymbol;
|
m_item = functionSymbol;
|
||||||
m_snapshot = snapshot;
|
m_context = context;
|
||||||
m_startpos = m_editor->position();
|
m_startpos = m_editor->position();
|
||||||
|
|
||||||
// update the text
|
// update the text
|
||||||
@@ -1041,7 +1041,7 @@ void CppCodeCompletion::complete(const TextEditor::CompletionItem &item)
|
|||||||
QTC_ASSERT(function, return);
|
QTC_ASSERT(function, return);
|
||||||
|
|
||||||
m_functionArgumentWidget = new FunctionArgumentWidget();
|
m_functionArgumentWidget = new FunctionArgumentWidget();
|
||||||
m_functionArgumentWidget->showFunctionHint(function, typeOfExpression.snapshot());
|
m_functionArgumentWidget->showFunctionHint(function, typeOfExpression.lookupContext());
|
||||||
}
|
}
|
||||||
} else if (m_completionOperator == T_SIGNAL || m_completionOperator == T_SLOT) {
|
} else if (m_completionOperator == T_SIGNAL || m_completionOperator == T_SLOT) {
|
||||||
QString toInsert = item.m_text;
|
QString toInsert = item.m_text;
|
||||||
|
Reference in New Issue
Block a user