forked from qt-creator/qt-creator
C++: refactoring: extract finding anonymous as nested type
Change-Id: I73d50d7b51e6a4e9d2b20df487f871793a6a6889 Reviewed-by: Przemyslaw Gorszkowski <pgorszkowski@gmail.com> Reviewed-by: Nikolai Kosjar <nikolai.kosjar@digia.com>
This commit is contained in:
committed by
Nikolai Kosjar
parent
f08ff20e94
commit
29532a6971
@@ -994,6 +994,22 @@ ClassOrNamespace *ClassOrNamespace::findSpecialization(const TemplateNameId *tem
|
||||
return 0;
|
||||
}
|
||||
|
||||
ClassOrNamespace *ClassOrNamespace::findOrCreateNestedAnonymousType(
|
||||
const AnonymousNameId *anonymousNameId)
|
||||
{
|
||||
QHash<const AnonymousNameId *, ClassOrNamespace *>::const_iterator cit
|
||||
= _anonymouses.find(anonymousNameId);
|
||||
if (cit != _anonymouses.end()) {
|
||||
return cit.value();
|
||||
} else {
|
||||
ClassOrNamespace *newAnonymous = _factory->allocClassOrNamespace(this);
|
||||
if (Q_UNLIKELY(debug))
|
||||
newAnonymous->_name = anonymousNameId;
|
||||
_anonymouses[anonymousNameId] = newAnonymous;
|
||||
return newAnonymous;
|
||||
}
|
||||
}
|
||||
|
||||
ClassOrNamespace *ClassOrNamespace::nestedType(const Name *name, ClassOrNamespace *origin)
|
||||
{
|
||||
Q_ASSERT(name != 0);
|
||||
@@ -1001,20 +1017,8 @@ ClassOrNamespace *ClassOrNamespace::nestedType(const Name *name, ClassOrNamespac
|
||||
|
||||
const_cast<ClassOrNamespace *>(this)->flush();
|
||||
|
||||
const AnonymousNameId *anonymousNameId = name->asAnonymousNameId();
|
||||
if (anonymousNameId) {
|
||||
QHash<const AnonymousNameId *, ClassOrNamespace *>::const_iterator cit
|
||||
= _anonymouses.find(anonymousNameId);
|
||||
if (cit != _anonymouses.end()) {
|
||||
return cit.value();
|
||||
} else {
|
||||
ClassOrNamespace *newAnonymous = _factory->allocClassOrNamespace(this);
|
||||
if (Q_UNLIKELY(debug))
|
||||
newAnonymous->_name = anonymousNameId;
|
||||
_anonymouses[anonymousNameId] = newAnonymous;
|
||||
return newAnonymous;
|
||||
}
|
||||
}
|
||||
if (const AnonymousNameId *anonymousNameId = name->asAnonymousNameId())
|
||||
return findOrCreateNestedAnonymousType(anonymousNameId);
|
||||
|
||||
Table::const_iterator it = _classOrNamespaces.find(name);
|
||||
if (it == _classOrNamespaces.end())
|
||||
|
||||
@@ -105,6 +105,8 @@ private:
|
||||
ClassOrNamespace *findOrCreateType(const Name *name, ClassOrNamespace *origin = 0,
|
||||
Class *clazz = 0);
|
||||
|
||||
ClassOrNamespace *findOrCreateNestedAnonymousType(const AnonymousNameId *anonymousNameId);
|
||||
|
||||
void addTodo(Symbol *symbol);
|
||||
void addSymbol(Symbol *symbol);
|
||||
void addUnscopedEnum(Enum *e);
|
||||
|
||||
Reference in New Issue
Block a user