浏览代码

Explicitly call superclass constructor in generated code to avoid pedantic warning. Based on patch from Oleg Smolsky.

kenton@google.com 16 年之前
父节点
当前提交
573989f782
共有 2 个文件被更改,包括 83 次插入40 次删除
  1. 11 4
      src/google/protobuf/compiler/cpp/cpp_message.cc
  2. 72 36
      src/google/protobuf/descriptor.pb.cc

+ 11 - 4
src/google/protobuf/compiler/cpp/cpp_message.cc

@@ -833,12 +833,17 @@ GenerateSharedDestructorCode(io::Printer* printer) {
 
 
 void MessageGenerator::
 void MessageGenerator::
 GenerateStructors(io::Printer* printer) {
 GenerateStructors(io::Printer* printer) {
+  string superclass = HasDescriptorMethods(descriptor_->file()) ?
+      "Message" : "MessageLite";
+  
   // Generate the default constructor.
   // Generate the default constructor.
   printer->Print(
   printer->Print(
-    "$classname$::$classname$() {\n"
+    "$classname$::$classname$()\n"
+    "  : $superclass$() {\n"
     "  SharedCtor();\n"
     "  SharedCtor();\n"
     "}\n",
     "}\n",
-    "classname", classname_);
+    "classname", classname_,
+    "superclass", superclass);
 
 
   printer->Print(
   printer->Print(
     "\n"
     "\n"
@@ -868,12 +873,14 @@ GenerateStructors(io::Printer* printer) {
 
 
   // Generate the copy constructor.
   // Generate the copy constructor.
   printer->Print(
   printer->Print(
-    "$classname$::$classname$(const $classname$& from) {\n"
+    "$classname$::$classname$(const $classname$& from)\n"
+    "  : $superclass$() {\n"
     "  SharedCtor();\n"
     "  SharedCtor();\n"
     "  MergeFrom(from);\n"
     "  MergeFrom(from);\n"
     "}\n"
     "}\n"
     "\n",
     "\n",
-    "classname", classname_);
+    "classname", classname_,
+    "superclass", superclass);
 
 
   // Generate the shared constructor code.
   // Generate the shared constructor code.
   GenerateSharedConstructorCode(printer);
   GenerateSharedConstructorCode(printer);

+ 72 - 36
src/google/protobuf/descriptor.pb.cc

@@ -644,14 +644,16 @@ struct StaticDescriptorInitializer_google_2fprotobuf_2fdescriptor_2eproto {
 const int FileDescriptorSet::kFileFieldNumber;
 const int FileDescriptorSet::kFileFieldNumber;
 #endif  // !_MSC_VER
 #endif  // !_MSC_VER
 
 
-FileDescriptorSet::FileDescriptorSet() {
+FileDescriptorSet::FileDescriptorSet()
+  : Message() {
   SharedCtor();
   SharedCtor();
 }
 }
 
 
 void FileDescriptorSet::InitAsDefaultInstance() {
 void FileDescriptorSet::InitAsDefaultInstance() {
 }
 }
 
 
-FileDescriptorSet::FileDescriptorSet(const FileDescriptorSet& from) {
+FileDescriptorSet::FileDescriptorSet(const FileDescriptorSet& from)
+  : Message() {
   SharedCtor();
   SharedCtor();
   MergeFrom(from);
   MergeFrom(from);
 }
 }
@@ -854,7 +856,8 @@ const int FileDescriptorProto::kExtensionFieldNumber;
 const int FileDescriptorProto::kOptionsFieldNumber;
 const int FileDescriptorProto::kOptionsFieldNumber;
 #endif  // !_MSC_VER
 #endif  // !_MSC_VER
 
 
-FileDescriptorProto::FileDescriptorProto() {
+FileDescriptorProto::FileDescriptorProto()
+  : Message() {
   SharedCtor();
   SharedCtor();
 }
 }
 
 
@@ -862,7 +865,8 @@ void FileDescriptorProto::InitAsDefaultInstance() {
   options_ = const_cast< ::google::protobuf::FileOptions*>(&::google::protobuf::FileOptions::default_instance());
   options_ = const_cast< ::google::protobuf::FileOptions*>(&::google::protobuf::FileOptions::default_instance());
 }
 }
 
 
-FileDescriptorProto::FileDescriptorProto(const FileDescriptorProto& from) {
+FileDescriptorProto::FileDescriptorProto(const FileDescriptorProto& from)
+  : Message() {
   SharedCtor();
   SharedCtor();
   MergeFrom(from);
   MergeFrom(from);
 }
 }
@@ -1385,14 +1389,16 @@ const int DescriptorProto_ExtensionRange::kStartFieldNumber;
 const int DescriptorProto_ExtensionRange::kEndFieldNumber;
 const int DescriptorProto_ExtensionRange::kEndFieldNumber;
 #endif  // !_MSC_VER
 #endif  // !_MSC_VER
 
 
-DescriptorProto_ExtensionRange::DescriptorProto_ExtensionRange() {
+DescriptorProto_ExtensionRange::DescriptorProto_ExtensionRange()
+  : Message() {
   SharedCtor();
   SharedCtor();
 }
 }
 
 
 void DescriptorProto_ExtensionRange::InitAsDefaultInstance() {
 void DescriptorProto_ExtensionRange::InitAsDefaultInstance() {
 }
 }
 
 
-DescriptorProto_ExtensionRange::DescriptorProto_ExtensionRange(const DescriptorProto_ExtensionRange& from) {
+DescriptorProto_ExtensionRange::DescriptorProto_ExtensionRange(const DescriptorProto_ExtensionRange& from)
+  : Message() {
   SharedCtor();
   SharedCtor();
   MergeFrom(from);
   MergeFrom(from);
 }
 }
@@ -1631,7 +1637,8 @@ const int DescriptorProto::kExtensionRangeFieldNumber;
 const int DescriptorProto::kOptionsFieldNumber;
 const int DescriptorProto::kOptionsFieldNumber;
 #endif  // !_MSC_VER
 #endif  // !_MSC_VER
 
 
-DescriptorProto::DescriptorProto() {
+DescriptorProto::DescriptorProto()
+  : Message() {
   SharedCtor();
   SharedCtor();
 }
 }
 
 
@@ -1639,7 +1646,8 @@ void DescriptorProto::InitAsDefaultInstance() {
   options_ = const_cast< ::google::protobuf::MessageOptions*>(&::google::protobuf::MessageOptions::default_instance());
   options_ = const_cast< ::google::protobuf::MessageOptions*>(&::google::protobuf::MessageOptions::default_instance());
 }
 }
 
 
-DescriptorProto::DescriptorProto(const DescriptorProto& from) {
+DescriptorProto::DescriptorProto(const DescriptorProto& from)
+  : Message() {
   SharedCtor();
   SharedCtor();
   MergeFrom(from);
   MergeFrom(from);
 }
 }
@@ -2184,7 +2192,8 @@ const int FieldDescriptorProto::kDefaultValueFieldNumber;
 const int FieldDescriptorProto::kOptionsFieldNumber;
 const int FieldDescriptorProto::kOptionsFieldNumber;
 #endif  // !_MSC_VER
 #endif  // !_MSC_VER
 
 
-FieldDescriptorProto::FieldDescriptorProto() {
+FieldDescriptorProto::FieldDescriptorProto()
+  : Message() {
   SharedCtor();
   SharedCtor();
 }
 }
 
 
@@ -2192,7 +2201,8 @@ void FieldDescriptorProto::InitAsDefaultInstance() {
   options_ = const_cast< ::google::protobuf::FieldOptions*>(&::google::protobuf::FieldOptions::default_instance());
   options_ = const_cast< ::google::protobuf::FieldOptions*>(&::google::protobuf::FieldOptions::default_instance());
 }
 }
 
 
-FieldDescriptorProto::FieldDescriptorProto(const FieldDescriptorProto& from) {
+FieldDescriptorProto::FieldDescriptorProto(const FieldDescriptorProto& from)
+  : Message() {
   SharedCtor();
   SharedCtor();
   MergeFrom(from);
   MergeFrom(from);
 }
 }
@@ -2739,7 +2749,8 @@ const int EnumDescriptorProto::kValueFieldNumber;
 const int EnumDescriptorProto::kOptionsFieldNumber;
 const int EnumDescriptorProto::kOptionsFieldNumber;
 #endif  // !_MSC_VER
 #endif  // !_MSC_VER
 
 
-EnumDescriptorProto::EnumDescriptorProto() {
+EnumDescriptorProto::EnumDescriptorProto()
+  : Message() {
   SharedCtor();
   SharedCtor();
 }
 }
 
 
@@ -2747,7 +2758,8 @@ void EnumDescriptorProto::InitAsDefaultInstance() {
   options_ = const_cast< ::google::protobuf::EnumOptions*>(&::google::protobuf::EnumOptions::default_instance());
   options_ = const_cast< ::google::protobuf::EnumOptions*>(&::google::protobuf::EnumOptions::default_instance());
 }
 }
 
 
-EnumDescriptorProto::EnumDescriptorProto(const EnumDescriptorProto& from) {
+EnumDescriptorProto::EnumDescriptorProto(const EnumDescriptorProto& from)
+  : Message() {
   SharedCtor();
   SharedCtor();
   MergeFrom(from);
   MergeFrom(from);
 }
 }
@@ -3049,7 +3061,8 @@ const int EnumValueDescriptorProto::kNumberFieldNumber;
 const int EnumValueDescriptorProto::kOptionsFieldNumber;
 const int EnumValueDescriptorProto::kOptionsFieldNumber;
 #endif  // !_MSC_VER
 #endif  // !_MSC_VER
 
 
-EnumValueDescriptorProto::EnumValueDescriptorProto() {
+EnumValueDescriptorProto::EnumValueDescriptorProto()
+  : Message() {
   SharedCtor();
   SharedCtor();
 }
 }
 
 
@@ -3057,7 +3070,8 @@ void EnumValueDescriptorProto::InitAsDefaultInstance() {
   options_ = const_cast< ::google::protobuf::EnumValueOptions*>(&::google::protobuf::EnumValueOptions::default_instance());
   options_ = const_cast< ::google::protobuf::EnumValueOptions*>(&::google::protobuf::EnumValueOptions::default_instance());
 }
 }
 
 
-EnumValueDescriptorProto::EnumValueDescriptorProto(const EnumValueDescriptorProto& from) {
+EnumValueDescriptorProto::EnumValueDescriptorProto(const EnumValueDescriptorProto& from)
+  : Message() {
   SharedCtor();
   SharedCtor();
   MergeFrom(from);
   MergeFrom(from);
 }
 }
@@ -3355,7 +3369,8 @@ const int ServiceDescriptorProto::kMethodFieldNumber;
 const int ServiceDescriptorProto::kOptionsFieldNumber;
 const int ServiceDescriptorProto::kOptionsFieldNumber;
 #endif  // !_MSC_VER
 #endif  // !_MSC_VER
 
 
-ServiceDescriptorProto::ServiceDescriptorProto() {
+ServiceDescriptorProto::ServiceDescriptorProto()
+  : Message() {
   SharedCtor();
   SharedCtor();
 }
 }
 
 
@@ -3363,7 +3378,8 @@ void ServiceDescriptorProto::InitAsDefaultInstance() {
   options_ = const_cast< ::google::protobuf::ServiceOptions*>(&::google::protobuf::ServiceOptions::default_instance());
   options_ = const_cast< ::google::protobuf::ServiceOptions*>(&::google::protobuf::ServiceOptions::default_instance());
 }
 }
 
 
-ServiceDescriptorProto::ServiceDescriptorProto(const ServiceDescriptorProto& from) {
+ServiceDescriptorProto::ServiceDescriptorProto(const ServiceDescriptorProto& from)
+  : Message() {
   SharedCtor();
   SharedCtor();
   MergeFrom(from);
   MergeFrom(from);
 }
 }
@@ -3668,7 +3684,8 @@ const int MethodDescriptorProto::kOutputTypeFieldNumber;
 const int MethodDescriptorProto::kOptionsFieldNumber;
 const int MethodDescriptorProto::kOptionsFieldNumber;
 #endif  // !_MSC_VER
 #endif  // !_MSC_VER
 
 
-MethodDescriptorProto::MethodDescriptorProto() {
+MethodDescriptorProto::MethodDescriptorProto()
+  : Message() {
   SharedCtor();
   SharedCtor();
 }
 }
 
 
@@ -3676,7 +3693,8 @@ void MethodDescriptorProto::InitAsDefaultInstance() {
   options_ = const_cast< ::google::protobuf::MethodOptions*>(&::google::protobuf::MethodOptions::default_instance());
   options_ = const_cast< ::google::protobuf::MethodOptions*>(&::google::protobuf::MethodOptions::default_instance());
 }
 }
 
 
