aboutsummaryrefslogtreecommitdiffstats
path: root/abstractmetabuilder.cpp
diff options
context:
space:
mode:
authorMarcelo Lira <marcelo.lira@openbossa.org>2010-09-30 10:50:04 -0300
committerHugo Parente Lima <hugo.pl@gmail.com>2012-03-09 19:10:11 -0300
commitf1987763b81d4a73063ebbd494dd3d09fef6383d (patch)
tree56a2809442f697abeb5ec2b1f922ff1c7922a9b6 /abstractmetabuilder.cpp
parent7c1048b86bc76e68f728e4819fe832d17276bfe6 (diff)
Private enums are now accepted in the type system database.
This is done to allow enum value evaluation. Comes together with a nice test.
Diffstat (limited to 'abstractmetabuilder.cpp')
-rw-r--r--abstractmetabuilder.cpp19
1 files changed, 11 insertions, 8 deletions
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<QString> &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<EnumTypeEntry*>(typeEntry), typeEntry->version());
- typeDb->addType(enumValue);
+ TypeDatabase::instance()->addType(enumValue);
}
return metaEnum;