38
38
#include <google/protobuf/compiler/java/java_message_field.h>
39
#include <google/protobuf/compiler/java/java_doc_comment.h>
39
40
#include <google/protobuf/compiler/java/java_helpers.h>
40
41
#include <google/protobuf/io/printer.h>
41
42
#include <google/protobuf/wire_format.h>
74
75
// For singular messages and builders, one bit is used for the hasField bit.
75
76
(*variables)["get_has_field_bit_message"] = GenerateGetBit(messageBitIndex);
77
(*variables)["set_has_field_bit_message"] = GenerateSetBit(messageBitIndex);
77
79
(*variables)["get_has_field_bit_builder"] = GenerateGetBit(builderBitIndex);
78
80
(*variables)["set_has_field_bit_builder"] = GenerateSetBit(builderBitIndex);
84
86
(*variables)["set_mutable_bit_builder"] = GenerateSetBit(builderBitIndex);
85
87
(*variables)["clear_mutable_bit_builder"] = GenerateClearBit(builderBitIndex);
89
// For repeated fields, one bit is used for whether the array is immutable
90
// in the parsing constructor.
91
(*variables)["get_mutable_bit_parser"] =
92
GenerateGetBitMutableLocal(builderBitIndex);
93
(*variables)["set_mutable_bit_parser"] =
94
GenerateSetBitMutableLocal(builderBitIndex);
87
96
(*variables)["get_has_field_bit_from_local"] =
88
97
GenerateGetBitFromLocal(builderBitIndex);
89
98
(*variables)["set_has_field_bit_to_local"] =
120
129
// interface so that builders can choose dynamically to either return a
121
130
// message or a nested builder, so that asking for the interface doesn't
122
131
// cause a message to ever be built.
123
printer->Print(variables_,
124
"$deprecation$boolean has$capitalized_name$();\n"
132
WriteFieldDocComment(printer, descriptor_);
133
printer->Print(variables_,
134
"$deprecation$boolean has$capitalized_name$();\n");
135
WriteFieldDocComment(printer, descriptor_);
136
printer->Print(variables_,
125
137
"$deprecation$$type$ get$capitalized_name$();\n");
127
139
if (HasNestedBuilders(descriptor_->containing_type())) {
140
WriteFieldDocComment(printer, descriptor_);
128
141
printer->Print(variables_,
129
142
"$deprecation$$type$OrBuilder get$capitalized_name$OrBuilder();\n");
133
146
void MessageFieldGenerator::
134
147
GenerateMembers(io::Printer* printer) const {
135
148
printer->Print(variables_,
136
"private $type$ $name$_;\n"
149
"private $type$ $name$_;\n");
150
WriteFieldDocComment(printer, descriptor_);
151
printer->Print(variables_,
137
152
"$deprecation$public boolean has$capitalized_name$() {\n"
138
153
" return $get_has_field_bit_message$;\n"
155
WriteFieldDocComment(printer, descriptor_);
156
printer->Print(variables_,
140
157
"$deprecation$public $type$ get$capitalized_name$() {\n"
141
158
" return $name$_;\n"
144
161
if (HasNestedBuilders(descriptor_->containing_type())) {
162
WriteFieldDocComment(printer, descriptor_);
145
163
printer->Print(variables_,
146
164
"$deprecation$public $type$OrBuilder get$capitalized_name$OrBuilder() {\n"
147
165
" return $name$_;\n"
208
226
// field of type "Field" called "Field".
210
228
// boolean hasField()
229
WriteFieldDocComment(printer, descriptor_);
211
230
printer->Print(variables_,
212
231
"$deprecation$public boolean has$capitalized_name$() {\n"
213
232
" return $get_has_field_bit_builder$;\n"
216
235
// Field getField()
236
WriteFieldDocComment(printer, descriptor_);
217
237
PrintNestedBuilderFunction(printer,
218
238
"$deprecation$public $type$ get$capitalized_name$()",
226
246
// Field.Builder setField(Field value)
247
WriteFieldDocComment(printer, descriptor_);
227
248
PrintNestedBuilderFunction(printer,
228
249
"$deprecation$public Builder set$capitalized_name$($type$ value)",
239
260
"return this;\n");
241
262
// Field.Builder setField(Field.Builder builderForValue)
263
WriteFieldDocComment(printer, descriptor_);
242
264
PrintNestedBuilderFunction(printer,
243
265
"$deprecation$public Builder set$capitalized_name$(\n"
244
266
" $type$.Builder builderForValue)",
252
274
"return this;\n");
254
276
// Field.Builder mergeField(Field value)
277
WriteFieldDocComment(printer, descriptor_);
255
278
PrintNestedBuilderFunction(printer,
256
279
"$deprecation$public Builder merge$capitalized_name$($type$ value)",
270
293
"return this;\n");
272
295
// Field.Builder clearField()
296
WriteFieldDocComment(printer, descriptor_);
273
297
PrintNestedBuilderFunction(printer,
274
298
"$deprecation$public Builder clear$capitalized_name$()",
282
306
"return this;\n");
284
308
if (HasNestedBuilders(descriptor_->containing_type())) {
309
WriteFieldDocComment(printer, descriptor_);
285
310
printer->Print(variables_,
286
311
"$deprecation$public $type$.Builder get$capitalized_name$Builder() {\n"
287
312
" $set_has_field_bit_builder$;\n"
288
313
" $on_changed$\n"
289
314
" return get$capitalized_name$FieldBuilder().getBuilder();\n"
316
WriteFieldDocComment(printer, descriptor_);
317
printer->Print(variables_,
291
318
"$deprecation$public $type$OrBuilder get$capitalized_name$OrBuilder() {\n"
292
319
" if ($name$Builder_ != null) {\n"
293
320
" return $name$Builder_.getMessageOrBuilder();\n"
295
322
" return $name$_;\n"
325
WriteFieldDocComment(printer, descriptor_);
326
printer->Print(variables_,
298
327
"private com.google.protobuf.SingleFieldBuilder<\n"
299
328
" $type$, $type$.Builder, $type$OrBuilder> \n"
300
329
" get$capitalized_name$FieldBuilder() {\n"
357
386
void MessageFieldGenerator::
358
387
GenerateParsingCode(io::Printer* printer) const {
359
388
printer->Print(variables_,
360
"$type$.Builder subBuilder = $type$.newBuilder();\n"
361
"if (has$capitalized_name$()) {\n"
362
" subBuilder.mergeFrom(get$capitalized_name$());\n"
389
"$type$.Builder subBuilder = null;\n"
390
"if ($get_has_field_bit_message$) {\n"
391
" subBuilder = $name$_.toBuilder();\n"
365
394
if (GetType(descriptor_) == FieldDescriptor::TYPE_GROUP) {
366
395
printer->Print(variables_,
367
"input.readGroup($number$, subBuilder, extensionRegistry);\n");
396
"$name$_ = input.readGroup($number$, $type$.PARSER,\n"
397
" extensionRegistry);\n");
369
399
printer->Print(variables_,
370
"input.readMessage(subBuilder, extensionRegistry);\n");
400
"$name$_ = input.readMessage($type$.PARSER, extensionRegistry);\n");
373
403
printer->Print(variables_,
374
"set$capitalized_name$(subBuilder.buildPartial());\n");
404
"if (subBuilder != null) {\n"
405
" subBuilder.mergeFrom($name$_);\n"
406
" $name$_ = subBuilder.buildPartial();\n"
408
printer->Print(variables_,
409
"$set_has_field_bit_message$;\n");
412
void MessageFieldGenerator::
413
GenerateParsingDoneCode(io::Printer* printer) const {
414
// noop for messages.
377
417
void MessageFieldGenerator::
437
477
// interface so that builders can choose dynamically to either return a
438
478
// message or a nested builder, so that asking for the interface doesn't
439
479
// cause a message to ever be built.
480
WriteFieldDocComment(printer, descriptor_);
440
481
printer->Print(variables_,
441
482
"$deprecation$java.util.List<$type$> \n"
442
" get$capitalized_name$List();\n"
443
"$deprecation$$type$ get$capitalized_name$(int index);\n"
483
" get$capitalized_name$List();\n");
484
WriteFieldDocComment(printer, descriptor_);
485
printer->Print(variables_,
486
"$deprecation$$type$ get$capitalized_name$(int index);\n");
487
WriteFieldDocComment(printer, descriptor_);
488
printer->Print(variables_,
444
489
"$deprecation$int get$capitalized_name$Count();\n");
445
490
if (HasNestedBuilders(descriptor_->containing_type())) {
491
WriteFieldDocComment(printer, descriptor_);
446
492
printer->Print(variables_,
447
493
"$deprecation$java.util.List<? extends $type$OrBuilder> \n"
448
" get$capitalized_name$OrBuilderList();\n"
494
" get$capitalized_name$OrBuilderList();\n");
495
WriteFieldDocComment(printer, descriptor_);
496
printer->Print(variables_,
449
497
"$deprecation$$type$OrBuilder get$capitalized_name$OrBuilder(\n"
450
498
" int index);\n");
454
502
void RepeatedMessageFieldGenerator::
455
503
GenerateMembers(io::Printer* printer) const {
456
504
printer->Print(variables_,
457
"private java.util.List<$type$> $name$_;\n"
505
"private java.util.List<$type$> $name$_;\n");
506
WriteFieldDocComment(printer, descriptor_);
507
printer->Print(variables_,
458
508
"$deprecation$public java.util.List<$type$> get$capitalized_name$List() {\n"
459
509
" return $name$_;\n" // note: unmodifiable list
511
WriteFieldDocComment(printer, descriptor_);
512
printer->Print(variables_,
461
513
"$deprecation$public java.util.List<? extends $type$OrBuilder> \n"
462
514
" get$capitalized_name$OrBuilderList() {\n"
463
515
" return $name$_;\n"
517
WriteFieldDocComment(printer, descriptor_);
518
printer->Print(variables_,
465
519
"$deprecation$public int get$capitalized_name$Count() {\n"
466
520
" return $name$_.size();\n"
522
WriteFieldDocComment(printer, descriptor_);
523
printer->Print(variables_,
468
524
"$deprecation$public $type$ get$capitalized_name$(int index) {\n"
469
525
" return $name$_.get(index);\n"
527
WriteFieldDocComment(printer, descriptor_);
528
printer->Print(variables_,
471
529
"$deprecation$public $type$OrBuilder get$capitalized_name$OrBuilder(\n"
472
530
" int index) {\n"
473
531
" return $name$_.get(index);\n"
552
610
// repeated field of type "Field" called "RepeatedField".
554
612
// List<Field> getRepeatedFieldList()
613
WriteFieldDocComment(printer, descriptor_);
555
614
PrintNestedBuilderFunction(printer,
556
615
"$deprecation$public java.util.List<$type$> get$capitalized_name$List()",
563
622
// int getRepeatedFieldCount()
623
WriteFieldDocComment(printer, descriptor_);
564
624
PrintNestedBuilderFunction(printer,
565
625
"$deprecation$public int get$capitalized_name$Count()",
572
632
// Field getRepeatedField(int index)
633
WriteFieldDocComment(printer, descriptor_);
573
634
PrintNestedBuilderFunction(printer,
574
635
"$deprecation$public $type$ get$capitalized_name$(int index)",
582
643
// Builder setRepeatedField(int index, Field value)
644
WriteFieldDocComment(printer, descriptor_);
583
645
PrintNestedBuilderFunction(printer,
584
646
"$deprecation$public Builder set$capitalized_name$(\n"
585
647
" int index, $type$ value)",
593
655
"return this;\n");
595
657
// Builder setRepeatedField(int index, Field.Builder builderForValue)
658
WriteFieldDocComment(printer, descriptor_);
596
659
PrintNestedBuilderFunction(printer,
597
660
"$deprecation$public Builder set$capitalized_name$(\n"
598
661
" int index, $type$.Builder builderForValue)",
606
669
"return this;\n");
608
671
// Builder addRepeatedField(Field value)
672
WriteFieldDocComment(printer, descriptor_);
609
673
PrintNestedBuilderFunction(printer,
610
674
"$deprecation$public Builder add$capitalized_name$($type$ value)",
622
686
"return this;\n");
624
688
// Builder addRepeatedField(int index, Field value)
689
WriteFieldDocComment(printer, descriptor_);
625
690
PrintNestedBuilderFunction(printer,
626
691
"$deprecation$public Builder add$capitalized_name$(\n"
627
692
" int index, $type$ value)",
638
703
"return this;\n");
640
705
// Builder addRepeatedField(Field.Builder builderForValue)
706
WriteFieldDocComment(printer, descriptor_);
641
707
PrintNestedBuilderFunction(printer,
642
708
"$deprecation$public Builder add$capitalized_name$(\n"
643
709
" $type$.Builder builderForValue)",
651
717
"return this;\n");
653
719
// Builder addRepeatedField(int index, Field.Builder builderForValue)
720
WriteFieldDocComment(printer, descriptor_);
654
721
PrintNestedBuilderFunction(printer,
655
722
"$deprecation$public Builder add$capitalized_name$(\n"
656
723
" int index, $type$.Builder builderForValue)",
664
731
"return this;\n");
666
733
// Builder addAllRepeatedField(Iterable<Field> values)
734
WriteFieldDocComment(printer, descriptor_);
667
735
PrintNestedBuilderFunction(printer,
668
736
"$deprecation$public Builder addAll$capitalized_name$(\n"
669
737
" java.lang.Iterable<? extends $type$> values)",
677
745
"return this;\n");
679
747
// Builder clearAllRepeatedField()
748
WriteFieldDocComment(printer, descriptor_);
680
749
PrintNestedBuilderFunction(printer,
681
750
"$deprecation$public Builder clear$capitalized_name$()",
689
758
"return this;\n");
691
760
// Builder removeRepeatedField(int index)
761
WriteFieldDocComment(printer, descriptor_);
692
762
PrintNestedBuilderFunction(printer,
693
763
"$deprecation$public Builder remove$capitalized_name$(int index)",
701
771
"return this;\n");
703
773
if (HasNestedBuilders(descriptor_->containing_type())) {
774
WriteFieldDocComment(printer, descriptor_);
704
775
printer->Print(variables_,
705
776
"$deprecation$public $type$.Builder get$capitalized_name$Builder(\n"
706
777
" int index) {\n"
707
778
" return get$capitalized_name$FieldBuilder().getBuilder(index);\n"
781
WriteFieldDocComment(printer, descriptor_);
782
printer->Print(variables_,
710
783
"$deprecation$public $type$OrBuilder get$capitalized_name$OrBuilder(\n"
711
784
" int index) {\n"
712
785
" if ($name$Builder_ == null) {\n"
715
788
" return $name$Builder_.getMessageOrBuilder(index);\n"
792
WriteFieldDocComment(printer, descriptor_);
793
printer->Print(variables_,
719
794
"$deprecation$public java.util.List<? extends $type$OrBuilder> \n"
720
795
" get$capitalized_name$OrBuilderList() {\n"
721
796
" if ($name$Builder_ != null) {\n"
724
799
" return java.util.Collections.unmodifiableList($name$_);\n"
803
WriteFieldDocComment(printer, descriptor_);
804
printer->Print(variables_,
728
805
"$deprecation$public $type$.Builder add$capitalized_name$Builder() {\n"
729
806
" return get$capitalized_name$FieldBuilder().addBuilder(\n"
730
807
" $type$.getDefaultInstance());\n"
809
WriteFieldDocComment(printer, descriptor_);
810
printer->Print(variables_,
732
811
"$deprecation$public $type$.Builder add$capitalized_name$Builder(\n"
733
812
" int index) {\n"
734
813
" return get$capitalized_name$FieldBuilder().addBuilder(\n"
735
814
" index, $type$.getDefaultInstance());\n"
816
WriteFieldDocComment(printer, descriptor_);
817
printer->Print(variables_,
737
818
"$deprecation$public java.util.List<$type$.Builder> \n"
738
819
" get$capitalized_name$BuilderList() {\n"
739
820
" return get$capitalized_name$FieldBuilder().getBuilderList();\n"
827
908
void RepeatedMessageFieldGenerator::
828
909
GenerateParsingCode(io::Printer* printer) const {
829
910
printer->Print(variables_,
830
"$type$.Builder subBuilder = $type$.newBuilder();\n");
911
"if (!$get_mutable_bit_parser$) {\n"
912
" $name$_ = new java.util.ArrayList<$type$>();\n"
913
" $set_mutable_bit_parser$;\n"
832
916
if (GetType(descriptor_) == FieldDescriptor::TYPE_GROUP) {
833
917
printer->Print(variables_,
834
"input.readGroup($number$, subBuilder, extensionRegistry);\n");
918
"$name$_.add(input.readGroup($number$, $type$.PARSER,\n"
919
" extensionRegistry));\n");
836
921
printer->Print(variables_,
837
"input.readMessage(subBuilder, extensionRegistry);\n");
922
"$name$_.add(input.readMessage($type$.PARSER, extensionRegistry));\n");
926
void RepeatedMessageFieldGenerator::
927
GenerateParsingDoneCode(io::Printer* printer) const {
840
928
printer->Print(variables_,
841
"add$capitalized_name$(subBuilder.buildPartial());\n");
929
"if ($get_mutable_bit_parser$) {\n"
930
" $name$_ = java.util.Collections.unmodifiableList($name$_);\n"
844
934
void RepeatedMessageFieldGenerator::