Mercurial > projects > qtd
changeset 341:4920ef9206fe
moved enums into interfaces
author | Max Samukha <maxter@spambox.com> |
---|---|
date | Thu, 13 May 2010 16:39:41 +0300 |
parents | 9fc85d7280ba |
children | c887282e1590 |
files | generator/dgenerator.cpp generator/dgenerator.h generator/typesystem.cpp |
diffstat | 3 files changed, 33 insertions(+), 23 deletions(-) [+] |
line wrap: on
line diff
--- a/generator/dgenerator.cpp Mon May 10 13:29:50 2010 +0300 +++ b/generator/dgenerator.cpp Thu May 13 16:39:41 2010 +0300 @@ -286,23 +286,23 @@ s << " } // end of enum " << d_enum->name() << endl << endl; } -void DGenerator::writeEnumAlias(QTextStream &s, const AbstractMetaEnum *d_enum) +void DGenerator::writeEnumAliases(QTextStream &s, const AbstractMetaEnum *d_enum) { - // aliases for enums to be used in easier way like QFont.Bold instead of QFont.Weight.Bold - //s << QString(" alias %1 %2;").arg(d_enum->typeEntry()->qualifiedTargetLangName()).arg(d_enum->name()) << endl << endl; + FlagsTypeEntry *flags = d_enum->typeEntry()->flags(); + if (flags) + s << INDENT << "alias " << d_enum->name() << " " << flags->targetLangName() << ";" << endl << endl; + const AbstractMetaEnumValueList &values = d_enum->values(); for (int i=0; i<values.size(); ++i) { AbstractMetaEnumValue *enum_value = values.at(i); - if (d_enum->typeEntry()->isEnumValueRejected(enum_value->name())) - continue; - - s << QString(" alias %1.%2 %2;").arg(d_enum->name()).arg(enum_value->name()) << endl; + if (!d_enum->typeEntry()->isEnumValueRejected(enum_value->name())) + s << INDENT << QString("alias %1.%2 %2;").arg(d_enum->name()).arg(enum_value->name()) << endl; } s << endl; } -void DGenerator::writeEnum(QTextStream &s, const AbstractMetaEnum *d_enum) +void DGenerator::writeEnum(QTextStream &s, const AbstractMetaEnum *d_enum, bool withAliases) { if (m_doc_parser) { s << m_doc_parser->documentation(d_enum); @@ -322,11 +322,13 @@ } */ // Generates Java 1.5 type enums - s << "public enum " << d_enum->name() << " {" << endl; + s << INDENT << "public enum " << d_enum->name() << " {" << endl; const AbstractMetaEnumValueList &values = d_enum->values(); EnumTypeEntry *entry = d_enum->typeEntry(); + for (int i=0; i<values.size(); ++i) { + Indentation indent(INDENT); AbstractMetaEnumValue *enum_value = values.at(i); if (d_enum->typeEntry()->isEnumValueRejected(enum_value->name())) @@ -335,7 +337,7 @@ if (m_doc_parser) s << m_doc_parser->documentation(enum_value); - s << " " << enum_value->name() << " = " << enum_value->value(); + s << INDENT << enum_value->name() << " = " << enum_value->value(); if (i != values.size() - 1) { AbstractMetaEnumValue *next_value = values.at(i+1); // qtd @@ -418,6 +420,9 @@ QString flagsName = flags_entry->targetLangName(); s << INDENT << "alias QFlags!(" << d_enum->name() << ") " << flagsName << ";" << endl << endl; }*/ + + if (withAliases) + writeEnumAliases(s, d_enum); } void DGenerator::writePrivateNativeFunction(QTextStream &s, const AbstractMetaFunction *d_function) @@ -894,7 +899,7 @@ s << INDENT << "this." << function_call_for_ownership(owner) << ";" << endl; } - // return value marschalling + // return value marshalling if(return_type) { if (!returnImmediately) { s << INDENT; @@ -1785,8 +1790,6 @@ << INDENT << "string " << arg_name << " = QStringUtil.toNativeString(" << arg_name << "_ptr);"; } else if(type->isPrimitive() || type->isEnum() || type->isFlags() || type->typeEntry()->isStructInD()) { QString type_name = argument->type()->typeEntry()->qualifiedTargetLangName(); - if (type->isFlags()) - type_name = "int"; s << INDENT << "auto " << arg_name << " = *(cast(" << type_name << "*)" << arg_ptr << ");"; } else if(type->isObject() || type->isQObject() || (type->typeEntry()->isValue() && type->isNativePointer()) @@ -2107,9 +2110,15 @@ Indentation indent(INDENT); // Enums - if (!d_class->enums().isEmpty()) { + if (!d_class->typeEntry()->designatedInterface() && !d_class->enums().isEmpty()) { foreach (AbstractMetaEnum *d_enum, d_class->enums()) - writeEnum(s, d_enum); + writeEnum(s, d_enum, true); + } + + // Enums in designated interfaces + if (d_class->isInterface() && d_class->primaryInterfaceImplementor()) { + foreach (AbstractMetaEnum *d_enum, d_class->primaryInterfaceImplementor()->enums()) + writeEnum(s, d_enum, true); } // Define variables for reference count mechanism @@ -2198,10 +2207,6 @@ } */ - // Enums aliases - foreach (AbstractMetaEnum *d_enum, d_class->enums()) - writeEnumAlias(s, d_enum); - // Signals if (d_class->isQObject()) { @@ -2603,7 +2608,6 @@ m_isRecursive = false; } - if (d_class->isQObject()) writeQObjectFreeFunctions(s, d_class);
--- a/generator/dgenerator.h Mon May 10 13:29:50 2010 +0300 +++ b/generator/dgenerator.h Thu May 13 16:39:41 2010 +0300 @@ -47,6 +47,7 @@ #include "cppimplgenerator.h" #include <QTextStream> +#include <QStack> class DocParser; @@ -69,7 +70,7 @@ static QString argumentString(const AbstractMetaFunction *d_function, const AbstractMetaArgument *d_argument, uint options = 0); - void writeEnum(QTextStream &s, const AbstractMetaEnum *d_enum); + void writeEnum(QTextStream &s, const AbstractMetaEnum *d_enum, bool withAliases = false); void writeIntegerEnum(QTextStream &s, const AbstractMetaEnum *d_enum); void writeSignal(QTextStream &s, const AbstractMetaFunction *d_function); void writeFunction(QTextStream &s, const AbstractMetaFunction *d_function, @@ -154,7 +155,7 @@ void writeDestructor(QTextStream &s, const AbstractMetaClass *d_class); void writeFlagsSetter(QTextStream &s, const AbstractMetaClass *d_class); void writeSignalHandlers(QTextStream &s, const AbstractMetaClass *d_class); - void writeEnumAlias(QTextStream &s, const AbstractMetaEnum *d_enum); + void writeEnumAliases(QTextStream &s, const AbstractMetaEnum *d_enum); void writeSignalSignatures(QTextStream &s, const AbstractMetaClass *d_class, AbstractMetaFunctionList signal_funcs); void writeMetaMethodArguments(QTextStream &s, const AbstractMetaFunction *d_function, int reduce = -1); void writeQObjectFunctions(QTextStream &s, const AbstractMetaClass *d_class); @@ -167,6 +168,7 @@ int m_recursive; bool m_isRecursive; + QStack<const AbstractMetaClass*> m_recursionStack; QSet<const TypeEntry*> typeEntries; // imports QSet<const TypeEntry*> typeEntriesEnums; // imports for enums QSet<QString> excludedTypes2;
--- a/generator/typesystem.cpp Mon May 10 13:29:50 2010 +0300 +++ b/generator/typesystem.cpp Thu May 13 16:39:41 2010 +0300 @@ -1720,8 +1720,12 @@ QString EnumTypeEntry::javaQualifier() const { TypeEntry *te = TypeDatabase::instance()->findType(m_qualifier); - if (te != 0) + if (te != 0) { + if (te->designatedInterface()) + te = te->designatedInterface(); + return te->targetLangName(); + } else return m_qualifier; }