|
|
|
@ -184,18 +184,18 @@ MessageGenerator::MessageGenerator(const string& root_classname, |
|
|
|
|
GetOptionalDeprecatedAttribute(descriptor, descriptor->file(), false, true)) { |
|
|
|
|
|
|
|
|
|
for (int i = 0; i < descriptor_->extension_count(); i++) { |
|
|
|
|
extension_generators_.push_back( |
|
|
|
|
extension_generators_.emplace_back( |
|
|
|
|
new ExtensionGenerator(class_name_, descriptor_->extension(i))); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
for (int i = 0; i < descriptor_->oneof_decl_count(); i++) { |
|
|
|
|
OneofGenerator* generator = new OneofGenerator(descriptor_->oneof_decl(i)); |
|
|
|
|
oneof_generators_.push_back(generator); |
|
|
|
|
oneof_generators_.emplace_back(generator); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
for (int i = 0; i < descriptor_->enum_type_count(); i++) { |
|
|
|
|
EnumGenerator* generator = new EnumGenerator(descriptor_->enum_type(i)); |
|
|
|
|
enum_generators_.push_back(generator); |
|
|
|
|
enum_generators_.emplace_back(generator); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
for (int i = 0; i < descriptor_->nested_type_count(); i++) { |
|
|
|
@ -203,32 +203,20 @@ MessageGenerator::MessageGenerator(const string& root_classname, |
|
|
|
|
new MessageGenerator(root_classname_, |
|
|
|
|
descriptor_->nested_type(i), |
|
|
|
|
options); |
|
|
|
|
nested_message_generators_.push_back(generator); |
|
|
|
|
nested_message_generators_.emplace_back(generator); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
MessageGenerator::~MessageGenerator() { |
|
|
|
|
STLDeleteContainerPointers(extension_generators_.begin(), |
|
|
|
|
extension_generators_.end()); |
|
|
|
|
STLDeleteContainerPointers(enum_generators_.begin(), enum_generators_.end()); |
|
|
|
|
STLDeleteContainerPointers(nested_message_generators_.begin(), |
|
|
|
|
nested_message_generators_.end()); |
|
|
|
|
STLDeleteContainerPointers(oneof_generators_.begin(), |
|
|
|
|
oneof_generators_.end()); |
|
|
|
|
} |
|
|
|
|
MessageGenerator::~MessageGenerator() {} |
|
|
|
|
|
|
|
|
|
void MessageGenerator::GenerateStaticVariablesInitialization( |
|
|
|
|
io::Printer* printer) { |
|
|
|
|
for (std::vector<ExtensionGenerator*>::iterator iter = |
|
|
|
|
extension_generators_.begin(); |
|
|
|
|
iter != extension_generators_.end(); ++iter) { |
|
|
|
|
(*iter)->GenerateStaticVariablesInitialization(printer); |
|
|
|
|
for (const auto& generator : extension_generators_) { |
|
|
|
|
generator->GenerateStaticVariablesInitialization(printer); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
for (std::vector<MessageGenerator*>::iterator iter = |
|
|
|
|
nested_message_generators_.begin(); |
|
|
|
|
iter != nested_message_generators_.end(); ++iter) { |
|
|
|
|
(*iter)->GenerateStaticVariablesInitialization(printer); |
|
|
|
|
for (const auto& generator : nested_message_generators_) { |
|
|
|
|
generator->GenerateStaticVariablesInitialization(printer); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -241,10 +229,8 @@ void MessageGenerator::DetermineForwardDeclarations(std::set<string>* fwd_decls) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
for (std::vector<MessageGenerator*>::iterator iter = |
|
|
|
|
nested_message_generators_.begin(); |
|
|
|
|
iter != nested_message_generators_.end(); ++iter) { |
|
|
|
|
(*iter)->DetermineForwardDeclarations(fwd_decls); |
|
|
|
|
for (const auto& generator : nested_message_generators_) { |
|
|
|
|
generator->DetermineForwardDeclarations(fwd_decls); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -253,10 +239,8 @@ bool MessageGenerator::IncludesOneOfDefinition() const { |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
for (std::vector<MessageGenerator*>::const_iterator iter = |
|
|
|
|
nested_message_generators_.begin(); |
|
|
|
|
iter != nested_message_generators_.end(); ++iter) { |
|
|
|
|
if ((*iter)->IncludesOneOfDefinition()) { |
|
|
|
|
for (const auto& generator : nested_message_generators_) { |
|
|
|
|
if (generator->IncludesOneOfDefinition()) { |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -265,40 +249,31 @@ bool MessageGenerator::IncludesOneOfDefinition() const { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void MessageGenerator::GenerateEnumHeader(io::Printer* printer) { |
|
|
|
|
for (std::vector<EnumGenerator*>::iterator iter = enum_generators_.begin(); |
|
|
|
|
iter != enum_generators_.end(); ++iter) { |
|
|
|
|
(*iter)->GenerateHeader(printer); |
|
|
|
|
for (const auto& generator : enum_generators_) { |
|
|
|
|
generator->GenerateHeader(printer); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
for (std::vector<MessageGenerator*>::iterator iter = |
|
|
|
|
nested_message_generators_.begin(); |
|
|
|
|
iter != nested_message_generators_.end(); ++iter) { |
|
|
|
|
(*iter)->GenerateEnumHeader(printer); |
|
|
|
|
for (const auto& generator : nested_message_generators_) { |
|
|
|
|
generator->GenerateEnumHeader(printer); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void MessageGenerator::GenerateExtensionRegistrationSource( |
|
|
|
|
io::Printer* printer) { |
|
|
|
|
for (std::vector<ExtensionGenerator*>::iterator iter = |
|
|
|
|
extension_generators_.begin(); |
|
|
|
|
iter != extension_generators_.end(); ++iter) { |
|
|
|
|
(*iter)->GenerateRegistrationSource(printer); |
|
|
|
|
for (const auto& generator : extension_generators_) { |
|
|
|
|
generator->GenerateRegistrationSource(printer); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
for (std::vector<MessageGenerator*>::iterator iter = |
|
|
|
|
nested_message_generators_.begin(); |
|
|
|
|
iter != nested_message_generators_.end(); ++iter) { |
|
|
|
|
(*iter)->GenerateExtensionRegistrationSource(printer); |
|
|
|
|
for (const auto& generator : nested_message_generators_) { |
|
|
|
|
generator->GenerateExtensionRegistrationSource(printer); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void MessageGenerator::GenerateMessageHeader(io::Printer* printer) { |
|
|
|
|
// This a a map entry message, just recurse and do nothing directly.
|
|
|
|
|
if (IsMapEntryMessage(descriptor_)) { |
|
|
|
|
for (std::vector<MessageGenerator*>::iterator iter = |
|
|
|
|
nested_message_generators_.begin(); |
|
|
|
|
iter != nested_message_generators_.end(); ++iter) { |
|
|
|
|
(*iter)->GenerateMessageHeader(printer); |
|
|
|
|
for (const auto& generator : nested_message_generators_) { |
|
|
|
|
generator->GenerateMessageHeader(printer); |
|
|
|
|
} |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
@ -325,9 +300,8 @@ void MessageGenerator::GenerateMessageHeader(io::Printer* printer) { |
|
|
|
|
printer->Print("};\n\n"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
for (std::vector<OneofGenerator*>::iterator iter = oneof_generators_.begin(); |
|
|
|
|
iter != oneof_generators_.end(); ++iter) { |
|
|
|
|
(*iter)->GenerateCaseEnum(printer); |
|
|
|
|
for (const auto& generator : oneof_generators_) { |
|
|
|
|
generator->GenerateCaseEnum(printer); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
string message_comments; |
|
|
|
@ -366,9 +340,8 @@ void MessageGenerator::GenerateMessageHeader(io::Printer* printer) { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (!oneof_generators_.empty()) { |
|
|
|
|
for (std::vector<OneofGenerator*>::iterator iter = oneof_generators_.begin(); |
|
|
|
|
iter != oneof_generators_.end(); ++iter) { |
|
|
|
|
(*iter)->GenerateClearFunctionDeclaration(printer); |
|
|
|
|
for (const auto& generator : oneof_generators_) { |
|
|
|
|
generator->GenerateClearFunctionDeclaration(printer); |
|
|
|
|
} |
|
|
|
|
printer->Print("\n"); |
|
|
|
|
} |
|
|
|
@ -376,18 +349,14 @@ void MessageGenerator::GenerateMessageHeader(io::Printer* printer) { |
|
|
|
|
if (descriptor_->extension_count() > 0) { |
|
|
|
|
printer->Print("@interface $classname$ (DynamicMethods)\n\n", |
|
|
|
|
"classname", class_name_); |
|
|
|
|
for (std::vector<ExtensionGenerator*>::iterator iter = |
|
|
|
|
extension_generators_.begin(); |
|
|
|
|
iter != extension_generators_.end(); ++iter) { |
|
|
|
|
(*iter)->GenerateMembersHeader(printer); |
|
|
|
|
for (const auto& generator : extension_generators_) { |
|
|
|
|
generator->GenerateMembersHeader(printer); |
|
|
|
|
} |
|
|
|
|
printer->Print("@end\n\n"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
for (std::vector<MessageGenerator*>::iterator iter = |
|
|
|
|
nested_message_generators_.begin(); |
|
|
|
|
iter != nested_message_generators_.end(); ++iter) { |
|
|
|
|
(*iter)->GenerateMessageHeader(printer); |
|
|
|
|
for (const auto& generator : nested_message_generators_) { |
|
|
|
|
generator->GenerateMessageHeader(printer); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -409,9 +378,8 @@ void MessageGenerator::GenerateSource(io::Printer* printer) { |
|
|
|
|
printer->Print("@implementation $classname$\n\n", |
|
|
|
|
"classname", class_name_); |
|
|
|
|
|
|
|
|
|
for (std::vector<OneofGenerator*>::iterator iter = oneof_generators_.begin(); |
|
|
|
|
iter != oneof_generators_.end(); ++iter) { |
|
|
|
|
(*iter)->GeneratePropertyImplementation(printer); |
|
|
|
|
for (const auto& generator : oneof_generators_) { |
|
|
|
|
generator->GeneratePropertyImplementation(printer); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
for (int i = 0; i < descriptor_->field_count(); i++) { |
|
|
|
@ -447,9 +415,8 @@ void MessageGenerator::GenerateSource(io::Printer* printer) { |
|
|
|
|
sizeof_has_storage = 1; |
|
|
|
|
} |
|
|
|
|
// Tell all the fields the oneof base.
|
|
|
|
|
for (std::vector<OneofGenerator*>::iterator iter = oneof_generators_.begin(); |
|
|
|
|
iter != oneof_generators_.end(); ++iter) { |
|
|
|
|
(*iter)->SetOneofIndexBase(sizeof_has_storage); |
|
|
|
|
for (const auto& generator : oneof_generators_) { |
|
|
|
|
generator->SetOneofIndexBase(sizeof_has_storage); |
|
|
|
|
} |
|
|
|
|
field_generators_.SetOneofIndexBase(sizeof_has_storage); |
|
|
|
|
// sizeof_has_storage needs enough bits for the single fields that aren't in
|
|
|
|
@ -547,11 +514,9 @@ void MessageGenerator::GenerateSource(io::Printer* printer) { |
|
|
|
|
if (oneof_generators_.size() != 0) { |
|
|
|
|
printer->Print( |
|
|
|
|
" static const char *oneofs[] = {\n"); |
|
|
|
|
for (std::vector<OneofGenerator*>::iterator iter = oneof_generators_.begin(); |
|
|
|
|
iter != oneof_generators_.end(); ++iter) { |
|
|
|
|
printer->Print( |
|
|
|
|
" \"$name$\",\n", |
|
|
|
|
"name", (*iter)->DescriptorName()); |
|
|
|
|
for (const auto& generator : oneof_generators_) { |
|
|
|
|
printer->Print(" \"$name$\",\n", "name", |
|
|
|
|
generator->DescriptorName()); |
|
|
|
|
} |
|
|
|
|
printer->Print( |
|
|
|
|
" };\n" |
|
|
|
@ -624,21 +589,17 @@ void MessageGenerator::GenerateSource(io::Printer* printer) { |
|
|
|
|
.GenerateCFunctionImplementations(printer); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
for (std::vector<OneofGenerator*>::iterator iter = oneof_generators_.begin(); |
|
|
|
|
iter != oneof_generators_.end(); ++iter) { |
|
|
|
|
(*iter)->GenerateClearFunctionImplementation(printer); |
|
|
|
|
for (const auto& generator : oneof_generators_) { |
|
|
|
|
generator->GenerateClearFunctionImplementation(printer); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
for (std::vector<EnumGenerator*>::iterator iter = enum_generators_.begin(); |
|
|
|
|
iter != enum_generators_.end(); ++iter) { |
|
|
|
|
(*iter)->GenerateSource(printer); |
|
|
|
|
for (const auto& generator : enum_generators_) { |
|
|
|
|
generator->GenerateSource(printer); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
for (std::vector<MessageGenerator*>::iterator iter = |
|
|
|
|
nested_message_generators_.begin(); |
|
|
|
|
iter != nested_message_generators_.end(); ++iter) { |
|
|
|
|
(*iter)->GenerateSource(printer); |
|
|
|
|
for (const auto& generator : nested_message_generators_) { |
|
|
|
|
generator->GenerateSource(printer); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|