From bf5dbc2df39d014860a21884f55209ace04d2846 Mon Sep 17 00:00:00 2001 From: Marcelo Lira Date: Mon, 31 May 2010 15:51:33 -0300 Subject: Added methods ApiExtractor::findAbstractMetaEnum. The new methods returns an AbstractMetaEnum for a given TypeEntry, EnumTypeEntry, FlagsTypeEntry or AbstractMetaType. --- apiextractor.cpp | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) (limited to 'apiextractor.cpp') diff --git a/apiextractor.cpp b/apiextractor.cpp index 2a44d56b3..a8fe38b4d 100644 --- a/apiextractor.cpp +++ b/apiextractor.cpp @@ -143,6 +143,59 @@ QSet 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(typeEntry)); + if (typeEntry->isEnum()) + return findAbstractMetaEnum(reinterpret_cast(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); -- cgit v1.2.3