CppEditor: Remove using namespace quickfix: Don't insert inline namespaces

Change-Id: If386d31de723ca928d3c50f55e32205c50937b0a
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
Leander Schulten
2020-11-18 21:53:51 +01:00
parent bb9ca6227c
commit 993b614d94
4 changed files with 70 additions and 11 deletions

View File

@@ -60,15 +60,22 @@ static void addNames(const Name *name, QList<const Name *> *names, bool addAllNa
}
}
static void path_helper(Symbol *symbol, QList<const Name *> *names)
static void path_helper(Symbol *symbol,
QList<const Name *> *names,
LookupContext::InlineNamespacePolicy policy)
{
if (! symbol)
return;
path_helper(symbol->enclosingScope(), names);
path_helper(symbol->enclosingScope(), names, policy);
if (symbol->name()) {
if (symbol->isClass() || symbol->isNamespace()) {
if (policy == LookupContext::HideInlineNamespaces) {
auto ns = symbol->asNamespace();
if (ns && ns->isInline())
return;
}
addNames(symbol->name(), names);
} else if (symbol->isObjCClass() || symbol->isObjCBaseClass() || symbol->isObjCProtocol()
@@ -206,17 +213,17 @@ LookupContext &LookupContext::operator=(const LookupContext &other)
return *this;
}
QList<const Name *> LookupContext::fullyQualifiedName(Symbol *symbol)
QList<const Name *> LookupContext::fullyQualifiedName(Symbol *symbol, InlineNamespacePolicy policy)
{
QList<const Name *> qualifiedName = path(symbol->enclosingScope());
QList<const Name *> qualifiedName = path(symbol->enclosingScope(), policy);
addNames(symbol->name(), &qualifiedName, /*add all names*/ true);
return qualifiedName;
}
QList<const Name *> LookupContext::path(Symbol *symbol)
QList<const Name *> LookupContext::path(Symbol *symbol, InlineNamespacePolicy policy)
{
QList<const Name *> names;
path_helper(symbol, &names);
path_helper(symbol, &names, policy);
return names;
}

View File

@@ -314,8 +314,11 @@ public:
QSharedPointer<CreateBindings> bindings() const
{ return _bindings; }
static QList<const Name *> fullyQualifiedName(Symbol *symbol);
static QList<const Name *> path(Symbol *symbol);
enum InlineNamespacePolicy { ShowInlineNamespaces, HideInlineNamespaces };
static QList<const Name *> fullyQualifiedName(
Symbol *symbol, InlineNamespacePolicy policy = ShowInlineNamespaces);
static QList<const Name *> path(Symbol *symbol,
InlineNamespacePolicy policy = ShowInlineNamespaces);
static const Name *minimalName(Symbol *symbol, ClassOrNamespace *target, Control *control);