-MethodDescriptorProto::MethodDescriptorProto(const MethodDescriptorProto& from) {
+MethodDescriptorProto::MethodDescriptorProto(const MethodDescriptorProto& from)
+  : Message() {
   SharedCtor();
   SharedCtor();
   MergeFrom(from);
   MergeFrom(from);
 }
 }
@@ -4072,14 +4090,16 @@ const int FileOptions::kOptimizeForFieldNumber;
 const int FileOptions::kUninterpretedOptionFieldNumber;
 const int FileOptions::kUninterpretedOptionFieldNumber;
 #endif  // !_MSC_VER
 #endif  // !_MSC_VER
 
 
-FileOptions::FileOptions() {
+FileOptions::FileOptions()
+  : Message() {
   SharedCtor();
   SharedCtor();
 }
 }
 
 
 void FileOptions::InitAsDefaultInstance() {
 void FileOptions::InitAsDefaultInstance() {
 }
 }
 
 
-FileOptions::FileOptions(const FileOptions& from) {
+FileOptions::FileOptions(const FileOptions& from)
+  : Message() {
   SharedCtor();
   SharedCtor();
   MergeFrom(from);
   MergeFrom(from);
 }
 }
@@ -4486,14 +4506,16 @@ const int MessageOptions::kNoStandardDescriptorAccessorFieldNumber;
 const int MessageOptions::kUninterpretedOptionFieldNumber;
 const int MessageOptions::kUninterpretedOptionFieldNumber;
 #endif  // !_MSC_VER
 #endif  // !_MSC_VER
 
 
