From 437bbd00e5bc18322bd868d9b1930b8c481e2269 Mon Sep 17 00:00:00 2001 From: Roberto Raggi Date: Tue, 17 Mar 2009 14:46:35 +0100 Subject: [PATCH] Don't insert `(' when completing ambiguous symbols. --- src/plugins/cpptools/cppcodecompletion.cpp | 2 +- src/shared/cplusplus/CheckDeclarator.cpp | 1 + src/shared/cplusplus/Symbols.cpp | 6 ++++++ src/shared/cplusplus/Symbols.h | 4 ++++ 4 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp index 8805d4555dc..6157204867f 100644 --- a/src/plugins/cpptools/cppcodecompletion.cpp +++ b/src/plugins/cpptools/cppcodecompletion.cpp @@ -1128,7 +1128,7 @@ void CppCodeCompletion::complete(const TextEditor::CompletionItem &item) if (function->argumentCount() == 0) { extraChars += QLatin1Char('<'); } - } else { + } else if (! function->isAmbiguous()) { extraChars += QLatin1Char('('); // If the function takes no arguments, automatically place the closing parenthesis diff --git a/src/shared/cplusplus/CheckDeclarator.cpp b/src/shared/cplusplus/CheckDeclarator.cpp index f1cc0a3f981..ceef0d1d055 100644 --- a/src/shared/cplusplus/CheckDeclarator.cpp +++ b/src/shared/cplusplus/CheckDeclarator.cpp @@ -157,6 +157,7 @@ bool CheckDeclarator::visit(NestedDeclaratorAST *ast) bool CheckDeclarator::visit(FunctionDeclaratorAST *ast) { Function *fun = control()->newFunction(ast->firstToken()); + fun->setAmbiguous(ast->as_cpp_initializer != 0); ast->symbol = fun; fun->setReturnType(_fullySpecifiedType); diff --git a/src/shared/cplusplus/Symbols.cpp b/src/shared/cplusplus/Symbols.cpp index 35d2d9c6906..5185aa82659 100644 --- a/src/shared/cplusplus/Symbols.cpp +++ b/src/shared/cplusplus/Symbols.cpp @@ -255,6 +255,12 @@ bool Function::isPureVirtual() const void Function::setPureVirtual(bool isPureVirtual) { _isPureVirtual = isPureVirtual; } +bool Function::isAmbiguous() const +{ return _isAmbiguous; } + +void Function::setAmbiguous(bool isAmbiguous) +{ _isAmbiguous = isAmbiguous; } + void Function::visitSymbol0(SymbolVisitor *visitor) { if (visitor->visit(this)) { diff --git a/src/shared/cplusplus/Symbols.h b/src/shared/cplusplus/Symbols.h index a9f8cda5479..8efc0fbdbed 100644 --- a/src/shared/cplusplus/Symbols.h +++ b/src/shared/cplusplus/Symbols.h @@ -322,6 +322,9 @@ public: virtual Function *asFunctionType() { return this; } + bool isAmbiguous() const; // internal + void setAmbiguous(bool isAmbiguous); // internal + protected: virtual void visitSymbol0(SymbolVisitor *visitor); virtual void accept0(TypeVisitor *visitor); @@ -337,6 +340,7 @@ private: unsigned _isPureVirtual: 1; unsigned _isConst: 1; unsigned _isVolatile: 1; + unsigned _isAmbiguous: 1; unsigned _methodKey: 3; }; };