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 38b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer#include <google/protobuf/stubs/logging.h> 39fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include <google/protobuf/stubs/common.h> 40a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson#include <google/protobuf/compiler/java/java_context.h> 41a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson#include <google/protobuf/compiler/java/java_doc_comment.h> 42a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson#include <google/protobuf/compiler/java/java_enum_field.h> 43fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include <google/protobuf/compiler/java/java_helpers.h> 44a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson#include <google/protobuf/compiler/java/java_name_resolver.h> 45fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include <google/protobuf/io/printer.h> 46fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include <google/protobuf/wire_format.h> 47fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include <google/protobuf/stubs/strutil.h> 48fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 49fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillenamespace google { 50fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillenamespace protobuf { 51fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillenamespace compiler { 52fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillenamespace java { 53fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 54fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillenamespace { 55fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 56fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid SetEnumVariables(const FieldDescriptor* descriptor, 57a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson int messageBitIndex, 58a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson int builderBitIndex, 59a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson const FieldGeneratorInfo* info, 60a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson ClassNameResolver* name_resolver, 61fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville map<string, string>* variables) { 62a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson SetCommonFieldVariables(descriptor, info, variables); 63a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 64a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson (*variables)["type"] = 65a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson name_resolver->GetImmutableClassName(descriptor->enum_type()); 66a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson (*variables)["mutable_type"] = 67a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson name_resolver->GetMutableClassName(descriptor->enum_type()); 68a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson (*variables)["default"] = ImmutableDefaultValue(descriptor, name_resolver); 69b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer (*variables)["default_number"] = SimpleItoa( 70b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer descriptor->default_value_enum()->number()); 71fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville (*variables)["tag"] = SimpleItoa(internal::WireFormat::MakeTag(descriptor)); 72fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville (*variables)["tag_size"] = SimpleItoa( 73d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville internal::WireFormat::TagSize(descriptor->number(), GetType(descriptor))); 74a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // TODO(birdo): Add @deprecated javadoc when generating javadoc is supported 75a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // by the proto compiler 76a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson (*variables)["deprecation"] = descriptor->options().deprecated() 77a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson ? "@java.lang.Deprecated " : ""; 78b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer (*variables)["on_changed"] = "onChanged();"; 79a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 80a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson if (SupportFieldPresence(descriptor->file())) { 81a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // For singular messages and builders, one bit is used for the hasField bit. 82a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson (*variables)["get_has_field_bit_message"] = GenerateGetBit(messageBitIndex); 83a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson (*variables)["get_has_field_bit_builder"] = GenerateGetBit(builderBitIndex); 84a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 85a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // Note that these have a trailing ";". 86a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson (*variables)["set_has_field_bit_message"] = 87a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson GenerateSetBit(messageBitIndex) + ";"; 88a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson (*variables)["set_has_field_bit_builder"] = 89a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson GenerateSetBit(builderBitIndex) + ";"; 90a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson (*variables)["clear_has_field_bit_builder"] = 91a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson GenerateClearBit(builderBitIndex) + ";"; 92a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 93a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson (*variables)["is_field_present_message"] = GenerateGetBit(messageBitIndex); 94a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson } else { 95a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson (*variables)["set_has_field_bit_message"] = ""; 96a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson (*variables)["set_has_field_bit_builder"] = ""; 97a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson (*variables)["clear_has_field_bit_builder"] = ""; 98a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 99a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson (*variables)["is_field_present_message"] = 100b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer (*variables)["name"] + "_ != " + 101b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer (*variables)["default"] + ".getNumber()"; 102a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson } 103a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 104a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // For repated builders, one bit is used for whether the array is immutable. 105a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson (*variables)["get_mutable_bit_builder"] = GenerateGetBit(builderBitIndex); 106a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson (*variables)["set_mutable_bit_builder"] = GenerateSetBit(builderBitIndex); 107a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson (*variables)["clear_mutable_bit_builder"] = GenerateClearBit(builderBitIndex); 108a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 109a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // For repeated fields, one bit is used for whether the array is immutable 110a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // in the parsing constructor. 111a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson (*variables)["get_mutable_bit_parser"] = 112a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson GenerateGetBitMutableLocal(builderBitIndex); 113a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson (*variables)["set_mutable_bit_parser"] = 114a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson GenerateSetBitMutableLocal(builderBitIndex); 115a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 116a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson (*variables)["get_has_field_bit_from_local"] = 117a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson GenerateGetBitFromLocal(builderBitIndex); 118a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson (*variables)["set_has_field_bit_to_local"] = 119a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson GenerateSetBitToLocal(messageBitIndex); 120b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 121b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (SupportUnknownEnumValue(descriptor->file())) { 122b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer (*variables)["unknown"] = (*variables)["type"] + ".UNRECOGNIZED"; 123b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } else { 124b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer (*variables)["unknown"] = (*variables)["default"]; 125b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 126fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 127fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 128fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} // namespace 129fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 130fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// =================================================================== 131fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 132a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonImmutableEnumFieldGenerator:: 133a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonImmutableEnumFieldGenerator(const FieldDescriptor* descriptor, 134a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson int messageBitIndex, 135a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson int builderBitIndex, 136a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson Context* context) 137a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson : descriptor_(descriptor), messageBitIndex_(messageBitIndex), 138a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson builderBitIndex_(builderBitIndex), 139a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson name_resolver_(context->GetNameResolver()) { 140a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson SetEnumVariables(descriptor, messageBitIndex, builderBitIndex, 141a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson context->GetFieldGeneratorInfo(descriptor), 142a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson name_resolver_, &variables_); 143a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 144a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 145a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonImmutableEnumFieldGenerator::~ImmutableEnumFieldGenerator() {} 146a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 147a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonint ImmutableEnumFieldGenerator::GetNumBitsForMessage() const { 148a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson return 1; 149fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 150fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 151a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonint ImmutableEnumFieldGenerator::GetNumBitsForBuilder() const { 152a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson return 1; 153a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 154fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 155a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid ImmutableEnumFieldGenerator:: 156a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonGenerateInterfaceMembers(io::Printer* printer) const { 157a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson if (SupportFieldPresence(descriptor_->file())) { 158a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 159a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 160a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$boolean has$capitalized_name$();\n"); 161a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson } 162b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (SupportUnknownEnumValue(descriptor_->file())) { 163b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer WriteFieldDocComment(printer, descriptor_); 164b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, 165b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "$deprecation$int get$capitalized_name$Value();\n"); 166b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 167a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 168a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 169a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$$type$ get$capitalized_name$();\n"); 170a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 171a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 172a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid ImmutableEnumFieldGenerator:: 173fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateMembers(io::Printer* printer) const { 174fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 175b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "private int $name$_;\n"); 176a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson PrintExtraFieldInfo(variables_, printer); 177a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson if (SupportFieldPresence(descriptor_->file())) { 178a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 179a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 180a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public boolean has$capitalized_name$() {\n" 181a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " return $get_has_field_bit_message$;\n" 182a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n"); 183a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson } 184b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (SupportUnknownEnumValue(descriptor_->file())) { 185b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer WriteFieldDocComment(printer, descriptor_); 186b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, 187b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "$deprecation$public int get$capitalized_name$Value() {\n" 188b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " return $name$_;\n" 189b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "}\n"); 190b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 191a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 192a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 193a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public $type$ get$capitalized_name$() {\n" 194b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " $type$ result = $type$.forNumber($name$_);\n" 195b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " return result == null ? $unknown$ : result;\n" 196a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n"); 197fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 198fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 199a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid ImmutableEnumFieldGenerator:: 200fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateBuilderMembers(io::Printer* printer) const { 201fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 202b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "private int $name$_ = $default_number$;\n"); 203a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson if (SupportFieldPresence(descriptor_->file())) { 204a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 205a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 206a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public boolean has$capitalized_name$() {\n" 207a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " return $get_has_field_bit_builder$;\n" 208a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n"); 209a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson } 210b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (SupportUnknownEnumValue(descriptor_->file())) { 211b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer WriteFieldDocComment(printer, descriptor_); 212b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, 213b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "$deprecation$public int get$capitalized_name$Value() {\n" 214b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " return $name$_;\n" 215b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "}\n"); 216b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer WriteFieldDocComment(printer, descriptor_); 217b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, 218b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "$deprecation$public Builder set$capitalized_name$Value(int value) {\n" 219b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " $name$_ = value;\n" 220b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " $on_changed$\n" 221b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " return this;\n" 222b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "}\n"); 223b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 224a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 225a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 226a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public $type$ get$capitalized_name$() {\n" 227b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " $type$ result = $type$.forNumber($name$_);\n" 228b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " return result == null ? $unknown$ : result;\n" 229a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n"); 230a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 231a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 232a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public Builder set$capitalized_name$($type$ value) {\n" 233fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " if (value == null) {\n" 234fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " throw new NullPointerException();\n" 235fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " }\n" 236a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $set_has_field_bit_builder$\n" 237b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " $name$_ = value.getNumber();\n" 238a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $on_changed$\n" 239fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " return this;\n" 240a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n"); 241a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 242a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 243a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public Builder clear$capitalized_name$() {\n" 244a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $clear_has_field_bit_builder$\n" 245b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " $name$_ = $default_number$;\n" 246a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $on_changed$\n" 247fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " return this;\n" 248fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n"); 249fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 250fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 251a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid ImmutableEnumFieldGenerator:: 252a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonGenerateFieldBuilderInitializationCode(io::Printer* printer) const { 253a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // noop for enums 254a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 255a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 256a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid ImmutableEnumFieldGenerator:: 257d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink SavilleGenerateInitializationCode(io::Printer* printer) const { 258b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, "$name$_ = $default_number$;\n"); 259d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville} 260d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 261a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid ImmutableEnumFieldGenerator:: 262a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonGenerateBuilderClearCode(io::Printer* printer) const { 263a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 264b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "$name$_ = $default_number$;\n" 265a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$clear_has_field_bit_builder$\n"); 266a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 267a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 268a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid ImmutableEnumFieldGenerator:: 269fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateMergingCode(io::Printer* printer) const { 270a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson if (SupportFieldPresence(descriptor_->file())) { 271a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 272a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "if (other.has$capitalized_name$()) {\n" 273a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " set$capitalized_name$(other.get$capitalized_name$());\n" 274a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n"); 275b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } else if (SupportUnknownEnumValue(descriptor_->file())) { 276a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 277b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "if (other.$name$_ != $default_number$) {\n" 278b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " set$capitalized_name$Value(other.get$capitalized_name$Value());\n" 279a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n"); 280b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } else { 281b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer GOOGLE_LOG(FATAL) << "Can't reach here."; 282a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson } 283a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 284a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 285a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid ImmutableEnumFieldGenerator:: 286a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonGenerateBuildingCode(io::Printer* printer) const { 287a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson if (SupportFieldPresence(descriptor_->file())) { 288a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 289a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "if ($get_has_field_bit_from_local$) {\n" 290a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $set_has_field_bit_to_local$;\n" 291a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n"); 292a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson } 293a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 294a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "result.$name$_ = $name$_;\n"); 295a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 296a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 297a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid ImmutableEnumFieldGenerator:: 298a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonGenerateParsingCode(io::Printer* printer) const { 299b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (SupportUnknownEnumValue(descriptor_->file())) { 300a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 301b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "int rawValue = input.readEnum();\n" 302b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "$set_has_field_bit_message$\n" 303b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "$name$_ = rawValue;\n"); 304a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson } else { 305a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 306b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "int rawValue = input.readEnum();\n" 307b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "$type$ value = $type$.forNumber(rawValue);\n" 308b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "if (value == null) {\n"); 309b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (PreserveUnknownFields(descriptor_->containing_type())) { 310b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, 311b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " unknownFields.mergeVarintField($number$, rawValue);\n"); 312b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 313b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, 314b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "} else {\n" 315b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " $set_has_field_bit_message$\n" 316b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " $name$_ = rawValue;\n" 317b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "}\n"); 318a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson } 319a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 320a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 321a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid ImmutableEnumFieldGenerator:: 322a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonGenerateParsingDoneCode(io::Printer* printer) const { 323a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // noop for enums 324a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 325a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 326a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid ImmutableEnumFieldGenerator:: 327a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonGenerateSerializationCode(io::Printer* printer) const { 328a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 329a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "if ($is_field_present_message$) {\n" 330b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " output.writeEnum($number$, $name$_);\n" 331a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n"); 332a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 333a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 334a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid ImmutableEnumFieldGenerator:: 335a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonGenerateSerializedSizeCode(io::Printer* printer) const { 336fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 337a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "if ($is_field_present_message$) {\n" 338a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " size += com.google.protobuf.CodedOutputStream\n" 339b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " .computeEnumSize($number$, $name$_);\n" 340fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n"); 341fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 342fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 343a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid ImmutableEnumFieldGenerator:: 344a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonGenerateEqualsCode(io::Printer* printer) const { 345a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 346b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "result = result && $name$_ == other.$name$_;\n"); 347a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 348a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 349a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid ImmutableEnumFieldGenerator:: 350a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonGenerateHashCode(io::Printer* printer) const { 351a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 352a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "hash = (37 * hash) + $constant_name$;\n" 353b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "hash = (53 * hash) + $name$_;\n"); 354a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 355a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 356a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonstring ImmutableEnumFieldGenerator::GetBoxedType() const { 357a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson return name_resolver_->GetImmutableClassName(descriptor_->enum_type()); 358a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 359a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 360a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson// =================================================================== 361a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 362a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonImmutableEnumOneofFieldGenerator:: 363a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonImmutableEnumOneofFieldGenerator(const FieldDescriptor* descriptor, 364a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson int messageBitIndex, 365a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson int builderBitIndex, 366a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson Context* context) 367a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson : ImmutableEnumFieldGenerator( 368a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson descriptor, messageBitIndex, builderBitIndex, context) { 369a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson const OneofGeneratorInfo* info = 370a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson context->GetOneofGeneratorInfo(descriptor->containing_oneof()); 371a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson SetCommonOneofVariables(descriptor, info, &variables_); 372a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 373a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 374a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonImmutableEnumOneofFieldGenerator:: 375a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson~ImmutableEnumOneofFieldGenerator() {} 376a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 377a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid ImmutableEnumOneofFieldGenerator:: 378a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonGenerateMembers(io::Printer* printer) const { 379a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson PrintExtraFieldInfo(variables_, printer); 380a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson if (SupportFieldPresence(descriptor_->file())) { 381a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 382a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 383a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public boolean has$capitalized_name$() {\n" 384a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " return $has_oneof_case_message$;\n" 385a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n"); 386a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson } 387b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (SupportUnknownEnumValue(descriptor_->file())) { 388b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer WriteFieldDocComment(printer, descriptor_); 389b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, 390b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "$deprecation$public int get$capitalized_name$Value() {\n" 391b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " if ($has_oneof_case_message$) {\n" 392b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " return (java.lang.Integer) $oneof_name$_;\n" 393b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " }\n" 394b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " return $default_number$;\n" 395b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "}\n"); 396b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 397a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 398a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 399a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public $type$ get$capitalized_name$() {\n" 400a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " if ($has_oneof_case_message$) {\n" 401b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " $type$ result = $type$.forNumber((java.lang.Integer) $oneof_name$_);\n" 402b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " return result == null ? $unknown$ : result;\n" 403a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " }\n" 404a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " return $default$;\n" 405a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n"); 406a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 407a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 408a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid ImmutableEnumOneofFieldGenerator:: 409a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonGenerateBuilderMembers(io::Printer* printer) const { 410a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson if (SupportFieldPresence(descriptor_->file())) { 411a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 412a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 413a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public boolean has$capitalized_name$() {\n" 414a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " return $has_oneof_case_message$;\n" 415a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n"); 416a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson } 417b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (SupportUnknownEnumValue(descriptor_->file())) { 418b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer WriteFieldDocComment(printer, descriptor_); 419b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, 420b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "$deprecation$public int get$capitalized_name$Value() {\n" 421b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " if ($has_oneof_case_message$) {\n" 422b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " return ((java.lang.Integer) $oneof_name$_).intValue();\n" 423b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " }\n" 424b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " return $default_number$;\n" 425b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "}\n"); 426b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer WriteFieldDocComment(printer, descriptor_); 427b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, 428b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "$deprecation$public Builder set$capitalized_name$Value(int value) {\n" 429b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " $set_oneof_case_message$;\n" 430b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " $oneof_name$_ = value;\n" 431b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " $on_changed$\n" 432b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " return this;\n" 433b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "}\n"); 434b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 435a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 436a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 437a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public $type$ get$capitalized_name$() {\n" 438a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " if ($has_oneof_case_message$) {\n" 439b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " $type$ result = $type$.forNumber((java.lang.Integer) $oneof_name$_);\n" 440b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " return result == null ? $unknown$ : result;\n" 441a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " }\n" 442a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " return $default$;\n" 443a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n"); 444a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 445a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 446a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public Builder set$capitalized_name$($type$ value) {\n" 447a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " if (value == null) {\n" 448a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " throw new NullPointerException();\n" 449a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " }\n" 450a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $set_oneof_case_message$;\n" 451b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " $oneof_name$_ = value.getNumber();\n" 452a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $on_changed$\n" 453a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " return this;\n" 454a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n"); 455a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 456a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 457a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public Builder clear$capitalized_name$() {\n" 458a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " if ($has_oneof_case_message$) {\n" 459a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $clear_oneof_case_message$;\n" 460a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $oneof_name$_ = null;\n" 461a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $on_changed$\n" 462a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " }\n" 463a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " return this;\n" 464a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n"); 465a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 466a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 467a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid ImmutableEnumOneofFieldGenerator:: 468fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateBuildingCode(io::Printer* printer) const { 469a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 470a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "if ($has_oneof_case_message$) {\n" 471a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " result.$oneof_name$_ = $oneof_name$_;\n" 472a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n"); 473fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 474fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 475a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid ImmutableEnumOneofFieldGenerator:: 476a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonGenerateMergingCode(io::Printer* printer) const { 477b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (SupportUnknownEnumValue(descriptor_->file())) { 478b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, 479b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "set$capitalized_name$Value(other.get$capitalized_name$Value());\n"); 480b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } else { 481b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, 482b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "set$capitalized_name$(other.get$capitalized_name$());\n"); 483b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 484a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 485a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 486a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid ImmutableEnumOneofFieldGenerator:: 487fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateParsingCode(io::Printer* printer) const { 488b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (SupportUnknownEnumValue(descriptor_->file())) { 489fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 490b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "int rawValue = input.readEnum();\n" 491b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "$set_oneof_case_message$;\n" 492b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "$oneof_name$_ = rawValue;\n"); 493fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } else { 494fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 495b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "int rawValue = input.readEnum();\n" 496b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "$type$ value = $type$.forNumber(rawValue);\n" 497b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "if (value == null) {\n"); 498b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (PreserveUnknownFields(descriptor_->containing_type())) { 499b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, 500b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " unknownFields.mergeVarintField($number$, rawValue);\n"); 501b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 502b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, 503b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "} else {\n" 504b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " $set_oneof_case_message$;\n" 505b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " $oneof_name$_ = rawValue;\n" 506b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "}\n"); 507fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 508fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 509fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 510a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid ImmutableEnumOneofFieldGenerator:: 511fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateSerializationCode(io::Printer* printer) const { 512fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 513a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "if ($has_oneof_case_message$) {\n" 514b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " output.writeEnum($number$, ((java.lang.Integer) $oneof_name$_));\n" 515fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n"); 516fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 517fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 518a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid ImmutableEnumOneofFieldGenerator:: 519fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateSerializedSizeCode(io::Printer* printer) const { 520fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 521a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "if ($has_oneof_case_message$) {\n" 522fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " size += com.google.protobuf.CodedOutputStream\n" 523b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " .computeEnumSize($number$, ((java.lang.Integer) $oneof_name$_));\n" 524fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n"); 525fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 526fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 527b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammervoid ImmutableEnumOneofFieldGenerator:: 528b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas BerghammerGenerateEqualsCode(io::Printer* printer) const { 529b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (SupportUnknownEnumValue(descriptor_->file())) { 530b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, 531b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "result = result && get$capitalized_name$Value()\n" 532b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " == other.get$capitalized_name$Value();\n"); 533b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } else { 534b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, 535b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "result = result && get$capitalized_name$()\n" 536b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " .equals(other.get$capitalized_name$());\n"); 537b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 538b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer} 539b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 540b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammervoid ImmutableEnumOneofFieldGenerator:: 541b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas BerghammerGenerateHashCode(io::Printer* printer) const { 542b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (SupportUnknownEnumValue(descriptor_->file())) { 543b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, 544b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "hash = (37 * hash) + $constant_name$;\n" 545b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "hash = (53 * hash) + get$capitalized_name$Value();\n"); 546b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } else { 547b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, 548b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "hash = (37 * hash) + $constant_name$;\n" 549b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "hash = (53 * hash) + get$capitalized_name$().getNumber();\n"); 550b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 551b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer} 552b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 553a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson// =================================================================== 554a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 555a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonRepeatedImmutableEnumFieldGenerator:: 556a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonRepeatedImmutableEnumFieldGenerator(const FieldDescriptor* descriptor, 557a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson int messageBitIndex, 558a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson int builderBitIndex, 559a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson Context* context) 560a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson : descriptor_(descriptor), messageBitIndex_(messageBitIndex), 561a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson builderBitIndex_(builderBitIndex), context_(context), 562a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson name_resolver_(context->GetNameResolver()) { 563a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson SetEnumVariables(descriptor, messageBitIndex, builderBitIndex, 564a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson context->GetFieldGeneratorInfo(descriptor), 565a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson name_resolver_, &variables_); 566fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 567fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 568a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonRepeatedImmutableEnumFieldGenerator::~RepeatedImmutableEnumFieldGenerator() {} 569fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 570a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonint RepeatedImmutableEnumFieldGenerator::GetNumBitsForMessage() const { 571a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson return 0; 572fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 573fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 574a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonint RepeatedImmutableEnumFieldGenerator::GetNumBitsForBuilder() const { 575a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson return 1; 576a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 577fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 578a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid RepeatedImmutableEnumFieldGenerator:: 579a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonGenerateInterfaceMembers(io::Printer* printer) const { 580a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 581a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 582a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$java.util.List<$type$> get$capitalized_name$List();\n"); 583a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 584a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 585a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$int get$capitalized_name$Count();\n"); 586a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 587a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 588a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$$type$ get$capitalized_name$(int index);\n"); 589b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (SupportUnknownEnumValue(descriptor_->file())) { 590b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer WriteFieldDocComment(printer, descriptor_); 591b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, 592b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "$deprecation$java.util.List<java.lang.Integer>\n" 593b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "get$capitalized_name$ValueList();\n"); 594b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer WriteFieldDocComment(printer, descriptor_); 595b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, 596b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "$deprecation$int get$capitalized_name$Value(int index);\n"); 597b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 598a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 599a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 600a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid RepeatedImmutableEnumFieldGenerator:: 601fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateMembers(io::Printer* printer) const { 602fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 603b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "private java.util.List<java.lang.Integer> $name$_;\n" 604b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "private static final com.google.protobuf.Internal.ListAdapter.Converter<\n" 605b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " java.lang.Integer, $type$> $name$_converter_ =\n" 606b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " new com.google.protobuf.Internal.ListAdapter.Converter<\n" 607b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " java.lang.Integer, $type$>() {\n" 608b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " public $type$ convert(java.lang.Integer from) {\n" 609b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " $type$ result = $type$.forNumber(from);\n" 610b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " return result == null ? $unknown$ : result;\n" 611b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " }\n" 612b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " };\n"); 613a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson PrintExtraFieldInfo(variables_, printer); 614a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 615a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 616a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public java.util.List<$type$> get$capitalized_name$List() {\n" 617b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " return new com.google.protobuf.Internal.ListAdapter<\n" 618b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " java.lang.Integer, $type$>($name$_, $name$_converter_);\n" 619a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n"); 620a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 621a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 622a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public int get$capitalized_name$Count() {\n" 623a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " return $name$_.size();\n" 624a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n"); 625a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 626a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 627a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public $type$ get$capitalized_name$(int index) {\n" 628b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " return $name$_converter_.convert($name$_.get(index));\n" 629fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n"); 630b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (SupportUnknownEnumValue(descriptor_->file())) { 631b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer WriteFieldDocComment(printer, descriptor_); 632b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, 633b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "$deprecation$public java.util.List<java.lang.Integer>\n" 634b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "get$capitalized_name$ValueList() {\n" 635b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " return $name$_;\n" 636b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "}\n"); 637b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer WriteFieldDocComment(printer, descriptor_); 638b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, 639b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "$deprecation$public int get$capitalized_name$Value(int index) {\n" 640b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " return $name$_.get(index);\n" 641b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "}\n"); 642b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 643fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 644b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (descriptor_->is_packed() && 645b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer context_->HasGeneratedMethods(descriptor_->containing_type())) { 646fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 647fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "private int $name$MemoizedSerializedSize;\n"); 648fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 649fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 650fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 651a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid RepeatedImmutableEnumFieldGenerator:: 652fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateBuilderMembers(io::Printer* printer) const { 653fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 654a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // One field is the list and the other field keeps track of whether the 655a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // list is immutable. If it's immutable, the invariant is that it must 656a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // either an instance of Collections.emptyList() or it's an ArrayList 657a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // wrapped in a Collections.unmodifiableList() wrapper and nobody else has 658a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // a refererence to the underlying ArrayList. This invariant allows us to 659a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // share instances of lists between protocol buffers avoiding expensive 660a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // memory allocations. Note, immutable is a strong guarantee here -- not 661a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // just that the list cannot be modified via the reference but that the 662a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // list can never be modified. 663b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "private java.util.List<java.lang.Integer> $name$_ =\n" 664a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " java.util.Collections.emptyList();\n" 665a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 666a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "private void ensure$capitalized_name$IsMutable() {\n" 667a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " if (!$get_mutable_bit_builder$) {\n" 668b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " $name$_ = new java.util.ArrayList<java.lang.Integer>($name$_);\n" 669a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $set_mutable_bit_builder$;\n" 670a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " }\n" 671a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n"); 672a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 673a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 674a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 675fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // Note: We return an unmodifiable list because otherwise the caller 676fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // could hold on to the returned list and modify it after the message 677fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // has been built, thus mutating the message which is supposed to be 678fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // immutable. 679a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public java.util.List<$type$> get$capitalized_name$List() {\n" 680b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " return new com.google.protobuf.Internal.ListAdapter<\n" 681b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " java.lang.Integer, $type$>($name$_, $name$_converter_);\n" 682a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n"); 683a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 684a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 685a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public int get$capitalized_name$Count() {\n" 686a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " return $name$_.size();\n" 687a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n"); 688a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 689a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 690a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public $type$ get$capitalized_name$(int index) {\n" 691b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " return $name$_converter_.convert($name$_.get(index));\n" 692a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n"); 693a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 694a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 695a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public Builder set$capitalized_name$(\n" 696a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " int index, $type$ value) {\n" 697fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " if (value == null) {\n" 698fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " throw new NullPointerException();\n" 699fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " }\n" 700a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " ensure$capitalized_name$IsMutable();\n" 701b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " $name$_.set(index, value.getNumber());\n" 702a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $on_changed$\n" 703fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " return this;\n" 704a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n"); 705a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 706a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 707a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public Builder add$capitalized_name$($type$ value) {\n" 708fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " if (value == null) {\n" 709fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " throw new NullPointerException();\n" 710fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " }\n" 711a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " ensure$capitalized_name$IsMutable();\n" 712b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " $name$_.add(value.getNumber());\n" 713a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $on_changed$\n" 714fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " return this;\n" 715a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n"); 716a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 717a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 718a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public Builder addAll$capitalized_name$(\n" 719fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " java.lang.Iterable<? extends $type$> values) {\n" 720a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " ensure$capitalized_name$IsMutable();\n" 721b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " for ($type$ value : values) {\n" 722b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " $name$_.add(value.getNumber());\n" 723b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " }\n" 724a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $on_changed$\n" 725fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " return this;\n" 726a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n"); 727a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson WriteFieldDocComment(printer, descriptor_); 728a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 729a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$deprecation$public Builder clear$capitalized_name$() {\n" 730a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $name$_ = java.util.Collections.emptyList();\n" 731a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $clear_mutable_bit_builder$;\n" 732a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $on_changed$\n" 733fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " return this;\n" 734fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n"); 735b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 736b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (SupportUnknownEnumValue(descriptor_->file())) { 737b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer WriteFieldDocComment(printer, descriptor_); 738b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, 739b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "$deprecation$public java.util.List<java.lang.Integer>\n" 740b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "get$capitalized_name$ValueList() {\n" 741b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " return java.util.Collections.unmodifiableList($name$_);\n" 742b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "}\n"); 743b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer WriteFieldDocComment(printer, descriptor_); 744b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, 745b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "$deprecation$public int get$capitalized_name$Value(int index) {\n" 746b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " return $name$_.get(index);\n" 747b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "}\n"); 748b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer WriteFieldDocComment(printer, descriptor_); 749b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, 750b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "$deprecation$public Builder set$capitalized_name$Value(\n" 751b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " int index, int value) {\n" 752b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " ensure$capitalized_name$IsMutable();\n" 753b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " $name$_.set(index, value);\n" 754b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " $on_changed$\n" 755b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " return this;\n" 756b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "}\n"); 757b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer WriteFieldDocComment(printer, descriptor_); 758b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, 759b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "$deprecation$public Builder add$capitalized_name$Value(int value) {\n" 760b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " ensure$capitalized_name$IsMutable();\n" 761b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " $name$_.add(value);\n" 762b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " $on_changed$\n" 763b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " return this;\n" 764b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "}\n"); 765b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer WriteFieldDocComment(printer, descriptor_); 766b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, 767b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "$deprecation$public Builder addAll$capitalized_name$Value(\n" 768b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " java.lang.Iterable<java.lang.Integer> values) {\n" 769b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " ensure$capitalized_name$IsMutable();\n" 770b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " for (int value : values) {\n" 771b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " $name$_.add(value);\n" 772b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " }\n" 773b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " $on_changed$\n" 774b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " return this;\n" 775b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "}\n"); 776b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 777fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 778fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 779a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid RepeatedImmutableEnumFieldGenerator:: 780a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonGenerateFieldBuilderInitializationCode(io::Printer* printer) const { 781a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // noop for enums 782a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 783a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 784a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid RepeatedImmutableEnumFieldGenerator:: 785d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink SavilleGenerateInitializationCode(io::Printer* printer) const { 786a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, "$name$_ = java.util.Collections.emptyList();\n"); 787d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville} 788d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 789a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid RepeatedImmutableEnumFieldGenerator:: 790a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonGenerateBuilderClearCode(io::Printer* printer) const { 791a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 792a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$name$_ = java.util.Collections.emptyList();\n" 793a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "$clear_mutable_bit_builder$;\n"); 794a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 795a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 796a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid RepeatedImmutableEnumFieldGenerator:: 797fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateMergingCode(io::Printer* printer) const { 798a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // The code below does two optimizations: 799a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // 1. If the other list is empty, there's nothing to do. This ensures we 800a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // don't allocate a new array if we already have an immutable one. 801a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // 2. If the other list is non-empty and our current list is empty, we can 802a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // reuse the other list which is guaranteed to be immutable. 803fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 804fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "if (!other.$name$_.isEmpty()) {\n" 805a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " if ($name$_.isEmpty()) {\n" 806a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $name$_ = other.$name$_;\n" 807a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $clear_mutable_bit_builder$;\n" 808a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " } else {\n" 809a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " ensure$capitalized_name$IsMutable();\n" 810a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $name$_.addAll(other.$name$_);\n" 811fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " }\n" 812a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $on_changed$\n" 813fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n"); 814fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 815fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 816a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid RepeatedImmutableEnumFieldGenerator:: 817fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateBuildingCode(io::Printer* printer) const { 818a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // The code below ensures that the result has an immutable list. If our 819a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // list is immutable, we can just reuse it. If not, we make it immutable. 820fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 821a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "if ($get_mutable_bit_builder$) {\n" 822a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $name$_ = java.util.Collections.unmodifiableList($name$_);\n" 823a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $clear_mutable_bit_builder$;\n" 824a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n" 825a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "result.$name$_ = $name$_;\n"); 826fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 827fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 828a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid RepeatedImmutableEnumFieldGenerator:: 829fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateParsingCode(io::Printer* printer) const { 830fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // Read and store the enum 831b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (SupportUnknownEnumValue(descriptor_->file())) { 832fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 833b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "int rawValue = input.readEnum();\n" 834b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "if (!$get_mutable_bit_parser$) {\n" 835b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " $name$_ = new java.util.ArrayList<java.lang.Integer>();\n" 836b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " $set_mutable_bit_parser$;\n" 837b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "}\n" 838b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "$name$_.add(rawValue);\n"); 839fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } else { 840fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 841b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "int rawValue = input.readEnum();\n" 842b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "$type$ value = $type$.forNumber(rawValue);\n" 843b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "if (value == null) {\n"); 844b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (PreserveUnknownFields(descriptor_->containing_type())) { 845b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, 846b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " unknownFields.mergeVarintField($number$, rawValue);\n"); 847b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 848b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer printer->Print(variables_, 849b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "} else {\n" 850b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " if (!$get_mutable_bit_parser$) {\n" 851b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " $name$_ = new java.util.ArrayList<java.lang.Integer>();\n" 852b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " $set_mutable_bit_parser$;\n" 853b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " }\n" 854b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " $name$_.add(rawValue);\n" 855b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "}\n"); 856fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 857d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville} 858fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 859a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid RepeatedImmutableEnumFieldGenerator:: 860d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink SavilleGenerateParsingCodeFromPacked(io::Printer* printer) const { 861d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville // Wrap GenerateParsingCode's contents with a while loop. 862d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 863d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville printer->Print(variables_, 864d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville "int length = input.readRawVarint32();\n" 865d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville "int oldLimit = input.pushLimit(length);\n" 866d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville "while(input.getBytesUntilLimit() > 0) {\n"); 867d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville printer->Indent(); 868d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 869d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville GenerateParsingCode(printer); 870d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 871d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville printer->Outdent(); 872d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville printer->Print(variables_, 873d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville "}\n" 874d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville "input.popLimit(oldLimit);\n"); 875fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 876fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 877a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid RepeatedImmutableEnumFieldGenerator:: 878a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonGenerateParsingDoneCode(io::Printer* printer) const { 879a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 880a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "if ($get_mutable_bit_parser$) {\n" 881a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $name$_ = java.util.Collections.unmodifiableList($name$_);\n" 882a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n"); 883a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 884a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 885a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid RepeatedImmutableEnumFieldGenerator:: 886fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateSerializationCode(io::Printer* printer) const { 887b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (descriptor_->is_packed()) { 888fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 889fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "if (get$capitalized_name$List().size() > 0) {\n" 890fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " output.writeRawVarint32($tag$);\n" 891fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " output.writeRawVarint32($name$MemoizedSerializedSize);\n" 892fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n" 893a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "for (int i = 0; i < $name$_.size(); i++) {\n" 894b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " output.writeEnumNoTag($name$_.get(i));\n" 895fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n"); 896fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } else { 897fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 898a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "for (int i = 0; i < $name$_.size(); i++) {\n" 899b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " output.writeEnum($number$, $name$_.get(i));\n" 900fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n"); 901fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 902fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 903fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 904a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid RepeatedImmutableEnumFieldGenerator:: 905fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateSerializedSizeCode(io::Printer* printer) const { 906fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 907fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "{\n" 908fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " int dataSize = 0;\n"); 909fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Indent(); 910fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 911fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 912a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "for (int i = 0; i < $name$_.size(); i++) {\n" 913fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " dataSize += com.google.protobuf.CodedOutputStream\n" 914b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " .computeEnumSizeNoTag($name$_.get(i));\n" 915fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n"); 916fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print( 917fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "size += dataSize;\n"); 918b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (descriptor_->is_packed()) { 919fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 920fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "if (!get$capitalized_name$List().isEmpty()) {" 921fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " size += $tag_size$;\n" 922fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " size += com.google.protobuf.CodedOutputStream\n" 923fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " .computeRawVarint32Size(dataSize);\n" 924fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}"); 925fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } else { 926fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 927a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "size += $tag_size$ * $name$_.size();\n"); 928fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 929fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 930fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // cache the data size for packed fields. 931b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (descriptor_->is_packed()) { 932fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 933fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "$name$MemoizedSerializedSize = dataSize;\n"); 934fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 935fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 936fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Outdent(); 937fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print("}\n"); 938fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 939fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 940a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid RepeatedImmutableEnumFieldGenerator:: 941a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonGenerateEqualsCode(io::Printer* printer) const { 942a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 943b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer "result = result && $name$_.equals(other.$name$_);\n"); 944a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 945a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 946a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid RepeatedImmutableEnumFieldGenerator:: 947a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonGenerateHashCode(io::Printer* printer) const { 948a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 949a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "if (get$capitalized_name$Count() > 0) {\n" 950a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " hash = (37 * hash) + $constant_name$;\n" 951b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer " hash = (53 * hash) + $name$_.hashCode();\n" 952a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n"); 953a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 954a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 955a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonstring RepeatedImmutableEnumFieldGenerator::GetBoxedType() const { 956a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson return name_resolver_->GetImmutableClassName(descriptor_->enum_type()); 957fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 958fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 959fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} // namespace java 960fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} // namespace compiler 961fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} // namespace protobuf 962fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} // namespace google 963