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