164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// Protocol Buffers - Google's data interchange format 264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// Copyright 2008 Google Inc. All rights reserved. 364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// http://code.google.com/p/protobuf/ 464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// 564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// Redistribution and use in source and binary forms, with or without 664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// modification, are permitted provided that the following conditions are 764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// met: 864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// 964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// * Redistributions of source code must retain the above copyright 1064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// notice, this list of conditions and the following disclaimer. 1164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// * Redistributions in binary form must reproduce the above 1264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// copyright notice, this list of conditions and the following disclaimer 1364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// in the documentation and/or other materials provided with the 1464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// distribution. 1564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// * Neither the name of Google Inc. nor the names of its 1664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// contributors may be used to endorse or promote products derived from 1764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// this software without specific prior written permission. 1864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// 1964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 2064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 2164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 3064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci 3164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// Author: kenton@google.com (Kenton Varda) 3264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// Based on original Protocol Buffers design by 3364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// Sanjay Ghemawat, Jeff Dean, and others. 3464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci 3564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci#include <map> 3664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci#include <string> 3764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci 3864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci#include <google/protobuf/compiler/javanano/javanano_message_field.h> 3964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci#include <google/protobuf/compiler/javanano/javanano_helpers.h> 4064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci#include <google/protobuf/io/printer.h> 4164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci#include <google/protobuf/wire_format.h> 4264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci#include <google/protobuf/stubs/strutil.h> 4364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci 4464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazcinamespace google { 4564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazcinamespace protobuf { 4664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazcinamespace compiler { 4764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazcinamespace javanano { 4864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci 4964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazciusing internal::WireFormat; 5064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazciusing internal::WireFormatLite; 5164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci 5264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazcinamespace { 5364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci 5464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// TODO(kenton): Factor out a "SetCommonFieldVariables()" to get rid of 5564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// repeat code between this and the other field types. 5664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazcivoid SetMessageVariables(const Params& params, 5764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci const FieldDescriptor* descriptor, map<string, string>* variables) { 5864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci (*variables)["name"] = 59f4e01452f159ae6b53f5edd25fa647ca2919ae10Tom Chao RenameJavaKeywords(UnderscoresToCamelCase(descriptor)); 6064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci (*variables)["capitalized_name"] = 61f4e01452f159ae6b53f5edd25fa647ca2919ae10Tom Chao RenameJavaKeywords(UnderscoresToCapitalizedCamelCase(descriptor)); 6264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci (*variables)["number"] = SimpleItoa(descriptor->number()); 6364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci (*variables)["type"] = ClassName(params, descriptor->message_type()); 6464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci (*variables)["group_or_message"] = 6564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci (descriptor->type() == FieldDescriptor::TYPE_GROUP) ? 6664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci "Group" : "Message"; 6764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci (*variables)["message_name"] = descriptor->containing_type()->name(); 6864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci //(*variables)["message_type"] = descriptor->message_type()->name(); 6964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci (*variables)["tag"] = SimpleItoa(WireFormat::MakeTag(descriptor)); 7064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci} 7164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci 7264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci} // namespace 7364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci 7464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// =================================================================== 7564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci 7664d8d8f89050c5ada85341f967af391f4716a7cbUlas KirazciMessageFieldGenerator:: 7764d8d8f89050c5ada85341f967af391f4716a7cbUlas KirazciMessageFieldGenerator(const FieldDescriptor* descriptor, const Params& params) 7864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci : FieldGenerator(params), descriptor_(descriptor) { 7964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci SetMessageVariables(params, descriptor, &variables_); 8064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci} 8164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci 8264d8d8f89050c5ada85341f967af391f4716a7cbUlas KirazciMessageFieldGenerator::~MessageFieldGenerator() {} 8364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci 8464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazcivoid MessageFieldGenerator:: 855cc242074f189837b38e7768b57ccfb0bca258dfMax CaiGenerateMembers(io::Printer* printer, bool /* unused lazy_init */) const { 8664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci printer->Print(variables_, 875ae438cf71487d5bc8cb5c0d0e637f976734d110Max Cai "public $type$ $name$;\n"); 8864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci} 8964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci 9064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazcivoid MessageFieldGenerator:: 91e74fe623e115237968a3de1143d7cdb4df710858Max CaiGenerateClearCode(io::Printer* printer) const { 9264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci printer->Print(variables_, 93e74fe623e115237968a3de1143d7cdb4df710858Max Cai "$name$ = null;\n"); 94e74fe623e115237968a3de1143d7cdb4df710858Max Cai} 95e74fe623e115237968a3de1143d7cdb4df710858Max Cai 96e74fe623e115237968a3de1143d7cdb4df710858Max Caivoid MessageFieldGenerator:: 97e74fe623e115237968a3de1143d7cdb4df710858Max CaiGenerateMergingCode(io::Printer* printer) const { 98e74fe623e115237968a3de1143d7cdb4df710858Max Cai printer->Print(variables_, 99e74fe623e115237968a3de1143d7cdb4df710858Max Cai "if (this.$name$ == null) {\n" 100e74fe623e115237968a3de1143d7cdb4df710858Max Cai " this.$name$ = new $type$();\n" 101286271f75aa6ff1f3746379b77d6dc55415baa16Max Cai "}\n"); 10264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci 10364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci if (descriptor_->type() == FieldDescriptor::TYPE_GROUP) { 10464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci printer->Print(variables_, 1050f1c4eb967517e21701a3b425d115baff5d15b4fUlas Kirazci "input.readGroup(this.$name$, $number$);\n"); 10664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci } else { 10764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci printer->Print(variables_, 1080f1c4eb967517e21701a3b425d115baff5d15b4fUlas Kirazci "input.readMessage(this.$name$);\n"); 10964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci } 11064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci} 11164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci 11264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazcivoid MessageFieldGenerator:: 11364d8d8f89050c5ada85341f967af391f4716a7cbUlas KirazciGenerateSerializationCode(io::Printer* printer) const { 11464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci printer->Print(variables_, 1150f1c4eb967517e21701a3b425d115baff5d15b4fUlas Kirazci "if (this.$name$ != null) {\n" 1160f1c4eb967517e21701a3b425d115baff5d15b4fUlas Kirazci " output.write$group_or_message$($number$, this.$name$);\n" 11764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci "}\n"); 11864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci} 11964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci 12064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazcivoid MessageFieldGenerator:: 12164d8d8f89050c5ada85341f967af391f4716a7cbUlas KirazciGenerateSerializedSizeCode(io::Printer* printer) const { 12264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci printer->Print(variables_, 1230f1c4eb967517e21701a3b425d115baff5d15b4fUlas Kirazci "if (this.$name$ != null) {\n" 12464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci " size += com.google.protobuf.nano.CodedOutputByteBufferNano\n" 1250f1c4eb967517e21701a3b425d115baff5d15b4fUlas Kirazci " .compute$group_or_message$Size($number$, this.$name$);\n" 12664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci "}\n"); 12764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci} 12864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci 129ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duffvoid MessageFieldGenerator:: 130bcf45045f229edab8c2589c1f561e7b7495a763bBrian DuffGenerateFixClonedCode(io::Printer* printer) const { 131bcf45045f229edab8c2589c1f561e7b7495a763bBrian Duff printer->Print(variables_, 132bcf45045f229edab8c2589c1f561e7b7495a763bBrian Duff "if (this.$name$ != null) {\n" 133bcf45045f229edab8c2589c1f561e7b7495a763bBrian Duff " cloned.$name$ = this.$name$.clone();\n" 134bcf45045f229edab8c2589c1f561e7b7495a763bBrian Duff "}\n"); 135bcf45045f229edab8c2589c1f561e7b7495a763bBrian Duff} 136bcf45045f229edab8c2589c1f561e7b7495a763bBrian Duff 137bcf45045f229edab8c2589c1f561e7b7495a763bBrian Duffvoid MessageFieldGenerator:: 138ccc48faf20dbf3b3cddcffe78d198876d543529bBrian DuffGenerateEqualsCode(io::Printer* printer) const { 139ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff printer->Print(variables_, 140ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff "if (this.$name$ == null) { \n" 141ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff " if (other.$name$ != null) {\n" 142ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff " return false;\n" 143ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff " }\n" 144ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff "} else {\n" 145ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff " if (!this.$name$.equals(other.$name$)) {\n" 146ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff " return false;\n" 147ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff " }\n" 148ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff "}\n"); 149ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff} 150ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff 151ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duffvoid MessageFieldGenerator:: 152ccc48faf20dbf3b3cddcffe78d198876d543529bBrian DuffGenerateHashCodeCode(io::Printer* printer) const { 153ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff printer->Print(variables_, 154ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff "result = 31 * result +\n" 155ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff " (this.$name$ == null ? 0 : this.$name$.hashCode());\n"); 15664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci} 15764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci 15864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// =================================================================== 15964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci 16064d8d8f89050c5ada85341f967af391f4716a7cbUlas KirazciRepeatedMessageFieldGenerator:: 16164d8d8f89050c5ada85341f967af391f4716a7cbUlas KirazciRepeatedMessageFieldGenerator(const FieldDescriptor* descriptor, const Params& params) 16264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci : FieldGenerator(params), descriptor_(descriptor) { 16364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci SetMessageVariables(params, descriptor, &variables_); 16464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci} 16564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci 16664d8d8f89050c5ada85341f967af391f4716a7cbUlas KirazciRepeatedMessageFieldGenerator::~RepeatedMessageFieldGenerator() {} 16764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci 16864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazcivoid RepeatedMessageFieldGenerator:: 1695cc242074f189837b38e7768b57ccfb0bca258dfMax CaiGenerateMembers(io::Printer* printer, bool /* unused lazy_init */) const { 17064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci printer->Print(variables_, 1715ae438cf71487d5bc8cb5c0d0e637f976734d110Max Cai "public $type$[] $name$;\n"); 17264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci} 17364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci 17464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazcivoid RepeatedMessageFieldGenerator:: 175e74fe623e115237968a3de1143d7cdb4df710858Max CaiGenerateClearCode(io::Printer* printer) const { 176e74fe623e115237968a3de1143d7cdb4df710858Max Cai printer->Print(variables_, 1775cc242074f189837b38e7768b57ccfb0bca258dfMax Cai "$name$ = $type$.emptyArray();\n"); 178e74fe623e115237968a3de1143d7cdb4df710858Max Cai} 179e74fe623e115237968a3de1143d7cdb4df710858Max Cai 180e74fe623e115237968a3de1143d7cdb4df710858Max Caivoid RepeatedMessageFieldGenerator:: 181e74fe623e115237968a3de1143d7cdb4df710858Max CaiGenerateMergingCode(io::Printer* printer) const { 18264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci // First, figure out the length of the array, then parse. 18364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci printer->Print(variables_, 184286271f75aa6ff1f3746379b77d6dc55415baa16Max Cai "int arrayLength = com.google.protobuf.nano.WireFormatNano\n" 1855ae438cf71487d5bc8cb5c0d0e637f976734d110Max Cai " .getRepeatedFieldArrayLength(input, $tag$);\n" 186e03e9f4b5774c0ffe04140d83bbdb532863b1720Brian Duff "int i = this.$name$ == null ? 0 : this.$name$.length;\n" 187286271f75aa6ff1f3746379b77d6dc55415baa16Max Cai "$type$[] newArray =\n" 188286271f75aa6ff1f3746379b77d6dc55415baa16Max Cai " new $type$[i + arrayLength];\n" 189334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai "if (i != 0) {\n" 190334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai " java.lang.System.arraycopy(this.$name$, 0, newArray, 0, i);\n" 191e03e9f4b5774c0ffe04140d83bbdb532863b1720Brian Duff "}\n" 192334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai "for (; i < newArray.length - 1; i++) {\n" 193334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai " newArray[i] = new $type$();\n"); 19464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci 19564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci if (descriptor_->type() == FieldDescriptor::TYPE_GROUP) { 19664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci printer->Print(variables_, 197334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai " input.readGroup(newArray[i], $number$);\n"); 19864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci } else { 19964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci printer->Print(variables_, 200334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai " input.readMessage(newArray[i]);\n"); 20164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci } 20264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci 20364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci printer->Print(variables_, 20464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci " input.readTag();\n" 20564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci "}\n" 20664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci "// Last one without readTag.\n" 207334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai "newArray[i] = new $type$();\n"); 20864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci 20964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci if (descriptor_->type() == FieldDescriptor::TYPE_GROUP) { 21064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci printer->Print(variables_, 211334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai "input.readGroup(newArray[i], $number$);\n"); 21264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci } else { 21364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci printer->Print(variables_, 214334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai "input.readMessage(newArray[i]);\n"); 21564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci } 216334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai 217334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai printer->Print(variables_, 218334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai "this.$name$ = newArray;\n"); 21964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci} 22064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci 22164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazcivoid RepeatedMessageFieldGenerator:: 22264d8d8f89050c5ada85341f967af391f4716a7cbUlas KirazciGenerateSerializationCode(io::Printer* printer) const { 22364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci printer->Print(variables_, 224beb57e08a44a140bf52235717f1f907ca857f360Aurash Mahbod "if (this.$name$ != null && this.$name$.length > 0) {\n" 225beb57e08a44a140bf52235717f1f907ca857f360Aurash Mahbod " for (int i = 0; i < this.$name$.length; i++) {\n" 226beb57e08a44a140bf52235717f1f907ca857f360Aurash Mahbod " $type$ element = this.$name$[i];\n" 227beb57e08a44a140bf52235717f1f907ca857f360Aurash Mahbod " if (element != null) {\n" 228beb57e08a44a140bf52235717f1f907ca857f360Aurash Mahbod " output.write$group_or_message$($number$, element);\n" 229beb57e08a44a140bf52235717f1f907ca857f360Aurash Mahbod " }\n" 230e03e9f4b5774c0ffe04140d83bbdb532863b1720Brian Duff " }\n" 23164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci "}\n"); 23264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci} 23364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci 23464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazcivoid RepeatedMessageFieldGenerator:: 23564d8d8f89050c5ada85341f967af391f4716a7cbUlas KirazciGenerateSerializedSizeCode(io::Printer* printer) const { 23664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci printer->Print(variables_, 237beb57e08a44a140bf52235717f1f907ca857f360Aurash Mahbod "if (this.$name$ != null && this.$name$.length > 0) {\n" 238beb57e08a44a140bf52235717f1f907ca857f360Aurash Mahbod " for (int i = 0; i < this.$name$.length; i++) {\n" 239beb57e08a44a140bf52235717f1f907ca857f360Aurash Mahbod " $type$ element = this.$name$[i];\n" 240beb57e08a44a140bf52235717f1f907ca857f360Aurash Mahbod " if (element != null) {\n" 241beb57e08a44a140bf52235717f1f907ca857f360Aurash Mahbod " size += com.google.protobuf.nano.CodedOutputByteBufferNano\n" 242beb57e08a44a140bf52235717f1f907ca857f360Aurash Mahbod " .compute$group_or_message$Size($number$, element);\n" 243beb57e08a44a140bf52235717f1f907ca857f360Aurash Mahbod " }\n" 244e03e9f4b5774c0ffe04140d83bbdb532863b1720Brian Duff " }\n" 24564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci "}\n"); 24664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci} 24764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci 248ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duffvoid RepeatedMessageFieldGenerator:: 249bcf45045f229edab8c2589c1f561e7b7495a763bBrian DuffGenerateFixClonedCode(io::Printer* printer) const { 250bcf45045f229edab8c2589c1f561e7b7495a763bBrian Duff printer->Print(variables_, 251bcf45045f229edab8c2589c1f561e7b7495a763bBrian Duff "if (this.$name$ != null && this.$name$.length > 0) {\n" 252bcf45045f229edab8c2589c1f561e7b7495a763bBrian Duff " cloned.$name$ = new $type$[this.$name$.length];\n" 253bcf45045f229edab8c2589c1f561e7b7495a763bBrian Duff " for (int i = 0; i < this.$name$.length; i++) {\n" 254bcf45045f229edab8c2589c1f561e7b7495a763bBrian Duff " if (this.$name$[i] != null) {\n" 255bcf45045f229edab8c2589c1f561e7b7495a763bBrian Duff " cloned.$name$[i] = this.$name$[i].clone();\n" 256bcf45045f229edab8c2589c1f561e7b7495a763bBrian Duff " }\n" 257bcf45045f229edab8c2589c1f561e7b7495a763bBrian Duff " }\n" 258bcf45045f229edab8c2589c1f561e7b7495a763bBrian Duff "}\n"); 259bcf45045f229edab8c2589c1f561e7b7495a763bBrian Duff} 260bcf45045f229edab8c2589c1f561e7b7495a763bBrian Duff 261bcf45045f229edab8c2589c1f561e7b7495a763bBrian Duffvoid RepeatedMessageFieldGenerator:: 262ccc48faf20dbf3b3cddcffe78d198876d543529bBrian DuffGenerateEqualsCode(io::Printer* printer) const { 263ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff printer->Print(variables_, 264ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff "if (!com.google.protobuf.nano.InternalNano.equals(\n" 265ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff " this.$name$, other.$name$)) {\n" 266ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff " return false;\n" 267ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff "}\n"); 268ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff} 269ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff 270ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duffvoid RepeatedMessageFieldGenerator:: 271ccc48faf20dbf3b3cddcffe78d198876d543529bBrian DuffGenerateHashCodeCode(io::Printer* printer) const { 272ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff printer->Print(variables_, 273ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff "result = 31 * result\n" 274ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff " + com.google.protobuf.nano.InternalNano.hashCode(this.$name$);\n"); 27564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci} 27664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci 27764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci} // namespace javanano 27864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci} // namespace compiler 27964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci} // namespace protobuf 28064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci} // namespace google 281