java_message_field_lite.cc
Go to the documentation of this file.
1 // Protocol Buffers - Google's data interchange format
2 // Copyright 2008 Google Inc. All rights reserved.
3 // https://developers.google.com/protocol-buffers/
4 //
5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions are
7 // met:
8 //
9 // * Redistributions of source code must retain the above copyright
10 // notice, this list of conditions and the following disclaimer.
11 // * Redistributions in binary form must reproduce the above
12 // copyright notice, this list of conditions and the following disclaimer
13 // in the documentation and/or other materials provided with the
14 // distribution.
15 // * Neither the name of Google Inc. nor the names of its
16 // contributors may be used to endorse or promote products derived from
17 // this software without specific prior written permission.
18 //
19 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 
31 // Author: kenton@google.com (Kenton Varda)
32 // Based on original Protocol Buffers design by
33 // Sanjay Ghemawat, Jeff Dean, and others.
34 
35 #include <map>
36 #include <string>
37 
46 
47 
48 namespace google {
49 namespace protobuf {
50 namespace compiler {
51 namespace java {
52 
53 namespace {
54 
55 void SetMessageVariables(const FieldDescriptor* descriptor, int messageBitIndex,
56  int builderBitIndex, const FieldGeneratorInfo* info,
57  ClassNameResolver* name_resolver,
58  std::map<std::string, std::string>* variables) {
59  SetCommonFieldVariables(descriptor, info, variables);
60 
61  (*variables)["type"] =
62  name_resolver->GetImmutableClassName(descriptor->message_type());
63  (*variables)["mutable_type"] =
64  name_resolver->GetMutableClassName(descriptor->message_type());
65  (*variables)["group_or_message"] =
67  : "Message";
68  // TODO(birdo): Add @deprecated javadoc when generating javadoc is supported
69  // by the proto compiler
70  (*variables)["deprecation"] =
71  descriptor->options().deprecated() ? "@java.lang.Deprecated " : "";
72  (*variables)["required"] = descriptor->is_required() ? "true" : "false";
73 
74  if (SupportFieldPresence(descriptor->file())) {
75  // For singular messages and builders, one bit is used for the hasField bit.
76  (*variables)["get_has_field_bit_message"] = GenerateGetBit(messageBitIndex);
77 
78  // Note that these have a trailing ";".
79  (*variables)["set_has_field_bit_message"] =
80  GenerateSetBit(messageBitIndex) + ";";
81  (*variables)["clear_has_field_bit_message"] =
82  GenerateClearBit(messageBitIndex) + ";";
83 
84  (*variables)["is_field_present_message"] = GenerateGetBit(messageBitIndex);
85  } else {
86  (*variables)["set_has_field_bit_message"] = "";
87  (*variables)["clear_has_field_bit_message"] = "";
88 
89  (*variables)["is_field_present_message"] =
90  (*variables)["name"] + "_ != null";
91  }
92 
93  // For repeated builders, the underlying list tracks mutability state.
94  (*variables)["is_mutable"] = (*variables)["name"] + "_.isModifiable()";
95 
96  (*variables)["get_has_field_bit_from_local"] =
97  GenerateGetBitFromLocal(builderBitIndex);
98  (*variables)["set_has_field_bit_to_local"] =
99  GenerateSetBitToLocal(messageBitIndex);
100 }
101 
102 } // namespace
103 
104 // ===================================================================
105 
107  const FieldDescriptor* descriptor, int messageBitIndex, Context* context)
109  messageBitIndex_(messageBitIndex),
110  name_resolver_(context->GetNameResolver()) {
111  SetMessageVariables(descriptor, messageBitIndex, 0,
114 }
115 
117 
119  return SupportFieldPresence(descriptor_->file()) ? 1 : 0;
120 }
121 
123  io::Printer* printer) const {
125  printer->Print(variables_, "$deprecation$boolean has$capitalized_name$();\n");
127  printer->Print(variables_, "$deprecation$$type$ get$capitalized_name$();\n");
128 }
129 
131  io::Printer* printer) const {
132 
133  printer->Print(variables_, "private $type$ $name$_;\n");
135 
138  printer->Print(
139  variables_,
140  "@java.lang.Override\n"
141  "$deprecation$public boolean ${$has$capitalized_name$$}$() {\n"
142  " return $get_has_field_bit_message$;\n"
143  "}\n");
144  printer->Annotate("{", "}", descriptor_);
146  printer->Print(
147  variables_,
148  "@java.lang.Override\n"
149  "$deprecation$public $type$ ${$get$capitalized_name$$}$() {\n"
150  " return $name$_ == null ? $type$.getDefaultInstance() : $name$_;\n"
151  "}\n");
152  printer->Annotate("{", "}", descriptor_);
153  } else {
155  printer->Print(
156  variables_,
157  "@java.lang.Override\n"
158  "$deprecation$public boolean ${$has$capitalized_name$$}$() {\n"
159  " return $name$_ != null;\n"
160  "}\n");
161  printer->Annotate("{", "}", descriptor_);
163  printer->Print(
164  variables_,
165  "@java.lang.Override\n"
166  "$deprecation$public $type$ ${$get$capitalized_name$$}$() {\n"
167  " return $name$_ == null ? $type$.getDefaultInstance() : $name$_;\n"
168  "}\n");
169  printer->Annotate("{", "}", descriptor_);
170  }
171 
172  // Field.Builder setField(Field value)
174  printer->Print(variables_,
175  "private void set$capitalized_name$($type$ value) {\n"
176  " if (value == null) {\n"
177  " throw new NullPointerException();\n"
178  " }\n"
179  " $name$_ = value;\n"
180  " $set_has_field_bit_message$\n"
181  " }\n");
182 
183  // Field.Builder setField(Field.Builder builderForValue)
185  printer->Print(variables_,
186  "private void set$capitalized_name$(\n"
187  " $type$.Builder builderForValue) {\n"
188  " $name$_ = builderForValue.build();\n"
189  " $set_has_field_bit_message$\n"
190  "}\n");
191 
192  // Field.Builder mergeField(Field value)
194  printer->Print(
195  variables_,
196  "@java.lang.SuppressWarnings({\"ReferenceEquality\"})\n"
197  "private void merge$capitalized_name$($type$ value) {\n"
198  " if (value == null) {\n"
199  " throw new NullPointerException();\n"
200  " }\n"
201  " if ($name$_ != null &&\n"
202  " $name$_ != $type$.getDefaultInstance()) {\n"
203  " $name$_ =\n"
204  " $type$.newBuilder($name$_).mergeFrom(value).buildPartial();\n"
205  " } else {\n"
206  " $name$_ = value;\n"
207  " }\n"
208  " $set_has_field_bit_message$\n"
209  "}\n");
210 
211  // Field.Builder clearField()
213  printer->Print(variables_,
214  "private void clear$capitalized_name$() {"
215  " $name$_ = null;\n"
216  " $clear_has_field_bit_message$\n"
217  "}\n");
218 }
219 
221  io::Printer* printer) const {
222  // The comments above the methods below are based on a hypothetical
223  // field of type "Field" called "Field".
224 
225  // boolean hasField()
227  printer->Print(variables_,
228  "@java.lang.Override\n"
229  "$deprecation$public boolean ${$has$capitalized_name$$}$() {\n"
230  " return instance.has$capitalized_name$();\n"
231  "}\n");
232  printer->Annotate("{", "}", descriptor_);
233 
234  // Field getField()
236  printer->Print(variables_,
237  "@java.lang.Override\n"
238  "$deprecation$public $type$ ${$get$capitalized_name$$}$() {\n"
239  " return instance.get$capitalized_name$();\n"
240  "}\n");
241  printer->Annotate("{", "}", descriptor_);
242 
243  // Field.Builder setField(Field value)
245  printer->Print(variables_,
246  "$deprecation$public Builder "
247  "${$set$capitalized_name$$}$($type$ value) {\n"
248  " copyOnWrite();\n"
249  " instance.set$capitalized_name$(value);\n"
250  " return this;\n"
251  " }\n");
252  printer->Annotate("{", "}", descriptor_);
253 
254  // Field.Builder setField(Field.Builder builderForValue)
256  printer->Print(variables_,
257  "$deprecation$public Builder ${$set$capitalized_name$$}$(\n"
258  " $type$.Builder builderForValue) {\n"
259  " copyOnWrite();\n"
260  " instance.set$capitalized_name$(builderForValue);\n"
261  " return this;\n"
262  "}\n");
263  printer->Annotate("{", "}", descriptor_);
264 
265  // Field.Builder mergeField(Field value)
267  printer->Print(variables_,
268  "$deprecation$public Builder "
269  "${$merge$capitalized_name$$}$($type$ value) {\n"
270  " copyOnWrite();\n"
271  " instance.merge$capitalized_name$(value);\n"
272  " return this;\n"
273  "}\n");
274  printer->Annotate("{", "}", descriptor_);
275 
276  // Field.Builder clearField()
278  printer->Print(variables_,
279  "$deprecation$public Builder ${$clear$capitalized_name$$}$() {"
280  " copyOnWrite();\n"
281  " instance.clear$capitalized_name$();\n"
282  " return this;\n"
283  "}\n");
284  printer->Annotate("{", "}", descriptor_);
285 }
286 
287 
289  io::Printer* printer, std::vector<uint16>* output) const {
292  output);
295  }
296  printer->Print(variables_, "\"$name$_\",\n");
297 }
298 
300  io::Printer* printer) const {}
301 
304 }
305 
306 // ===================================================================
307 
310  int messageBitIndex,
311  Context* context)
312  : ImmutableMessageFieldLiteGenerator(descriptor, messageBitIndex, context) {
313  const OneofGeneratorInfo* info =
314  context->GetOneofGeneratorInfo(descriptor->containing_oneof());
316 }
317 
320 
322  io::Printer* printer) const {
325  printer->Print(variables_,
326  "@java.lang.Override\n"
327  "$deprecation$public boolean ${$has$capitalized_name$$}$() {\n"
328  " return $has_oneof_case_message$;\n"
329  "}\n");
330  printer->Annotate("{", "}", descriptor_);
332  printer->Print(variables_,
333  "@java.lang.Override\n"
334  "$deprecation$public $type$ ${$get$capitalized_name$$}$() {\n"
335  " if ($has_oneof_case_message$) {\n"
336  " return ($type$) $oneof_name$_;\n"
337  " }\n"
338  " return $type$.getDefaultInstance();\n"
339  "}\n");
340  printer->Annotate("{", "}", descriptor_);
341 
342  // Field.Builder setField(Field value)
344  printer->Print(variables_,
345  "private void set$capitalized_name$($type$ value) {\n"
346  " if (value == null) {\n"
347  " throw new NullPointerException();\n"
348  " }\n"
349  " $oneof_name$_ = value;\n"
350  " $set_oneof_case_message$;\n"
351  "}\n");
352 
353  // Field.Builder setField(Field.Builder builderForValue)
355  printer->Print(variables_,
356  "private void set$capitalized_name$(\n"
357  " $type$.Builder builderForValue) {\n"
358  " $oneof_name$_ = builderForValue.build();\n"
359  " $set_oneof_case_message$;\n"
360  "}\n");
361 
362  // Field.Builder mergeField(Field value)
364  printer->Print(
365  variables_,
366  "private void merge$capitalized_name$($type$ value) {\n"
367  " if (value == null) {\n"
368  " throw new NullPointerException();\n"
369  " }\n"
370  " if ($has_oneof_case_message$ &&\n"
371  " $oneof_name$_ != $type$.getDefaultInstance()) {\n"
372  " $oneof_name$_ = $type$.newBuilder(($type$) $oneof_name$_)\n"
373  " .mergeFrom(value).buildPartial();\n"
374  " } else {\n"
375  " $oneof_name$_ = value;\n"
376  " }\n"
377  " $set_oneof_case_message$;\n"
378  "}\n");
379 
380  // Field.Builder clearField()
382  printer->Print(variables_,
383  "private void clear$capitalized_name$() {\n"
384  " if ($has_oneof_case_message$) {\n"
385  " $clear_oneof_case_message$;\n"
386  " $oneof_name$_ = null;\n"
387  " }\n"
388  "}\n");
389 }
390 
392  io::Printer* printer, std::vector<uint16>* output) const {
395  output);
397  printer->Print(variables_, "$oneof_stored_type$.class,\n");
398 }
399 
401  io::Printer* printer) const {
402  // The comments above the methods below are based on a hypothetical
403  // field of type "Field" called "Field".
404 
405  // boolean hasField()
407  printer->Print(variables_,
408  "@java.lang.Override\n"
409  "$deprecation$public boolean ${$has$capitalized_name$$}$() {\n"
410  " return instance.has$capitalized_name$();\n"
411  "}\n");
412  printer->Annotate("{", "}", descriptor_);
413 
414  // Field getField()
416  printer->Print(variables_,
417  "@java.lang.Override\n"
418  "$deprecation$public $type$ ${$get$capitalized_name$$}$() {\n"
419  " return instance.get$capitalized_name$();\n"
420  "}\n");
421  printer->Annotate("{", "}", descriptor_);
422 
423  // Field.Builder setField(Field value)
425  printer->Print(variables_,
426  "$deprecation$public Builder "
427  "${$set$capitalized_name$$}$($type$ value) {\n"
428  " copyOnWrite();\n"
429  " instance.set$capitalized_name$(value);\n"
430  " return this;\n"
431  "}\n");
432  printer->Annotate("{", "}", descriptor_);
433 
434  // Field.Builder setField(Field.Builder builderForValue)
436  printer->Print(variables_,
437  "$deprecation$public Builder ${$set$capitalized_name$$}$(\n"
438  " $type$.Builder builderForValue) {\n"
439  " copyOnWrite();\n"
440  " instance.set$capitalized_name$(builderForValue);\n"
441  " return this;\n"
442  "}\n");
443  printer->Annotate("{", "}", descriptor_);
444 
445  // Field.Builder mergeField(Field value)
447  printer->Print(variables_,
448  "$deprecation$public Builder "
449  "${$merge$capitalized_name$$}$($type$ value) {\n"
450  " copyOnWrite();\n"
451  " instance.merge$capitalized_name$(value);\n"
452  " return this;\n"
453  "}\n");
454  printer->Annotate("{", "}", descriptor_);
455 
456  // Field.Builder clearField()
458  printer->Print(
459  variables_,
460  "$deprecation$public Builder ${$clear$capitalized_name$$}$() {\n"
461  " copyOnWrite();\n"
462  " instance.clear$capitalized_name$();\n"
463  " return this;\n"
464  "}\n");
465  printer->Annotate("{", "}", descriptor_);
466 }
467 
468 // ===================================================================
469 
472  const FieldDescriptor* descriptor, int messageBitIndex,
473  Context* context)
474  : descriptor_(descriptor), name_resolver_(context->GetNameResolver()) {
475  SetMessageVariables(descriptor, messageBitIndex, 0,
478 }
479 
482 
484  return 0;
485 }
486 
488  io::Printer* printer) const {
489  // TODO(jonp): In the future, consider having methods specific to the
490  // interface so that builders can choose dynamically to either return a
491  // message or a nested builder, so that asking for the interface doesn't
492  // cause a message to ever be built.
494  printer->Print(variables_,
495  "$deprecation$java.util.List<$type$> \n"
496  " get$capitalized_name$List();\n");
498  printer->Print(variables_,
499  "$deprecation$$type$ get$capitalized_name$(int index);\n");
501  printer->Print(variables_,
502  "$deprecation$int get$capitalized_name$Count();\n");
503 }
504 
506  io::Printer* printer) const {
507  printer->Print(
508  variables_,
509  "private com.google.protobuf.Internal.ProtobufList<$type$> $name$_;\n");
512  printer->Print(variables_,
513  "@java.lang.Override\n"
514  "$deprecation$public java.util.List<$type$> "
515  "${$get$capitalized_name$List$}$() {\n"
516  " return $name$_;\n" // note: unmodifiable list
517  "}\n");
518  printer->Annotate("{", "}", descriptor_);
520  printer->Print(
521  variables_,
522  "$deprecation$public java.util.List<? extends $type$OrBuilder> \n"
523  " ${$get$capitalized_name$OrBuilderList$}$() {\n"
524  " return $name$_;\n"
525  "}\n");
526  printer->Annotate("{", "}", descriptor_);
528  printer->Print(
529  variables_,
530  "@java.lang.Override\n"
531  "$deprecation$public int ${$get$capitalized_name$Count$}$() {\n"
532  " return $name$_.size();\n"
533  "}\n");
534  printer->Annotate("{", "}", descriptor_);
536  printer->Print(
537  variables_,
538  "@java.lang.Override\n"
539  "$deprecation$public $type$ ${$get$capitalized_name$$}$(int index) {\n"
540  " return $name$_.get(index);\n"
541  "}\n");
542  printer->Annotate("{", "}", descriptor_);
544  printer->Print(variables_,
545  "$deprecation$public $type$OrBuilder "
546  "${$get$capitalized_name$OrBuilder$}$(\n"
547  " int index) {\n"
548  " return $name$_.get(index);\n"
549  "}\n");
550  printer->Annotate("{", "}", descriptor_);
551 
552  printer->Print(
553  variables_,
554  "private void ensure$capitalized_name$IsMutable() {\n"
555  " if (!$is_mutable$) {\n"
556  " $name$_ =\n"
557  " com.google.protobuf.GeneratedMessageLite.mutableCopy($name$_);\n"
558  " }\n"
559  "}\n"
560  "\n");
561 
562  // Builder setRepeatedField(int index, Field value)
564  printer->Print(variables_,
565  "private void set$capitalized_name$(\n"
566  " int index, $type$ value) {\n"
567  " if (value == null) {\n"
568  " throw new NullPointerException();\n"
569  " }\n"
570  " ensure$capitalized_name$IsMutable();\n"
571  " $name$_.set(index, value);\n"
572  "}\n");
573 
574  // Builder setRepeatedField(int index, Field.Builder builderForValue)
576  printer->Print(variables_,
577  "private void set$capitalized_name$(\n"
578  " int index, $type$.Builder builderForValue) {\n"
579  " ensure$capitalized_name$IsMutable();\n"
580  " $name$_.set(index, builderForValue.build());\n"
581  "}\n");
582 
583  // Builder addRepeatedField(Field value)
585  printer->Print(variables_,
586  "private void add$capitalized_name$($type$ value) {\n"
587  " if (value == null) {\n"
588  " throw new NullPointerException();\n"
589  " }\n"
590  " ensure$capitalized_name$IsMutable();\n"
591  " $name$_.add(value);\n"
592  "}\n");
593 
594  // Builder addRepeatedField(int index, Field value)
596  printer->Print(variables_,
597  "private void add$capitalized_name$(\n"
598  " int index, $type$ value) {\n"
599  " if (value == null) {\n"
600  " throw new NullPointerException();\n"
601  " }\n"
602  " ensure$capitalized_name$IsMutable();\n"
603  " $name$_.add(index, value);\n"
604  "}\n");
605  // Builder addRepeatedField(Field.Builder builderForValue)
607  printer->Print(variables_,
608  "private void add$capitalized_name$(\n"
609  " $type$.Builder builderForValue) {\n"
610  " ensure$capitalized_name$IsMutable();\n"
611  " $name$_.add(builderForValue.build());\n"
612  "}\n");
613 
614  // Builder addRepeatedField(int index, Field.Builder builderForValue)
616  printer->Print(variables_,
617  "private void add$capitalized_name$(\n"
618  " int index, $type$.Builder builderForValue) {\n"
619  " ensure$capitalized_name$IsMutable();\n"
620  " $name$_.add(index, builderForValue.build());\n"
621  "}\n");
622 
623  // Builder addAllRepeatedField(Iterable<Field> values)
625  printer->Print(variables_,
626  "private void addAll$capitalized_name$(\n"
627  " java.lang.Iterable<? extends $type$> values) {\n"
628  " ensure$capitalized_name$IsMutable();\n"
629  " com.google.protobuf.AbstractMessageLite.addAll(\n"
630  " values, $name$_);\n"
631  "}\n");
632 
633  // Builder clearAllRepeatedField()
635  printer->Print(variables_,
636  "private void clear$capitalized_name$() {\n"
637  " $name$_ = emptyProtobufList();\n"
638  "}\n");
639 
640  // Builder removeRepeatedField(int index)
642  printer->Print(variables_,
643  "private void remove$capitalized_name$(int index) {\n"
644  " ensure$capitalized_name$IsMutable();\n"
645  " $name$_.remove(index);\n"
646  "}\n");
647 }
648 
650  io::Printer* printer) const {
651  // The comments above the methods below are based on a hypothetical
652  // repeated field of type "Field" called "RepeatedField".
653 
654  // List<Field> getRepeatedFieldList()
656  printer->Print(variables_,
657  "@java.lang.Override\n"
658  "$deprecation$public java.util.List<$type$> "
659  "${$get$capitalized_name$List$}$() {\n"
660  " return java.util.Collections.unmodifiableList(\n"
661  " instance.get$capitalized_name$List());\n"
662  "}\n");
663  printer->Annotate("{", "}", descriptor_);
664 
665  // int getRepeatedFieldCount()
667  printer->Print(
668  variables_,
669  "@java.lang.Override\n"
670  "$deprecation$public int ${$get$capitalized_name$Count$}$() {\n"
671  " return instance.get$capitalized_name$Count();\n"
672  "}");
673  printer->Annotate("{", "}", descriptor_);
674 
675  // Field getRepeatedField(int index)
677  printer->Print(
678  variables_,
679  "@java.lang.Override\n"
680  "$deprecation$public $type$ ${$get$capitalized_name$$}$(int index) {\n"
681  " return instance.get$capitalized_name$(index);\n"
682  "}\n");
683  printer->Annotate("{", "}", descriptor_);
684 
685  // Builder setRepeatedField(int index, Field value)
687  printer->Print(variables_,
688  "$deprecation$public Builder ${$set$capitalized_name$$}$(\n"
689  " int index, $type$ value) {\n"
690  " copyOnWrite();\n"
691  " instance.set$capitalized_name$(index, value);\n"
692  " return this;\n"
693  "}\n");
694  printer->Annotate("{", "}", descriptor_);
695 
696  // Builder setRepeatedField(int index, Field.Builder builderForValue)
698  printer->Print(variables_,
699  "$deprecation$public Builder ${$set$capitalized_name$$}$(\n"
700  " int index, $type$.Builder builderForValue) {\n"
701  " copyOnWrite();\n"
702  " instance.set$capitalized_name$(index, builderForValue);\n"
703  " return this;\n"
704  "}\n");
705  printer->Annotate("{", "}", descriptor_);
706 
707  // Builder addRepeatedField(Field value)
709  printer->Print(variables_,
710  "$deprecation$public Builder "
711  "${$add$capitalized_name$$}$($type$ value) {\n"
712  " copyOnWrite();\n"
713  " instance.add$capitalized_name$(value);\n"
714  " return this;\n"
715  "}\n");
716  printer->Annotate("{", "}", descriptor_);
717 
718  // Builder addRepeatedField(int index, Field value)
720  printer->Print(variables_,
721  "$deprecation$public Builder ${$add$capitalized_name$$}$(\n"
722  " int index, $type$ value) {\n"
723  " copyOnWrite();\n"
724  " instance.add$capitalized_name$(index, value);\n"
725  " return this;\n"
726  "}\n");
727  printer->Annotate("{", "}", descriptor_);
728  // Builder addRepeatedField(Field.Builder builderForValue)
730  printer->Print(variables_,
731  "$deprecation$public Builder ${$add$capitalized_name$$}$(\n"
732  " $type$.Builder builderForValue) {\n"
733  " copyOnWrite();\n"
734  " instance.add$capitalized_name$(builderForValue);\n"
735  " return this;\n"
736  "}\n");
737  printer->Annotate("{", "}", descriptor_);
738 
739  // Builder addRepeatedField(int index, Field.Builder builderForValue)
741  printer->Print(variables_,
742  "$deprecation$public Builder ${$add$capitalized_name$$}$(\n"
743  " int index, $type$.Builder builderForValue) {\n"
744  " copyOnWrite();\n"
745  " instance.add$capitalized_name$(index, builderForValue);\n"
746  " return this;\n"
747  "}\n");
748  printer->Annotate("{", "}", descriptor_);
749 
750  // Builder addAllRepeatedField(Iterable<Field> values)
752  printer->Print(variables_,
753  "$deprecation$public Builder ${$addAll$capitalized_name$$}$(\n"
754  " java.lang.Iterable<? extends $type$> values) {\n"
755  " copyOnWrite();\n"
756  " instance.addAll$capitalized_name$(values);\n"
757  " return this;\n"
758  "}\n");
759  printer->Annotate("{", "}", descriptor_);
760 
761  // Builder clearAllRepeatedField()
763  printer->Print(
764  variables_,
765  "$deprecation$public Builder ${$clear$capitalized_name$$}$() {\n"
766  " copyOnWrite();\n"
767  " instance.clear$capitalized_name$();\n"
768  " return this;\n"
769  "}\n");
770  printer->Annotate("{", "}", descriptor_);
771 
772  // Builder removeRepeatedField(int index)
774  printer->Print(variables_,
775  "$deprecation$public Builder "
776  "${$remove$capitalized_name$$}$(int index) {\n"
777  " copyOnWrite();\n"
778  " instance.remove$capitalized_name$(index);\n"
779  " return this;\n"
780  "}\n");
781  printer->Annotate("{", "}", descriptor_);
782 }
783 
784 
786  io::Printer* printer, std::vector<uint16>* output) const {
789  output);
790  printer->Print(variables_,
791  "\"$name$_\",\n"
792  "$type$.class,\n");
793 }
794 
796  io::Printer* printer) const {
797  printer->Print(variables_, "$name$_ = emptyProtobufList();\n");
798 }
799 
802 }
803 
804 } // namespace java
805 } // namespace compiler
806 } // namespace protobuf
807 } // namespace google
google::protobuf::io::Printer::Print
void Print(const std::map< std::string, std::string > &variables, const char *text)
Definition: printer.cc:112
google::protobuf::compiler::java::GenerateClearBit
std::string GenerateClearBit(int bitIndex)
Definition: java_helpers.cc:672
java_name_resolver.h
google::protobuf::FieldDescriptor
Definition: src/google/protobuf/descriptor.h:515
java_doc_comment.h
google::protobuf::compiler::java::RepeatedImmutableMessageFieldLiteGenerator::GenerateMembers
void GenerateMembers(io::Printer *printer) const
Definition: java_message_field_lite.cc:505
java_helpers.h
google::protobuf::compiler::java::ImmutableMessageOneofFieldLiteGenerator::GenerateMembers
void GenerateMembers(io::Printer *printer) const
Definition: java_message_field_lite.cc:321
google::protobuf::compiler::java::RepeatedImmutableMessageFieldLiteGenerator::name_resolver_
ClassNameResolver * name_resolver_
Definition: java_message_field_lite.h:125
google::protobuf::compiler::java::ImmutableMessageFieldLiteGenerator::GenerateMembers
void GenerateMembers(io::Printer *printer) const
Definition: java_message_field_lite.cc:130
google::protobuf::compiler::java::GenerateSetBit
std::string GenerateSetBit(int bitIndex)
Definition: java_helpers.cc:668
google::protobuf::compiler::java::ImmutableMessageOneofFieldLiteGenerator::~ImmutableMessageOneofFieldLiteGenerator
~ImmutableMessageOneofFieldLiteGenerator()
Definition: java_message_field_lite.cc:319
google::protobuf::compiler::java::Context
Definition: java_context.h:65
google::protobuf::compiler::java::ImmutableMessageFieldLiteGenerator::GenerateInitializationCode
void GenerateInitializationCode(io::Printer *printer) const
Definition: java_message_field_lite.cc:299
google::protobuf::compiler::java::WriteFieldDocComment
void WriteFieldDocComment(io::Printer *printer, const FieldDescriptor *field)
Definition: java_doc_comment.cc:175
string
GLsizei const GLchar *const * string
Definition: glcorearb.h:3083
google::protobuf::compiler::java::ClassNameResolver::GetImmutableClassName
std::string GetImmutableClassName(const DescriptorType *descriptor)
Definition: java_name_resolver.h:88
google::protobuf::compiler::java::SetCommonOneofVariables
void SetCommonOneofVariables(const FieldDescriptor *descriptor, const OneofGeneratorInfo *info, std::map< std::string, std::string > *variables)
Definition: java_field.cc:263
descriptor
Descriptor * descriptor
Definition: php/ext/google/protobuf/protobuf.h:936
google::protobuf::compiler::java::RepeatedImmutableMessageFieldLiteGenerator::GenerateFieldInfo
void GenerateFieldInfo(io::Printer *printer, std::vector< uint16 > *output) const
Definition: java_message_field_lite.cc:785
google::protobuf::compiler::java::GetExperimentalJavaFieldType
int GetExperimentalJavaFieldType(const FieldDescriptor *field)
Definition: java_helpers.cc:961
google::protobuf::compiler::java::RepeatedImmutableMessageFieldLiteGenerator::GetBoxedType
std::string GetBoxedType() const
Definition: java_message_field_lite.cc:800
FieldDescriptor
Definition: ruby/ext/google/protobuf_c/protobuf.h:129
google::protobuf::compiler::java::ImmutableMessageOneofFieldLiteGenerator::ImmutableMessageOneofFieldLiteGenerator
ImmutableMessageOneofFieldLiteGenerator(const FieldDescriptor *descriptor, int messageBitIndex, Context *context)
Definition: java_message_field_lite.cc:309
google::protobuf::compiler::java::RepeatedImmutableMessageFieldLiteGenerator::GetNumBitsForMessage
int GetNumBitsForMessage() const
Definition: java_message_field_lite.cc:483
google::protobuf::compiler::cpp::SetMessageVariables
void SetMessageVariables(const FieldDescriptor *descriptor, std::map< std::string, std::string > *variables, const Options &options)
Definition: cpp_map_field.cc:48
google::protobuf::compiler::java::ImmutableMessageOneofFieldLiteGenerator::GenerateBuilderMembers
void GenerateBuilderMembers(io::Printer *printer) const
Definition: java_message_field_lite.cc:400
google::protobuf::compiler::java::RepeatedImmutableMessageFieldLiteGenerator::descriptor_
const FieldDescriptor * descriptor_
Definition: java_message_field_lite.h:123
google::protobuf::compiler::java::ImmutableMessageFieldLiteGenerator::messageBitIndex_
const int messageBitIndex_
Definition: java_message_field_lite.h:80
strutil.h
google::protobuf::compiler::java::OneofGeneratorInfo
Definition: java_field.h:164
google::protobuf::FieldDescriptor::file
const FileDescriptor * file() const
google::protobuf::compiler::java::Context::GetFieldGeneratorInfo
const FieldGeneratorInfo * GetFieldGeneratorInfo(const FieldDescriptor *field) const
Definition: java_context.cc:170
google::protobuf::compiler::java::RepeatedImmutableMessageFieldLiteGenerator::GenerateBuilderMembers
void GenerateBuilderMembers(io::Printer *printer) const
Definition: java_message_field_lite.cc:649
printer.h
google::protobuf::compiler::java::RepeatedImmutableMessageFieldLiteGenerator::~RepeatedImmutableMessageFieldLiteGenerator
~RepeatedImmutableMessageFieldLiteGenerator()
Definition: java_message_field_lite.cc:481
google::protobuf::compiler::java::PrintExtraFieldInfo
void PrintExtraFieldInfo(const std::map< std::string, std::string > &variables, io::Printer *printer)
Definition: java_field.cc:278
google::protobuf::compiler::java::GenerateSetBitToLocal
std::string GenerateSetBitToLocal(int bitIndex)
Definition: java_helpers.cc:685
google::protobuf::FieldDescriptor::number
int number() const
google::protobuf::compiler::java::ImmutableMessageFieldLiteGenerator::GenerateInterfaceMembers
void GenerateInterfaceMembers(io::Printer *printer) const
Definition: java_message_field_lite.cc:122
google::protobuf::io::Printer::Annotate
void Annotate(const char *varname, const SomeDescriptor *descriptor)
Definition: printer.h:199
google::protobuf::io::Printer
Definition: printer.h:181
google::protobuf::compiler::java::ImmutableMessageFieldLiteGenerator::name_resolver_
ClassNameResolver * name_resolver_
Definition: java_message_field_lite.h:81
google::protobuf::compiler::java::RepeatedImmutableMessageFieldLiteGenerator::GenerateInterfaceMembers
void GenerateInterfaceMembers(io::Printer *printer) const
Definition: java_message_field_lite.cc:487
google::protobuf::compiler::java::GetType
FieldDescriptor::Type GetType(const FieldDescriptor *field)
Definition: java_helpers.cc:317
google::protobuf::compiler::java::ImmutableMessageOneofFieldLiteGenerator::GenerateFieldInfo
void GenerateFieldInfo(io::Printer *printer, std::vector< uint16 > *output) const
Definition: java_message_field_lite.cc:391
google::protobuf::compiler::java::ImmutableMessageFieldLiteGenerator::descriptor_
const FieldDescriptor * descriptor_
Definition: java_message_field_lite.h:78
google::protobuf::compiler::java::SupportFieldPresence
bool SupportFieldPresence(const FileDescriptor *descriptor)
Definition: java_helpers.h:355
google::protobuf::compiler::java::ImmutableMessageFieldLiteGenerator::GetNumBitsForMessage
int GetNumBitsForMessage() const
Definition: java_message_field_lite.cc:118
java
google::protobuf::compiler::java::ImmutableMessageFieldLiteGenerator::~ImmutableMessageFieldLiteGenerator
~ImmutableMessageFieldLiteGenerator()
Definition: java_message_field_lite.cc:116
google::protobuf::compiler::java::ImmutableMessageFieldLiteGenerator
Definition: java_message_field_lite.h:58
google::protobuf::OneofDescriptor::index
int index() const
Definition: src/google/protobuf/descriptor.h:2103
wire_format.h
google::protobuf::FieldDescriptor::TYPE_GROUP
@ TYPE_GROUP
Definition: src/google/protobuf/descriptor.h:535
google::protobuf::compiler::java::ImmutableMessageFieldLiteGenerator::GenerateBuilderMembers
void GenerateBuilderMembers(io::Printer *printer) const
Definition: java_message_field_lite.cc:220
google::protobuf::compiler::java::RepeatedImmutableMessageFieldLiteGenerator::GenerateInitializationCode
void GenerateInitializationCode(io::Printer *printer) const
Definition: java_message_field_lite.cc:795
google::protobuf::FieldDescriptor::message_type
const Descriptor * message_type() const
Definition: src/google/protobuf/descriptor.cc:7228
google::protobuf::compiler::java::ImmutableMessageFieldLiteGenerator::GetBoxedType
std::string GetBoxedType() const
Definition: java_message_field_lite.cc:302
google::protobuf::compiler::java::SetCommonFieldVariables
void SetCommonFieldVariables(const FieldDescriptor *descriptor, const FieldGeneratorInfo *info, std::map< std::string, std::string > *variables)
Definition: java_field.cc:245
google::protobuf::compiler::java::RepeatedImmutableMessageFieldLiteGenerator::RepeatedImmutableMessageFieldLiteGenerator
RepeatedImmutableMessageFieldLiteGenerator(const FieldDescriptor *descriptor, int messageBitIndex, Context *context)
Definition: java_message_field_lite.cc:471
java_context.h
google::protobuf::compiler::java::ImmutableMessageFieldLiteGenerator::variables_
std::map< std::string, std::string > variables_
Definition: java_message_field_lite.h:79
google::protobuf::FieldDescriptor::containing_oneof
const OneofDescriptor * containing_oneof() const
google::protobuf::compiler::java::GenerateGetBit
std::string GenerateGetBit(int bitIndex)
Definition: java_helpers.cc:664
google::protobuf::compiler::java::ImmutableMessageFieldLiteGenerator::ImmutableMessageFieldLiteGenerator
ImmutableMessageFieldLiteGenerator(const FieldDescriptor *descriptor, int messageBitIndex, Context *context)
Definition: java_message_field_lite.cc:106
java_message_field_lite.h
descriptor_
const Descriptor * descriptor_
Definition: field_comparator_test.cc:56
google::protobuf::compiler::java::RepeatedImmutableMessageFieldLiteGenerator::variables_
std::map< std::string, std::string > variables_
Definition: java_message_field_lite.h:124
google::protobuf::compiler::java::Context::GetOneofGeneratorInfo
const OneofGeneratorInfo * GetOneofGeneratorInfo(const OneofDescriptor *oneof) const
Definition: java_context.cc:181
output
const upb_json_parsermethod const upb_symtab upb_sink * output
Definition: ruby/ext/google/protobuf_c/upb.h:10503
google::protobuf::compiler::java::ImmutableMessageFieldLiteGenerator::GenerateFieldInfo
void GenerateFieldInfo(io::Printer *printer, std::vector< uint16 > *output) const
Definition: java_message_field_lite.cc:288
google::protobuf::compiler::java::WriteIntToUtf16CharSequence
void WriteIntToUtf16CharSequence(int value, std::vector< uint16 > *output)
Definition: java_helpers.h:402
compiler
Definition: plugin.pb.cc:22
google
Definition: data_proto2_to_proto3_util.h:11
google::protobuf::compiler::java::GenerateGetBitFromLocal
std::string GenerateGetBitFromLocal(int bitIndex)
Definition: java_helpers.cc:681


libaditof
Author(s):
autogenerated on Wed May 21 2025 02:06:55