diff options
author | Przemyslaw Gorszkowski <[email protected]> | 2013-04-07 09:05:22 +0200 |
---|---|---|
committer | Erik Verbruggen <[email protected]> | 2013-04-10 14:58:48 +0200 |
commit | bde666724083126808507e46bc840eb601631a13 (patch) | |
tree | 4812ae8056a8cd231c99e47bb5f33f0aae1593cf /src/plugins/cpptools/cppchecksymbols.cpp | |
parent | 9c2a352027711519fb7dcc579f520717cd7ed115 (diff) |
C++: name of function of class problem
It fixes:
* highlighing
* find usage
* follow symbol
when function of class has the same name as:
* local variable
* template parameter
* other struct/union/class/enum
* function argument
in function scope.
Task-number: QTCREATORBUG-8902
Change-Id: Iddc0f764af689babb40d39460d174bac7b919b31
Reviewed-by: Orgad Shaneh <[email protected]>
Reviewed-by: Sergey Shambir <[email protected]>
Reviewed-by: Erik Verbruggen <[email protected]>
Diffstat (limited to 'src/plugins/cpptools/cppchecksymbols.cpp')
-rw-r--r-- | src/plugins/cpptools/cppchecksymbols.cpp | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/plugins/cpptools/cppchecksymbols.cpp b/src/plugins/cpptools/cppchecksymbols.cpp index fbf27666060..6ac5843c11e 100644 --- a/src/plugins/cpptools/cppchecksymbols.cpp +++ b/src/plugins/cpptools/cppchecksymbols.cpp @@ -1240,6 +1240,7 @@ bool CheckSymbols::maybeAddFunction(const QList<LookupItem> &candidates, NameAST { unsigned startToken = ast->firstToken(); bool isDestructor = false; + bool isConstructor = false; if (DestructorNameAST *dtor = ast->asDestructorName()) { isDestructor = true; if (dtor->unqualified_name) @@ -1264,6 +1265,8 @@ bool CheckSymbols::maybeAddFunction(const QList<LookupItem> &candidates, NameAST if (isDestructor != c->name()->isDestructorNameId()) continue; + isConstructor = isConstructorDeclaration(c); + Function *funTy = c->type()->asFunctionType(); if (! funTy) { //Try to find a template function @@ -1296,7 +1299,9 @@ bool CheckSymbols::maybeAddFunction(const QList<LookupItem> &candidates, NameAST } if (matchType != Match_None) { + // decide how constructor and destructor should be highlighted if (highlightCtorDtorAsType + && (isConstructor || isDestructor) && maybeType(ast->name) && kind == SemanticInfo::FunctionUse) { return false; @@ -1399,3 +1404,12 @@ void CheckSymbols::flush() _usages.clear(); _usages.reserve(cap); } + +bool CheckSymbols::isConstructorDeclaration(Symbol *declaration) +{ + Class *clazz = declaration->enclosingClass(); + if (clazz && clazz->name()) + return declaration->name()->isEqualTo(clazz->name()); + + return false; +} |