Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(92)

Side by Side Diff: third_party/protobuf/src/google/protobuf/compiler/objectivec/objectivec_message.cc

Issue 2495533002: third_party/protobuf: Update to HEAD (83d681ee2c) (Closed)
Patch Set: Make chrome settings proto generated file a component Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Protocol Buffers - Google's data interchange format 1 // Protocol Buffers - Google's data interchange format
2 // Copyright 2008 Google Inc. All rights reserved. 2 // Copyright 2008 Google Inc. All rights reserved.
3 // https://developers.google.com/protocol-buffers/ 3 // https://developers.google.com/protocol-buffers/
4 // 4 //
5 // Redistribution and use in source and binary forms, with or without 5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions are 6 // modification, are permitted provided that the following conditions are
7 // met: 7 // met:
8 // 8 //
9 // * Redistributions of source code must retain the above copyright 9 // * Redistributions of source code must retain the above copyright
10 // notice, this list of conditions and the following disclaimer. 10 // notice, this list of conditions and the following disclaimer.
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 return fields; 173 return fields;
174 } 174 }
175 } // namespace 175 } // namespace
176 176
177 MessageGenerator::MessageGenerator(const string& root_classname, 177 MessageGenerator::MessageGenerator(const string& root_classname,
178 const Descriptor* descriptor, 178 const Descriptor* descriptor,
179 const Options& options) 179 const Options& options)
180 : root_classname_(root_classname), 180 : root_classname_(root_classname),
181 descriptor_(descriptor), 181 descriptor_(descriptor),
182 field_generators_(descriptor, options), 182 field_generators_(descriptor, options),
183 class_name_(ClassName(descriptor_)) { 183 class_name_(ClassName(descriptor_)),
184 deprecated_attribute_(
185 GetOptionalDeprecatedAttribute(descriptor, descriptor->file(), false, true)) {
186
184 for (int i = 0; i < descriptor_->extension_count(); i++) { 187 for (int i = 0; i < descriptor_->extension_count(); i++) {
185 extension_generators_.push_back( 188 extension_generators_.push_back(
186 new ExtensionGenerator(class_name_, descriptor_->extension(i))); 189 new ExtensionGenerator(class_name_, descriptor_->extension(i)));
187 } 190 }
188 191
189 for (int i = 0; i < descriptor_->oneof_decl_count(); i++) { 192 for (int i = 0; i < descriptor_->oneof_decl_count(); i++) {
190 OneofGenerator* generator = new OneofGenerator(descriptor_->oneof_decl(i)); 193 OneofGenerator* generator = new OneofGenerator(descriptor_->oneof_decl(i));
191 oneof_generators_.push_back(generator); 194 oneof_generators_.push_back(generator);
192 } 195 }
193 196
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
239 } 242 }
240 } 243 }
241 244
242 for (vector<MessageGenerator*>::iterator iter = 245 for (vector<MessageGenerator*>::iterator iter =
243 nested_message_generators_.begin(); 246 nested_message_generators_.begin();
244 iter != nested_message_generators_.end(); ++iter) { 247 iter != nested_message_generators_.end(); ++iter) {
245 (*iter)->DetermineForwardDeclarations(fwd_decls); 248 (*iter)->DetermineForwardDeclarations(fwd_decls);
246 } 249 }
247 } 250 }
248 251
252 bool MessageGenerator::IncludesOneOfDefinition() const {
253 if (!oneof_generators_.empty()) {
254 return true;
255 }
256
257 for (vector<MessageGenerator*>::const_iterator iter =
258 nested_message_generators_.begin();
259 iter != nested_message_generators_.end(); ++iter) {
260 if ((*iter)->IncludesOneOfDefinition()) {
261 return true;
262 }
263 }
264
265 return false;
266 }
267
249 void MessageGenerator::GenerateEnumHeader(io::Printer* printer) { 268 void MessageGenerator::GenerateEnumHeader(io::Printer* printer) {
250 for (vector<EnumGenerator*>::iterator iter = enum_generators_.begin(); 269 for (vector<EnumGenerator*>::iterator iter = enum_generators_.begin();
251 iter != enum_generators_.end(); ++iter) { 270 iter != enum_generators_.end(); ++iter) {
252 (*iter)->GenerateHeader(printer); 271 (*iter)->GenerateHeader(printer);
253 } 272 }
254 273
255 for (vector<MessageGenerator*>::iterator iter = 274 for (vector<MessageGenerator*>::iterator iter =
256 nested_message_generators_.begin(); 275 nested_message_generators_.begin();
257 iter != nested_message_generators_.end(); ++iter) { 276 iter != nested_message_generators_.end(); ++iter) {
258 (*iter)->GenerateEnumHeader(printer); 277 (*iter)->GenerateEnumHeader(printer);
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
308 } 327 }
309 328
310 for (vector<OneofGenerator*>::iterator iter = oneof_generators_.begin(); 329 for (vector<OneofGenerator*>::iterator iter = oneof_generators_.begin();
311 iter != oneof_generators_.end(); ++iter) { 330 iter != oneof_generators_.end(); ++iter) {
312 (*iter)->GenerateCaseEnum(printer); 331 (*iter)->GenerateCaseEnum(printer);
313 } 332 }
314 333
315 string message_comments; 334 string message_comments;
316 SourceLocation location; 335 SourceLocation location;
317 if (descriptor_->GetSourceLocation(&location)) { 336 if (descriptor_->GetSourceLocation(&location)) {
318 message_comments = BuildCommentsString(location); 337 message_comments = BuildCommentsString(location, false);
319 } else { 338 } else {
320 message_comments = ""; 339 message_comments = "";
321 } 340 }
322 341
323 printer->Print( 342 printer->Print(
324 "$comments$$deprecated_attribute$@interface $classname$ : GPBMessage\n\n", 343 "$comments$$deprecated_attribute$@interface $classname$ : GPBMessage\n\n",
325 "classname", class_name_, 344 "classname", class_name_,
326 "deprecated_attribute", GetOptionalDeprecatedAttribute(descriptor_, false, true), 345 "deprecated_attribute", deprecated_attribute_,
327 "comments", message_comments); 346 "comments", message_comments);
328 347
329 vector<char> seen_oneofs(descriptor_->oneof_decl_count(), 0); 348 vector<char> seen_oneofs(descriptor_->oneof_decl_count(), 0);
330 for (int i = 0; i < descriptor_->field_count(); i++) { 349 for (int i = 0; i < descriptor_->field_count(); i++) {
331 const FieldDescriptor* field = descriptor_->field(i); 350 const FieldDescriptor* field = descriptor_->field(i);
332 if (field->containing_oneof() != NULL) { 351 if (field->containing_oneof() != NULL) {
333 const int oneof_index = field->containing_oneof()->index(); 352 const int oneof_index = field->containing_oneof()->index();
334 if (!seen_oneofs[oneof_index]) { 353 if (!seen_oneofs[oneof_index]) {
335 seen_oneofs[oneof_index] = 1; 354 seen_oneofs[oneof_index] = 1;
336 oneof_generators_[oneof_index]->GeneratePublicCasePropertyDeclaration( 355 oneof_generators_[oneof_index]->GeneratePublicCasePropertyDeclaration(
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
373 } 392 }
374 } 393 }
375 394
376 void MessageGenerator::GenerateSource(io::Printer* printer) { 395 void MessageGenerator::GenerateSource(io::Printer* printer) {
377 if (!IsMapEntryMessage(descriptor_)) { 396 if (!IsMapEntryMessage(descriptor_)) {
378 printer->Print( 397 printer->Print(
379 "#pragma mark - $classname$\n" 398 "#pragma mark - $classname$\n"
380 "\n", 399 "\n",
381 "classname", class_name_); 400 "classname", class_name_);
382 401
402 if (!deprecated_attribute_.empty()) {
403 // No warnings when compiling the impl of this deprecated class.
404 printer->Print(
405 "#pragma clang diagnostic push\n"
406 "#pragma clang diagnostic ignored \"-Wdeprecated-implementations\"\n"
407 "\n");
408 }
409
383 printer->Print("@implementation $classname$\n\n", 410 printer->Print("@implementation $classname$\n\n",
384 "classname", class_name_); 411 "classname", class_name_);
385 412
386 for (vector<OneofGenerator*>::iterator iter = oneof_generators_.begin(); 413 for (vector<OneofGenerator*>::iterator iter = oneof_generators_.begin();
387 iter != oneof_generators_.end(); ++iter) { 414 iter != oneof_generators_.end(); ++iter) {
388 (*iter)->GeneratePropertyImplementation(printer); 415 (*iter)->GeneratePropertyImplementation(printer);
389 } 416 }
390 417
391 for (int i = 0; i < descriptor_->field_count(); i++) { 418 for (int i = 0; i < descriptor_->field_count(); i++) {
392 field_generators_.get(descriptor_->field(i)) 419 field_generators_.get(descriptor_->field(i))
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
498 vars["fields_count"] = "0"; 525 vars["fields_count"] = "0";
499 } 526 }
500 527
501 std::vector<string> init_flags; 528 std::vector<string> init_flags;
502 if (need_defaults) { 529 if (need_defaults) {
503 init_flags.push_back("GPBDescriptorInitializationFlag_FieldsWithDefault"); 530 init_flags.push_back("GPBDescriptorInitializationFlag_FieldsWithDefault");
504 } 531 }
505 if (descriptor_->options().message_set_wire_format()) { 532 if (descriptor_->options().message_set_wire_format()) {
506 init_flags.push_back("GPBDescriptorInitializationFlag_WireFormat"); 533 init_flags.push_back("GPBDescriptorInitializationFlag_WireFormat");
507 } 534 }
508 vars["init_flags"] = BuildFlagsString(init_flags); 535 vars["init_flags"] = BuildFlagsString(FLAGTYPE_DESCRIPTOR_INITIALIZATION,
536 init_flags);
509 537
510 printer->Print( 538 printer->Print(
511 vars, 539 vars,
512 " GPBDescriptor *localDescriptor =\n" 540 " GPBDescriptor *localDescriptor =\n"
513 " [GPBDescriptor allocDescriptorForClass:[$classname$ class]\n" 541 " [GPBDescriptor allocDescriptorForClass:[$classname$ class]\n"
514 " rootClass:[$rootclassname$ class]\ n" 542 " rootClass:[$rootclassname$ class]\ n"
515 " file:$rootclassname$_FileDesc riptor()\n" 543 " file:$rootclassname$_FileDesc riptor()\n"
516 " fields:$fields$\n" 544 " fields:$fields$\n"
517 " fieldCount:$fields_count$\n" 545 " fieldCount:$fields_count$\n"
518 " storageSize:sizeof($classname$__stor age_)\n" 546 " storageSize:sizeof($classname$__stor age_)\n"
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
556 for (int i = 0; i < sorted_extensions.size(); i++) { 584 for (int i = 0; i < sorted_extensions.size(); i++) {
557 printer->Print(" { .start = $start$, .end = $end$ },\n", 585 printer->Print(" { .start = $start$, .end = $end$ },\n",
558 "start", SimpleItoa(sorted_extensions[i]->start), 586 "start", SimpleItoa(sorted_extensions[i]->start),
559 "end", SimpleItoa(sorted_extensions[i]->end)); 587 "end", SimpleItoa(sorted_extensions[i]->end));
560 } 588 }
561 printer->Print( 589 printer->Print(
562 " };\n" 590 " };\n"
563 " [localDescriptor setupExtensionRanges:ranges\n" 591 " [localDescriptor setupExtensionRanges:ranges\n"
564 " count:(uint32_t)(sizeof(ranges) / sizeof(GPBExtensionRange))];\n"); 592 " count:(uint32_t)(sizeof(ranges) / sizeof(GPBExtensionRange))];\n");
565 } 593 }
594 if (descriptor_->containing_type() != NULL) {
595 string parent_class_name = ClassName(descriptor_->containing_type());
596 printer->Print(
597 " [localDescriptor setupContainingMessageClassName:GPBStringifySymb ol($parent_name$)];\n",
598 "parent_name", parent_class_name);
599 }
600 string suffix_added;
601 ClassName(descriptor_, &suffix_added);
602 if (suffix_added.size() > 0) {
603 printer->Print(
604 " [localDescriptor setupMessageClassNameSuffix:@\"$suffix$\"];\n",
605 "suffix", suffix_added);
606 }
566 printer->Print( 607 printer->Print(
567 " NSAssert(descriptor == nil, @\"Startup recursed!\");\n" 608 " NSAssert(descriptor == nil, @\"Startup recursed!\");\n"
568 " descriptor = localDescriptor;\n" 609 " descriptor = localDescriptor;\n"
569 " }\n" 610 " }\n"
570 " return descriptor;\n" 611 " return descriptor;\n"
571 "}\n\n" 612 "}\n\n"
572 "@end\n\n"); 613 "@end\n\n");
573 614
615 if (!deprecated_attribute_.empty()) {
616 printer->Print(
617 "#pragma clang diagnostic pop\n"
618 "\n");
619 }
620
574 for (int i = 0; i < descriptor_->field_count(); i++) { 621 for (int i = 0; i < descriptor_->field_count(); i++) {
575 field_generators_.get(descriptor_->field(i)) 622 field_generators_.get(descriptor_->field(i))
576 .GenerateCFunctionImplementations(printer); 623 .GenerateCFunctionImplementations(printer);
577 } 624 }
578 625
579 for (vector<OneofGenerator*>::iterator iter = oneof_generators_.begin(); 626 for (vector<OneofGenerator*>::iterator iter = oneof_generators_.begin();
580 iter != oneof_generators_.end(); ++iter) { 627 iter != oneof_generators_.end(); ++iter) {
581 (*iter)->GenerateClearFunctionImplementation(printer); 628 (*iter)->GenerateClearFunctionImplementation(printer);
582 } 629 }
583 } 630 }
584 631
585 for (vector<EnumGenerator*>::iterator iter = enum_generators_.begin(); 632 for (vector<EnumGenerator*>::iterator iter = enum_generators_.begin();
586 iter != enum_generators_.end(); ++iter) { 633 iter != enum_generators_.end(); ++iter) {
587 (*iter)->GenerateSource(printer); 634 (*iter)->GenerateSource(printer);
588 } 635 }
589 636
590 for (vector<MessageGenerator*>::iterator iter = 637 for (vector<MessageGenerator*>::iterator iter =
591 nested_message_generators_.begin(); 638 nested_message_generators_.begin();
592 iter != nested_message_generators_.end(); ++iter) { 639 iter != nested_message_generators_.end(); ++iter) {
593 (*iter)->GenerateSource(printer); 640 (*iter)->GenerateSource(printer);
594 } 641 }
595 } 642 }
596 643
597 } // namespace objectivec 644 } // namespace objectivec
598 } // namespace compiler 645 } // namespace compiler
599 } // namespace protobuf 646 } // namespace protobuf
600 } // namespace google 647 } // namespace google
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698