diff options
author | Marcelo Lira <marcelo.lira@openbossa.org> | 2010-12-22 14:58:37 -0300 |
---|---|---|
committer | Hugo Parente Lima <hugo.pl@gmail.com> | 2012-03-08 16:12:50 -0300 |
commit | bda44c2851c04183e1e92dccf9a43b949d0b2b0b (patch) | |
tree | c653238f1d006320a6579f6e086c71663158bdad /generator/shibokengenerator.cpp | |
parent | 2e4e0d4e91c561986a96a08b0dbee53984811155 (diff) |
Added support for promoting enums from removed namespaces to upper scope.
Classes in namespaces marked not to be generated are always moved to
upper scopes, the current modification add this same behaviour to enums.
Tests were also added.
Reviewed by Lauro Moura <lauro.neto@openbossa.org>
Reviewed by Renato Araújo <renato.filho@openbossa.org>
Diffstat (limited to 'generator/shibokengenerator.cpp')
-rw-r--r-- | generator/shibokengenerator.cpp | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/generator/shibokengenerator.cpp b/generator/shibokengenerator.cpp index 697c89e58..2647e634b 100644 --- a/generator/shibokengenerator.cpp +++ b/generator/shibokengenerator.cpp @@ -216,6 +216,38 @@ bool ShibokenGenerator::shouldGenerateCppWrapper(const AbstractMetaClass* metaCl return result && !metaClass->isNamespace(); } +void ShibokenGenerator::lookForEnumsInClassesNotToBeGenerated(AbstractMetaEnumList& enumList, const AbstractMetaClass* metaClass) +{ + if (!metaClass) + return; + + if (metaClass->typeEntry()->codeGeneration() == TypeEntry::GenerateForSubclass) { + foreach (const AbstractMetaEnum* metaEnum, metaClass->enums()) { + if (metaEnum->isPrivate() || metaEnum->typeEntry()->codeGeneration() == TypeEntry::GenerateForSubclass) + continue; + if (!enumList.contains(const_cast<AbstractMetaEnum*>(metaEnum))) + enumList.append(const_cast<AbstractMetaEnum*>(metaEnum)); + } + lookForEnumsInClassesNotToBeGenerated(enumList, metaClass->enclosingClass()); + } +} + +static const AbstractMetaClass* getProperEnclosingClass(const AbstractMetaClass* metaClass) +{ + if (!metaClass) + return 0; + + if (metaClass->typeEntry()->codeGeneration() != TypeEntry::GenerateForSubclass) + return metaClass; + + return getProperEnclosingClass(metaClass->enclosingClass()); +} + +const AbstractMetaClass* ShibokenGenerator::getProperEnclosingClassForEnum(const AbstractMetaEnum* metaEnum) +{ + return getProperEnclosingClass(metaEnum->enclosingClass()); +} + QString ShibokenGenerator::wrapperName(const AbstractMetaClass* metaClass) { if (shouldGenerateCppWrapper(metaClass)) { |