diff options
author | Roberto Raggi <roberto.raggi@nokia.com> | 2010-07-12 15:09:36 +0200 |
---|---|---|
committer | Roberto Raggi <roberto.raggi@nokia.com> | 2010-07-12 15:10:00 +0200 |
commit | 06c7cb9b88f660aceba84e598c53dbd0794be226 (patch) | |
tree | 2c63a38ddbf5344c9f987983eb08df1b8ad16fa3 /src/libs/cplusplus/LookupContext.cpp | |
parent | adfdb51660f3d4251101283efa46b6617cbe43d4 (diff) | |
download | qt-creator-06c7cb9b88f660aceba84e598c53dbd0794be226.tar.gz |
Disable Create declaration from definition quickfix.
Diffstat (limited to 'src/libs/cplusplus/LookupContext.cpp')
-rw-r--r-- | src/libs/cplusplus/LookupContext.cpp | 38 |
1 files changed, 25 insertions, 13 deletions
diff --git a/src/libs/cplusplus/LookupContext.cpp b/src/libs/cplusplus/LookupContext.cpp index 3bb6ea0458..ce832e2df6 100644 --- a/src/libs/cplusplus/LookupContext.cpp +++ b/src/libs/cplusplus/LookupContext.cpp @@ -47,24 +47,24 @@ namespace { using namespace CPlusPlus; -static void addNames(const Name *name, QList<const Name *> *names) +static void addNames(const Name *name, QList<const Name *> *names, bool addAllNames = false) { if (! name) return; - else if (name->isNameId() || name->isTemplateNameId()) - names->append(name); else if (const QualifiedNameId *q = name->asQualifiedNameId()) { addNames(q->base(), names); addNames(q->name(), names); + } else if (addAllNames || name->isNameId() || name->isTemplateNameId()) { + names->append(name); } } -static void fullyQualifiedName_helper(Symbol *symbol, QList<const Name *> *names) +static void path_helper(Symbol *symbol, QList<const Name *> *names) { if (! symbol) return; - fullyQualifiedName_helper(symbol->enclosingSymbol(), names); + path_helper(symbol->enclosingSymbol(), names); if (symbol->name()) { if (symbol->isClass() || symbol->isNamespace()) { @@ -138,13 +138,21 @@ LookupContext &LookupContext::operator = (const LookupContext &other) QList<const Name *> LookupContext::fullyQualifiedName(Symbol *symbol) { + QList<const Name *> qualifiedName = path(symbol->enclosingSymbol()); + addNames(symbol->name(), &qualifiedName, /*add all names*/ true); + return qualifiedName; +} + +QList<const Name *> LookupContext::path(Symbol *symbol) +{ QList<const Name *> names; - fullyQualifiedName_helper(symbol, &names); + path_helper(symbol, &names); return names; } + const Name *LookupContext::minimalName(const Name *name, - Scope *source, + Scope *scope, ClassOrNamespace *target) const { qWarning() << "TODO:" << Q_FUNC_INFO; @@ -329,7 +337,7 @@ QList<Symbol *> LookupContext::lookup(const Name *name, Scope *scope) const ClassOrNamespace *LookupContext::lookupParent(Symbol *symbol) const { - QList<const Name *> fqName = fullyQualifiedName(symbol); + QList<const Name *> fqName = path(symbol); ClassOrNamespace *binding = globalNamespace(); foreach (const Name *name, fqName) { binding = binding->findType(name); @@ -697,15 +705,19 @@ ClassOrNamespace *CreateBindings::globalNamespace() const ClassOrNamespace *CreateBindings::lookupType(Symbol *symbol) { - const QList<const Name *> names = LookupContext::fullyQualifiedName(symbol); + const QList<const Name *> path = LookupContext::path(symbol); + return lookupType(path); +} - if (names.isEmpty()) +ClassOrNamespace *CreateBindings::lookupType(const QList<const Name *> &path) +{ + if (path.isEmpty()) return _globalNamespace; - ClassOrNamespace *b = _globalNamespace->lookupType(names.at(0)); + ClassOrNamespace *b = _globalNamespace->lookupType(path.at(0)); - for (int i = 1; b && i < names.size(); ++i) - b = b->findType(names.at(i)); + for (int i = 1; b && i < path.size(); ++i) + b = b->findType(path.at(i)); return b; } |