diff options
author | Marcelo Lira <marcelo.lira@openbossa.org> | 2010-05-31 15:51:33 -0300 |
---|---|---|
committer | Hugo Parente Lima <hugo.pl@gmail.com> | 2012-03-09 19:10:04 -0300 |
commit | bf5dbc2df39d014860a21884f55209ace04d2846 (patch) | |
tree | d42a72131a58c8da3ffc133d807d6457993d9080 /apiextractor.cpp | |
parent | 0ae936e54e7f5e6a57db75dccfc8aa23b83fe6ef (diff) |
Added methods ApiExtractor::findAbstractMetaEnum.
The new methods returns an AbstractMetaEnum for a given TypeEntry,
EnumTypeEntry, FlagsTypeEntry or AbstractMetaType.
Diffstat (limited to 'apiextractor.cpp')
-rw-r--r-- | apiextractor.cpp | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/apiextractor.cpp b/apiextractor.cpp index 2a44d56b3..a8fe38b4d 100644 --- a/apiextractor.cpp +++ b/apiextractor.cpp @@ -143,6 +143,59 @@ QSet<QString> ApiExtractor::qtMetaTypeDeclaredTypeNames() const return m_builder->qtMetaTypeDeclaredTypeNames(); } +static const AbstractMetaEnum* findEnumOnClasses(AbstractMetaClassList metaClasses, const EnumTypeEntry* typeEntry) +{ + const AbstractMetaEnum* result = 0; + foreach (const AbstractMetaClass* metaClass, metaClasses) { + foreach (const AbstractMetaEnum* metaEnum, metaClass->enums()) { + if (metaEnum->typeEntry() == typeEntry) { + result = metaEnum; + break; + } + } + if (result) + break; + result = findEnumOnClasses(metaClass->innerClasses(), typeEntry); + } + return result; +} + +const AbstractMetaEnum* ApiExtractor::findAbstractMetaEnum(const EnumTypeEntry* typeEntry) const +{ + if (!typeEntry) + return 0; + foreach (AbstractMetaEnum* metaEnum, m_builder->globalEnums()) { + if (metaEnum->typeEntry() == typeEntry) + return metaEnum; + } + return findEnumOnClasses(m_builder->classes(), typeEntry); +} + +const AbstractMetaEnum* ApiExtractor::findAbstractMetaEnum(const TypeEntry* typeEntry) const +{ + if (!typeEntry) + return 0; + if (typeEntry->isFlags()) + return findAbstractMetaEnum(reinterpret_cast<const FlagsTypeEntry*>(typeEntry)); + if (typeEntry->isEnum()) + return findAbstractMetaEnum(reinterpret_cast<const EnumTypeEntry*>(typeEntry)); + return 0; +} + +const AbstractMetaEnum* ApiExtractor::findAbstractMetaEnum(const FlagsTypeEntry* typeEntry) const +{ + if (!typeEntry) + return 0; + return findAbstractMetaEnum(typeEntry->originator()); +} + +const AbstractMetaEnum* ApiExtractor::findAbstractMetaEnum(const AbstractMetaType* metaType) const +{ + if (!metaType) + return 0; + return findAbstractMetaEnum(metaType->typeEntry()); +} + int ApiExtractor::classCount() const { Q_ASSERT(m_builder); |