diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp index 1d77d7c8679d120973dfa7c4dc8ddf720c105c74..30fb1ce2ed9888efce54dc7d086a46f24c34a290 100644 --- a/src/plugins/cpptools/cppcodecompletion.cpp +++ b/src/plugins/cpptools/cppcodecompletion.cpp @@ -212,12 +212,21 @@ protected: { _item = newCompletionItem(name->unqualifiedNameId()); } }; +struct CompleteFunctionDeclaration +{ + explicit CompleteFunctionDeclaration(Function *f = 0) + : function(f) + {} + + Function *function; +}; } // namespace Internal } // namespace CppTools using namespace CppTools::Internal; +Q_DECLARE_METATYPE(CompleteFunctionDeclaration) void FakeToolTipFrame::paintEvent(QPaintEvent *) { @@ -1071,18 +1080,13 @@ bool CppCodeCompletion::completeConstructorOrFunction(const QList<TypeOfExpressi Overview overview; overview.setShowArgumentNames(true); - // get rid of parentheses and cv-qualifiers - QString completion = overview(f->type()); - if (f->isVolatile() || f->isConst()) - completion = completion.mid(1, completion.lastIndexOf(')') - 1); - else - completion = completion.mid(1, completion.size() - 2); - - if (completion.size()) { - TextEditor::CompletionItem item(this); - item.text = completion; - m_completions.append(item); - } + // gets: "parameter list) cv-spec", + QString completion = overview(f->type()).mid(1); + + TextEditor::CompletionItem item(this); + item.text = completion; + item.data = QVariant::fromValue(CompleteFunctionDeclaration(f)); + m_completions.append(item); } return true; } @@ -1560,6 +1564,14 @@ void CppCodeCompletion::complete(const TextEditor::CompletionItem &item) } } } + + if (m_autoInsertBrackets && item.data.canConvert<CompleteFunctionDeclaration>()) { + // everything from the closing parenthesis on are extra chars, to + // make sure an auto-inserted ")" gets replaced by ") const" if necessary + int closingParen = toInsert.lastIndexOf(QLatin1Char(')')); + extraChars = toInsert.mid(closingParen); + toInsert.truncate(closingParen); + } } // Avoid inserting characters that are already there