1fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Protocol Buffers - Google's data interchange format 2fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Copyright 2008 Google Inc. All rights reserved. 3afb4b72037e3f13db208590fc782c4bc8e27f862Jeff Davidson// https://developers.google.com/protocol-buffers/ 4fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// 5fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Redistribution and use in source and binary forms, with or without 6fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// modification, are permitted provided that the following conditions are 7fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// met: 8fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// 9fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// * Redistributions of source code must retain the above copyright 10fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// notice, this list of conditions and the following disclaimer. 11fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// * Redistributions in binary form must reproduce the above 12fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// copyright notice, this list of conditions and the following disclaimer 13fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// in the documentation and/or other materials provided with the 14fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// distribution. 15fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// * Neither the name of Google Inc. nor the names of its 16fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// contributors may be used to endorse or promote products derived from 17fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// this software without specific prior written permission. 18fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// 19fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 31fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Author: kenton@google.com (Kenton Varda) 32fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Based on original Protocol Buffers design by 33fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Sanjay Ghemawat, Jeff Dean, and others. 34fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 35fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include <map> 36fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include <string> 37fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 38a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson#include <google/protobuf/compiler/java/java_context.h> 39fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include <google/protobuf/compiler/java/java_message_field.h> 40a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson#include <google/protobuf/compiler/java/java_doc_comment.h> 41fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include <google/protobuf/compiler/java/java_helpers.h> 42a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson#include <google/protobuf/compiler/java/java_name_resolver.h> 43fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include <google/protobuf/io/printer.h> 44fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include <google/protobuf/wire_format.h> 45fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include <google/protobuf/stubs/strutil.h> 46fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 47fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillenamespace google { 48fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillenamespace protobuf { 49fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillenamespace compiler { 50fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillenamespace java { 51fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 52fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillenamespace { 53fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 54fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid SetMessageVariables(const FieldDescriptor* descriptor, 55a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson int messageBitIndex, 56a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson int builderBitIndex, 57a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson const FieldGeneratorInfo* info, 58a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson ClassNameResolver* name_resolver, 59fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville map<string, string>* variables) { 60a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson SetCommonFieldVariables(descriptor, info, variables); 61a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 62a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson (*variables)["type"] = 63a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson name_resolver->GetImmutableClassName(descriptor->message_type()); 64a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson (*variables)["mutable_type"] = 65a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson name_resolver->GetMutableClassName(descriptor->message_type()); 66fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville (*variables)["group_or_message"] = 67d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville (GetType(descriptor) == FieldDescriptor::TYPE_GROUP) ? 68fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "Group" : "Message"; 69a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // TODO(birdo): Add @deprecated javadoc when generating javadoc is supported 70a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // by the proto compiler 71a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson (*variables)["deprecation"] = descriptor->options().deprecated() 72a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson ? "@java.lang.Deprecated " : ""; 73b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer (*variables)["on_changed"] = "onChanged();"; 74a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 75a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson if (SupportFieldPresence(descriptor->file())) { 76a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // For singular messages and builders, one bit is used for the hasField bit. 77a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson (*variables)["get_has_field_bit_message"] = GenerateGetBit(messageBitIndex); 78a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson (*variables)["get_has_field_bit_builder"] = GenerateGetBit(builderBitIndex); 79a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 80a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // Note that these have a trailing ";". 81a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson (*variables)["set_has_field_bit_message"] = 82a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson GenerateSetBit(messageBitIndex) + ";"; 83a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson (*variables)["set_has_field_bit_builder"] = 84a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson GenerateSetBit(builderBitIndex) + ";"; 85a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson (*variables)["clear_has_field_bit_builder"] = 86a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson GenerateClearBit(builderBitIndex) + ";"; 87a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 88a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson (*variables)["is_field_present_message"] = GenerateGetBit(messageBitIndex); 89a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson } else { 90a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson (*variables)["set_has_field_bit_message"] = ""; 91a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson (*variables)["set_has_field_bit_builder"] = ""; 92a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson (*variables)["clear_has_field_bit_builder"] = ""; 93a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 94a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson (*variables)["is_field_present_message"] = 95a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson (*variables)["name"] + "_ != null"; 96a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson } 97a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 98a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // For repated builders, one bit is used for whether the array is immutable. 99a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson (*variables)["get_mutable_bit_builder"] = GenerateGetBit(builderBitIndex); 100a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson (*variables)["set_mutable_bit_builder"] = GenerateSetBit(builderBitIndex); 101a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson (*variables)["clear_mutable_bit_builder"] = GenerateClearBit(builderBitIndex); 102a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 103a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // For repeated fields, one bit is used for whether the array is immutable 104a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // in the parsing constructor. 105a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson (*variables)["get_mutable_bit_parser"] = 106a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson GenerateGetBitMutableLocal(builderBitIndex); 107a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson (*variables)["set_mutable_bit_parser"] = 108a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson GenerateSetBitMutableLocal(builderBitIndex); 109a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 110a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson (*variables)["get_has_field_bit_from_local"] = 111a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson GenerateGetBitFromLocal(builderBitIndex); 112a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson (*variables)["set_has_field_bit_to_local"] = 113a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson GenerateSetBitToLocal(messageBitIndex); 114fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 115fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 116fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} // namespace 117fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 118fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// =================================================================== 119fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 120a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonImmutableMessageFieldGenerator:: 121a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonImmutableMessageFieldGenerator(const FieldDescriptor* descriptor, 122a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson int messageBitIndex, 123a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson int builderBitIndex, 124a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson Context* context) 125a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson : descriptor_(descriptor), messageBitIndex_(messageBitIndex), 126a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson builderBitIndex_(builderBitIndex), context_(context), 127a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson name_resolver_(context->GetNameResolver()) { 128a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson SetMessageVariables(descriptor, messageBitIndex, builderBitIndex, 129a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson context->GetFieldGeneratorInfo(descriptor), 130a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson name_resolver_, &variables_); 131fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 132fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 133a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonImmutableMessageFieldGenerator::~ImmutableMessageFieldGenerator() {} 134fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 135a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonint ImmutableMessageFieldGenerator::GetNumBitsForMessage() const { 136a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson return 1; 137a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 138a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 139a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonint ImmutableMessageFieldGenerator::GetNumBitsForBuilder() const { 140a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson return 1; 141a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 142a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 143a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid ImmutableMessageFieldGenerator:: 144a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonGenerateInterfaceMembers(io::Printer* printer) const { 145a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // TODO(jonp): In the future, consider having a method specific to the 146a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // interface so that builders can choose dynamically to either return a 147a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // message or a nested builder, so that asking for the interface doesn't 148a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // cause a message to ever be built. 149a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson if (SupportFieldPresence(descriptor_->file()) || 150a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson descriptor_->containing_oneof() == NULL) { 151a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 152a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 153a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$boolean has$capitalized_name$();\n"); 154a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson } 155a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 156a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 157a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$$type$ get$capitalized_name$();\n"); 158a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 159b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer WriteFieldDocComment(printer, descriptor_); 160b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, 161b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "$deprecation$$type$OrBuilder get$capitalized_name$OrBuilder();\n"); 162a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 163a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 164a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid ImmutableMessageFieldGenerator:: 165fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateMembers(io::Printer* printer) const { 166fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 167a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "private $type$ $name$_;\n"); 168a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson PrintExtraFieldInfo(variables_, printer); 169a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 170a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson if (SupportFieldPresence(descriptor_->file())) { 171a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 172a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 173a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public boolean has$capitalized_name$() {\n" 174a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " return $get_has_field_bit_message$;\n" 175a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n"); 176a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 177a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 178a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public $type$ get$capitalized_name$() {\n" 179b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " return $name$_ == null ? $type$.getDefaultInstance() : $name$_;\n" 180a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n"); 181a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 182b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer WriteFieldDocComment(printer, descriptor_); 183b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, 184b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "$deprecation$public $type$OrBuilder " 185b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "get$capitalized_name$OrBuilder() {\n" 186b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " return $name$_ == null ? $type$.getDefaultInstance() : $name$_;\n" 187b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "}\n"); 188a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson } else { 189a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 190a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 191a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public boolean has$capitalized_name$() {\n" 192a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " return $name$_ != null;\n" 193a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n"); 194a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 195a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 196a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public $type$ get$capitalized_name$() {\n" 197a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " return $name$_ == null ? $type$.getDefaultInstance() : $name$_;\n" 198a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n"); 199a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 200b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer WriteFieldDocComment(printer, descriptor_); 201b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, 202b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "$deprecation$public $type$OrBuilder " 203b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "get$capitalized_name$OrBuilder() {\n" 204b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " return get$capitalized_name$();\n" 205b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "}\n"); 206a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson } 207fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 208fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 209a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid ImmutableMessageFieldGenerator::PrintNestedBuilderCondition( 210a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson io::Printer* printer, 211a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson const char* regular_case, 212a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson const char* nested_builder_case) const { 213b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, "if ($name$Builder_ == null) {\n"); 214b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Indent(); 215b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, regular_case); 216b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Outdent(); 217b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print("} else {\n"); 218b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Indent(); 219b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, nested_builder_case); 220b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Outdent(); 221b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print("}\n"); 222a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 223a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 224a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid ImmutableMessageFieldGenerator::PrintNestedBuilderFunction( 225a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson io::Printer* printer, 226a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson const char* method_prototype, 227a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson const char* regular_case, 228a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson const char* nested_builder_case, 229a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson const char* trailing_code) const { 230a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, method_prototype); 231a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(" {\n"); 232a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Indent(); 233a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson PrintNestedBuilderCondition(printer, regular_case, nested_builder_case); 234a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson if (trailing_code != NULL) { 235a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, trailing_code); 236a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson } 237a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Outdent(); 238a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print("}\n"); 239a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 240a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 241a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid ImmutableMessageFieldGenerator:: 242fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateBuilderMembers(io::Printer* printer) const { 243a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // When using nested-builders, the code initially works just like the 244a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // non-nested builder case. It only creates a nested builder lazily on 245a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // demand and then forever delegates to it after creation. 246a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 247a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson bool support_field_presence = SupportFieldPresence(descriptor_->file()); 248a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 249b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, 250b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "private $type$ $name$_ = null;\n"); 251a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 252b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, 253a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // If this builder is non-null, it is used and the other fields are 254a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // ignored. 255a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "private com.google.protobuf.SingleFieldBuilder<\n" 256a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $type$, $type$.Builder, $type$OrBuilder> $name$Builder_;" 257a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "\n"); 258a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 259a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // The comments above the methods below are based on a hypothetical 260a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // field of type "Field" called "Field". 261a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 262a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // boolean hasField() 263a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 264a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson if (support_field_presence) { 265a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 266a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public boolean has$capitalized_name$() {\n" 267a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " return $get_has_field_bit_builder$;\n" 268a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n"); 269a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson } else { 270a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 271a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public boolean has$capitalized_name$() {\n" 272a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " return $name$Builder_ != null || $name$_ != null;\n" 273a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n"); 274a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson } 275a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 276a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // Field getField() 277a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 278a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson PrintNestedBuilderFunction(printer, 279a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public $type$ get$capitalized_name$()", 280b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "return $name$_ == null ? $type$.getDefaultInstance() : $name$_;\n", 281a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "return $name$Builder_.getMessage();\n", 282a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson NULL); 283a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 284a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // Field.Builder setField(Field value) 285a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 286a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson PrintNestedBuilderFunction(printer, 287a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public Builder set$capitalized_name$($type$ value)", 288a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 289a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "if (value == null) {\n" 290a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " throw new NullPointerException();\n" 291fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n" 292a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$name$_ = value;\n" 293a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$on_changed$\n", 294a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 295a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$name$Builder_.setMessage(value);\n", 296a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 297a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$set_has_field_bit_builder$\n" 298a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "return this;\n"); 299a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 300a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // Field.Builder setField(Field.Builder builderForValue) 301a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 302a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson PrintNestedBuilderFunction(printer, 303a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public Builder set$capitalized_name$(\n" 304a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $type$.Builder builderForValue)", 305a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 306a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$name$_ = builderForValue.build();\n" 307a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$on_changed$\n", 308a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 309a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$name$Builder_.setMessage(builderForValue.build());\n", 310a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 311a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$set_has_field_bit_builder$\n" 312a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "return this;\n"); 313a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 314a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // Field.Builder mergeField(Field value) 315a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 316a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson PrintNestedBuilderFunction(printer, 317a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public Builder merge$capitalized_name$($type$ value)", 318a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 319a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson support_field_presence 320a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson ? "if ($get_has_field_bit_builder$ &&\n" 321b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " $name$_ != null &&\n" 322a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $name$_ != $type$.getDefaultInstance()) {\n" 323a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $name$_ =\n" 324a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $type$.newBuilder($name$_).mergeFrom(value).buildPartial();\n" 325a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "} else {\n" 326a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $name$_ = value;\n" 327a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n" 328a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$on_changed$\n" 329a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson : "if ($name$_ != null) {\n" 330a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $name$_ =\n" 331a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $type$.newBuilder($name$_).mergeFrom(value).buildPartial();\n" 332a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "} else {\n" 333a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $name$_ = value;\n" 334a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n" 335a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$on_changed$\n", 336a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 337a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$name$Builder_.mergeFrom(value);\n", 338a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 339a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$set_has_field_bit_builder$\n" 340a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "return this;\n"); 341a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 342a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // Field.Builder clearField() 343a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 344a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson PrintNestedBuilderFunction(printer, 345a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public Builder clear$capitalized_name$()", 346a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 347b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "$name$_ = null;\n" 348b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "$on_changed$\n", 349a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 350a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson support_field_presence 351a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson ? "$name$Builder_.clear();\n" 352a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson : "$name$_ = null;\n" 353a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$name$Builder_ = null;\n", 354a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 355a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$clear_has_field_bit_builder$\n" 356a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "return this;\n"); 357a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 358b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer WriteFieldDocComment(printer, descriptor_); 359b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, 360b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "$deprecation$public $type$.Builder get$capitalized_name$Builder() {\n" 361b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " $set_has_field_bit_builder$\n" 362b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " $on_changed$\n" 363b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " return get$capitalized_name$FieldBuilder().getBuilder();\n" 364b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "}\n"); 365b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer WriteFieldDocComment(printer, descriptor_); 366b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, 367b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "$deprecation$public $type$OrBuilder get$capitalized_name$OrBuilder() {\n" 368b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " if ($name$Builder_ != null) {\n" 369b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " return $name$Builder_.getMessageOrBuilder();\n" 370b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " } else {\n" 371b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " return $name$_ == null ?\n" 372b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " $type$.getDefaultInstance() : $name$_;\n" 373b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " }\n" 374b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "}\n"); 375b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer WriteFieldDocComment(printer, descriptor_); 376b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, 377b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "private com.google.protobuf.SingleFieldBuilder<\n" 378b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " $type$, $type$.Builder, $type$OrBuilder> \n" 379b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " get$capitalized_name$FieldBuilder() {\n" 380b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " if ($name$Builder_ == null) {\n" 381b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " $name$Builder_ = new com.google.protobuf.SingleFieldBuilder<\n" 382b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " $type$, $type$.Builder, $type$OrBuilder>(\n" 383b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " get$capitalized_name$(),\n" 384b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " getParentForChildren(),\n" 385b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " isClean());\n" 386b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " $name$_ = null;\n" 387b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " }\n" 388b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " return $name$Builder_;\n" 389b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "}\n"); 390fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 391fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 392a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid ImmutableMessageFieldGenerator:: 393a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonGenerateFieldBuilderInitializationCode(io::Printer* printer) const { 394a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson if (SupportFieldPresence(descriptor_->file())) { 395a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 396a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "get$capitalized_name$FieldBuilder();\n"); 397a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson } 398a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 399a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 400a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 401a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid ImmutableMessageFieldGenerator:: 402b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas BerghammerGenerateInitializationCode(io::Printer* printer) const {} 403d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 404a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid ImmutableMessageFieldGenerator:: 405a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonGenerateBuilderClearCode(io::Printer* printer) const { 406a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson if (SupportFieldPresence(descriptor_->file())) { 407a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson PrintNestedBuilderCondition(printer, 408b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "$name$_ = null;\n", 409a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 410a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$name$Builder_.clear();\n"); 411a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, "$clear_has_field_bit_builder$\n"); 412a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson } else { 413a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson PrintNestedBuilderCondition(printer, 414a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$name$_ = null;\n", 415a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 416a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$name$_ = null;\n" 417a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$name$Builder_ = null;\n"); 418a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson } 419a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 420a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 421a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid ImmutableMessageFieldGenerator:: 422fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateMergingCode(io::Printer* printer) const { 423fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 424fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "if (other.has$capitalized_name$()) {\n" 425fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " merge$capitalized_name$(other.get$capitalized_name$());\n" 426fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n"); 427fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 428fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 429a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid ImmutableMessageFieldGenerator:: 430fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateBuildingCode(io::Printer* printer) const { 431a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson if (SupportFieldPresence(descriptor_->file())) { 432a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 433a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "if ($get_has_field_bit_from_local$) {\n" 434a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $set_has_field_bit_to_local$;\n" 435a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n"); 436a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson } 437a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 438a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson PrintNestedBuilderCondition(printer, 439a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "result.$name$_ = $name$_;\n", 440a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 441a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "result.$name$_ = $name$Builder_.build();\n"); 442fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 443fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 444a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid ImmutableMessageFieldGenerator:: 445fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateParsingCode(io::Printer* printer) const { 446fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 447a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$type$.Builder subBuilder = null;\n" 448a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "if ($is_field_present_message$) {\n" 449a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " subBuilder = $name$_.toBuilder();\n" 450fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n"); 451fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 452d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville if (GetType(descriptor_) == FieldDescriptor::TYPE_GROUP) { 453fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 454b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "$name$_ = input.readGroup($number$, $type$.parser(),\n" 455a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " extensionRegistry);\n"); 456fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } else { 457fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 458b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "$name$_ = input.readMessage($type$.parser(), extensionRegistry);\n"); 459fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 460fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 461fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 462a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "if (subBuilder != null) {\n" 463a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " subBuilder.mergeFrom($name$_);\n" 464a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $name$_ = subBuilder.buildPartial();\n" 465a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n" 466a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$set_has_field_bit_message$\n"); 467fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 468fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 469a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid ImmutableMessageFieldGenerator:: 470a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonGenerateParsingDoneCode(io::Printer* printer) const { 471a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // noop for messages. 472a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 473a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 474a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid ImmutableMessageFieldGenerator:: 475fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateSerializationCode(io::Printer* printer) const { 476fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 477a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "if ($is_field_present_message$) {\n" 478b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " output.write$group_or_message$($number$, get$capitalized_name$());\n" 479fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n"); 480fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 481fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 482a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid ImmutableMessageFieldGenerator:: 483fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateSerializedSizeCode(io::Printer* printer) const { 484fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 485a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "if ($is_field_present_message$) {\n" 486fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " size += com.google.protobuf.CodedOutputStream\n" 487b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " .compute$group_or_message$Size($number$, get$capitalized_name$());\n" 488fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n"); 489fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 490fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 491a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid ImmutableMessageFieldGenerator:: 492a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonGenerateEqualsCode(io::Printer* printer) const { 493a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 494a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "result = result && get$capitalized_name$()\n" 495a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " .equals(other.get$capitalized_name$());\n"); 496a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 497a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 498a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid ImmutableMessageFieldGenerator:: 499a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonGenerateHashCode(io::Printer* printer) const { 500a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 501a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "hash = (37 * hash) + $constant_name$;\n" 502a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "hash = (53 * hash) + get$capitalized_name$().hashCode();\n"); 503a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 504a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 505a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonstring ImmutableMessageFieldGenerator::GetBoxedType() const { 506a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson return name_resolver_->GetImmutableClassName(descriptor_->message_type()); 507fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 508fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 509fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// =================================================================== 510fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 511a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonImmutableMessageOneofFieldGenerator:: 512a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonImmutableMessageOneofFieldGenerator(const FieldDescriptor* descriptor, 513a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson int messageBitIndex, 514a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson int builderBitIndex, 515a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson Context* context) 516a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson : ImmutableMessageFieldGenerator( 517a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson descriptor, messageBitIndex, builderBitIndex, context) { 518a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson const OneofGeneratorInfo* info = 519a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson context->GetOneofGeneratorInfo(descriptor->containing_oneof()); 520a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson SetCommonOneofVariables(descriptor, info, &variables_); 521fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 522fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 523a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonImmutableMessageOneofFieldGenerator:: 524a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson~ImmutableMessageOneofFieldGenerator() {} 525fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 526a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid ImmutableMessageOneofFieldGenerator:: 527fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateMembers(io::Printer* printer) const { 528a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson PrintExtraFieldInfo(variables_, printer); 529a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson if (SupportFieldPresence(descriptor_->file())) { 530a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 531a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 532a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public boolean has$capitalized_name$() {\n" 533a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " return $has_oneof_case_message$;\n" 534a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n"); 535a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson } 536a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 537fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 538a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public $type$ get$capitalized_name$() {\n" 539a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " if ($has_oneof_case_message$) {\n" 540a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " return ($type$) $oneof_name$_;\n" 541a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " }\n" 542a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " return $type$.getDefaultInstance();\n" 543fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n"); 544a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 545b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer WriteFieldDocComment(printer, descriptor_); 546b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, 547b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "$deprecation$public $type$OrBuilder get$capitalized_name$OrBuilder() {\n" 548b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " if ($has_oneof_case_message$) {\n" 549b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " return ($type$) $oneof_name$_;\n" 550b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " }\n" 551b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " return $type$.getDefaultInstance();\n" 552b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "}\n"); 553fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 554fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 555a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid ImmutableMessageOneofFieldGenerator:: 556fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateBuilderMembers(io::Printer* printer) const { 557a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // When using nested-builders, the code initially works just like the 558a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // non-nested builder case. It only creates a nested builder lazily on 559a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // demand and then forever delegates to it after creation. 560b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, 561b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // If this builder is non-null, it is used and the other fields are 562b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // ignored. 563b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "private com.google.protobuf.SingleFieldBuilder<\n" 564b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " $type$, $type$.Builder, $type$OrBuilder> $name$Builder_;" 565b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "\n"); 566a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 567a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // The comments above the methods below are based on a hypothetical 568a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // field of type "Field" called "Field". 569a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 570a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson if (SupportFieldPresence(descriptor_->file())) { 571a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // boolean hasField() 572a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 573a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 574a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public boolean has$capitalized_name$() {\n" 575a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " return $has_oneof_case_message$;\n" 576a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n"); 577a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson } 578a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 579a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // Field getField() 580a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 581a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson PrintNestedBuilderFunction(printer, 582a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public $type$ get$capitalized_name$()", 583a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 584a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "if ($has_oneof_case_message$) {\n" 585a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " return ($type$) $oneof_name$_;\n" 586fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n" 587a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "return $type$.getDefaultInstance();\n", 588a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 589a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "if ($has_oneof_case_message$) {\n" 590a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " return $name$Builder_.getMessage();\n" 591fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n" 592a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "return $type$.getDefaultInstance();\n", 593a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 594a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson NULL); 595a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 596a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // Field.Builder setField(Field value) 597a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 598a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson PrintNestedBuilderFunction(printer, 599a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public Builder set$capitalized_name$($type$ value)", 600a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 601a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "if (value == null) {\n" 602a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " throw new NullPointerException();\n" 603fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n" 604a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$oneof_name$_ = value;\n" 605a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$on_changed$\n", 606a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 607a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$name$Builder_.setMessage(value);\n", 608a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 609a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$set_oneof_case_message$;\n" 610a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "return this;\n"); 611a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 612a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // Field.Builder setField(Field.Builder builderForValue) 613a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 614a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson PrintNestedBuilderFunction(printer, 615a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public Builder set$capitalized_name$(\n" 616a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $type$.Builder builderForValue)", 617a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 618a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$oneof_name$_ = builderForValue.build();\n" 619a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$on_changed$\n", 620a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 621a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$name$Builder_.setMessage(builderForValue.build());\n", 622a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 623a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$set_oneof_case_message$;\n" 624a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "return this;\n"); 625a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 626a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // Field.Builder mergeField(Field value) 627a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 628a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson PrintNestedBuilderFunction(printer, 629a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public Builder merge$capitalized_name$($type$ value)", 630a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 631a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "if ($has_oneof_case_message$ &&\n" 632a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $oneof_name$_ != $type$.getDefaultInstance()) {\n" 633a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $oneof_name$_ = $type$.newBuilder(($type$) $oneof_name$_)\n" 634a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " .mergeFrom(value).buildPartial();\n" 635a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "} else {\n" 636a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $oneof_name$_ = value;\n" 637fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n" 638a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$on_changed$\n", 639a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 640a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "if ($has_oneof_case_message$) {\n" 641a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $name$Builder_.mergeFrom(value);\n" 642fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n" 643a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$name$Builder_.setMessage(value);\n", 644a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 645a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$set_oneof_case_message$;\n" 646a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "return this;\n"); 647a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 648a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // Field.Builder clearField() 649a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 650a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson PrintNestedBuilderFunction(printer, 651a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public Builder clear$capitalized_name$()", 652a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 653a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "if ($has_oneof_case_message$) {\n" 654a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $clear_oneof_case_message$;\n" 655a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $oneof_name$_ = null;\n" 656a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $on_changed$\n" 657a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n", 658a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 659a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "if ($has_oneof_case_message$) {\n" 660a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $clear_oneof_case_message$;\n" 661a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $oneof_name$_ = null;\n" 662fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n" 663a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$name$Builder_.clear();\n", 664a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 665a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "return this;\n"); 666a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 667b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer WriteFieldDocComment(printer, descriptor_); 668b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, 669b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "$deprecation$public $type$.Builder get$capitalized_name$Builder() {\n" 670b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " return get$capitalized_name$FieldBuilder().getBuilder();\n" 671b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "}\n"); 672b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer WriteFieldDocComment(printer, descriptor_); 673b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, 674b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "$deprecation$public $type$OrBuilder get$capitalized_name$OrBuilder() {\n" 675b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " if (($has_oneof_case_message$) && ($name$Builder_ != null)) {\n" 676b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " return $name$Builder_.getMessageOrBuilder();\n" 677b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " } else {\n" 678b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " if ($has_oneof_case_message$) {\n" 679b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " return ($type$) $oneof_name$_;\n" 680b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " }\n" 681b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " return $type$.getDefaultInstance();\n" 682b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " }\n" 683b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "}\n"); 684b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer WriteFieldDocComment(printer, descriptor_); 685b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, 686b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "private com.google.protobuf.SingleFieldBuilder<\n" 687b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " $type$, $type$.Builder, $type$OrBuilder> \n" 688b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " get$capitalized_name$FieldBuilder() {\n" 689b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " if ($name$Builder_ == null) {\n" 690b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " if (!($has_oneof_case_message$)) {\n" 691b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " $oneof_name$_ = $type$.getDefaultInstance();\n" 692b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " }\n" 693b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " $name$Builder_ = new com.google.protobuf.SingleFieldBuilder<\n" 694b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " $type$, $type$.Builder, $type$OrBuilder>(\n" 695b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " ($type$) $oneof_name$_,\n" 696b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " getParentForChildren(),\n" 697b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " isClean());\n" 698b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " $oneof_name$_ = null;\n" 699b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " }\n" 700b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " $set_oneof_case_message$;\n" 701b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " $on_changed$;\n" 702b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " return $name$Builder_;\n" 703b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "}\n"); 704a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 705a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 706a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid ImmutableMessageOneofFieldGenerator:: 707a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonGenerateBuildingCode(io::Printer* printer) const { 708a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 709a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 710a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "if ($has_oneof_case_message$) {\n"); 711a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Indent(); 712a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 713a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson PrintNestedBuilderCondition(printer, 714a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "result.$oneof_name$_ = $oneof_name$_;\n", 715a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 716a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "result.$oneof_name$_ = $name$Builder_.build();\n"); 717a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 718a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Outdent(); 719a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print("}\n"); 720a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 721a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 722a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid ImmutableMessageOneofFieldGenerator:: 723a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonGenerateMergingCode(io::Printer* printer) const { 724a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 725a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "merge$capitalized_name$(other.get$capitalized_name$());\n"); 726a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 727a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 728a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid ImmutableMessageOneofFieldGenerator:: 729a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonGenerateParsingCode(io::Printer* printer) const { 730a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 731a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$type$.Builder subBuilder = null;\n" 732a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "if ($has_oneof_case_message$) {\n" 733a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " subBuilder = (($type$) $oneof_name$_).toBuilder();\n" 734a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n"); 735a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 736a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson if (GetType(descriptor_) == FieldDescriptor::TYPE_GROUP) { 737a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 738b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "$oneof_name$_ = input.readGroup($number$, $type$.parser(),\n" 739a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " extensionRegistry);\n"); 740a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson } else { 741a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 742b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "$oneof_name$_ =\n" 743b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " input.readMessage($type$.parser(), extensionRegistry);\n"); 744a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson } 745a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 746a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 747a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "if (subBuilder != null) {\n" 748a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " subBuilder.mergeFrom(($type$) $oneof_name$_);\n" 749a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $oneof_name$_ = subBuilder.buildPartial();\n" 750a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n"); 751a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 752a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$set_oneof_case_message$;\n"); 753a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 754a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 755a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid ImmutableMessageOneofFieldGenerator:: 756a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonGenerateSerializationCode(io::Printer* printer) const { 757a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 758a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "if ($has_oneof_case_message$) {\n" 759a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " output.write$group_or_message$($number$, ($type$) $oneof_name$_);\n" 760a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n"); 761a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 762a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 763a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid ImmutableMessageOneofFieldGenerator:: 764a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonGenerateSerializedSizeCode(io::Printer* printer) const { 765a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 766a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "if ($has_oneof_case_message$) {\n" 767a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " size += com.google.protobuf.CodedOutputStream\n" 768a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " .compute$group_or_message$Size($number$, ($type$) $oneof_name$_);\n" 769a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n"); 770a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 771a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 772a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson// =================================================================== 773a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 774a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonRepeatedImmutableMessageFieldGenerator:: 775a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonRepeatedImmutableMessageFieldGenerator(const FieldDescriptor* descriptor, 776a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson int messageBitIndex, 777a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson int builderBitIndex, 778a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson Context* context) 779a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson : descriptor_(descriptor), messageBitIndex_(messageBitIndex), 780a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson builderBitIndex_(builderBitIndex), context_(context), 781a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson name_resolver_(context->GetNameResolver()) { 782a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson SetMessageVariables(descriptor, messageBitIndex, builderBitIndex, 783a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson context->GetFieldGeneratorInfo(descriptor), 784a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson name_resolver_, &variables_); 785a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 786a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 787a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonRepeatedImmutableMessageFieldGenerator:: 788a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson~RepeatedImmutableMessageFieldGenerator() {} 789a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 790a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonint RepeatedImmutableMessageFieldGenerator::GetNumBitsForMessage() const { 791a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson return 0; 792a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 793a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 794a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonint RepeatedImmutableMessageFieldGenerator::GetNumBitsForBuilder() const { 795a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson return 1; 796a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 797a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 798a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid RepeatedImmutableMessageFieldGenerator:: 799a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonGenerateInterfaceMembers(io::Printer* printer) const { 800a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // TODO(jonp): In the future, consider having methods specific to the 801a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // interface so that builders can choose dynamically to either return a 802a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // message or a nested builder, so that asking for the interface doesn't 803a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // cause a message to ever be built. 804a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 805a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 806a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$java.util.List<$type$> \n" 807a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " get$capitalized_name$List();\n"); 808a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 809a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 810a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$$type$ get$capitalized_name$(int index);\n"); 811a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 812a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 813a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$int get$capitalized_name$Count();\n"); 814b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 815b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer WriteFieldDocComment(printer, descriptor_); 816b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, 817b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "$deprecation$java.util.List<? extends $type$OrBuilder> \n" 818b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " get$capitalized_name$OrBuilderList();\n"); 819b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer WriteFieldDocComment(printer, descriptor_); 820b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, 821b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "$deprecation$$type$OrBuilder get$capitalized_name$OrBuilder(\n" 822b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " int index);\n"); 823a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 824a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 825a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid RepeatedImmutableMessageFieldGenerator:: 826a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonGenerateMembers(io::Printer* printer) const { 827a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 828a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "private java.util.List<$type$> $name$_;\n"); 829a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson PrintExtraFieldInfo(variables_, printer); 830a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 831a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 832a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public java.util.List<$type$> get$capitalized_name$List() {\n" 833a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " return $name$_;\n" // note: unmodifiable list 834a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n"); 835a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 836a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 837a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public java.util.List<? extends $type$OrBuilder> \n" 838a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " get$capitalized_name$OrBuilderList() {\n" 839a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " return $name$_;\n" 840a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n"); 841a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 842a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 843a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public int get$capitalized_name$Count() {\n" 844a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " return $name$_.size();\n" 845a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n"); 846a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 847a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 848a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public $type$ get$capitalized_name$(int index) {\n" 849a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " return $name$_.get(index);\n" 850a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n"); 851a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 852a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 853a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public $type$OrBuilder get$capitalized_name$OrBuilder(\n" 854a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " int index) {\n" 855a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " return $name$_.get(index);\n" 856a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n"); 857a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 858a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 859a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 860a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid RepeatedImmutableMessageFieldGenerator::PrintNestedBuilderCondition( 861a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson io::Printer* printer, 862a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson const char* regular_case, 863a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson const char* nested_builder_case) const { 864b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, "if ($name$Builder_ == null) {\n"); 865b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Indent(); 866b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, regular_case); 867b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Outdent(); 868b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print("} else {\n"); 869b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Indent(); 870b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, nested_builder_case); 871b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Outdent(); 872b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print("}\n"); 873a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 874a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 875a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid RepeatedImmutableMessageFieldGenerator::PrintNestedBuilderFunction( 876a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson io::Printer* printer, 877a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson const char* method_prototype, 878a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson const char* regular_case, 879a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson const char* nested_builder_case, 880a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson const char* trailing_code) const { 881a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, method_prototype); 882a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(" {\n"); 883a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Indent(); 884a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson PrintNestedBuilderCondition(printer, regular_case, nested_builder_case); 885a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson if (trailing_code != NULL) { 886a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, trailing_code); 887a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson } 888a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Outdent(); 889a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print("}\n"); 890a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 891a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 892a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid RepeatedImmutableMessageFieldGenerator:: 893a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonGenerateBuilderMembers(io::Printer* printer) const { 894a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // When using nested-builders, the code initially works just like the 895a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // non-nested builder case. It only creates a nested builder lazily on 896a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // demand and then forever delegates to it after creation. 897a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 898a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 899a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // Used when the builder is null. 900a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // One field is the list and the other field keeps track of whether the 901a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // list is immutable. If it's immutable, the invariant is that it must 902a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // either an instance of Collections.emptyList() or it's an ArrayList 903a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // wrapped in a Collections.unmodifiableList() wrapper and nobody else has 904a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // a refererence to the underlying ArrayList. This invariant allows us to 905a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // share instances of lists between protocol buffers avoiding expensive 906a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // memory allocations. Note, immutable is a strong guarantee here -- not 907a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // just that the list cannot be modified via the reference but that the 908a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // list can never be modified. 909a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "private java.util.List<$type$> $name$_ =\n" 910a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " java.util.Collections.emptyList();\n" 911a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 912a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "private void ensure$capitalized_name$IsMutable() {\n" 913a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " if (!$get_mutable_bit_builder$) {\n" 914a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $name$_ = new java.util.ArrayList<$type$>($name$_);\n" 915a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $set_mutable_bit_builder$;\n" 916a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " }\n" 917fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n" 918a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "\n"); 919a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 920b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, 921b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // If this builder is non-null, it is used and the other fields are 922b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // ignored. 923b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "private com.google.protobuf.RepeatedFieldBuilder<\n" 924b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " $type$, $type$.Builder, $type$OrBuilder> $name$Builder_;\n" 925b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "\n"); 926a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 927a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // The comments above the methods below are based on a hypothetical 928a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // repeated field of type "Field" called "RepeatedField". 929a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 930a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // List<Field> getRepeatedFieldList() 931a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 932a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson PrintNestedBuilderFunction(printer, 933a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public java.util.List<$type$> get$capitalized_name$List()", 934a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 935a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "return java.util.Collections.unmodifiableList($name$_);\n", 936a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "return $name$Builder_.getMessageList();\n", 937a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 938a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson NULL); 939a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 940a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // int getRepeatedFieldCount() 941a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 942a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson PrintNestedBuilderFunction(printer, 943a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public int get$capitalized_name$Count()", 944a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 945a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "return $name$_.size();\n", 946a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "return $name$Builder_.getCount();\n", 947a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 948a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson NULL); 949a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 950a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // Field getRepeatedField(int index) 951a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 952a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson PrintNestedBuilderFunction(printer, 953a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public $type$ get$capitalized_name$(int index)", 954a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 955a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "return $name$_.get(index);\n", 956a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 957a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "return $name$Builder_.getMessage(index);\n", 958a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 959a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson NULL); 960a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 961a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // Builder setRepeatedField(int index, Field value) 962a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 963a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson PrintNestedBuilderFunction(printer, 964a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public Builder set$capitalized_name$(\n" 965a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " int index, $type$ value)", 966a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "if (value == null) {\n" 967a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " throw new NullPointerException();\n" 968fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n" 969a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "ensure$capitalized_name$IsMutable();\n" 970a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$name$_.set(index, value);\n" 971a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$on_changed$\n", 972a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$name$Builder_.setMessage(index, value);\n", 973a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "return this;\n"); 974a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 975a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // Builder setRepeatedField(int index, Field.Builder builderForValue) 976a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 977a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson PrintNestedBuilderFunction(printer, 978a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public Builder set$capitalized_name$(\n" 979a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " int index, $type$.Builder builderForValue)", 980a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 981a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "ensure$capitalized_name$IsMutable();\n" 982a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$name$_.set(index, builderForValue.build());\n" 983a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$on_changed$\n", 984a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 985a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$name$Builder_.setMessage(index, builderForValue.build());\n", 986a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 987a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "return this;\n"); 988a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 989a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // Builder addRepeatedField(Field value) 990a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 991a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson PrintNestedBuilderFunction(printer, 992a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public Builder add$capitalized_name$($type$ value)", 993a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 994a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "if (value == null) {\n" 995a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " throw new NullPointerException();\n" 996a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n" 997a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "ensure$capitalized_name$IsMutable();\n" 998a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$name$_.add(value);\n" 999a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 1000a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$on_changed$\n", 1001a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 1002a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$name$Builder_.addMessage(value);\n", 1003a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 1004a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "return this;\n"); 1005a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 1006a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // Builder addRepeatedField(int index, Field value) 1007a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 1008a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson PrintNestedBuilderFunction(printer, 1009a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public Builder add$capitalized_name$(\n" 1010a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " int index, $type$ value)", 1011a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 1012a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "if (value == null) {\n" 1013a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " throw new NullPointerException();\n" 1014a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n" 1015a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "ensure$capitalized_name$IsMutable();\n" 1016a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$name$_.add(index, value);\n" 1017a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$on_changed$\n", 1018a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 1019a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$name$Builder_.addMessage(index, value);\n", 1020a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 1021a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "return this;\n"); 1022a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 1023a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // Builder addRepeatedField(Field.Builder builderForValue) 1024a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 1025a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson PrintNestedBuilderFunction(printer, 1026a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public Builder add$capitalized_name$(\n" 1027a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $type$.Builder builderForValue)", 1028a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 1029a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "ensure$capitalized_name$IsMutable();\n" 1030a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$name$_.add(builderForValue.build());\n" 1031a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$on_changed$\n", 1032a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 1033a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$name$Builder_.addMessage(builderForValue.build());\n", 1034a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 1035a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "return this;\n"); 1036a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 1037a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // Builder addRepeatedField(int index, Field.Builder builderForValue) 1038a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 1039a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson PrintNestedBuilderFunction(printer, 1040a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public Builder add$capitalized_name$(\n" 1041a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " int index, $type$.Builder builderForValue)", 1042a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 1043a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "ensure$capitalized_name$IsMutable();\n" 1044a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$name$_.add(index, builderForValue.build());\n" 1045a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$on_changed$\n", 1046a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 1047a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$name$Builder_.addMessage(index, builderForValue.build());\n", 1048a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 1049a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "return this;\n"); 1050a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 1051a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // Builder addAllRepeatedField(Iterable<Field> values) 1052a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 1053a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson PrintNestedBuilderFunction(printer, 1054a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public Builder addAll$capitalized_name$(\n" 1055a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " java.lang.Iterable<? extends $type$> values)", 1056a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 1057a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "ensure$capitalized_name$IsMutable();\n" 1058a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "com.google.protobuf.AbstractMessageLite.Builder.addAll(\n" 1059a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " values, $name$_);\n" 1060a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$on_changed$\n", 1061a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 1062a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$name$Builder_.addAllMessages(values);\n", 1063a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 1064a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "return this;\n"); 1065a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 1066a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // Builder clearAllRepeatedField() 1067a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 1068a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson PrintNestedBuilderFunction(printer, 1069a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public Builder clear$capitalized_name$()", 1070a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 1071a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$name$_ = java.util.Collections.emptyList();\n" 1072a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$clear_mutable_bit_builder$;\n" 1073a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$on_changed$\n", 1074a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 1075a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$name$Builder_.clear();\n", 1076a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 1077a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "return this;\n"); 1078a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 1079a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // Builder removeRepeatedField(int index) 1080a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 1081a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson PrintNestedBuilderFunction(printer, 1082a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public Builder remove$capitalized_name$(int index)", 1083a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 1084a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "ensure$capitalized_name$IsMutable();\n" 1085a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$name$_.remove(index);\n" 1086a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$on_changed$\n", 1087a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 1088a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$name$Builder_.remove(index);\n", 1089a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 1090a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "return this;\n"); 1091a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 1092b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer WriteFieldDocComment(printer, descriptor_); 1093b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, 1094b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "$deprecation$public $type$.Builder get$capitalized_name$Builder(\n" 1095b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " int index) {\n" 1096b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " return get$capitalized_name$FieldBuilder().getBuilder(index);\n" 1097b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "}\n"); 1098a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 1099b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer WriteFieldDocComment(printer, descriptor_); 1100b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, 1101b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "$deprecation$public $type$OrBuilder get$capitalized_name$OrBuilder(\n" 1102b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " int index) {\n" 1103b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " if ($name$Builder_ == null) {\n" 1104b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " return $name$_.get(index);" 1105b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " } else {\n" 1106b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " return $name$Builder_.getMessageOrBuilder(index);\n" 1107b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " }\n" 1108b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "}\n"); 1109a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 1110b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer WriteFieldDocComment(printer, descriptor_); 1111b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, 1112b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "$deprecation$public java.util.List<? extends $type$OrBuilder> \n" 1113b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " get$capitalized_name$OrBuilderList() {\n" 1114b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " if ($name$Builder_ != null) {\n" 1115b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " return $name$Builder_.getMessageOrBuilderList();\n" 1116b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " } else {\n" 1117b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " return java.util.Collections.unmodifiableList($name$_);\n" 1118b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " }\n" 1119b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "}\n"); 1120a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 1121b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer WriteFieldDocComment(printer, descriptor_); 1122b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, 1123b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "$deprecation$public $type$.Builder add$capitalized_name$Builder() {\n" 1124b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " return get$capitalized_name$FieldBuilder().addBuilder(\n" 1125b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " $type$.getDefaultInstance());\n" 1126b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "}\n"); 1127b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer WriteFieldDocComment(printer, descriptor_); 1128b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, 1129b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "$deprecation$public $type$.Builder add$capitalized_name$Builder(\n" 1130b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " int index) {\n" 1131b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " return get$capitalized_name$FieldBuilder().addBuilder(\n" 1132b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " index, $type$.getDefaultInstance());\n" 1133b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "}\n"); 1134b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer WriteFieldDocComment(printer, descriptor_); 1135b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, 1136b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "$deprecation$public java.util.List<$type$.Builder> \n" 1137b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " get$capitalized_name$BuilderList() {\n" 1138b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " return get$capitalized_name$FieldBuilder().getBuilderList();\n" 1139b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "}\n" 1140b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "private com.google.protobuf.RepeatedFieldBuilder<\n" 1141b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " $type$, $type$.Builder, $type$OrBuilder> \n" 1142b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " get$capitalized_name$FieldBuilder() {\n" 1143b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " if ($name$Builder_ == null) {\n" 1144b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " $name$Builder_ = new com.google.protobuf.RepeatedFieldBuilder<\n" 1145b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " $type$, $type$.Builder, $type$OrBuilder>(\n" 1146b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " $name$_,\n" 1147b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " $get_mutable_bit_builder$,\n" 1148b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " getParentForChildren(),\n" 1149b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " isClean());\n" 1150b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " $name$_ = null;\n" 1151b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " }\n" 1152b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " return $name$Builder_;\n" 1153b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "}\n"); 1154a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 1155a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 1156a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid RepeatedImmutableMessageFieldGenerator:: 1157a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonGenerateFieldBuilderInitializationCode(io::Printer* printer) const { 1158a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 1159a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "get$capitalized_name$FieldBuilder();\n"); 1160fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 1161fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1162a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid RepeatedImmutableMessageFieldGenerator:: 1163d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink SavilleGenerateInitializationCode(io::Printer* printer) const { 1164a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, "$name$_ = java.util.Collections.emptyList();\n"); 1165a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 1166a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 1167a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid RepeatedImmutableMessageFieldGenerator:: 1168a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonGenerateBuilderClearCode(io::Printer* printer) const { 1169a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson PrintNestedBuilderCondition(printer, 1170a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$name$_ = java.util.Collections.emptyList();\n" 1171a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$clear_mutable_bit_builder$;\n", 1172a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 1173a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$name$Builder_.clear();\n"); 1174d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville} 1175d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 1176a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid RepeatedImmutableMessageFieldGenerator:: 1177fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateMergingCode(io::Printer* printer) const { 1178a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // The code below does two optimizations (non-nested builder case): 1179a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // 1. If the other list is empty, there's nothing to do. This ensures we 1180a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // don't allocate a new array if we already have an immutable one. 1181a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // 2. If the other list is non-empty and our current list is empty, we can 1182a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // reuse the other list which is guaranteed to be immutable. 1183a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson PrintNestedBuilderCondition(printer, 1184a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "if (!other.$name$_.isEmpty()) {\n" 1185a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " if ($name$_.isEmpty()) {\n" 1186a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $name$_ = other.$name$_;\n" 1187a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $clear_mutable_bit_builder$;\n" 1188a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " } else {\n" 1189a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " ensure$capitalized_name$IsMutable();\n" 1190a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $name$_.addAll(other.$name$_);\n" 1191a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " }\n" 1192a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $on_changed$\n" 1193a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n", 1194a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 1195fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "if (!other.$name$_.isEmpty()) {\n" 1196a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " if ($name$Builder_.isEmpty()) {\n" 1197a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $name$Builder_.dispose();\n" 1198a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $name$Builder_ = null;\n" 1199a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $name$_ = other.$name$_;\n" 1200a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $clear_mutable_bit_builder$;\n" 1201a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $name$Builder_ = \n" 1202a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?\n" 1203a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " get$capitalized_name$FieldBuilder() : null;\n" 1204a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " } else {\n" 1205a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $name$Builder_.addAllMessages(other.$name$_);\n" 1206fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " }\n" 1207fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n"); 1208fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 1209fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1210a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid RepeatedImmutableMessageFieldGenerator:: 1211fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateBuildingCode(io::Printer* printer) const { 1212a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // The code below (non-nested builder case) ensures that the result has an 1213a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // immutable list. If our list is immutable, we can just reuse it. If not, 1214a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // we make it immutable. 1215a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson PrintNestedBuilderCondition(printer, 1216a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "if ($get_mutable_bit_builder$) {\n" 1217a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $name$_ = java.util.Collections.unmodifiableList($name$_);\n" 1218a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $clear_mutable_bit_builder$;\n" 1219a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n" 1220a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "result.$name$_ = $name$_;\n", 1221a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 1222a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "result.$name$_ = $name$Builder_.build();\n"); 1223fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 1224fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1225a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid RepeatedImmutableMessageFieldGenerator:: 1226fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateParsingCode(io::Printer* printer) const { 1227fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 1228a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "if (!$get_mutable_bit_parser$) {\n" 1229a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $name$_ = new java.util.ArrayList<$type$>();\n" 1230a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $set_mutable_bit_parser$;\n" 1231a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n"); 1232fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1233d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville if (GetType(descriptor_) == FieldDescriptor::TYPE_GROUP) { 1234fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 1235b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "$name$_.add(input.readGroup($number$, $type$.parser(),\n" 1236a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " extensionRegistry));\n"); 1237fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } else { 1238fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 1239b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "$name$_.add(input.readMessage($type$.parser(), extensionRegistry));\n"); 1240fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 1241a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 1242fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1243a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid RepeatedImmutableMessageFieldGenerator:: 1244a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonGenerateParsingDoneCode(io::Printer* printer) const { 1245fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 1246a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "if ($get_mutable_bit_parser$) {\n" 1247a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $name$_ = java.util.Collections.unmodifiableList($name$_);\n" 1248a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n"); 1249fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 1250fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1251a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid RepeatedImmutableMessageFieldGenerator:: 1252fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateSerializationCode(io::Printer* printer) const { 1253fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 1254a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "for (int i = 0; i < $name$_.size(); i++) {\n" 1255a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " output.write$group_or_message$($number$, $name$_.get(i));\n" 1256fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n"); 1257fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 1258fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1259a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid RepeatedImmutableMessageFieldGenerator:: 1260fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateSerializedSizeCode(io::Printer* printer) const { 1261fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 1262a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "for (int i = 0; i < $name$_.size(); i++) {\n" 1263fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " size += com.google.protobuf.CodedOutputStream\n" 1264a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " .compute$group_or_message$Size($number$, $name$_.get(i));\n" 1265a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n"); 1266a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 1267a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 1268a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid RepeatedImmutableMessageFieldGenerator:: 1269a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonGenerateEqualsCode(io::Printer* printer) const { 1270a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 1271a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "result = result && get$capitalized_name$List()\n" 1272a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " .equals(other.get$capitalized_name$List());\n"); 1273a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 1274a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 1275a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid RepeatedImmutableMessageFieldGenerator:: 1276a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonGenerateHashCode(io::Printer* printer) const { 1277a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 1278a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "if (get$capitalized_name$Count() > 0) {\n" 1279a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " hash = (37 * hash) + $constant_name$;\n" 1280a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " hash = (53 * hash) + get$capitalized_name$List().hashCode();\n" 1281fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n"); 1282fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 1283fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1284a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonstring RepeatedImmutableMessageFieldGenerator::GetBoxedType() const { 1285a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson return name_resolver_->GetImmutableClassName(descriptor_->message_type()); 1286fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 1287fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1288fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} // namespace java 1289fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} // namespace compiler 1290fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} // namespace protobuf 1291fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} // namespace google 1292