From 890254b0f151e388830023df9b35d145e3112b38 Mon Sep 17 00:00:00 2001 From: Leandro Melo Date: Thu, 26 May 2011 12:10:08 +0200 Subject: [PATCH] C++ editor: Share the model data acrross completion items More than one proposal item could be accessed during an iteration. So they should not take ownershipt of the data, but simply share it. Change-Id: I7b81b8772cd8ad4d6c2332ba6b5bc320055cd5a2 Reviewed-on: http://codereview.qt.nokia.com/136 Reviewed-by: Leandro T. C. Melo --- src/plugins/cpptools/cppcompletionassist.cpp | 31 ++++++-------------- 1 file changed, 9 insertions(+), 22 deletions(-) diff --git a/src/plugins/cpptools/cppcompletionassist.cpp b/src/plugins/cpptools/cppcompletionassist.cpp index 94303bcc254..d2c458f56f3 100644 --- a/src/plugins/cpptools/cppcompletionassist.cpp +++ b/src/plugins/cpptools/cppcompletionassist.cpp @@ -186,7 +186,6 @@ public: , m_replaceDotForArrow(false) , m_typeOfExpression(new TypeOfExpression) {} - virtual ~CppAssistProposalModel(); virtual bool isSortable() const { return m_sortable; } virtual IAssistProposalItem *proposalItem(int index) const; @@ -194,14 +193,9 @@ public: bool m_sortable; unsigned m_completionOperator; bool m_replaceDotForArrow; - mutable TypeOfExpression *m_typeOfExpression; + QSharedPointer m_typeOfExpression; }; -CppAssistProposalModel::~CppAssistProposalModel() -{ - delete m_typeOfExpression; -} - // --------------------- // CppAssistProposalItem // --------------------- @@ -209,8 +203,7 @@ class CppAssistProposalItem : public TextEditor::BasicProposalItem { public: CppAssistProposalItem() : - m_isOverloaded(false), m_typeOfExpression(0) {} - virtual ~CppAssistProposalItem(); + m_isOverloaded(false) {} virtual bool prematurelyApplies(const QChar &c) const; virtual void applyContextualContent(TextEditor::BaseTextEditor *editor, @@ -219,21 +212,16 @@ public: bool isOverloaded() const { return m_isOverloaded; } void markAsOverloaded() { m_isOverloaded = true; } void keepCompletionOperator(unsigned compOp) { m_completionOperator = compOp; } - void ownTypeOfExpression(TypeOfExpression *typeOfExp) { m_typeOfExpression = typeOfExp; } + void keepTypeOfExpression(const QSharedPointer &typeOfExp) + { m_typeOfExpression = typeOfExp; } private: bool m_isOverloaded; unsigned m_completionOperator; mutable QChar m_typedChar; - TypeOfExpression *m_typeOfExpression; + QSharedPointer m_typeOfExpression; }; -CppAssistProposalItem::~CppAssistProposalItem() -{ - if (m_typeOfExpression) - delete m_typeOfExpression; -} - } // Internal } // CppTools @@ -246,8 +234,7 @@ IAssistProposalItem *CppAssistProposalModel::proposalItem(int index) const if (!item->data().canConvert()) { CppAssistProposalItem *cppItem = static_cast(item); cppItem->keepCompletionOperator(m_completionOperator); - cppItem->ownTypeOfExpression(m_typeOfExpression); - m_typeOfExpression = 0; + cppItem->keepTypeOfExpression(m_typeOfExpression); } return item; } @@ -429,7 +416,8 @@ void CppAssistProposalItem::applyContextualContent(TextEditor::BaseTextEditor *e class CppFunctionHintModel : public TextEditor::IFunctionHintProposalModel { public: - CppFunctionHintModel(QList functionSymbols, TypeOfExpression *typeOfExp) + CppFunctionHintModel(QList functionSymbols, + const QSharedPointer &typeOfExp) : m_functionSymbols(functionSymbols) , m_currentArg(-1) , m_typeOfExpression(typeOfExp) @@ -443,7 +431,7 @@ public: private: QList m_functionSymbols; mutable int m_currentArg; - TypeOfExpression *m_typeOfExpression; + QSharedPointer m_typeOfExpression; }; QString CppFunctionHintModel::text(int index) const @@ -800,7 +788,6 @@ IAssistProposal *CppCompletionAssistProcessor::createHintProposal( { IFunctionHintProposalModel *model = new CppFunctionHintModel(functionSymbols, m_model->m_typeOfExpression); - m_model->m_typeOfExpression = 0; IAssistProposal *proposal = new FunctionHintProposal(m_startPosition, model); return proposal; }