28 #include <unordered_map>
30 #include <google/protobuf/descriptor.h>
32 namespace QtProtobuf {
42 static const std::vector<std::string> ListOfQmlExeptions;
43 static const char *ProtoSufix;
44 static const char *DefaultProtobufIncludesTemplate;
45 static const char *QmlProtobufIncludesTemplate;
46 static const char *GlobalEnumClassNameTemplate;
47 static const char *PreambleTemplate;
48 static const char *DisclaimerTemplate;
49 static const char *InternalIncludeTemplate;
50 static const char *ExternalIncludeTemplate;
51 static const char *GlobalEnumIncludeTemplate;
52 static const char *UsingQtProtobufNamespaceTemplate;
53 static const char *ManualRegistrationDeclaration;
54 static const char *ManualRegistrationComplexTypeDefinition;
55 static const char *ManualRegistrationGlobalEnumDefinition;
56 static const char *ComplexGlobalEnumFieldRegistrationTemplate;
57 static const char *ComplexListTypeUsingTemplate;
58 static const char *MapTypeUsingTemplate;
59 static const char *MessageMapTypeUsingTemplate;
60 static const char *NestedMessageUsingTemplate;
61 static const char *EnumTypeRepeatedTemplate;
62 static const char *NamespaceTemplate;
63 static const char *UsingNamespaceTemplate;
64 static const char *ClassDeclarationTemplate;
65 static const char *ProtoClassForwardDeclarationTemplate;
66 static const char *ProtoClassDeclarationBeginTemplate;
67 static const char *ConstructorHeaderTemplate;
68 static const char *ClassDefinitionTemplate;
69 static const char *QObjectMacro;
71 static const char *PropertyTemplate;
72 static const char *RepeatedPropertyTemplate;
73 static const char *NonScriptablePropertyTemplate;
74 static const char *NonScriptableAliasPropertyTemplate;
75 static const char *MessagePropertyTemplate;
76 static const char *QmlListPropertyTemplate;
78 static const char *ConstructorParameterTemplate;
79 static const char *ConstructorMessageParameterTemplate;
80 static const char *ConstructorRepeatedParameterTemplate;
81 static const char *ProtoConstructorBeginTemplate;
82 static const char *ProtoConstructorEndTemplate;
84 static const char *ConstructorParameterDefinitionTemplate;
85 static const char *ConstructorMessageParameterDefinitionTemplate;
86 static const char *ConstructorRepeatedParameterDefinitionTemplate;
88 static const char *ProtoConstructorDefinitionBeginTemplate;
89 static const char *ProtoConstructorDefinitionEndTemplate;
91 static const char *MemberTemplate;
92 static const char *ListMemberTemplate;
93 static const char *ComplexMemberTemplate;
94 static const char *PublicBlockTemplate;
95 static const char *PrivateBlockTemplate;
96 static const char *EnumDefinitionTemplate;
97 static const char *EnumFieldTemplate;
98 static const char *ConstructorTemplate;
99 static const char *QObjectConstructorTemplate;
100 static const char *CopyConstructorDeclarationTemplate;
101 static const char *MoveConstructorDeclarationTemplate;
102 static const char *CopyConstructorDefinitionTemplate;
103 static const char *MoveConstructorDefinitionTemplate;
104 static const char *EmptyCopyConstructorDefinitionTemplate;
105 static const char *EmptyMoveConstructorDefinitionTemplate;
106 static const char *DeletedCopyConstructorTemplate;
107 static const char *DeletedMoveConstructorTemplate;
108 static const char *CopyFieldTemplate;
109 static const char *CopyComplexFieldTemplate;
110 static const char *AssignComplexFieldTemplate;
111 static const char *MoveMessageFieldTemplate;
112 static const char *MoveAssignMessageFieldTemplate;
113 static const char *MoveComplexFieldTemplate;
114 static const char *MoveComplexFieldConstructorTemplate;
115 static const char *MoveFieldTemplate;
116 static const char *EnumMoveFieldTemplate;
117 static const char *AssignmentOperatorDeclarationTemplate;
118 static const char *AssignmentOperatorDefinitionTemplate;
119 static const char *EmptyAssignmentOperatorDefinitionTemplate;
120 static const char *AssignmentOperatorReturnTemplate;
121 static const char *MoveAssignmentOperatorDeclarationTemplate;
122 static const char *MoveAssignmentOperatorDefinitionTemplate;
123 static const char *EmptyMoveAssignmentOperatorDefinitionTemplate;
124 static const char *EqualOperatorDeclarationTemplate;
125 static const char *EqualOperatorDefinitionTemplate;
126 static const char *EmptyEqualOperatorDefinitionTemplate;
127 static const char *EqualOperatorPropertyTemplate;
128 static const char *EqualOperatorMessagePropertyTemplate;
129 static const char *NotEqualOperatorDeclarationTemplate;
130 static const char *NotEqualOperatorDefinitionTemplate;
131 static const char *GetterPrivateMessageDeclarationTemplate;
132 static const char *GetterPrivateMessageDefinitionTemplate;
133 static const char *GetterMessageDeclarationTemplate;
134 static const char *GetterMessageDefinitionTemplate;
135 static const char *GetterTemplate;
136 static const char *NonScriptableGetterTemplate;
137 static const char *GetterContainerExtraTemplate;
138 static const char *GetterQmlListDeclarationTemplate;
139 static const char *GetterQmlListDefinitionTemplate;
140 static const char *SetterPrivateTemplateDeclarationMessageType;
141 static const char *SetterPrivateTemplateDefinitionMessageType;
142 static const char *SetterTemplateDeclarationMessageType;
143 static const char *SetterTemplateDefinitionMessageType;
144 static const char *SetterTemplateDeclarationComplexType;
145 static const char *SetterTemplateDefinitionComplexType;
146 static const char *SetterTemplate;
147 static const char *NonScriptableSetterTemplate;
148 static const char *SignalsBlockTemplate;
149 static const char *SignalTemplate;
150 static const char *FieldsOrderingContainerTemplate;
151 static const char *FieldOrderTemplate;
152 static const char *EnumTemplate;
153 static const char *SimpleBlockEnclosureTemplate;
154 static const char *SemicolonBlockEnclosureTemplate;
155 static const char *EmptyBlockTemplate;
156 static const char *PropertyInitializerTemplate;
157 static const char *PropertyDefaultInitializerTemplate;
158 static const char *MessagePropertyInitializerTemplate;
159 static const char *MessagePropertyDefaultInitializerTemplate;
160 static const char *ConstructorContentTemplate;
161 static const char *DeclareMetaTypeTemplate;
162 static const char *DeclareMetaTypeListTemplate;
163 static const char *DeclareMessageMetaTypeTemplate;
164 static const char *DeclareComplexListTypeTemplate;
165 static const char *DeclareComplexQmlListTypeTemplate;
166 static const char *DeclareMetaTypeMapTemplate;
167 static const char *RegisterLocalEnumTemplate;
168 static const char *RegisterMapTemplate;
169 static const char *RegisterMetaTypeTemplate;
170 static const char *RegisterGlobalEnumMetaTypeTemplate;
171 static const char *RegisterMetaTypeTemplateNoNamespace;
172 static const char *RegisterQmlListPropertyMetaTypeTemplate;
173 static const char *QEnumTemplate;
174 static const char *RegisterSerializersTemplate;
175 static const char *RegisterEnumSerializersTemplate;
176 static const char *RegistrarTemplate;
177 static const char *EnumRegistrarTemplate;
178 static const char *QmlRegisterTypeTemplate;
179 static const char *QmlRegisterTypeUncreatableTemplate;
180 static const char *QmlRegisterEnumTypeTemplate;
182 static const char *ClientConstructorDefinitionTemplate;
184 static const char *ClientMethodDeclarationSyncTemplate;
185 static const char *ClientMethodDeclarationAsyncTemplate;
186 static const char *ClientMethodDeclarationAsync2Template;
187 static const char *ClientMethodDeclarationQmlTemplate;
188 static const char *ClientMethodDeclarationQml2Template;
190 static const char *ServerMethodDeclarationTemplate;
192 static const char *ClientMethodDefinitionSyncTemplate;
193 static const char *ClientMethodDefinitionAsyncTemplate;
194 static const char *ClientMethodDefinitionAsync2Template;
195 static const char *ClientMethodDefinitionQmlTemplate;
196 static const char *ClientMethodDefinitionQml2Template;
199 static const char *ClientMethodSignalDeclarationTemplate;
200 static const char *ClientMethodServerStreamDeclarationTemplate;
201 static const char *ClientMethodServerStream2DeclarationTemplate;
202 static const char *ClientMethodServerStreamQmlDeclarationTemplate;
203 static const char *ClientMethodServerStreamDefinitionTemplate;
204 static const char *ClientMethodServerStream2DefinitionTemplate;
205 static const char *ClientMethodServerStreamQmlDefinitionTemplate;
207 static const char *ListSuffix;
208 static const char *ProtoFileSuffix;
209 static const char *GrpcFileSuffix;
210 static const char *EnumClassSuffix;
212 static const std::unordered_map<::google::protobuf::FieldDescriptor::Type, std::string> TypeReflection;
214 static const char *QtProtobufNamespace;
215 static const char *QtProtobufNestedNamespace;
217 static const char *FieldEnumTemplate;
218 static const char *FieldNumberTemplate;
219 static const char *QtProtobufFieldEnum;