diff options
author | Przemyslaw Gorszkowski <[email protected]> | 2013-05-16 10:15:02 +0200 |
---|---|---|
committer | Erik Verbruggen <[email protected]> | 2013-05-24 14:23:14 +0200 |
commit | f93758b8e1d68ed28dc1a84b71c906d58784cb70 (patch) | |
tree | 89850b9c04008a24d010e09bd489a8c8a276b3f5 /src/plugins/cpptools/cppchecksymbols.cpp | |
parent | feff33827cbe54a39863ef7a5a1e954556ed4302 (diff) |
C++: fix used template function parameters
It was missing colorizing and follow symbol template function parameters in case of:
* returning value
* use it as qualified name
Task-number: QTCREATORBUG-6861
Change-Id: I4226199e1f296cfe5a373783ebbc633e32fc9bcd
Reviewed-by: Erik Verbruggen <[email protected]>
Diffstat (limited to 'src/plugins/cpptools/cppchecksymbols.cpp')
-rw-r--r-- | src/plugins/cpptools/cppchecksymbols.cpp | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/src/plugins/cpptools/cppchecksymbols.cpp b/src/plugins/cpptools/cppchecksymbols.cpp index dfba5f9c996..d4cc6b7b596 100644 --- a/src/plugins/cpptools/cppchecksymbols.cpp +++ b/src/plugins/cpptools/cppchecksymbols.cpp @@ -408,6 +408,14 @@ Scope *CheckSymbols::enclosingScope() const if (funDef->symbol) return funDef->symbol; + } else if (TemplateDeclarationAST *templateDeclaration = ast->asTemplateDeclaration()) { + if (DeclarationAST *decl = templateDeclaration->declaration) { + if (FunctionDefinitionAST *funDef = decl->asFunctionDefinition()) { + if (funDef->symbol) + return funDef->symbol; + } + } + } else if (CompoundStatementAST *blockStmt = ast->asCompoundStatement()) { if (blockStmt->symbol) return blockStmt->symbol; @@ -869,7 +877,12 @@ ClassOrNamespace *CheckSymbols::checkNestedName(QualifiedNameAST *ast) const Name *name = class_or_namespace_name->name; binding = _context.lookupType(name, enclosingScope()); - addType(binding, class_or_namespace_name); + if (binding) + addType(binding, class_or_namespace_name); + else + // for the case when we use template parameter as qualifier + // e.g.: template <typename T> void fun() { T::type type; } + accept(nested_name_specifier->class_or_namespace_name); for (it = it->next; it; it = it->next) { NestedNameSpecifierAST *nested_name_specifier = it->value; |