1e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// Protocol Buffers - Google's data interchange format 2e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// Copyright 2008 Google Inc. All rights reserved. 3e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// http://code.google.com/p/protobuf/ 4e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// 5e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// Redistribution and use in source and binary forms, with or without 6e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// modification, are permitted provided that the following conditions are 7e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// met: 8e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// 9e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// * Redistributions of source code must retain the above copyright 10e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// notice, this list of conditions and the following disclaimer. 11e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// * Redistributions in binary form must reproduce the above 12e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// copyright notice, this list of conditions and the following disclaimer 13e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// in the documentation and/or other materials provided with the 14e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// distribution. 15e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// * Neither the name of Google Inc. nor the names of its 16e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// contributors may be used to endorse or promote products derived from 17e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// this software without specific prior written permission. 18e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// 19e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 31e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// Author: kenton@google.com (Kenton Varda) 32e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// Based on original Protocol Buffers design by 33e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// Sanjay Ghemawat, Jeff Dean, and others. 34e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 35e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville#include <map> 36e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville#include <string> 37e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 38e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville#include <google/protobuf/compiler/javamicro/javamicro_primitive_field.h> 39e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville#include <google/protobuf/stubs/common.h> 40e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville#include <google/protobuf/compiler/javamicro/javamicro_helpers.h> 41e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville#include <google/protobuf/io/printer.h> 42e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville#include <google/protobuf/wire_format.h> 43e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville#include <google/protobuf/stubs/strutil.h> 44e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 45e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Savillenamespace google { 46e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Savillenamespace protobuf { 47e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Savillenamespace compiler { 48e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Savillenamespace javamicro { 49e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 50e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Savilleusing internal::WireFormat; 51e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Savilleusing internal::WireFormatLite; 52e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 53e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Savillenamespace { 54e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 55e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Savilleconst char* PrimitiveTypeName(JavaType type) { 56e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville switch (type) { 57e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case JAVATYPE_INT : return "int"; 58e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case JAVATYPE_LONG : return "long"; 59e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case JAVATYPE_FLOAT : return "float"; 60e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case JAVATYPE_DOUBLE : return "double"; 61e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case JAVATYPE_BOOLEAN: return "boolean"; 62e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case JAVATYPE_STRING : return "java.lang.String"; 63e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case JAVATYPE_BYTES : return "com.google.protobuf.micro.ByteStringMicro"; 64e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case JAVATYPE_ENUM : return NULL; 65e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case JAVATYPE_MESSAGE: return NULL; 66e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 67e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville // No default because we want the compiler to complain if any new 68e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville // JavaTypes are added. 69e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } 70e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 71e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville GOOGLE_LOG(FATAL) << "Can't get here."; 72e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville return NULL; 73e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville} 74e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 75e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Savillebool IsReferenceType(JavaType type) { 76e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville switch (type) { 77e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case JAVATYPE_INT : return false; 78e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case JAVATYPE_LONG : return false; 79e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case JAVATYPE_FLOAT : return false; 80e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case JAVATYPE_DOUBLE : return false; 81e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case JAVATYPE_BOOLEAN: return false; 82e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case JAVATYPE_STRING : return true; 83e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case JAVATYPE_BYTES : return true; 84e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case JAVATYPE_ENUM : return false; 85e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case JAVATYPE_MESSAGE: return true; 86e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 87e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville // No default because we want the compiler to complain if any new 88e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville // JavaTypes are added. 89e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } 90e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 91e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville GOOGLE_LOG(FATAL) << "Can't get here."; 92e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville return false; 93e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville} 94e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 95e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Savilleconst char* GetCapitalizedType(const FieldDescriptor* field) { 96e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville switch (field->type()) { 97e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case FieldDescriptor::TYPE_INT32 : return "Int32" ; 98e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case FieldDescriptor::TYPE_UINT32 : return "UInt32" ; 99e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case FieldDescriptor::TYPE_SINT32 : return "SInt32" ; 100e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case FieldDescriptor::TYPE_FIXED32 : return "Fixed32" ; 101e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case FieldDescriptor::TYPE_SFIXED32: return "SFixed32"; 102e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case FieldDescriptor::TYPE_INT64 : return "Int64" ; 103e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case FieldDescriptor::TYPE_UINT64 : return "UInt64" ; 104e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case FieldDescriptor::TYPE_SINT64 : return "SInt64" ; 105e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case FieldDescriptor::TYPE_FIXED64 : return "Fixed64" ; 106e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case FieldDescriptor::TYPE_SFIXED64: return "SFixed64"; 107e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case FieldDescriptor::TYPE_FLOAT : return "Float" ; 108e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case FieldDescriptor::TYPE_DOUBLE : return "Double" ; 109e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case FieldDescriptor::TYPE_BOOL : return "Bool" ; 110e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case FieldDescriptor::TYPE_STRING : return "String" ; 111e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case FieldDescriptor::TYPE_BYTES : return "Bytes" ; 112e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case FieldDescriptor::TYPE_ENUM : return "Enum" ; 113e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case FieldDescriptor::TYPE_GROUP : return "Group" ; 114e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case FieldDescriptor::TYPE_MESSAGE : return "Message" ; 115e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 116e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville // No default because we want the compiler to complain if any new 117e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville // types are added. 118e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } 119e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 120e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville GOOGLE_LOG(FATAL) << "Can't get here."; 121e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville return NULL; 122e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville} 123e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 124e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// For encodings with fixed sizes, returns that size in bytes. Otherwise 125e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// returns -1. 126e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Savilleint FixedSize(FieldDescriptor::Type type) { 127e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville switch (type) { 128e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case FieldDescriptor::TYPE_INT32 : return -1; 129e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case FieldDescriptor::TYPE_INT64 : return -1; 130e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case FieldDescriptor::TYPE_UINT32 : return -1; 131e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case FieldDescriptor::TYPE_UINT64 : return -1; 132e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case FieldDescriptor::TYPE_SINT32 : return -1; 133e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case FieldDescriptor::TYPE_SINT64 : return -1; 134e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case FieldDescriptor::TYPE_FIXED32 : return WireFormatLite::kFixed32Size; 135e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case FieldDescriptor::TYPE_FIXED64 : return WireFormatLite::kFixed64Size; 136e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case FieldDescriptor::TYPE_SFIXED32: return WireFormatLite::kSFixed32Size; 137e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case FieldDescriptor::TYPE_SFIXED64: return WireFormatLite::kSFixed64Size; 138e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case FieldDescriptor::TYPE_FLOAT : return WireFormatLite::kFloatSize; 139e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case FieldDescriptor::TYPE_DOUBLE : return WireFormatLite::kDoubleSize; 140e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 141e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case FieldDescriptor::TYPE_BOOL : return WireFormatLite::kBoolSize; 142e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case FieldDescriptor::TYPE_ENUM : return -1; 143e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 144e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case FieldDescriptor::TYPE_STRING : return -1; 145e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case FieldDescriptor::TYPE_BYTES : return -1; 146e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case FieldDescriptor::TYPE_GROUP : return -1; 147e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case FieldDescriptor::TYPE_MESSAGE : return -1; 148e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 149e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville // No default because we want the compiler to complain if any new 150e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville // types are added. 151e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } 152e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville GOOGLE_LOG(FATAL) << "Can't get here."; 153e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville return -1; 154e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville} 155e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 156e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// Return true if the type is a that has variable length 157e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// for instance String's. 158e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Savillebool IsVariableLenType(JavaType type) { 159e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville switch (type) { 160e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case JAVATYPE_INT : return false; 161e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case JAVATYPE_LONG : return false; 162e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case JAVATYPE_FLOAT : return false; 163e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case JAVATYPE_DOUBLE : return false; 164e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case JAVATYPE_BOOLEAN: return false; 165e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case JAVATYPE_STRING : return true; 166e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case JAVATYPE_BYTES : return true; 167e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case JAVATYPE_ENUM : return false; 168e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville case JAVATYPE_MESSAGE: return true; 169e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 170e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville // No default because we want the compiler to complain if any new 171e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville // JavaTypes are added. 172e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } 173e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 174e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville GOOGLE_LOG(FATAL) << "Can't get here."; 175e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville return false; 176e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville} 177e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 1781b639e09d77de609bed080f5d2ca88d72ba42559Wink Savillebool IsFastStringHandling(const FieldDescriptor* descriptor, 179e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville const Params params) { 180e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville return ((params.optimization() == JAVAMICRO_OPT_SPEED) 181e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville && (GetJavaType(descriptor) == JAVATYPE_STRING)); 182e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville} 183e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 184e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Savillevoid SetPrimitiveVariables(const FieldDescriptor* descriptor, const Params params, 185e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville map<string, string>* variables) { 186e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville (*variables)["name"] = 187e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville UnderscoresToCamelCase(descriptor); 188e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville (*variables)["capitalized_name"] = 189e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville UnderscoresToCapitalizedCamelCase(descriptor); 190e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville (*variables)["number"] = SimpleItoa(descriptor->number()); 1911b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville (*variables)["type"] = PrimitiveTypeName(GetJavaType(descriptor)); 1921b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville (*variables)["default"] = DefaultValue(params, descriptor); 193e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville (*variables)["boxed_type"] = BoxedPrimitiveTypeName(GetJavaType(descriptor)); 194e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville (*variables)["capitalized_type"] = GetCapitalizedType(descriptor); 195e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville (*variables)["tag"] = SimpleItoa(WireFormat::MakeTag(descriptor)); 196e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville (*variables)["tag_size"] = SimpleItoa( 197e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville WireFormat::TagSize(descriptor->number(), descriptor->type())); 198e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville if (IsReferenceType(GetJavaType(descriptor))) { 199e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville (*variables)["null_check"] = 200e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " if (value == null) {\n" 201e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " throw new NullPointerException();\n" 202e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " }\n"; 203e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } else { 204e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville (*variables)["null_check"] = ""; 205e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } 206e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville int fixed_size = FixedSize(descriptor->type()); 207e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville if (fixed_size != -1) { 208e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville (*variables)["fixed_size"] = SimpleItoa(fixed_size); 209e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } 210e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville (*variables)["message_name"] = descriptor->containing_type()->name(); 211e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville} 212e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville} // namespace 213e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 214e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// =================================================================== 215e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 216e2d542951c059563a3b7f74c257dac4f222d9dc5Wink SavillePrimitiveFieldGenerator:: 217e2d542951c059563a3b7f74c257dac4f222d9dc5Wink SavillePrimitiveFieldGenerator(const FieldDescriptor* descriptor, const Params& params) 218e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville : FieldGenerator(params), descriptor_(descriptor) { 219e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville SetPrimitiveVariables(descriptor, params, &variables_); 220e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville} 221e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 222e2d542951c059563a3b7f74c257dac4f222d9dc5Wink SavillePrimitiveFieldGenerator::~PrimitiveFieldGenerator() {} 223e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 224e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Savillevoid PrimitiveFieldGenerator:: 225e2d542951c059563a3b7f74c257dac4f222d9dc5Wink SavilleGenerateMembers(io::Printer* printer) const { 226e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville printer->Print(variables_, 227e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "private boolean has$capitalized_name$;\n" 228e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "private $type$ $name$_ = $default$;\n" 2291b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville "public $type$ get$capitalized_name$() { return $name$_; }\n" 230e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "public boolean has$capitalized_name$() { return has$capitalized_name$; }\n"); 2311b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville if (IsFastStringHandling(descriptor_, params_)) { 232e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville printer->Print(variables_, 2331b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville "private byte [] $name$Utf8_ = null;\n" 2341b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville "public $message_name$ set$capitalized_name$($type$ value) {\n" 235e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " has$capitalized_name$ = true;\n" 2361b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville " $name$_ = value;\n" 2371b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville " $name$Utf8_ = null;\n" 238e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " return this;\n" 239e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "}\n" 240e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "public $message_name$ clear$capitalized_name$() {\n" 241e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " has$capitalized_name$ = false;\n" 242e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " $name$_ = $default$;\n" 2431b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville " $name$Utf8_ = null;\n" 244e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " return this;\n" 245e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "}\n"); 246e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } else { 247e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville if (IsVariableLenType(GetJavaType(descriptor_))) { 248e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville printer->Print(variables_, 249e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "public $message_name$ set$capitalized_name$($type$ value) {\n" 250e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " has$capitalized_name$ = true;\n" 251e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " $name$_ = value;\n" 252e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " return this;\n" 253e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "}\n" 254e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "public $message_name$ clear$capitalized_name$() {\n" 255e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " has$capitalized_name$ = false;\n" 256e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " $name$_ = $default$;\n" 257e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " return this;\n" 258e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "}\n"); 259e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } else { 260e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville printer->Print(variables_, 261e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "public $message_name$ set$capitalized_name$($type$ value) {\n" 262e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " has$capitalized_name$ = true;\n" 263e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " $name$_ = value;\n" 264e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " return this;\n" 265e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "}\n" 266e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "public $message_name$ clear$capitalized_name$() {\n" 267e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " has$capitalized_name$ = false;\n" 268e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " $name$_ = $default$;\n" 269e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " return this;\n" 270e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "}\n"); 271e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } 272e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } 273e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville} 274e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 275e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Savillevoid PrimitiveFieldGenerator:: 276e2d542951c059563a3b7f74c257dac4f222d9dc5Wink SavilleGenerateMergingCode(io::Printer* printer) const { 277e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville printer->Print(variables_, 278e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "if (other.has$capitalized_name$()) {\n" 279e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " set$capitalized_name$(other.get$capitalized_name$());\n" 280e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "}\n"); 281e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville} 282e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 283e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Savillevoid PrimitiveFieldGenerator:: 284e2d542951c059563a3b7f74c257dac4f222d9dc5Wink SavilleGenerateParsingCode(io::Printer* printer) const { 285e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville printer->Print(variables_, 286e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "set$capitalized_name$(input.read$capitalized_type$());\n"); 287e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville} 288e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 289e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Savillevoid PrimitiveFieldGenerator:: 290e2d542951c059563a3b7f74c257dac4f222d9dc5Wink SavilleGenerateSerializationCode(io::Printer* printer) const { 2911b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville if (IsFastStringHandling(descriptor_, params_)) { 292e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville printer->Print(variables_, 293e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "if (has$capitalized_name$()) {\n" 2941b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville " output.writeByteArray($number$, $name$Utf8_);\n" 295e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "}\n"); 296e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } else { 297e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville printer->Print(variables_, 298e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "if (has$capitalized_name$()) {\n" 299e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " output.write$capitalized_type$($number$, get$capitalized_name$());\n" 300e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "}\n"); 301e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } 302e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville} 303e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 304e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Savillevoid PrimitiveFieldGenerator:: 305e2d542951c059563a3b7f74c257dac4f222d9dc5Wink SavilleGenerateSerializedSizeCode(io::Printer* printer) const { 3061b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville if (IsFastStringHandling(descriptor_, params_)) { 307e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville printer->Print(variables_, 308e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "if (has$capitalized_name$()) {\n" 3091b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville " try {\n" 3101b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville " $name$Utf8_ = $name$_.getBytes(\"UTF-8\");\n" 3111b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville " } catch (java.io.UnsupportedEncodingException e) {\n" 3121b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville " throw new RuntimeException(\"UTF-8 not supported.\");\n" 3131b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville " }\n" 314e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " size += com.google.protobuf.micro.CodedOutputStreamMicro\n" 3151b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville " .computeByteArraySize($number$, $name$Utf8_);\n" 316e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "}\n"); 317e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } else { 318e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville printer->Print(variables_, 319e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "if (has$capitalized_name$()) {\n" 320e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " size += com.google.protobuf.micro.CodedOutputStreamMicro\n" 321e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " .compute$capitalized_type$Size($number$, get$capitalized_name$());\n" 322e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "}\n"); 323e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } 324e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville} 325e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 326e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Savillestring PrimitiveFieldGenerator::GetBoxedType() const { 327e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville return BoxedPrimitiveTypeName(GetJavaType(descriptor_)); 328e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville} 329e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 330e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// =================================================================== 331e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 332e2d542951c059563a3b7f74c257dac4f222d9dc5Wink SavilleRepeatedPrimitiveFieldGenerator:: 333e2d542951c059563a3b7f74c257dac4f222d9dc5Wink SavilleRepeatedPrimitiveFieldGenerator(const FieldDescriptor* descriptor, const Params& params) 334e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville : FieldGenerator(params), descriptor_(descriptor) { 335e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville SetPrimitiveVariables(descriptor, params, &variables_); 336e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville if (descriptor_->options().packed()) { 337e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville GOOGLE_LOG(FATAL) << "MicroRuntime does not support packed"; 338e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } 339e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville} 340e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 341e2d542951c059563a3b7f74c257dac4f222d9dc5Wink SavilleRepeatedPrimitiveFieldGenerator::~RepeatedPrimitiveFieldGenerator() {} 342e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 343e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Savillevoid RepeatedPrimitiveFieldGenerator:: 344e2d542951c059563a3b7f74c257dac4f222d9dc5Wink SavilleGenerateMembers(io::Printer* printer) const { 3451b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville if (IsFastStringHandling(descriptor_, params_)) { 346e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville if (params_.java_use_vector()) { 347e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville printer->Print(variables_, 348e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "private java.util.Vector $name$_ = new java.util.Vector();\n" 349e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "public java.util.Vector get$capitalized_name$List() {\n" 350e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " return $name$_;\n" 351e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "}\n" 3521b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville "private java.util.Vector $name$Utf8_ = new java.util.Vector();\n" 353e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "public int get$capitalized_name$Count() { return $name$_.size(); }\n" 3541b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville "public $type$ get$capitalized_name$(int index) {\n" 3551b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville " return (($type$)$name$_.elementAt(index));\n" 356e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "}\n" 3571b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville "public $message_name$ set$capitalized_name$(int index, $type$ value) {\n" 358e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "$null_check$" 3591b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville " $name$_.setElementAt(value, index);\n" 3601b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville " $name$Utf8_ = null;\n" 361e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " return this;\n" 362e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "}\n" 3631b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville "public $message_name$ add$capitalized_name$($type$ value) {\n" 364e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "$null_check$" 3651b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville " $name$_.addElement(value);\n" 3661b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville " $name$Utf8_ = null;\n" 367e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " return this;\n" 368e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "}\n" 369e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "public $message_name$ clear$capitalized_name$() {\n" 370e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " $name$_.removeAllElements();\n" 3711b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville " $name$Utf8_ = null;\n" 372e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " return this;\n" 373e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "}\n"); 374e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } else { 375e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville printer->Print(variables_, 376e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "private java.util.List<$type$> $name$_ =\n" 377e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " java.util.Collections.emptyList();\n" 378e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "public java.util.List<$type$> get$capitalized_name$List() {\n" 379e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " return $name$_;\n" // note: unmodifiable list 380e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "}\n" 3811b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville "private java.util.List<byte []> $name$Utf8_ = null;\n" 382e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "public int get$capitalized_name$Count() { return $name$_.size(); }\n" 3831b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville "public $type$ get$capitalized_name$(int index) {\n" 3841b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville " return $name$_.get(index);\n" 385e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "}\n" 3861b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville "public $message_name$ set$capitalized_name$(int index, $type$ value) {\n" 387e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "$null_check$" 3881b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville " $name$_.set(index, value);\n" 3891b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville " $name$Utf8_ = null;\n" 390e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " return this;\n" 391e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "}\n" 3921b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville "public $message_name$ add$capitalized_name$($type$ value) {\n" 393e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "$null_check$" 394e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " if ($name$_.isEmpty()) {\n" 395e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " $name$_ = new java.util.ArrayList<$type$>();\n" 396e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " }\n" 3971b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville " $name$_.add(value);\n" 3981b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville " $name$Utf8_ = null;\n" 399e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " return this;\n" 400e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "}\n" 401e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "public $message_name$ clear$capitalized_name$() {\n" 402e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " $name$_ = java.util.Collections.emptyList();\n" 4031b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville " $name$Utf8_ = null;\n" 404e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " return this;\n" 405e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "}\n"); 406e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } 407e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } else if (params_.java_use_vector()) { 408e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville if (IsReferenceType(GetJavaType(descriptor_))) { 409e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville printer->Print(variables_, 410e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "private java.util.Vector $name$_ = new java.util.Vector();\n" 411e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "public java.util.Vector get$capitalized_name$List() {\n" 412e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " return $name$_;\n" 413e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "}\n" 414e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "public int get$capitalized_name$Count() { return $name$_.size(); }\n" 415e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "public $type$ get$capitalized_name$(int index) {\n" 416e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " return ($type$) $name$_.elementAt(index);\n" 417e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "}\n" 418e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "public $message_name$ set$capitalized_name$(int index, $type$ value) {\n" 419e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "$null_check$" 420e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " $name$_.setElementAt(value, index);\n" 421e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " return this;\n" 422e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "}\n" 423e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "public $message_name$ add$capitalized_name$($type$ value) {\n" 424e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "$null_check$" 425e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " $name$_.addElement(value);\n" 426e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " return this;\n" 427e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "}\n" 428e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "public $message_name$ clear$capitalized_name$() {\n" 429e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " $name$_.removeAllElements();\n" 430e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " return this;\n" 431e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "}\n"); 432e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } else { 433e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville printer->Print(variables_, 434e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "private java.util.Vector $name$_ = new java.util.Vector();\n" 435e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "public java.util.Vector get$capitalized_name$List() {\n" 436e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " return $name$_;\n" 437e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "}\n" 438e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "public int get$capitalized_name$Count() { return $name$_.size(); }\n" 439e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "public $type$ get$capitalized_name$(int index) {\n" 440e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " return (($boxed_type$)$name$_.elementAt(index)).$type$Value();\n" 441e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "}\n" 442e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "public $message_name$ set$capitalized_name$(int index, $type$ value) {\n" 443e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "$null_check$" 444e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " $name$_.setElementAt(new $boxed_type$(value), index);\n" 445e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " return this;\n" 446e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "}\n" 447e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "public $message_name$ add$capitalized_name$($type$ value) {\n" 448e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "$null_check$" 449e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " $name$_.addElement(new $boxed_type$(value));\n" 450e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " return this;\n" 451e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "}\n" 452e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "public $message_name$ clear$capitalized_name$() {\n" 453e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " $name$_.removeAllElements();\n" 454e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " return this;\n" 455e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "}\n"); 456e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } 457e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } else { 458e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville printer->Print(variables_, 459e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "private java.util.List<$boxed_type$> $name$_ =\n" 460e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " java.util.Collections.emptyList();\n" 461e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "public java.util.List<$boxed_type$> get$capitalized_name$List() {\n" 462e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " return $name$_;\n" // note: unmodifiable list 463e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "}\n" 464e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "public int get$capitalized_name$Count() { return $name$_.size(); }\n" 465e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "public $type$ get$capitalized_name$(int index) {\n" 466e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " return $name$_.get(index);\n" 467e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "}\n" 468e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "public $message_name$ set$capitalized_name$(int index, $type$ value) {\n" 469e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "$null_check$" 470e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " $name$_.set(index, value);\n" 471e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " return this;\n" 472e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "}\n" 473e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "public $message_name$ add$capitalized_name$($type$ value) {\n" 474e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "$null_check$" 475e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " if ($name$_.isEmpty()) {\n" 476e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " $name$_ = new java.util.ArrayList<$boxed_type$>();\n" 477e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " }\n" 478e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " $name$_.add(value);\n" 479e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " return this;\n" 480e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "}\n" 481e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "public $message_name$ clear$capitalized_name$() {\n" 482e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " $name$_ = java.util.Collections.emptyList();\n" 483e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " return this;\n" 484e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "}\n"); 485e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } 486e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville if (descriptor_->options().packed()) { 487e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville printer->Print(variables_, 488e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "private int $name$MemoizedSerializedSize;\n"); 489e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } 490e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville} 491e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 492e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Savillevoid RepeatedPrimitiveFieldGenerator:: 493e2d542951c059563a3b7f74c257dac4f222d9dc5Wink SavilleGenerateMergingCode(io::Printer* printer) const { 494e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville if (params_.java_use_vector()) { 495e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville printer->Print(variables_, 496e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "if (other.$name$_.size() != 0) {\n" 497e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " for (int i = 0; i < other.$name$_.size(); i++)) {\n" 498e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " result.$name$_.addElement(other.$name$_.elementAt(i));\n" 499e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " }\n" 500e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "}\n"); 501e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } else { 502e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville printer->Print(variables_, 503e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "if (!other.$name$_.isEmpty()) {\n" 504e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " if (result.$name$_.isEmpty()) {\n" 505e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " result.$name$_ = new java.util.ArrayList<$type$>();\n" 506e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " }\n" 507e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " result.$name$_.addAll(other.$name$_);\n" 508e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "}\n"); 509e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } 510e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville} 511e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 512e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Savillevoid RepeatedPrimitiveFieldGenerator:: 513e2d542951c059563a3b7f74c257dac4f222d9dc5Wink SavilleGenerateParsingCode(io::Printer* printer) const { 514e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville if (descriptor_->options().packed()) { 515e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville printer->Print(variables_, 516e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "int length = input.readRawVarint32();\n" 517e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "int limit = input.pushLimit(length);\n" 518e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "while (input.getBytesUntilLimit() > 0) {\n" 519e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " add$capitalized_name$(input.read$capitalized_type$());\n" 520e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "}\n" 521e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "input.popLimit(limit);\n"); 522e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } else { 523e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville printer->Print(variables_, 524e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "add$capitalized_name$(input.read$capitalized_type$());\n"); 525e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } 526e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville} 527e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 528e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Savillevoid RepeatedPrimitiveFieldGenerator:: 529e2d542951c059563a3b7f74c257dac4f222d9dc5Wink SavilleGenerateSerializationCode(io::Printer* printer) const { 530e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville if (descriptor_->options().packed()) { 531e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville printer->Print(variables_, 5321b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville "if (get$capitalized_name$List().size() > 0) {\n" 533e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " output.writeRawVarint32($tag$);\n" 534e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " output.writeRawVarint32($name$MemoizedSerializedSize);\n" 535e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "}\n"); 536e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville if (params_.java_use_vector()) { 537e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville printer->Print(variables_, 538e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "for (int i = 0; i < get$capitalized_name$List().size(); i++) {\n" 539e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " output.write$capitalized_type$NoTag(get$capitalized_name$(i));\n" 540e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "}\n"); 541e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } else { 542e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville printer->Print(variables_, 543e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "for ($type$ element : get$capitalized_name$List()) {\n" 544e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " output.write$capitalized_type$NoTag(element);\n" 545e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "}\n"); 546e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } 547e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } else { 548e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville if (params_.java_use_vector()) { 5491b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville if (IsFastStringHandling(descriptor_, params_)) { 550e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville printer->Print(variables_, 5511b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville "for (int i = 0; i < $name$Utf8_.size(); i++) {\n" 5521b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville " output.writeByteArray($number$, (byte []) $name$Utf8_.get(i));\n" 553e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "}\n"); 554e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } else { 555e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville printer->Print(variables_, 556e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "for (int i = 0; i < get$capitalized_name$List().size(); i++) {\n" 557e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " output.write$capitalized_type$($number$, get$capitalized_name$(i));\n" 558e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "}\n"); 559e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } 560e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } else { 5611b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville if (IsFastStringHandling(descriptor_, params_)) { 562e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville printer->Print(variables_, 5631b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville "for (byte [] element : $name$Utf8_) {\n" 5641b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville " output.writeByteArray($number$, element);\n" 565e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "}\n"); 566e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } else { 567e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville printer->Print(variables_, 568e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "for ($type$ element : get$capitalized_name$List()) {\n" 569e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " output.write$capitalized_type$($number$, element);\n" 570e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "}\n"); 571e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } 572e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } 573e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } 574e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville} 575e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 576e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Savillevoid RepeatedPrimitiveFieldGenerator:: 577e2d542951c059563a3b7f74c257dac4f222d9dc5Wink SavilleGenerateSerializedSizeCode(io::Printer* printer) const { 578e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville printer->Print(variables_, 579e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "{\n" 580e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " int dataSize = 0;\n"); 581e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville printer->Indent(); 582e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 583e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville if (FixedSize(descriptor_->type()) == -1) { 584e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville if (params_.java_use_vector()) { 5851b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville if (IsFastStringHandling(descriptor_, params_)) { 586e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville printer->Print(variables_, 5871b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville "$name$Utf8_ = new java.util.Vector();\n" 5881b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville "byte[] bytes = null;\n" 5891b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville "int sizeArray = get$capitalized_name$List().size();\n" 5901b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville "for (int i = 0; i < sizeArray; i++) {\n" 5911b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville " $type$ element = ($type$)$name$_.elementAt(i);\n" 5921b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville " try {\n" 5931b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville " bytes = element.getBytes(\"UTF-8\");\n" 5941b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville " } catch (java.io.UnsupportedEncodingException e) {\n" 5951b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville " throw new RuntimeException(\"UTF-8 not supported.\");\n" 5961b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville " }\n" 5971b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville " $name$Utf8_.addElement(bytes);\n" 5981b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville " dataSize += com.google.protobuf.micro.CodedOutputStreamMicro\n" 5991b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville " .computeByteArraySizeNoTag(bytes);\n" 600e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "}\n"); 601e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } else { 602e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville printer->Print(variables_, 6031b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville "for (int i = 0; i < get$capitalized_name$List().size(); i++) {\n" 6041b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville " dataSize += com.google.protobuf.micro.CodedOutputStreamMicro\n" 605e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " .compute$capitalized_type$SizeNoTag(($type$)get$capitalized_name$(i));\n" 606e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "}\n"); 607e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } 608e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } else { 6091b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville if (IsFastStringHandling(descriptor_, params_)) { 6101b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville printer->Print(variables_, 6111b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville "$name$Utf8_ = new java.util.ArrayList<byte[]>();\n" 6121b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville "byte[] bytes = null;\n" 6131b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville "int sizeArray = get$capitalized_name$List().size();\n" 6141b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville "for (int i = 0; i < sizeArray; i++) {\n" 6151b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville " $type$ element = get$capitalized_name$(i);\n" 6161b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville " try {\n" 6171b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville " bytes = element.getBytes(\"UTF-8\");\n" 6181b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville " } catch (java.io.UnsupportedEncodingException e) {\n" 6191b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville " throw new RuntimeException(\"UTF-8 not supported.\");\n" 6201b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville " }\n" 6211b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville " $name$Utf8_.add(bytes);\n" 6221b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville " dataSize += com.google.protobuf.micro.CodedOutputStreamMicro\n" 6231b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville " .computeByteArraySizeNoTag(bytes);\n" 6241b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville "}\n"); 625e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } else { 626e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville printer->Print(variables_, 6271b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville "for ($type$ element : get$capitalized_name$List()) {\n" 6281b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville " dataSize += com.google.protobuf.micro.CodedOutputStreamMicro\n" 6291b639e09d77de609bed080f5d2ca88d72ba42559Wink Saville " .compute$capitalized_type$SizeNoTag(element);\n" 630e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "}\n"); 631e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } 632e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } 633e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } else { 634e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville printer->Print(variables_, 635e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "dataSize = $fixed_size$ * get$capitalized_name$List().size();\n"); 636e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } 637e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 638e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville printer->Print( 639e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "size += dataSize;\n"); 640e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 641e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville if (descriptor_->options().packed()) { 642e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville if (params_.java_use_vector()) { 643e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville printer->Print(variables_, 644e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "if (get$capitalized_name$List().size() != 0) {\n"); 645e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } else { 646e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville printer->Print(variables_, 647e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "if (!get$capitalized_name$List().isEmpty()) {\n"); 648e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } 649e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville printer->Print(variables_, 650e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " size += $tag_size$;\n" 651e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " size += com.google.protobuf.micro.CodedOutputStreamMicro\n" 652e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville " .computeInt32SizeNoTag(dataSize);\n" 653e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "}\n"); 654e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } else { 655e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville printer->Print(variables_, 656e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "size += $tag_size$ * get$capitalized_name$List().size();\n"); 657e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } 658e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 659e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville // cache the data size for packed fields. 660e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville if (descriptor_->options().packed()) { 661e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville printer->Print(variables_, 662e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville "$name$MemoizedSerializedSize = dataSize;\n"); 663e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } 664e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 665e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville printer->Outdent(); 666e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville printer->Print("}\n"); 667e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville} 668e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 669e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Savillestring RepeatedPrimitiveFieldGenerator::GetBoxedType() const { 670e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville return BoxedPrimitiveTypeName(GetJavaType(descriptor_)); 671e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville} 672e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 673e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville} // namespace javamicro 674e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville} // namespace compiler 675e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville} // namespace protobuf 676e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville} // namespace google 677