Browse Source

Enum fields improvements and fixes

- Remove class namespace prefix from local enums Q_PROPERTY
  declaration
- Move simple types getter back to header files
- Add initialization of enum field
- Fix memory leak in addressbook
Alexey Edelev 5 years ago
parent
commit
79402b98d9

+ 1 - 0
examples/addressbook/addressbookengine.cpp

@@ -91,4 +91,5 @@ void AddressBookEngine::endCall()
 AddressBookEngine::~AddressBookEngine()
 {
     delete m_client;
+    delete m_contacts;
 }

+ 3 - 1
src/generator/classgeneratorbase.cpp

@@ -168,7 +168,9 @@ std::string ClassGeneratorBase::getTypeName(const FieldDescriptor *field, const
             if (field->is_repeated()) {
                 typeName = typeName.append(mClassName + "::" + enumType->name());
             } else {
-                typeName = typeName.append(mClassName + "::" + enumType->name());
+                //Note: For local enum classes it's impossible to use class name space in Q_PROPERTY
+                //declaration. So please avoid addition of mClassName in line bellow
+                typeName = typeName.append(enumType->name());
             }
         } else if (visibility == GLOBAL_ENUM) {
             namespaceTypeName = getNamespacesList(enumType, typeNamespace, "");

+ 1 - 1
src/generator/protobufclassgenerator.cpp

@@ -245,7 +245,7 @@ void ProtobufClassGenerator::printProperties()
             printField(mMessage, field, Templates::GetterPrivateMessageDeclarationTemplate);
             printField(mMessage, field, Templates::GetterMessageDeclarationTemplate);
         } else {
-            printField(mMessage, field, Templates::GetterDeclarationTemplate);
+            printField(mMessage, field, Templates::GetterTemplate);
         }
         if (field->is_repeated()) {
             printField(mMessage, field, Templates::GetterContainerExtraDeclarationTemplate);

+ 3 - 2
src/generator/protobufsourcegenerator.cpp

@@ -201,6 +201,9 @@ void ProtobufSourceGenerator::printConstructor()
                         case FieldDescriptor::TYPE_BOOL:
                             initializer = "false";
                             break;
+                        case FieldDescriptor::TYPE_ENUM:
+                            initializer = fieldTypeName + "::" + field->enum_type()->value(0)->name();
+                            break;
                         default:
                             break;
                         }
@@ -371,8 +374,6 @@ void ProtobufSourceGenerator::printGetters()
         if (field->type() == FieldDescriptor::TYPE_MESSAGE && !field->is_map() && !field->is_repeated()) {
                 printField(mMessage, field, Templates::GetterPrivateMessageDefinitionTemplate);
                 printField(mMessage, field, Templates::GetterMessageDefinitionTemplate);
-        } else {
-            printField(mMessage, field, Templates::GetterDefinitionTemplate);
         }
         if (field->is_repeated()) {
             printField(mMessage, field, Templates::GetterContainerExtraDefinitionTemplate);

+ 1 - 2
src/generator/templates.cpp

@@ -137,8 +137,7 @@ const char *Templates::GetterMessageDefinitionTemplate = "const $type$ &$classna
                                         "    return *m_$property_name$;\n"
                                         "}\n\n";
 
-const char *Templates::GetterDeclarationTemplate = "$type$ $property_name$() const;\n";
-const char *Templates::GetterDefinitionTemplate = "$type$ $classname$::$property_name$() const {\n"
+const char *Templates::GetterTemplate = "$type$ $property_name$() const {\n"
                                         "    return m_$property_name$;\n"
                                         "}\n\n";
 

+ 1 - 2
src/generator/templates.h

@@ -100,8 +100,7 @@ public:
     static const char *GetterPrivateMessageDefinitionTemplate;
     static const char *GetterMessageDeclarationTemplate;
     static const char *GetterMessageDefinitionTemplate;
-    static const char *GetterDeclarationTemplate;
-    static const char *GetterDefinitionTemplate;
+    static const char *GetterTemplate;
     static const char *GetterContainerExtraDeclarationTemplate;
     static const char *GetterContainerExtraDefinitionTemplate;
     static const char *GetterQmlListDeclarationTemplate;