Browse Source

Fix repeated message ordering

- Move repeated messages declaration to upper part of generated
  file
- Fix few issues with messages naming
- Update and implement tests
Alexey Edelev 5 năm trước cách đây
mục cha
commit
7455ee1ea4

+ 2 - 2
src/generator/classgeneratorbase.cpp

@@ -151,10 +151,10 @@ std::string ClassGeneratorBase::getTypeName(const FieldDescriptor *field, const
     if (field->type() == FieldDescriptor::TYPE_MESSAGE) {
         const Descriptor *msg = field->message_type();
         namespaceTypeName = getNamespacesList(msg, typeNamespace, mNamespacesColonDelimited);
-        typeName = namespaceTypeName.append(msg->name());
+        typeName = namespaceTypeName.append(utils::upperCaseName(msg->name()));
 
         if (field->is_map()) {
-            return mClassName + "::" + utils::upperCaseName(field->message_type()->name());
+            return mClassName + "::" + utils::upperCaseName(msg->name());
         }
         if (field->is_repeated()) {
             return namespaceTypeName.append(Templates::ListSuffix);

+ 0 - 1
src/generator/protobufclassgenerator.cpp

@@ -296,7 +296,6 @@ void ProtobufClassGenerator::printProperties()
 void ProtobufClassGenerator::printListType()
 {
     mPrinter->Print({{"classname", mClassName}}, Templates::ComplexListTypeUsingTemplate);
-
 }
 
 void ProtobufClassGenerator::printClassMembers()

+ 3 - 2
src/generator/singlefilegenerator.cpp

@@ -136,7 +136,9 @@ bool SingleFileGenerator::GenerateMessages(const ::google::protobuf::FileDescrip
     }
 
     iterateNonNestedFileds(file, [&outHeaderPrinter](const ::google::protobuf::Descriptor *message){
-        outHeaderPrinter->Print({{"classname", message->name()}}, Templates::ProtoClassDeclarationTemplate);
+        std::string qualifiedClassName = utils::upperCaseName(message->name());
+        outHeaderPrinter->Print({{"classname", qualifiedClassName}}, Templates::ProtoClassDeclarationTemplate);
+        outHeaderPrinter->Print({{"classname", qualifiedClassName}}, Templates::ComplexListTypeUsingTemplate);
     });
 
     for (size_t i = 0; i < namespaces.size(); i++) {
@@ -155,7 +157,6 @@ bool SingleFileGenerator::GenerateMessages(const ::google::protobuf::FileDescrip
         classGen.printPublic();
         classGen.printDestructor();
         classGen.encloseClass();
-        classGen.printListType();
         classGen.encloseNamespaces();
         classGen.printMetaTypeDeclaration();
         classGen.printMapsMetaTypesDeclaration();

+ 25 - 0
tests/test_protobuf/proto/sequencetest.proto

@@ -17,3 +17,28 @@ message CyclingSecondDependency {
 message CyclingFirstDependency {
     CyclingSecondDependency testField = 1;
 }
+
+message RepeatedFieldSequence {
+    repeated RepeatedFieldSequence2 testField = 1;
+}
+
+message RepeatedFieldSequence2 {
+    bool testField = 1;
+}
+
+message MapFieldSequence {
+    map<uint32, MapFieldSequence2> testField = 1;
+}
+
+message MapFieldSequence2 {
+    bool testField = 1;
+}
+
+message lowerCaseSequence {
+    lowerCaseSequence2 testField = 1;
+}
+
+message lowerCaseSequence2 {
+    bool testField = 1;
+}
+

+ 4 - 0
tests/test_protobuf/proto/simpletest.proto

@@ -626,3 +626,7 @@ message lowerCaseMessageName {
     sint32 testField = 1;
 }
 
+message LowerCaseFieldMessageName {
+    lowerCaseMessageName testField = 1;
+}
+

+ 7 - 0
tests/test_protobuf/simpletest.cpp.inc

@@ -64,6 +64,7 @@ void SimpleTest::SetUpTestCase()
     qtprotobufnamespace::tests::qRegisterProtobufTypes();
     qtprotobufnamespace1::externaltests::qRegisterProtobufTypes();
     qtprotobufnamespace::tests::globalenums::qRegisterProtobufTypes();
+    qtprotobufnamespace::tests::sequence::qRegisterProtobufTypes();
 }
 
 TEST_F(SimpleTest, SimpleBoolMessageTest)
@@ -836,5 +837,11 @@ TEST_F(SimpleTest, LowerCaseEnumTest)
     ASSERT_STREQ(simpleEnum.key(2), "EnumValue2");
 }
 
+TEST_F(SimpleTest, MapRepeatedFieldSequenceTest)
+{
+    assertMessagePropertyRegistered<sequence::RepeatedFieldSequence, sequence::RepeatedFieldSequence2Repeated>(1, "RepeatedFieldSequence2Repeated", "testField");
+    assertMessagePropertyRegistered<sequence::MapFieldSequence, sequence::MapFieldSequence::TestFieldEntry>(1, "MapFieldSequence::TestFieldEntry", "testField");
+}
+
 } // tests
 } // qtprotobuf

+ 8 - 0
tests/test_protobuf_multifile/simpletest.cpp

@@ -77,6 +77,14 @@
 #include "messageuppercasereserved.h"
 #include "messagereserved.h"
 #include "messageenumreserved.h"
+#include "repeatedfieldsequence.h"
+#include "repeatedfieldsequence2.h"
+#include "mapfieldsequence.h"
+#include "mapfieldsequence2.h"
+#include "lowercasesequence.h"
+#include "lowercasesequence2.h"
+#include "lowercasemessagename.h"
+#include "lowercasefieldmessagename.h"
 
 #include "globalenums.h"