-MessageOptions::MessageOptions() {
+MessageOptions::MessageOptions()
+  : Message() {
   SharedCtor();
   SharedCtor();
 }
 }
 
 
 void MessageOptions::InitAsDefaultInstance() {
 void MessageOptions::InitAsDefaultInstance() {
 }
 }
 
 
-MessageOptions::MessageOptions(const MessageOptions& from) {
+MessageOptions::MessageOptions(const MessageOptions& from)
+  : Message() {
   SharedCtor();
   SharedCtor();
   MergeFrom(from);
   MergeFrom(from);
 }
 }
@@ -4806,14 +4828,16 @@ const int FieldOptions::kExperimentalMapKeyFieldNumber;
 const int FieldOptions::kUninterpretedOptionFieldNumber;
 const int FieldOptions::kUninterpretedOptionFieldNumber;
 #endif  // !_MSC_VER
 #endif  // !_MSC_VER
 
 
-FieldOptions::FieldOptions() {
+FieldOptions::FieldOptions()
+  : Message() {
   SharedCtor();
   SharedCtor();
 }
 }
 
 
 void FieldOptions::InitAsDefaultInstance() {
 void FieldOptions::InitAsDefaultInstance() {
 }
 }
 
 
-FieldOptions::FieldOptions(const FieldOptions& from) {
+FieldOptions::FieldOptions(const FieldOptions& from)
+  : Message() {
   SharedCtor();
   SharedCtor();
   MergeFrom(from);
   MergeFrom(from);
 }
 }
