From f1987763b81d4a73063ebbd494dd3d09fef6383d Mon Sep 17 00:00:00 2001 From: Marcelo Lira Date: Thu, 30 Sep 2010 10:50:04 -0300 Subject: Private enums are now accepted in the type system database. This is done to allow enum value evaluation. Comes together with a nice test. --- abstractmetabuilder.cpp | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) (limited to 'abstractmetabuilder.cpp') diff --git a/abstractmetabuilder.cpp b/abstractmetabuilder.cpp index 50a0e6576..47c8e4843 100644 --- a/abstractmetabuilder.cpp +++ b/abstractmetabuilder.cpp @@ -894,14 +894,18 @@ void AbstractMetaBuilder::figureOutDefaultEnumArguments() AbstractMetaEnum* AbstractMetaBuilder::traverseEnum(EnumModelItem enumItem, AbstractMetaClass* enclosing, const QSet &enumsDeclarations) { - // Skipping private enums. - if (enumItem->accessPolicy() == CodeModel::Private) - return 0; - QString qualifiedName = enumItem->qualifiedName().join("::"); TypeEntry* typeEntry = 0; - if (!enumItem->isAnonymous()) { + if (enumItem->accessPolicy() == CodeModel::Private) { + QStringList names = enumItem->qualifiedName(); + QString enumName = names.last(); + QString nspace; + if (names.size() > 1) + nspace = QStringList(names.mid(0, names.size() - 1)).join("::"); + typeEntry = new EnumTypeEntry(nspace, enumName, 0); + TypeDatabase::instance()->addType(typeEntry); + } else if (!enumItem->isAnonymous()) { typeEntry = TypeDatabase::instance()->findType(qualifiedName); } else { QStringList tmpQualifiedName = enumItem->qualifiedName(); @@ -950,7 +954,7 @@ AbstractMetaEnum* AbstractMetaBuilder::traverseEnum(EnumModelItem enumItem, Abst switch (enumItem->accessPolicy()) { case CodeModel::Public: *metaEnum += AbstractMetaAttributes::Public; break; case CodeModel::Protected: *metaEnum += AbstractMetaAttributes::Protected; break; -// case CodeModel::Private: *meta_enum += AbstractMetaAttributes::Private; break; + case CodeModel::Private: *metaEnum += AbstractMetaAttributes::Private; break; default: break; } @@ -983,7 +987,6 @@ AbstractMetaEnum* AbstractMetaBuilder::traverseEnum(EnumModelItem enumItem, Abst metaEnum->setOriginalAttributes(metaEnum->attributes()); // Register all enum values on Type database - TypeDatabase* typeDb = TypeDatabase::instance(); foreach(EnumeratorModelItem e, enumItem->enumerators()) { QString name; if (enclosing) { @@ -992,7 +995,7 @@ AbstractMetaEnum* AbstractMetaBuilder::traverseEnum(EnumModelItem enumItem, Abst } name += e->name(); EnumValueTypeEntry* enumValue = new EnumValueTypeEntry(name, e->value(), static_cast(typeEntry), typeEntry->version()); - typeDb->addType(enumValue); + TypeDatabase::instance()->addType(enumValue); } return metaEnum; -- cgit v1.2.3