1 // Protocol Buffers - Google's data interchange format 2 // Copyright 2008 Google Inc. All rights reserved. 3 // https://developers.google.com/protocol-buffers/ 4 // 5 // Redistribution and use in source and binary forms, with or without 6 // modification, are permitted provided that the following conditions are 7 // met: 8 // 9 // * Redistributions of source code must retain the above copyright 10 // notice, this list of conditions and the following disclaimer. 11 // * Redistributions in binary form must reproduce the above 12 // copyright notice, this list of conditions and the following disclaimer 13 // in the documentation and/or other materials provided with the 14 // distribution. 15 // * Neither the name of Google Inc. nor the names of its 16 // contributors may be used to endorse or promote products derived from 17 // this software without specific prior written permission. 18 // 19 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 31 package com.google.protobuf; 32 33 import com.google.protobuf.testing.Proto2Testing.Proto2Message; 34 import com.google.protobuf.testing.Proto2Testing.Proto2MessageWithMaps; 35 import java.util.ArrayList; 36 import java.util.HashMap; 37 import java.util.List; 38 import java.util.Map; 39 40 /** Creates instances of {@link Proto2Message} based on the tree configuration. */ 41 public final class Proto2MessageFactory implements ExperimentalMessageFactory<Proto2Message> { 42 private final int numRepeatedFields; 43 private final int branchingFactor; 44 private final Proto2MessageFactory nextLevel; 45 private final ExperimentalTestDataProvider data; 46 Proto2MessageFactory( int numRepeatedFields, int stringLength, int branchingFactor, int treeDepth)47 public Proto2MessageFactory( 48 int numRepeatedFields, int stringLength, int branchingFactor, int treeDepth) { 49 this( 50 new ExperimentalTestDataProvider(stringLength), 51 numRepeatedFields, 52 branchingFactor, 53 treeDepth); 54 } 55 Proto2MessageFactory( ExperimentalTestDataProvider data, int numRepeatedFields, int branchingFactor, int treeDepth)56 private Proto2MessageFactory( 57 ExperimentalTestDataProvider data, 58 int numRepeatedFields, 59 int branchingFactor, 60 int treeDepth) { 61 this.numRepeatedFields = numRepeatedFields; 62 this.branchingFactor = branchingFactor; 63 this.data = data; 64 if (treeDepth > 0) { 65 nextLevel = new Proto2MessageFactory(data, numRepeatedFields, branchingFactor, treeDepth - 1); 66 } else { 67 nextLevel = null; 68 } 69 } 70 71 @Override dataProvider()72 public ExperimentalTestDataProvider dataProvider() { 73 return data; 74 } 75 76 @Override newMessage()77 public Proto2Message newMessage() { 78 Proto2Message.Builder builder = Proto2Message.newBuilder(); 79 builder.setFieldDouble1(data.getDouble()); 80 builder.setFieldFloat2(data.getFloat()); 81 builder.setFieldInt643(data.getLong()); 82 builder.setFieldUint644(data.getLong()); 83 builder.setFieldInt325(data.getInt()); 84 builder.setFieldFixed646(data.getLong()); 85 builder.setFieldFixed327(data.getInt()); 86 builder.setFieldBool8(data.getBool()); 87 builder.setFieldString9(data.getString()); 88 // We don't populate the message field. Instead we apply the branching factor to the 89 // repeated message field below. 90 builder.setFieldBytes11(data.getBytes()); 91 builder.setFieldUint3212(data.getInt()); 92 builder.setFieldEnum13(Proto2Message.TestEnum.forNumber(data.getEnum())); 93 builder.setFieldSfixed3214(data.getInt()); 94 builder.setFieldSfixed6415(data.getLong()); 95 builder.setFieldSint3216(data.getInt()); 96 builder.setFieldSint6417(data.getLong()); 97 98 for (int i = 0; i < numRepeatedFields; ++i) { 99 builder.addFieldDoubleList18(data.getDouble()); 100 builder.addFieldFloatList19(data.getFloat()); 101 builder.addFieldInt64List20(data.getLong()); 102 builder.addFieldUint64List21(data.getLong()); 103 builder.addFieldInt32List22(data.getInt()); 104 builder.addFieldFixed64List23(data.getLong()); 105 builder.addFieldFixed32List24(data.getInt()); 106 builder.addFieldBoolList25(data.getBool()); 107 builder.addFieldStringList26(data.getString()); 108 // Repeated message field is controlled by the branching factor below. 109 builder.addFieldBytesList28(data.getBytes()); 110 builder.addFieldUint32List29(data.getInt()); 111 builder.addFieldEnumList30(Proto2Message.TestEnum.forNumber(data.getEnum())); 112 builder.addFieldSfixed32List31(data.getInt()); 113 builder.addFieldSfixed64List32(data.getLong()); 114 builder.addFieldSint32List33(data.getInt()); 115 builder.addFieldSint64List34(data.getLong()); 116 117 builder.addFieldDoubleListPacked35(data.getDouble()); 118 builder.addFieldFloatListPacked36(data.getFloat()); 119 builder.addFieldInt64ListPacked37(data.getLong()); 120 builder.addFieldUint64ListPacked38(data.getLong()); 121 builder.addFieldInt32ListPacked39(data.getInt()); 122 builder.addFieldFixed64ListPacked40(data.getLong()); 123 builder.addFieldFixed32ListPacked41(data.getInt()); 124 builder.addFieldBoolListPacked42(data.getBool()); 125 builder.addFieldUint32ListPacked43(data.getInt()); 126 builder.addFieldEnumListPacked44(Proto2Message.TestEnum.forNumber(data.getEnum())); 127 builder.addFieldSfixed32ListPacked45(data.getInt()); 128 builder.addFieldSfixed64ListPacked46(data.getLong()); 129 builder.addFieldSint32ListPacked47(data.getInt()); 130 builder.addFieldSint64ListPacked48(data.getLong()); 131 } 132 133 builder.setFieldGroup49(Proto2Message.FieldGroup49.newBuilder().setFieldInt3250(data.getInt())); 134 135 for (int i = 0; i < branchingFactor; ++i) { 136 builder.addFieldGroupList51( 137 Proto2Message.FieldGroupList51.newBuilder().setFieldInt3252(data.getInt())); 138 } 139 140 // Set all required fields. 141 populateRequiredFields(builder, INCLUDE_ALL_REQUIRED_FIELDS); 142 143 // Handle the branching factor. 144 if (nextLevel != null) { 145 for (int i = 0; i < branchingFactor; ++i) { 146 builder.addFieldMessageList27(nextLevel.newMessage()); 147 } 148 } 149 150 return builder.build(); 151 } 152 153 private interface MapValueProvider<T> { getValue()154 public T getValue(); 155 } 156 157 private final MapValueProvider<Integer> integerProvider = 158 new MapValueProvider<Integer>() { 159 @Override 160 public Integer getValue() { 161 return data.getInt(); 162 } 163 }; 164 private final MapValueProvider<Long> longProvider = 165 new MapValueProvider<Long>() { 166 @Override 167 public Long getValue() { 168 return data.getLong(); 169 } 170 }; 171 private final MapValueProvider<String> stringProvider = 172 new MapValueProvider<String>() { 173 @Override 174 public String getValue() { 175 return data.getString(); 176 } 177 }; 178 private final MapValueProvider<ByteString> bytesProvider = 179 new MapValueProvider<ByteString>() { 180 @Override 181 public ByteString getValue() { 182 return data.getBytes(); 183 } 184 }; 185 private final MapValueProvider<Boolean> booleanProvider = 186 new MapValueProvider<Boolean>() { 187 @Override 188 public Boolean getValue() { 189 return data.getBool(); 190 } 191 }; 192 private final MapValueProvider<Float> floatProvider = 193 new MapValueProvider<Float>() { 194 @Override 195 public Float getValue() { 196 return data.getFloat(); 197 } 198 }; 199 private final MapValueProvider<Double> doubleProvider = 200 new MapValueProvider<Double>() { 201 @Override 202 public Double getValue() { 203 return data.getDouble(); 204 } 205 }; 206 private final MapValueProvider<Proto2Message> messageProvider = 207 new MapValueProvider<Proto2Message>() { 208 @Override 209 public Proto2Message getValue() { 210 return newMessage(); 211 } 212 }; 213 private final MapValueProvider<Proto2Message.TestEnum> enumProvider = 214 new MapValueProvider<Proto2Message.TestEnum>() { 215 @Override 216 public Proto2Message.TestEnum getValue() { 217 return Proto2Message.TestEnum.forNumber(data.getEnum()); 218 } 219 }; 220 populateIntegerMap(MapValueProvider<V> provider)221 private <V> Map<Integer, V> populateIntegerMap(MapValueProvider<V> provider) { 222 Map<Integer, V> map = new HashMap<>(); 223 for (int i = 0; i < numRepeatedFields; ++i) { 224 map.put(data.getInt(), provider.getValue()); 225 } 226 return map; 227 } 228 populateLongMap(MapValueProvider<V> provider)229 private <V> Map<Long, V> populateLongMap(MapValueProvider<V> provider) { 230 Map<Long, V> map = new HashMap<>(); 231 for (int i = 0; i < numRepeatedFields; ++i) { 232 map.put(data.getLong(), provider.getValue()); 233 } 234 return map; 235 } 236 populateStringMap(MapValueProvider<V> provider)237 private <V> Map<String, V> populateStringMap(MapValueProvider<V> provider) { 238 Map<String, V> map = new HashMap<>(); 239 for (int i = 0; i < numRepeatedFields; ++i) { 240 map.put(data.getString(), provider.getValue()); 241 } 242 return map; 243 } 244 populateBooleanMap(MapValueProvider<V> provider)245 private <V> Map<Boolean, V> populateBooleanMap(MapValueProvider<V> provider) { 246 Map<Boolean, V> map = new HashMap<>(); 247 map.put(false, provider.getValue()); 248 map.put(true, provider.getValue()); 249 return map; 250 } 251 newMessageWithMaps()252 public Proto2MessageWithMaps newMessageWithMaps() { 253 Proto2MessageWithMaps.Builder builder = Proto2MessageWithMaps.newBuilder(); 254 255 builder.putAllFieldMapBoolBool1(populateBooleanMap(booleanProvider)); 256 builder.putAllFieldMapBoolBytes2(populateBooleanMap(bytesProvider)); 257 builder.putAllFieldMapBoolDouble3(populateBooleanMap(doubleProvider)); 258 builder.putAllFieldMapBoolEnum4(populateBooleanMap(enumProvider)); 259 builder.putAllFieldMapBoolFixed325(populateBooleanMap(integerProvider)); 260 builder.putAllFieldMapBoolFixed646(populateBooleanMap(longProvider)); 261 builder.putAllFieldMapBoolFloat7(populateBooleanMap(floatProvider)); 262 builder.putAllFieldMapBoolInt328(populateBooleanMap(integerProvider)); 263 builder.putAllFieldMapBoolInt649(populateBooleanMap(longProvider)); 264 builder.putAllFieldMapBoolMessage10(populateBooleanMap(messageProvider)); 265 builder.putAllFieldMapBoolSfixed3211(populateBooleanMap(integerProvider)); 266 builder.putAllFieldMapBoolSfixed6412(populateBooleanMap(longProvider)); 267 builder.putAllFieldMapBoolSint3213(populateBooleanMap(integerProvider)); 268 builder.putAllFieldMapBoolSint6414(populateBooleanMap(longProvider)); 269 builder.putAllFieldMapBoolString15(populateBooleanMap(stringProvider)); 270 builder.putAllFieldMapBoolUint3216(populateBooleanMap(integerProvider)); 271 builder.putAllFieldMapBoolUint6417(populateBooleanMap(longProvider)); 272 builder.putAllFieldMapFixed32Bool18(populateIntegerMap(booleanProvider)); 273 builder.putAllFieldMapFixed32Bytes19(populateIntegerMap(bytesProvider)); 274 builder.putAllFieldMapFixed32Double20(populateIntegerMap(doubleProvider)); 275 builder.putAllFieldMapFixed32Enum21(populateIntegerMap(enumProvider)); 276 builder.putAllFieldMapFixed32Fixed3222(populateIntegerMap(integerProvider)); 277 builder.putAllFieldMapFixed32Fixed6423(populateIntegerMap(longProvider)); 278 builder.putAllFieldMapFixed32Float24(populateIntegerMap(floatProvider)); 279 builder.putAllFieldMapFixed32Int3225(populateIntegerMap(integerProvider)); 280 builder.putAllFieldMapFixed32Int6426(populateIntegerMap(longProvider)); 281 builder.putAllFieldMapFixed32Message27(populateIntegerMap(messageProvider)); 282 builder.putAllFieldMapFixed32Sfixed3228(populateIntegerMap(integerProvider)); 283 builder.putAllFieldMapFixed32Sfixed6429(populateIntegerMap(longProvider)); 284 builder.putAllFieldMapFixed32Sint3230(populateIntegerMap(integerProvider)); 285 builder.putAllFieldMapFixed32Sint6431(populateIntegerMap(longProvider)); 286 builder.putAllFieldMapFixed32String32(populateIntegerMap(stringProvider)); 287 builder.putAllFieldMapFixed32Uint3233(populateIntegerMap(integerProvider)); 288 builder.putAllFieldMapFixed32Uint6434(populateIntegerMap(longProvider)); 289 builder.putAllFieldMapFixed64Bool35(populateLongMap(booleanProvider)); 290 builder.putAllFieldMapFixed64Bytes36(populateLongMap(bytesProvider)); 291 builder.putAllFieldMapFixed64Double37(populateLongMap(doubleProvider)); 292 builder.putAllFieldMapFixed64Enum38(populateLongMap(enumProvider)); 293 builder.putAllFieldMapFixed64Fixed3239(populateLongMap(integerProvider)); 294 builder.putAllFieldMapFixed64Fixed6440(populateLongMap(longProvider)); 295 builder.putAllFieldMapFixed64Float41(populateLongMap(floatProvider)); 296 builder.putAllFieldMapFixed64Int3242(populateLongMap(integerProvider)); 297 builder.putAllFieldMapFixed64Int6443(populateLongMap(longProvider)); 298 builder.putAllFieldMapFixed64Message44(populateLongMap(messageProvider)); 299 builder.putAllFieldMapFixed64Sfixed3245(populateLongMap(integerProvider)); 300 builder.putAllFieldMapFixed64Sfixed6446(populateLongMap(longProvider)); 301 builder.putAllFieldMapFixed64Sint3247(populateLongMap(integerProvider)); 302 builder.putAllFieldMapFixed64Sint6448(populateLongMap(longProvider)); 303 builder.putAllFieldMapFixed64String49(populateLongMap(stringProvider)); 304 builder.putAllFieldMapFixed64Uint3250(populateLongMap(integerProvider)); 305 builder.putAllFieldMapFixed64Uint6451(populateLongMap(longProvider)); 306 builder.putAllFieldMapInt32Bool52(populateIntegerMap(booleanProvider)); 307 builder.putAllFieldMapInt32Bytes53(populateIntegerMap(bytesProvider)); 308 builder.putAllFieldMapInt32Double54(populateIntegerMap(doubleProvider)); 309 builder.putAllFieldMapInt32Enum55(populateIntegerMap(enumProvider)); 310 builder.putAllFieldMapInt32Fixed3256(populateIntegerMap(integerProvider)); 311 builder.putAllFieldMapInt32Fixed6457(populateIntegerMap(longProvider)); 312 builder.putAllFieldMapInt32Float58(populateIntegerMap(floatProvider)); 313 builder.putAllFieldMapInt32Int3259(populateIntegerMap(integerProvider)); 314 builder.putAllFieldMapInt32Int6460(populateIntegerMap(longProvider)); 315 builder.putAllFieldMapInt32Message61(populateIntegerMap(messageProvider)); 316 builder.putAllFieldMapInt32Sfixed3262(populateIntegerMap(integerProvider)); 317 builder.putAllFieldMapInt32Sfixed6463(populateIntegerMap(longProvider)); 318 builder.putAllFieldMapInt32Sint3264(populateIntegerMap(integerProvider)); 319 builder.putAllFieldMapInt32Sint6465(populateIntegerMap(longProvider)); 320 builder.putAllFieldMapInt32String66(populateIntegerMap(stringProvider)); 321 builder.putAllFieldMapInt32Uint3267(populateIntegerMap(integerProvider)); 322 builder.putAllFieldMapInt32Uint6468(populateIntegerMap(longProvider)); 323 builder.putAllFieldMapInt64Bool69(populateLongMap(booleanProvider)); 324 builder.putAllFieldMapInt64Bytes70(populateLongMap(bytesProvider)); 325 builder.putAllFieldMapInt64Double71(populateLongMap(doubleProvider)); 326 builder.putAllFieldMapInt64Enum72(populateLongMap(enumProvider)); 327 builder.putAllFieldMapInt64Fixed3273(populateLongMap(integerProvider)); 328 builder.putAllFieldMapInt64Fixed6474(populateLongMap(longProvider)); 329 builder.putAllFieldMapInt64Float75(populateLongMap(floatProvider)); 330 builder.putAllFieldMapInt64Int3276(populateLongMap(integerProvider)); 331 builder.putAllFieldMapInt64Int6477(populateLongMap(longProvider)); 332 builder.putAllFieldMapInt64Message78(populateLongMap(messageProvider)); 333 builder.putAllFieldMapInt64Sfixed3279(populateLongMap(integerProvider)); 334 builder.putAllFieldMapInt64Sfixed6480(populateLongMap(longProvider)); 335 builder.putAllFieldMapInt64Sint3281(populateLongMap(integerProvider)); 336 builder.putAllFieldMapInt64Sint6482(populateLongMap(longProvider)); 337 builder.putAllFieldMapInt64String83(populateLongMap(stringProvider)); 338 builder.putAllFieldMapInt64Uint3284(populateLongMap(integerProvider)); 339 builder.putAllFieldMapInt64Uint6485(populateLongMap(longProvider)); 340 builder.putAllFieldMapSfixed32Bool86(populateIntegerMap(booleanProvider)); 341 builder.putAllFieldMapSfixed32Bytes87(populateIntegerMap(bytesProvider)); 342 builder.putAllFieldMapSfixed32Double88(populateIntegerMap(doubleProvider)); 343 builder.putAllFieldMapSfixed32Enum89(populateIntegerMap(enumProvider)); 344 builder.putAllFieldMapSfixed32Fixed3290(populateIntegerMap(integerProvider)); 345 builder.putAllFieldMapSfixed32Fixed6491(populateIntegerMap(longProvider)); 346 builder.putAllFieldMapSfixed32Float92(populateIntegerMap(floatProvider)); 347 builder.putAllFieldMapSfixed32Int3293(populateIntegerMap(integerProvider)); 348 builder.putAllFieldMapSfixed32Int6494(populateIntegerMap(longProvider)); 349 builder.putAllFieldMapSfixed32Message95(populateIntegerMap(messageProvider)); 350 builder.putAllFieldMapSfixed32Sfixed3296(populateIntegerMap(integerProvider)); 351 builder.putAllFieldMapSfixed32Sfixed6497(populateIntegerMap(longProvider)); 352 builder.putAllFieldMapSfixed32Sint3298(populateIntegerMap(integerProvider)); 353 builder.putAllFieldMapSfixed32Sint6499(populateIntegerMap(longProvider)); 354 builder.putAllFieldMapSfixed32String100(populateIntegerMap(stringProvider)); 355 builder.putAllFieldMapSfixed32Uint32101(populateIntegerMap(integerProvider)); 356 builder.putAllFieldMapSfixed32Uint64102(populateIntegerMap(longProvider)); 357 builder.putAllFieldMapSfixed64Bool103(populateLongMap(booleanProvider)); 358 builder.putAllFieldMapSfixed64Bytes104(populateLongMap(bytesProvider)); 359 builder.putAllFieldMapSfixed64Double105(populateLongMap(doubleProvider)); 360 builder.putAllFieldMapSfixed64Enum106(populateLongMap(enumProvider)); 361 builder.putAllFieldMapSfixed64Fixed32107(populateLongMap(integerProvider)); 362 builder.putAllFieldMapSfixed64Fixed64108(populateLongMap(longProvider)); 363 builder.putAllFieldMapSfixed64Float109(populateLongMap(floatProvider)); 364 builder.putAllFieldMapSfixed64Int32110(populateLongMap(integerProvider)); 365 builder.putAllFieldMapSfixed64Int64111(populateLongMap(longProvider)); 366 builder.putAllFieldMapSfixed64Message112(populateLongMap(messageProvider)); 367 builder.putAllFieldMapSfixed64Sfixed32113(populateLongMap(integerProvider)); 368 builder.putAllFieldMapSfixed64Sfixed64114(populateLongMap(longProvider)); 369 builder.putAllFieldMapSfixed64Sint32115(populateLongMap(integerProvider)); 370 builder.putAllFieldMapSfixed64Sint64116(populateLongMap(longProvider)); 371 builder.putAllFieldMapSfixed64String117(populateLongMap(stringProvider)); 372 builder.putAllFieldMapSfixed64Uint32118(populateLongMap(integerProvider)); 373 builder.putAllFieldMapSfixed64Uint64119(populateLongMap(longProvider)); 374 builder.putAllFieldMapSint32Bool120(populateIntegerMap(booleanProvider)); 375 builder.putAllFieldMapSint32Bytes121(populateIntegerMap(bytesProvider)); 376 builder.putAllFieldMapSint32Double122(populateIntegerMap(doubleProvider)); 377 builder.putAllFieldMapSint32Enum123(populateIntegerMap(enumProvider)); 378 builder.putAllFieldMapSint32Fixed32124(populateIntegerMap(integerProvider)); 379 builder.putAllFieldMapSint32Fixed64125(populateIntegerMap(longProvider)); 380 builder.putAllFieldMapSint32Float126(populateIntegerMap(floatProvider)); 381 builder.putAllFieldMapSint32Int32127(populateIntegerMap(integerProvider)); 382 builder.putAllFieldMapSint32Int64128(populateIntegerMap(longProvider)); 383 builder.putAllFieldMapSint32Message129(populateIntegerMap(messageProvider)); 384 builder.putAllFieldMapSint32Sfixed32130(populateIntegerMap(integerProvider)); 385 builder.putAllFieldMapSint32Sfixed64131(populateIntegerMap(longProvider)); 386 builder.putAllFieldMapSint32Sint32132(populateIntegerMap(integerProvider)); 387 builder.putAllFieldMapSint32Sint64133(populateIntegerMap(longProvider)); 388 builder.putAllFieldMapSint32String134(populateIntegerMap(stringProvider)); 389 builder.putAllFieldMapSint32Uint32135(populateIntegerMap(integerProvider)); 390 builder.putAllFieldMapSint32Uint64136(populateIntegerMap(longProvider)); 391 builder.putAllFieldMapSint64Bool137(populateLongMap(booleanProvider)); 392 builder.putAllFieldMapSint64Bytes138(populateLongMap(bytesProvider)); 393 builder.putAllFieldMapSint64Double139(populateLongMap(doubleProvider)); 394 builder.putAllFieldMapSint64Enum140(populateLongMap(enumProvider)); 395 builder.putAllFieldMapSint64Fixed32141(populateLongMap(integerProvider)); 396 builder.putAllFieldMapSint64Fixed64142(populateLongMap(longProvider)); 397 builder.putAllFieldMapSint64Float143(populateLongMap(floatProvider)); 398 builder.putAllFieldMapSint64Int32144(populateLongMap(integerProvider)); 399 builder.putAllFieldMapSint64Int64145(populateLongMap(longProvider)); 400 builder.putAllFieldMapSint64Message146(populateLongMap(messageProvider)); 401 builder.putAllFieldMapSint64Sfixed32147(populateLongMap(integerProvider)); 402 builder.putAllFieldMapSint64Sfixed64148(populateLongMap(longProvider)); 403 builder.putAllFieldMapSint64Sint32149(populateLongMap(integerProvider)); 404 builder.putAllFieldMapSint64Sint64150(populateLongMap(longProvider)); 405 builder.putAllFieldMapSint64String151(populateLongMap(stringProvider)); 406 builder.putAllFieldMapSint64Uint32152(populateLongMap(integerProvider)); 407 builder.putAllFieldMapSint64Uint64153(populateLongMap(longProvider)); 408 builder.putAllFieldMapStringBool154(populateStringMap(booleanProvider)); 409 builder.putAllFieldMapStringBytes155(populateStringMap(bytesProvider)); 410 builder.putAllFieldMapStringDouble156(populateStringMap(doubleProvider)); 411 builder.putAllFieldMapStringEnum157(populateStringMap(enumProvider)); 412 builder.putAllFieldMapStringFixed32158(populateStringMap(integerProvider)); 413 builder.putAllFieldMapStringFixed64159(populateStringMap(longProvider)); 414 builder.putAllFieldMapStringFloat160(populateStringMap(floatProvider)); 415 builder.putAllFieldMapStringInt32161(populateStringMap(integerProvider)); 416 builder.putAllFieldMapStringInt64162(populateStringMap(longProvider)); 417 builder.putAllFieldMapStringMessage163(populateStringMap(messageProvider)); 418 builder.putAllFieldMapStringSfixed32164(populateStringMap(integerProvider)); 419 builder.putAllFieldMapStringSfixed64165(populateStringMap(longProvider)); 420 builder.putAllFieldMapStringSint32166(populateStringMap(integerProvider)); 421 builder.putAllFieldMapStringSint64167(populateStringMap(longProvider)); 422 builder.putAllFieldMapStringString168(populateStringMap(stringProvider)); 423 builder.putAllFieldMapStringUint32169(populateStringMap(integerProvider)); 424 builder.putAllFieldMapStringUint64170(populateStringMap(longProvider)); 425 builder.putAllFieldMapUint32Bool171(populateIntegerMap(booleanProvider)); 426 builder.putAllFieldMapUint32Bytes172(populateIntegerMap(bytesProvider)); 427 builder.putAllFieldMapUint32Double173(populateIntegerMap(doubleProvider)); 428 builder.putAllFieldMapUint32Enum174(populateIntegerMap(enumProvider)); 429 builder.putAllFieldMapUint32Fixed32175(populateIntegerMap(integerProvider)); 430 builder.putAllFieldMapUint32Fixed64176(populateIntegerMap(longProvider)); 431 builder.putAllFieldMapUint32Float177(populateIntegerMap(floatProvider)); 432 builder.putAllFieldMapUint32Int32178(populateIntegerMap(integerProvider)); 433 builder.putAllFieldMapUint32Int64179(populateIntegerMap(longProvider)); 434 builder.putAllFieldMapUint32Message180(populateIntegerMap(messageProvider)); 435 builder.putAllFieldMapUint32Sfixed32181(populateIntegerMap(integerProvider)); 436 builder.putAllFieldMapUint32Sfixed64182(populateIntegerMap(longProvider)); 437 builder.putAllFieldMapUint32Sint32183(populateIntegerMap(integerProvider)); 438 builder.putAllFieldMapUint32Sint64184(populateIntegerMap(longProvider)); 439 builder.putAllFieldMapUint32String185(populateIntegerMap(stringProvider)); 440 builder.putAllFieldMapUint32Uint32186(populateIntegerMap(integerProvider)); 441 builder.putAllFieldMapUint32Uint64187(populateIntegerMap(longProvider)); 442 builder.putAllFieldMapUint64Bool188(populateLongMap(booleanProvider)); 443 builder.putAllFieldMapUint64Bytes189(populateLongMap(bytesProvider)); 444 builder.putAllFieldMapUint64Double190(populateLongMap(doubleProvider)); 445 builder.putAllFieldMapUint64Enum191(populateLongMap(enumProvider)); 446 builder.putAllFieldMapUint64Fixed32192(populateLongMap(integerProvider)); 447 builder.putAllFieldMapUint64Fixed64193(populateLongMap(longProvider)); 448 builder.putAllFieldMapUint64Float194(populateLongMap(floatProvider)); 449 builder.putAllFieldMapUint64Int32195(populateLongMap(integerProvider)); 450 builder.putAllFieldMapUint64Int64196(populateLongMap(longProvider)); 451 builder.putAllFieldMapUint64Message197(populateLongMap(messageProvider)); 452 builder.putAllFieldMapUint64Sfixed32198(populateLongMap(integerProvider)); 453 builder.putAllFieldMapUint64Sfixed64199(populateLongMap(longProvider)); 454 builder.putAllFieldMapUint64Sint32200(populateLongMap(integerProvider)); 455 builder.putAllFieldMapUint64Sint64201(populateLongMap(longProvider)); 456 builder.putAllFieldMapUint64String202(populateLongMap(stringProvider)); 457 builder.putAllFieldMapUint64Uint32203(populateLongMap(integerProvider)); 458 builder.putAllFieldMapUint64Uint64204(populateLongMap(longProvider)); 459 460 return builder.build(); 461 } 462 newMessagesMissingRequiredFields()463 public List<Proto2Message> newMessagesMissingRequiredFields() { 464 List<Proto2Message> results = new ArrayList<>(); 465 for (int i = 71; i <= 88; ++i) { 466 Proto2Message.Builder builder = Proto2Message.newBuilder(); 467 populateRequiredFields(builder, i); 468 results.add(builder.buildPartial()); 469 } 470 { 471 // A nested optional message field is missing required fields. 472 Proto2Message.Builder builder = Proto2Message.newBuilder(); 473 populateRequiredFields(builder, INCLUDE_ALL_REQUIRED_FIELDS); 474 builder.setFieldMessage10(Proto2Message.getDefaultInstance()); 475 results.add(builder.buildPartial()); 476 } 477 { 478 // A nested repeated message field is missing required fields. 479 Proto2Message.Builder builder = Proto2Message.newBuilder(); 480 populateRequiredFields(builder, INCLUDE_ALL_REQUIRED_FIELDS); 481 builder.addFieldMessageList27(Proto2Message.getDefaultInstance()); 482 results.add(builder.buildPartial()); 483 } 484 { 485 // A nested oneof message field is missing required fields. 486 Proto2Message.Builder builder = Proto2Message.newBuilder(); 487 populateRequiredFields(builder, INCLUDE_ALL_REQUIRED_FIELDS); 488 builder.setFieldMessage62(Proto2Message.getDefaultInstance()); 489 results.add(builder.buildPartial()); 490 } 491 return results; 492 } 493 494 // 0 is not a valid field number so we use it to mean no fields are excluded. 495 private static final int INCLUDE_ALL_REQUIRED_FIELDS = 0; 496 populateRequiredFields(Proto2Message.Builder builder, int excludedFieldNumber)497 private void populateRequiredFields(Proto2Message.Builder builder, int excludedFieldNumber) { 498 if (excludedFieldNumber != 71) { 499 builder.setFieldRequiredDouble71(data.getDouble()); 500 } 501 if (excludedFieldNumber != 72) { 502 builder.setFieldRequiredFloat72(data.getFloat()); 503 } 504 if (excludedFieldNumber != 73) { 505 builder.setFieldRequiredInt6473(data.getLong()); 506 } 507 if (excludedFieldNumber != 74) { 508 builder.setFieldRequiredUint6474(data.getLong()); 509 } 510 if (excludedFieldNumber != 75) { 511 builder.setFieldRequiredInt3275(data.getInt()); 512 } 513 if (excludedFieldNumber != 76) { 514 builder.setFieldRequiredFixed6476(data.getLong()); 515 } 516 if (excludedFieldNumber != 77) { 517 builder.setFieldRequiredFixed3277(data.getInt()); 518 } 519 if (excludedFieldNumber != 78) { 520 builder.setFieldRequiredBool78(data.getBool()); 521 } 522 if (excludedFieldNumber != 79) { 523 builder.setFieldRequiredString79(data.getString()); 524 } 525 if (excludedFieldNumber != 80) { 526 builder.setFieldRequiredMessage80( 527 Proto2Message.RequiredNestedMessage.newBuilder().setValue(data.getInt())); 528 } 529 if (excludedFieldNumber != 81) { 530 builder.setFieldRequiredBytes81(data.getBytes()); 531 } 532 if (excludedFieldNumber != 82) { 533 builder.setFieldRequiredUint3282(data.getInt()); 534 } 535 if (excludedFieldNumber != 83) { 536 builder.setFieldRequiredEnum83(Proto2Message.TestEnum.forNumber(data.getEnum())); 537 } 538 if (excludedFieldNumber != 84) { 539 builder.setFieldRequiredSfixed3284(data.getInt()); 540 } 541 if (excludedFieldNumber != 85) { 542 builder.setFieldRequiredSfixed6485(data.getLong()); 543 } 544 if (excludedFieldNumber != 86) { 545 builder.setFieldRequiredSint3286(data.getInt()); 546 } 547 if (excludedFieldNumber != 87) { 548 builder.setFieldRequiredSint6487(data.getLong()); 549 } 550 if (excludedFieldNumber != 88) { 551 builder.setFieldRequiredGroup88( 552 Proto2Message.FieldRequiredGroup88.newBuilder().setFieldInt3289(data.getInt())); 553 } 554 } 555 } 556