@@ -5198,14 +5222,16 @@ void FieldOptions::Swap(FieldOptions* other) {
 const int EnumOptions::kUninterpretedOptionFieldNumber;
 const int EnumOptions::kUninterpretedOptionFieldNumber;
 #endif  // !_MSC_VER
 #endif  // !_MSC_VER
 
 
-EnumOptions::EnumOptions() {
+EnumOptions::EnumOptions()
+  : Message() {
   SharedCtor();
   SharedCtor();
 }
 }
 
 
 void EnumOptions::InitAsDefaultInstance() {
 void EnumOptions::InitAsDefaultInstance() {
 }
 }
 
 
-EnumOptions::EnumOptions(const EnumOptions& from) {
+EnumOptions::EnumOptions(const EnumOptions& from)
+  : Message() {
   SharedCtor();
   SharedCtor();
   MergeFrom(from);
   MergeFrom(from);
 }
 }
@@ -5418,14 +5444,16 @@ void EnumOptions::Swap(EnumOptions* other) {
 const int EnumValueOptions::kUninterpretedOptionFieldNumber;
 const int EnumValueOptions::kUninterpretedOptionFieldNumber;
 #endif  // !_MSC_VER
 #endif  // !_MSC_VER
 
 
-EnumValueOptions::EnumValueOptions() {
+EnumValueOptions::EnumValueOptions()
+  : Message() {
   SharedCtor();
   SharedCtor();
 }
 }
 
 
 void EnumValueOptions::InitAsDefaultInstance() {
 void EnumValueOptions::InitAsDefaultInstance() {
 }
 }
 
 
-EnumValueOptions::EnumValueOptions(const EnumValueOptions& from) {
+EnumValueOptions::EnumValueOptions(const EnumValueOptions& from)
+  : Message() {
   SharedCtor();
   SharedCtor();
   MergeFrom(from);
   MergeFrom(from);
 }
 }
@@ -5638,14 +5666,16 @@ void EnumValueOptions::Swap(EnumValueOptions* other) {
 const int ServiceOptions::kUninterpretedOptionFieldNumber;
 const int ServiceOptions::kUninterpretedOptionFieldNumber;
 #endif  // !_MSC_VER
 #endif  // !_MSC_VER
 
 
-ServiceOptions::ServiceOptions() {
+ServiceOptions::ServiceOptions()
+  : Message() {
   SharedCtor();
   SharedCtor();
 }
 }
 
 
 void ServiceOptions::InitAsDefaultInstance() {
 void ServiceOptions::InitAsDefaultInstance() {
 }
 }
 
 
-ServiceOptions::ServiceOptions(const ServiceOptions& from) {
+ServiceOptions::ServiceOptions(const ServiceOptions& from)
+  : Message() {
   SharedCtor();
   SharedCtor();
   MergeFrom(from);
   MergeFrom(from);
 }
 }
@@ -5858,14 +5888,16 @@ void ServiceOptions::Swap(ServiceOptions* other) {
 const int MethodOptions::kUninterpretedOptionFieldNumber;
 const int MethodOptions::kUninterpretedOptionFieldNumber;
 #endif  // !_MSC_VER
 #endif  // !_MSC_VER
 
 
-MethodOptions::MethodOptions() {
+MethodOptions::MethodOptions()
+  : Message() {
   SharedCtor();
   SharedCtor();
 }
 }
 
 
 void MethodOptions::InitAsDefaultInstance() {
 void MethodOptions::InitAsDefaultInstance() {
 }
 }
 
 
-MethodOptions::MethodOptions(const MethodOptions& from) {
+MethodOptions::MethodOptions(const MethodOptions& from)
+  : Message() {
   SharedCtor();
   SharedCtor();
   MergeFrom(from);
   MergeFrom(from);
 }
 }
@@ -6080,14 +6112,16 @@ const int UninterpretedOption_NamePart::kNamePartFieldNumber;
 const int UninterpretedOption_NamePart::kIsExtensionFieldNumber;
 const int UninterpretedOption_NamePart::kIsExtensionFieldNumber;
 #endif  // !_MSC_VER
 #endif  // !_MSC_VER
 
 
-UninterpretedOption_NamePart::UninterpretedOption_NamePart() {
+UninterpretedOption_NamePart::UninterpretedOption_NamePart()
+  : Message() {
   SharedCtor();
   SharedCtor();
 }
 }
 
 
 void UninterpretedOption_NamePart::InitAsDefaultInstance() {
 void UninterpretedOption_NamePart::InitAsDefaultInstance() {
 }
 }
 
 
-UninterpretedOption_NamePart::UninterpretedOption_NamePart(const UninterpretedOption_NamePart& from) {
+UninterpretedOption_NamePart::UninterpretedOption_NamePart(const UninterpretedOption_NamePart& from)
+  : Message() {
   SharedCtor();
   SharedCtor();
   MergeFrom(from);
   MergeFrom(from);
 }
 }
@@ -6343,14 +6377,16 @@ const int UninterpretedOption::kDoubleValueFieldNumber;
 const int UninterpretedOption::kStringValueFieldNumber;
 const int UninterpretedOption::kStringValueFieldNumber;
 #endif  // !_MSC_VER
 #endif  // !_MSC_VER
 
 
-UninterpretedOption::UninterpretedOption() {
+UninterpretedOption::UninterpretedOption()
+  : Message() {
   SharedCtor();
   SharedCtor();
 }
 }
 
 
 void UninterpretedOption::InitAsDefaultInstance() {
 void UninterpretedOption::InitAsDefaultInstance() {
 }
 }
 
 
-UninterpretedOption::UninterpretedOption(const UninterpretedOption& from) {
+UninterpretedOption::UninterpretedOption(const UninterpretedOption& from)
+  : Message() {
   SharedCtor();
   SharedCtor();
   MergeFrom(from);
   MergeFrom(from);
 }
 }