1b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// Protocol Buffers - Google's data interchange format
2b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// Copyright 2008 Google Inc.  All rights reserved.
3b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// https://developers.google.com/protocol-buffers/
4b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer//
5b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// Redistribution and use in source and binary forms, with or without
6b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// modification, are permitted provided that the following conditions are
7b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// met:
8b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer//
9b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer//     * Redistributions of source code must retain the above copyright
10b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// notice, this list of conditions and the following disclaimer.
11b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer//     * Redistributions in binary form must reproduce the above
12b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// copyright notice, this list of conditions and the following disclaimer
13b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// in the documentation and/or other materials provided with the
14b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// distribution.
15b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer//     * Neither the name of Google Inc. nor the names of its
16b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// contributors may be used to endorse or promote products derived from
17b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// this software without specific prior written permission.
18b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer//
19b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
31b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// Author: niwasaki@google.com (Naoki Iwasaki)
32b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer//  Based on original Protocol Buffers design by
33b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer//  Sanjay Ghemawat, Jeff Dean, and others.
34b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
35b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer#include <google/protobuf/compiler/java/java_context.h>
36b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer#include <google/protobuf/compiler/java/java_lazy_message_field_lite.h>
37b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer#include <google/protobuf/compiler/java/java_doc_comment.h>
38b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer#include <google/protobuf/compiler/java/java_helpers.h>
39b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer#include <google/protobuf/io/printer.h>
40b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
41b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammernamespace google {
42b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammernamespace protobuf {
43b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammernamespace compiler {
44b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammernamespace java {
45b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
46b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas BerghammerImmutableLazyMessageFieldLiteGenerator::
47b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas BerghammerImmutableLazyMessageFieldLiteGenerator(
48b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    const FieldDescriptor* descriptor,
49b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    int messageBitIndex,
50b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    int builderBitIndex,
51b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    Context* context)
52b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    : ImmutableMessageFieldLiteGenerator(
53b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer          descriptor, messageBitIndex, builderBitIndex, context) {
54b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}
55b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
56b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas BerghammerImmutableLazyMessageFieldLiteGenerator::
57b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer~ImmutableLazyMessageFieldLiteGenerator() {}
58b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
59b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammervoid ImmutableLazyMessageFieldLiteGenerator::
60b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas BerghammerGenerateMembers(io::Printer* printer) const {
61b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
62b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "private com.google.protobuf.LazyFieldLite $name$_ =\n"
63b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "    new com.google.protobuf.LazyFieldLite();\n");
64b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
65b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  PrintExtraFieldInfo(variables_, printer);
66b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  WriteFieldDocComment(printer, descriptor_);
67b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
68b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "$deprecation$public boolean has$capitalized_name$() {\n"
69b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  return $get_has_field_bit_message$;\n"
70b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n");
71b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
72b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  WriteFieldDocComment(printer, descriptor_);
73b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
74b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "$deprecation$public $type$ get$capitalized_name$() {\n"
75b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  return ($type$) $name$_.getValue($type$.getDefaultInstance());\n"
76b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer   "}\n");
77b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
78b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // Field.Builder setField(Field value)
79b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  WriteFieldDocComment(printer, descriptor_);
80b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
81b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "private void set$capitalized_name$($type$ value) {\n"
82b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  if (value == null) {\n"
83b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "    throw new NullPointerException();\n"
84b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  }\n"
85b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  $name$_.setValue(value);\n"
86b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  $set_has_field_bit_message$;\n"
87b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n");
88b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
89b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // Field.Builder setField(Field.Builder builderForValue)
90b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  WriteFieldDocComment(printer, descriptor_);
91b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
92b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "private void set$capitalized_name$(\n"
93b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "    $type$.Builder builderForValue) {\n"
94b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  $name$_.setValue(builderForValue.build());\n"
95b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  $set_has_field_bit_message$;\n"
96b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n");
97b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
98b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // Field.Builder mergeField(Field value)
99b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  WriteFieldDocComment(printer, descriptor_);
100b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
101b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "private void merge$capitalized_name$($type$ value) {\n"
102b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  if ($get_has_field_bit_message$ &&\n"
103b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "      !$name$_.containsDefaultInstance()) {\n"
104b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "    $name$_.setValue(\n"
105b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "      $type$.newBuilder(\n"
106b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "          get$capitalized_name$()).mergeFrom(value).buildPartial());\n"
107b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  } else {\n"
108b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "    $name$_.setValue(value);\n"
109b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  }\n"
110b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  $set_has_field_bit_message$;\n"
111b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n");
112b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
113b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // Field.Builder clearField()
114b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  WriteFieldDocComment(printer, descriptor_);
115b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
116b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "private void clear$capitalized_name$() {\n"
117b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  $name$_.clear();\n"
118b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  $clear_has_field_bit_message$;\n"
119b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n");
120b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}
121b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
122b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammervoid ImmutableLazyMessageFieldLiteGenerator::
123b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas BerghammerGenerateBuilderMembers(io::Printer* printer) const {
124b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // The comments above the methods below are based on a hypothetical
125b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // field of type "Field" called "Field".
126b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
127b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // boolean hasField()
128b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  WriteFieldDocComment(printer, descriptor_);
129b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
130b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "$deprecation$public boolean has$capitalized_name$() {\n"
131b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  return instance.has$capitalized_name$();\n"
132b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n");
133b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
134b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  WriteFieldDocComment(printer, descriptor_);
135b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
136b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "$deprecation$public $type$ get$capitalized_name$() {\n"
137b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  return instance.get$capitalized_name$();\n"
138b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n");
139b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
140b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // Field.Builder setField(Field value)
141b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  WriteFieldDocComment(printer, descriptor_);
142b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
143b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "$deprecation$public Builder set$capitalized_name$($type$ value) {\n"
144b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  copyOnWrite();\n"
145b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  instance.set$capitalized_name$(value);\n"
146b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  return this;\n"
147b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n");
148b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
149b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // Field.Builder setField(Field.Builder builderForValue)
150b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  WriteFieldDocComment(printer, descriptor_);
151b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
152b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "$deprecation$public Builder set$capitalized_name$(\n"
153b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "    $type$.Builder builderForValue) {\n"
154b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  copyOnWrite();\n"
155b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  instance.set$capitalized_name$(builderForValue);\n"
156b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  return this;\n"
157b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n");
158b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
159b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // Field.Builder mergeField(Field value)
160b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  WriteFieldDocComment(printer, descriptor_);
161b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
162b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "$deprecation$public Builder merge$capitalized_name$($type$ value) {\n"
163b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  copyOnWrite();\n"
164b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  instance.merge$capitalized_name$(value);\n"
165b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  return this;\n"
166b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n");
167b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
168b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // Field.Builder clearField()
169b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  WriteFieldDocComment(printer, descriptor_);
170b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
171b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "$deprecation$public Builder clear$capitalized_name$() {\n"
172b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  copyOnWrite();\n"
173b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  instance.clear$capitalized_name$();\n"
174b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  return this;\n"
175b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n");
176b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}
177b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
178b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
179b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammervoid ImmutableLazyMessageFieldLiteGenerator::
180b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas BerghammerGenerateInitializationCode(io::Printer* printer) const {
181b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_, "$name$_.clear();\n");
182b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}
183b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
184b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammervoid ImmutableLazyMessageFieldLiteGenerator::
185b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas BerghammerGenerateVisitCode(io::Printer* printer) const {
186b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
187b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "$name$_ = visitor.visitLazyMessage(\n"
188b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "    has$capitalized_name$(), $name$_,\n"
189b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "    other.has$capitalized_name$(), other.$name$_);\n");
190b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}
191b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
192b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammervoid ImmutableLazyMessageFieldLiteGenerator::
193b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas BerghammerGenerateParsingCode(io::Printer* printer) const {
194b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
195b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "$name$_.mergeFrom(input, extensionRegistry);\n");
196b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
197b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "$set_has_field_bit_message$;\n");
198b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}
199b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
200b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammervoid ImmutableLazyMessageFieldLiteGenerator::
201b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas BerghammerGenerateSerializationCode(io::Printer* printer) const {
202b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // Do not de-serialize lazy fields.
203b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
204b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "if ($get_has_field_bit_message$) {\n"
205b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  output.writeBytes($number$, $name$_.toByteString());\n"
206b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n");
207b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}
208b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
209b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammervoid ImmutableLazyMessageFieldLiteGenerator::
210b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas BerghammerGenerateSerializedSizeCode(io::Printer* printer) const {
211b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
212b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "if ($get_has_field_bit_message$) {\n"
213b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  size += com.google.protobuf.CodedOutputStream\n"
214b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "    .computeLazyFieldSize($number$, $name$_);\n"
215b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n");
216b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}
217b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
218b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// ===================================================================
219b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
220b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas BerghammerImmutableLazyMessageOneofFieldLiteGenerator::
221b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas BerghammerImmutableLazyMessageOneofFieldLiteGenerator(const FieldDescriptor* descriptor,
222b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer                                            int messageBitIndex,
223b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer                                            int builderBitIndex,
224b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer                                            Context* context)
225b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    : ImmutableLazyMessageFieldLiteGenerator(
226b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer          descriptor, messageBitIndex, builderBitIndex, context) {
227b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  const OneofGeneratorInfo* info =
228b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      context->GetOneofGeneratorInfo(descriptor->containing_oneof());
229b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  SetCommonOneofVariables(descriptor, info, &variables_);
230b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  variables_["lazy_type"] = "com.google.protobuf.LazyFieldLite";
231b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}
232b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
233b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas BerghammerImmutableLazyMessageOneofFieldLiteGenerator::
234b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer~ImmutableLazyMessageOneofFieldLiteGenerator() {}
235b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
236b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammervoid ImmutableLazyMessageOneofFieldLiteGenerator::
237b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas BerghammerGenerateMembers(io::Printer* printer) const {
238b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  PrintExtraFieldInfo(variables_, printer);
239b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  WriteFieldDocComment(printer, descriptor_);
240b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
241b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
242b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "$deprecation$public boolean has$capitalized_name$() {\n"
243b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  return $has_oneof_case_message$;\n"
244b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n");
245b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  WriteFieldDocComment(printer, descriptor_);
246b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
247b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
248b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "$deprecation$public $type$ get$capitalized_name$() {\n"
249b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  if ($has_oneof_case_message$) {\n"
250b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "    return ($type$) (($lazy_type$) $oneof_name$_).getValue(\n"
251b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "        $type$.getDefaultInstance());\n"
252b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  }\n"
253b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  return $type$.getDefaultInstance();\n"
254b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n");
255b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
256b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // Field.Builder setField(Field value)
257b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  WriteFieldDocComment(printer, descriptor_);
258b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
259b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "private void set$capitalized_name$($type$ value) {\n"
260b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  if (value == null) {\n"
261b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "    throw new NullPointerException();\n"
262b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  }\n"
263b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  if (!($has_oneof_case_message$)) {\n"
264b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "    $oneof_name$_ = new $lazy_type$();\n"
265b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "    $set_oneof_case_message$;\n"
266b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  }\n"
267b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  (($lazy_type$) $oneof_name$_).setValue(value);\n"
268b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n");
269b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
270b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // Field.Builder setField(Field.Builder builderForValue)
271b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  WriteFieldDocComment(printer, descriptor_);
272b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
273b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "private void set$capitalized_name$(\n"
274b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "    $type$.Builder builderForValue) {\n"
275b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  if (!($has_oneof_case_message$)) {\n"
276b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "    $oneof_name$_ = new $lazy_type$();\n"
277b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "    $set_oneof_case_message$;\n"
278b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  }\n"
279b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  (($lazy_type$) $oneof_name$_).setValue(builderForValue.build());\n"
280b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n");
281b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
282b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // Field.Builder mergeField(Field value)
283b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  WriteFieldDocComment(printer, descriptor_);
284b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
285b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "private void merge$capitalized_name$($type$ value) {\n"
286b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  if ($has_oneof_case_message$ &&\n"
287b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "      !(($lazy_type$) $oneof_name$_).containsDefaultInstance()) {\n"
288b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "    (($lazy_type$) $oneof_name$_).setValue(\n"
289b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "       $type$.newBuilder(\n"
290b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "          get$capitalized_name$()).mergeFrom(value).buildPartial());\n"
291b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  } else {\n"
292b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "    if (!($has_oneof_case_message$)) {\n"
293b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "      $oneof_name$_ = new $lazy_type$();\n"
294b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "      $set_oneof_case_message$;\n"
295b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "    }\n"
296b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "    (($lazy_type$) $oneof_name$_).setValue(value);\n"
297b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  }\n"
298b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n");
299b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
300b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // Field.Builder clearField()
301b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  WriteFieldDocComment(printer, descriptor_);
302b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
303b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "private void clear$capitalized_name$() {\n"
304b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  if ($has_oneof_case_message$) {\n"
305b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "    $clear_oneof_case_message$;\n"
306b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "    $oneof_name$_ = null;\n"
307b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  }\n"
308b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n");
309b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}
310b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
311b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammervoid ImmutableLazyMessageOneofFieldLiteGenerator::
312b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas BerghammerGenerateBuilderMembers(io::Printer* printer) const {
313b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // boolean hasField()
314b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  WriteFieldDocComment(printer, descriptor_);
315b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
316b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "$deprecation$public boolean has$capitalized_name$() {\n"
317b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  return instance.has$capitalized_name$();\n"
318b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n");
319b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
320b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
321b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "$deprecation$public $type$ get$capitalized_name$() {\n"
322b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  return instance.get$capitalized_name$();\n"
323b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n");
324b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
325b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // Field.Builder setField(Field value)
326b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  WriteFieldDocComment(printer, descriptor_);
327b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
328b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "$deprecation$public Builder set$capitalized_name$($type$ value) {\n"
329b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  copyOnWrite();\n"
330b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  instance.set$capitalized_name$(value);\n"
331b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  return this;\n"
332b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n");
333b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
334b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // Field.Builder setField(Field.Builder builderForValue)
335b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  WriteFieldDocComment(printer, descriptor_);
336b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
337b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "$deprecation$public Builder set$capitalized_name$(\n"
338b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "    $type$.Builder builderForValue) {\n"
339b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  copyOnWrite();\n"
340b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  instance.set$capitalized_name$(builderForValue);\n"
341b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  return this;\n"
342b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n");
343b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
344b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // Field.Builder mergeField(Field value)
345b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  WriteFieldDocComment(printer, descriptor_);
346b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
347b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "$deprecation$public Builder merge$capitalized_name$($type$ value) {\n"
348b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  copyOnWrite();\n"
349b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  instance.merge$capitalized_name$(value);\n"
350b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  return this;\n"
351b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n");
352b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
353b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // Field.Builder clearField()
354b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  WriteFieldDocComment(printer, descriptor_);
355b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
356b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "$deprecation$public Builder clear$capitalized_name$() {\n"
357b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  copyOnWrite();\n"
358b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  instance.clear$capitalized_name$();\n"
359b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  return this;\n"
360b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n");
361b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}
362b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
363b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammervoid ImmutableLazyMessageOneofFieldLiteGenerator::
364b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas BerghammerGenerateVisitCode(io::Printer* printer) const {
365b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
366b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "$oneof_name$_ = visitor.visitOneofLazyMessage(\n"
367b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "    $has_oneof_case_message$,\n"
368b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "    ($lazy_type$) $oneof_name$_,\n"
369b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "    ($lazy_type$) other.$oneof_name$_);\n");
370b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}
371b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
372b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammervoid ImmutableLazyMessageOneofFieldLiteGenerator::
373b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas BerghammerGenerateParsingCode(io::Printer* printer) const {
374b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
375b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "if (!($has_oneof_case_message$)) {\n"
376b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  $oneof_name$_ = new $lazy_type$();\n"
377b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n"
378b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "(($lazy_type$) $oneof_name$_).mergeFrom(input, extensionRegistry);\n"
379b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "$set_oneof_case_message$;\n");
380b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}
381b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
382b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammervoid ImmutableLazyMessageOneofFieldLiteGenerator::
383b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas BerghammerGenerateSerializationCode(io::Printer* printer) const {
384b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // Do not de-serialize lazy fields.
385b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
386b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "if ($has_oneof_case_message$) {\n"
387b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  output.writeBytes(\n"
388b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "      $number$, (($lazy_type$) $oneof_name$_).toByteString());\n"
389b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n");
390b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}
391b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
392b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammervoid ImmutableLazyMessageOneofFieldLiteGenerator::
393b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas BerghammerGenerateSerializedSizeCode(io::Printer* printer) const {
394b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
395b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "if ($has_oneof_case_message$) {\n"
396b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  size += com.google.protobuf.CodedOutputStream\n"
397b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "    .computeLazyFieldSize($number$, ($lazy_type$) $oneof_name$_);\n"
398b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n");
399b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}
400b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
401b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// ===================================================================
402b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
403b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas BerghammerRepeatedImmutableLazyMessageFieldLiteGenerator::
404b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas BerghammerRepeatedImmutableLazyMessageFieldLiteGenerator(
405b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    const FieldDescriptor* descriptor,
406b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    int messageBitIndex,
407b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    int builderBitIndex,
408b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    Context* context)
409b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    : RepeatedImmutableMessageFieldLiteGenerator(
410b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer          descriptor, messageBitIndex, builderBitIndex, context) {
411b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}
412b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
413b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
414b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas BerghammerRepeatedImmutableLazyMessageFieldLiteGenerator::
415b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer~RepeatedImmutableLazyMessageFieldLiteGenerator() {}
416b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
417b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammervoid RepeatedImmutableLazyMessageFieldLiteGenerator::
418b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas BerghammerGenerateMembers(io::Printer* printer) const {
419b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
420b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "private com.google.protobuf.Internal.ProtobufList<\n"
421b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "    com.google.protobuf.LazyFieldLite> $name$_;\n");
422b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  PrintExtraFieldInfo(variables_, printer);
423b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  WriteFieldDocComment(printer, descriptor_);
424b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
425b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "$deprecation$public java.util.List<$type$>\n"
426b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "    get$capitalized_name$List() {\n"
427b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  java.util.List<$type$> list =\n"
428b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "      new java.util.ArrayList<$type$>($name$_.size());\n"
429b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  for (com.google.protobuf.LazyFieldLite lf : $name$_) {\n"
430b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "    list.add(($type$) lf.getValue($type$.getDefaultInstance()));\n"
431b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  }\n"
432b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    // TODO(dweis): Make this list immutable?
433b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  return list;\n"
434b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n");
435b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  WriteFieldDocComment(printer, descriptor_);
436b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
437b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "$deprecation$public java.util.List<? extends $type$OrBuilder>\n"
438b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "    get$capitalized_name$OrBuilderList() {\n"
439b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  return get$capitalized_name$List();\n"
440b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n");
441b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  WriteFieldDocComment(printer, descriptor_);
442b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
443b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "$deprecation$public int get$capitalized_name$Count() {\n"
444b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  return $name$_.size();\n"
445b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n");
446b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  WriteFieldDocComment(printer, descriptor_);
447b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
448b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "$deprecation$public $type$ get$capitalized_name$(int index) {\n"
449b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  return ($type$)\n"
450b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "      $name$_.get(index).getValue($type$.getDefaultInstance());\n"
451b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n");
452b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  WriteFieldDocComment(printer, descriptor_);
453b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
454b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "$deprecation$public $type$OrBuilder get$capitalized_name$OrBuilder(\n"
455b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "    int index) {\n"
456b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  return ($type$OrBuilder)\n"
457b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "      $name$_.get(index).getValue($type$.getDefaultInstance());\n"
458b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n");
459b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
460b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
461b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "private void ensure$capitalized_name$IsMutable() {\n"
462b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  if (!$is_mutable$) {\n"
463b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "    $name$_ =\n"
464b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "        com.google.protobuf.GeneratedMessageLite.mutableCopy($name$_);\n"
465b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "   }\n"
466b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n"
467b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "\n");
468b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
469b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // Builder setRepeatedField(int index, Field value)
470b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  WriteFieldDocComment(printer, descriptor_);
471b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
472b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "private void set$capitalized_name$(\n"
473b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "    int index, $type$ value) {\n"
474b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  if (value == null) {\n"
475b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "    throw new NullPointerException();\n"
476b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  }\n"
477b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  ensure$capitalized_name$IsMutable();\n"
478b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  $name$_.set(\n"
479b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "      index, com.google.protobuf.LazyFieldLite.fromValue(value));\n"
480b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n");
481b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
482b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // Builder setRepeatedField(int index, Field.Builder builderForValue)
483b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  WriteFieldDocComment(printer, descriptor_);
484b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
485b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "private void set$capitalized_name$(\n"
486b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "    int index, $type$.Builder builderForValue) {\n"
487b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  ensure$capitalized_name$IsMutable();\n"
488b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  $name$_.set(index, com.google.protobuf.LazyFieldLite.fromValue(\n"
489b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "      builderForValue.build()));\n"
490b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n");
491b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
492b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // Builder addRepeatedField(Field value)
493b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  WriteFieldDocComment(printer, descriptor_);
494b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
495b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "private void add$capitalized_name$($type$ value) {\n"
496b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  if (value == null) {\n"
497b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "    throw new NullPointerException();\n"
498b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  }\n"
499b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  ensure$capitalized_name$IsMutable();\n"
500b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  $name$_.add(com.google.protobuf.LazyFieldLite.fromValue(value));\n"
501b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n");
502b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
503b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // Builder addRepeatedField(int index, Field value)
504b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  WriteFieldDocComment(printer, descriptor_);
505b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
506b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "private void add$capitalized_name$(\n"
507b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "    int index, $type$ value) {\n"
508b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  if (value == null) {\n"
509b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "    throw new NullPointerException();\n"
510b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  }\n"
511b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  ensure$capitalized_name$IsMutable();\n"
512b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  $name$_.add(\n"
513b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "      index, com.google.protobuf.LazyFieldLite.fromValue(value));\n"
514b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n");
515b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
516b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // Builder addRepeatedField(Field.Builder builderForValue)
517b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  WriteFieldDocComment(printer, descriptor_);
518b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
519b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "private void add$capitalized_name$(\n"
520b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "    $type$.Builder builderForValue) {\n"
521b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  ensure$capitalized_name$IsMutable();\n"
522b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  $name$_.add(com.google.protobuf.LazyFieldLite.fromValue(\n"
523b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "      builderForValue.build()));\n"
524b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n");
525b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
526b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // Builder addRepeatedField(int index, Field.Builder builderForValue)
527b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  WriteFieldDocComment(printer, descriptor_);
528b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
529b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "private void add$capitalized_name$(\n"
530b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "    int index, $type$.Builder builderForValue) {\n"
531b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  ensure$capitalized_name$IsMutable();\n"
532b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  $name$_.add(index, com.google.protobuf.LazyFieldLite.fromValue(\n"
533b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "      builderForValue.build()));\n"
534b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n");
535b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
536b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // Builder addAllRepeatedField(Iterable<Field> values)
537b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  WriteFieldDocComment(printer, descriptor_);
538b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
539b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "private void addAll$capitalized_name$(\n"
540b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "    java.lang.Iterable<? extends $type$> values) {\n"
541b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  ensure$capitalized_name$IsMutable();\n"
542b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  for (com.google.protobuf.MessageLite v : values) {\n"
543b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "    $name$_.add(com.google.protobuf.LazyFieldLite.fromValue(v));\n"
544b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  }\n"
545b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n");
546b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
547b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // Builder clearAllRepeatedField()
548b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  WriteFieldDocComment(printer, descriptor_);
549b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
550b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "private void clear$capitalized_name$() {\n"
551b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  $name$_ = emptyProtobufList();\n"
552b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n");
553b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
554b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // Builder removeRepeatedField(int index)
555b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  WriteFieldDocComment(printer, descriptor_);
556b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
557b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "private void remove$capitalized_name$(int index) {\n"
558b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  ensure$capitalized_name$IsMutable();\n"
559b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  $name$_.remove(index);\n"
560b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n");
561b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}
562b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
563b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammervoid RepeatedImmutableLazyMessageFieldLiteGenerator::
564b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas BerghammerGenerateBuilderMembers(io::Printer* printer) const {
565b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // List<Field> getRepeatedFieldList()
566b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  WriteFieldDocComment(printer, descriptor_);
567b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
568b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "$deprecation$public java.util.List<$type$> get$capitalized_name$List() {\n"
569b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  return java.util.Collections.unmodifiableList(\n"
570b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "      instance.get$capitalized_name$List());\n"
571b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n");
572b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
573b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // int getRepeatedFieldCount()
574b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  WriteFieldDocComment(printer, descriptor_);
575b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
576b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "$deprecation$public int get$capitalized_name$Count() {\n"
577b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  return instance.get$capitalized_name$Count();\n"
578b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n");
579b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
580b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // Field getRepeatedField(int index)
581b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  WriteFieldDocComment(printer, descriptor_);
582b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
583b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "$deprecation$public $type$ get$capitalized_name$(int index) {\n"
584b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  return instance.get$capitalized_name$(index);\n"
585b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n");
586b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
587b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // Builder setRepeatedField(int index, Field value)
588b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  WriteFieldDocComment(printer, descriptor_);
589b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
590b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "$deprecation$public Builder set$capitalized_name$(\n"
591b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "    int index, $type$ value) {\n"
592b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  copyOnWrite();\n"
593b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  instance.set$capitalized_name$(index, value);\n"
594b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  return this;\n"
595b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n");
596b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
597b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // Builder setRepeatedField(int index, Field.Builder builderForValue)
598b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  WriteFieldDocComment(printer, descriptor_);
599b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
600b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "$deprecation$public Builder set$capitalized_name$(\n"
601b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "    int index, $type$.Builder builderForValue) {\n"
602b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  copyOnWrite();\n"
603b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  instance.set$capitalized_name$(index, builderForValue);\n"
604b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  return this;\n"
605b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n");
606b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
607b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // Builder addRepeatedField(Field value)
608b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  WriteFieldDocComment(printer, descriptor_);
609b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
610b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "$deprecation$public Builder add$capitalized_name$($type$ value) {\n"
611b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  copyOnWrite();\n"
612b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  instance.add$capitalized_name$(value);\n"
613b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  return this;\n"
614b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n");
615b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
616b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // Builder addRepeatedField(int index, Field value)
617b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  WriteFieldDocComment(printer, descriptor_);
618b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
619b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "$deprecation$public Builder add$capitalized_name$(\n"
620b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "    int index, $type$ value) {\n"
621b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  copyOnWrite();\n"
622b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  instance.add$capitalized_name$(index, value);\n"
623b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  return this;\n"
624b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n");
625b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
626b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // Builder addRepeatedField(Field.Builder builderForValue)
627b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  WriteFieldDocComment(printer, descriptor_);
628b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
629b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "$deprecation$public Builder add$capitalized_name$(\n"
630b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "    $type$.Builder builderForValue) {\n"
631b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  copyOnWrite();\n"
632b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  instance.add$capitalized_name$(builderForValue);\n"
633b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  return this;\n"
634b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n");
635b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
636b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // Builder addRepeatedField(int index, Field.Builder builderForValue)
637b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  WriteFieldDocComment(printer, descriptor_);
638b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
639b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "$deprecation$public Builder add$capitalized_name$(\n"
640b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "    int index, $type$.Builder builderForValue) {\n"
641b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  copyOnWrite();\n"
642b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  instance.add$capitalized_name$(index, builderForValue);\n"
643b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  return this;\n"
644b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n");
645b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
646b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // Builder addAllRepeatedField(Iterable<Field> values)
647b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  WriteFieldDocComment(printer, descriptor_);
648b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
649b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "$deprecation$public Builder addAll$capitalized_name$(\n"
650b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "    java.lang.Iterable<? extends $type$> values) {\n"
651b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  copyOnWrite();\n"
652b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  instance.addAll$capitalized_name$(values);\n"
653b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  return this;\n"
654b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n");
655b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
656b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // Builder clearAllRepeatedField()
657b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  WriteFieldDocComment(printer, descriptor_);
658b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
659b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "$deprecation$public Builder clear$capitalized_name$() {\n"
660b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  copyOnWrite();\n"
661b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  instance.clear$capitalized_name$();\n"
662b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  return this;\n"
663b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n");
664b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
665b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  // Builder removeRepeatedField(int index)
666b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  WriteFieldDocComment(printer, descriptor_);
667b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
668b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "$deprecation$public Builder remove$capitalized_name$(int index) {\n"
669b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  copyOnWrite();\n"
670b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  instance.remove$capitalized_name$(index);\n"
671b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  return this;\n"
672b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n");
673b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}
674b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
675b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammervoid RepeatedImmutableLazyMessageFieldLiteGenerator::
676b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas BerghammerGenerateParsingCode(io::Printer* printer) const {
677b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
678b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "if (!$is_mutable$) {\n"
679b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  $name$_ =\n"
680b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "      com.google.protobuf.GeneratedMessageLite.mutableCopy($name$_);\n"
681b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n"
682b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "$name$_.add(new com.google.protobuf.LazyFieldLite(\n"
683b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "    extensionRegistry, input.readBytes()));\n");
684b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}
685b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
686b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammervoid RepeatedImmutableLazyMessageFieldLiteGenerator::
687b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas BerghammerGenerateSerializationCode(io::Printer* printer) const {
688b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
689b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "for (int i = 0; i < $name$_.size(); i++) {\n"
690b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  output.writeBytes($number$, $name$_.get(i).toByteString());\n"
691b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n");
692b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}
693b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
694b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammervoid RepeatedImmutableLazyMessageFieldLiteGenerator::
695b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas BerghammerGenerateSerializedSizeCode(io::Printer* printer) const {
696b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  printer->Print(variables_,
697b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "for (int i = 0; i < $name$_.size(); i++) {\n"
698b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "  size += com.google.protobuf.CodedOutputStream\n"
699b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "    .computeLazyFieldSize($number$, $name$_.get(i));\n"
700b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    "}\n");
701b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}
702b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
703b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}  // namespace java
704b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}  // namespace compiler
705b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}  // namespace protobuf
706b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}  // namespace google
707