• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 static com.google.protobuf.FieldInfo.forField;
34 import static com.google.protobuf.FieldInfo.forFieldWithEnumVerifier;
35 import static com.google.protobuf.FieldInfo.forMapField;
36 import static com.google.protobuf.FieldInfo.forOneofMemberField;
37 import static com.google.protobuf.FieldInfo.forProto2OptionalField;
38 import static com.google.protobuf.FieldInfo.forProto2RequiredField;
39 import static com.google.protobuf.FieldInfo.forRepeatedMessageField;
40 
41 import com.google.protobuf.testing.Proto2Testing;
42 import com.google.protobuf.testing.Proto2Testing.Proto2Empty;
43 import com.google.protobuf.testing.Proto2Testing.Proto2Message;
44 import com.google.protobuf.testing.Proto2Testing.Proto2Message.FieldGroup49;
45 import com.google.protobuf.testing.Proto2Testing.Proto2Message.FieldGroup69;
46 import com.google.protobuf.testing.Proto2Testing.Proto2Message.FieldGroupList51;
47 import com.google.protobuf.testing.Proto2Testing.Proto2Message.FieldRequiredGroup88;
48 import com.google.protobuf.testing.Proto2Testing.Proto2Message.RequiredNestedMessage;
49 import com.google.protobuf.testing.Proto2Testing.Proto2Message.TestEnum;
50 import com.google.protobuf.testing.Proto2Testing.Proto2MessageWithExtensions;
51 import com.google.protobuf.testing.Proto2Testing.Proto2MessageWithMaps;
52 import java.lang.reflect.Field;
53 
54 /** A factory that generates a hard-coded message info for {@link Proto2Message}. */
55 public final class Proto2MessageInfoFactory implements MessageInfoFactory {
56   private static final Proto2MessageInfoFactory INSTANCE = new Proto2MessageInfoFactory();
57 
Proto2MessageInfoFactory()58   private Proto2MessageInfoFactory() {}
59 
getInstance()60   public static Proto2MessageInfoFactory getInstance() {
61     return INSTANCE;
62   }
63 
64   @Override
isSupported(Class<?> clazz)65   public boolean isSupported(Class<?> clazz) {
66     return true;
67   }
68 
69   @Override
messageInfoFor(Class<?> clazz)70   public MessageInfo messageInfoFor(Class<?> clazz) {
71     if (Proto2Message.class.isAssignableFrom(clazz)) {
72       return newMessageInfoForProto2Message();
73     } else if (FieldGroup49.class.isAssignableFrom(clazz)) {
74       return newMessageInfoForFieldGroup49();
75     } else if (FieldGroupList51.class.isAssignableFrom(clazz)) {
76       return newMessageInfoForFieldGroupList51();
77     } else if (FieldGroup69.class.isAssignableFrom(clazz)) {
78       return newMessageInfoForFieldGroup69();
79     } else if (FieldRequiredGroup88.class.isAssignableFrom(clazz)) {
80       return newMessageInfoForFieldRequiredGroup88();
81     } else if (RequiredNestedMessage.class.isAssignableFrom(clazz)) {
82       return newMessageInfoForRequiredNestedMessage();
83     } else if (Proto2Empty.class.isAssignableFrom(clazz)) {
84       return newMessageInfoForProto2Empty();
85     } else if (Proto2MessageWithExtensions.class.isAssignableFrom(clazz)) {
86       return newMessageInfoForProto2MessageWithExtensions();
87     } else if (Proto2Testing.FieldGroup49.class.isAssignableFrom(clazz)) {
88       return newMessageInfoForExtensionFieldGroup49();
89     } else if (Proto2Testing.FieldGroupList51.class.isAssignableFrom(clazz)) {
90       return newMessageInfoForExtensionFieldGroupList51();
91     } else if (Proto2Testing.Proto2MessageWithMaps.class.isAssignableFrom(clazz)) {
92       return newMessageInfoForProto2MessageWithMaps();
93     } else {
94       throw new IllegalArgumentException("Unsupported class: " + clazz.getName());
95     }
96   }
97 
98   /**
99    * Creates a new hard-coded info for {@link Proto2Message}. Each time this is called, we manually
100    * go through the entire process of what a message would do if it self-registered its own info,
101    * including looking up each field by name. This is done for benchmarking purposes, so that we get
102    * a more accurate representation of the time it takes to perform this process.
103    */
newMessageInfoForProto2Message()104   private static StructuralMessageInfo newMessageInfoForProto2Message() {
105     StructuralMessageInfo.Builder builder = StructuralMessageInfo.newBuilder(50);
106     builder.withCheckInitialized(
107         new int[] {
108           10, 27, 62, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88,
109         });
110     lookupFieldsByName(builder);
111     return builder.build();
112   }
113 
lookupFieldsByName(StructuralMessageInfo.Builder builder)114   private static void lookupFieldsByName(StructuralMessageInfo.Builder builder) {
115     Field bitField0 = field("bitField0_");
116 
117     builder.withDefaultInstance(Proto2Message.getDefaultInstance());
118     builder.withSyntax(ProtoSyntax.PROTO2);
119     builder.withField(
120         forProto2OptionalField(
121             field("fieldDouble1_"), 1, FieldType.DOUBLE, bitField0, 0x00000001, false, null));
122     builder.withField(
123         forProto2OptionalField(
124             field("fieldFloat2_"), 2, FieldType.FLOAT, bitField0, 0x00000002, false, null));
125     builder.withField(
126         forProto2OptionalField(
127             field("fieldInt643_"), 3, FieldType.INT64, bitField0, 0x00000004, false, null));
128     builder.withField(
129         forProto2OptionalField(
130             field("fieldUint644_"), 4, FieldType.UINT64, bitField0, 0x00000008, false, null));
131     builder.withField(
132         forProto2OptionalField(
133             field("fieldInt325_"), 5, FieldType.INT32, bitField0, 0x00000010, false, null));
134     builder.withField(
135         forProto2OptionalField(
136             field("fieldFixed646_"), 6, FieldType.FIXED64, bitField0, 0x00000020, false, null));
137     builder.withField(
138         forProto2OptionalField(
139             field("fieldFixed327_"), 7, FieldType.FIXED32, bitField0, 0x00000040, false, null));
140     builder.withField(
141         forProto2OptionalField(
142             field("fieldBool8_"), 8, FieldType.BOOL, bitField0, 0x00000080, false, null));
143     builder.withField(
144         forProto2OptionalField(
145             field("fieldString9_"), 9, FieldType.STRING, bitField0, 0x00000100, false, null));
146     builder.withField(
147         forProto2OptionalField(
148             field("fieldMessage10_"), 10, FieldType.MESSAGE, bitField0, 0x00000200, false, null));
149     builder.withField(
150         forProto2OptionalField(
151             field("fieldBytes11_"), 11, FieldType.BYTES, bitField0, 0x00000400, false, null));
152     builder.withField(
153         forProto2OptionalField(
154             field("fieldUint3212_"), 12, FieldType.UINT32, bitField0, 0x00000800, false, null));
155     builder.withField(
156         forProto2OptionalField(
157             field("fieldEnum13_"),
158             13,
159             FieldType.ENUM,
160             bitField0,
161             0x00001000,
162             false,
163             asVerifier(TestEnum.internalGetValueMap())));
164     builder.withField(
165         forProto2OptionalField(
166             field("fieldSfixed3214_"), 14, FieldType.SFIXED32, bitField0, 0x00002000, false, null));
167     builder.withField(
168         forProto2OptionalField(
169             field("fieldSfixed6415_"), 15, FieldType.SFIXED64, bitField0, 0x00004000, false, null));
170     builder.withField(
171         forProto2OptionalField(
172             field("fieldSint3216_"), 16, FieldType.SINT32, bitField0, 0x00008000, false, null));
173     builder.withField(
174         forProto2OptionalField(
175             field("fieldSint6417_"), 17, FieldType.SINT64, bitField0, 0x00010000, false, null));
176     builder.withField(forField(field("fieldDoubleList18_"), 18, FieldType.DOUBLE_LIST, false));
177     builder.withField(forField(field("fieldFloatList19_"), 19, FieldType.FLOAT_LIST, false));
178     builder.withField(forField(field("fieldInt64List20_"), 20, FieldType.INT64_LIST, false));
179     builder.withField(forField(field("fieldUint64List21_"), 21, FieldType.UINT64_LIST, false));
180     builder.withField(forField(field("fieldInt32List22_"), 22, FieldType.INT32_LIST, false));
181     builder.withField(forField(field("fieldFixed64List23_"), 23, FieldType.FIXED64_LIST, false));
182     builder.withField(forField(field("fieldFixed32List24_"), 24, FieldType.FIXED32_LIST, false));
183     builder.withField(forField(field("fieldBoolList25_"), 25, FieldType.BOOL_LIST, false));
184     builder.withField(forField(field("fieldStringList26_"), 26, FieldType.STRING_LIST, false));
185     builder.withField(
186         forRepeatedMessageField(
187             field("fieldMessageList27_"), 27, FieldType.MESSAGE_LIST, Proto2Message.class));
188     builder.withField(forField(field("fieldBytesList28_"), 28, FieldType.BYTES_LIST, false));
189     builder.withField(forField(field("fieldUint32List29_"), 29, FieldType.UINT32_LIST, false));
190     builder.withField(
191         forFieldWithEnumVerifier(
192             field("fieldEnumList30_"),
193             30,
194             FieldType.ENUM_LIST,
195             asVerifier(TestEnum.internalGetValueMap())));
196     builder.withField(forField(field("fieldSfixed32List31_"), 31, FieldType.SFIXED32_LIST, false));
197     builder.withField(forField(field("fieldSfixed64List32_"), 32, FieldType.SFIXED64_LIST, false));
198     builder.withField(forField(field("fieldSint32List33_"), 33, FieldType.SINT32_LIST, false));
199     builder.withField(forField(field("fieldSint64List34_"), 34, FieldType.SINT64_LIST, false));
200     builder.withField(
201         forField(field("fieldDoubleListPacked35_"), 35, FieldType.DOUBLE_LIST_PACKED, false));
202     builder.withField(
203         forField(field("fieldFloatListPacked36_"), 36, FieldType.FLOAT_LIST_PACKED, false));
204     builder.withField(
205         forField(field("fieldInt64ListPacked37_"), 37, FieldType.INT64_LIST_PACKED, false));
206     builder.withField(
207         forField(field("fieldUint64ListPacked38_"), 38, FieldType.UINT64_LIST_PACKED, false));
208     builder.withField(
209         forField(field("fieldInt32ListPacked39_"), 39, FieldType.INT32_LIST_PACKED, false));
210     builder.withField(
211         forField(field("fieldFixed64ListPacked40_"), 40, FieldType.FIXED64_LIST_PACKED, false));
212     builder.withField(
213         forField(field("fieldFixed32ListPacked41_"), 41, FieldType.FIXED32_LIST_PACKED, false));
214     builder.withField(
215         forField(field("fieldBoolListPacked42_"), 42, FieldType.BOOL_LIST_PACKED, false));
216     builder.withField(
217         forField(field("fieldUint32ListPacked43_"), 43, FieldType.UINT32_LIST_PACKED, false));
218     builder.withField(
219         forFieldWithEnumVerifier(
220             field("fieldEnumListPacked44_"),
221             44,
222             FieldType.ENUM_LIST_PACKED,
223             asVerifier(TestEnum.internalGetValueMap())));
224     builder.withField(
225         forField(field("fieldSfixed32ListPacked45_"), 45, FieldType.SFIXED32_LIST_PACKED, false));
226     builder.withField(
227         forField(field("fieldSfixed64ListPacked46_"), 46, FieldType.SFIXED64_LIST_PACKED, false));
228     builder.withField(
229         forField(field("fieldSint32ListPacked47_"), 47, FieldType.SINT32_LIST_PACKED, false));
230     builder.withField(
231         forField(field("fieldSint64ListPacked48_"), 48, FieldType.SINT64_LIST_PACKED, false));
232 
233     builder.withField(
234         forProto2OptionalField(
235             field("fieldGroup49_"), 49, FieldType.GROUP, bitField0, 0x00020000, false, null));
236     builder.withField(
237         forRepeatedMessageField(
238             field("fieldGroupList51_"),
239             51,
240             FieldType.GROUP_LIST,
241             Proto2Message.FieldGroupList51.class));
242 
243     OneofInfo oneof = new OneofInfo(0, field("testOneofCase_"), field("testOneof_"));
244     builder.withField(forOneofMemberField(53, FieldType.DOUBLE, oneof, Double.class, false, null));
245     builder.withField(forOneofMemberField(54, FieldType.FLOAT, oneof, Float.class, false, null));
246     builder.withField(forOneofMemberField(55, FieldType.INT64, oneof, Long.class, false, null));
247     builder.withField(forOneofMemberField(56, FieldType.UINT64, oneof, Long.class, false, null));
248     builder.withField(forOneofMemberField(57, FieldType.INT32, oneof, Integer.class, false, null));
249     builder.withField(forOneofMemberField(58, FieldType.FIXED64, oneof, Long.class, false, null));
250     builder.withField(
251         forOneofMemberField(59, FieldType.FIXED32, oneof, Integer.class, false, null));
252     builder.withField(forOneofMemberField(60, FieldType.BOOL, oneof, Boolean.class, false, null));
253     builder.withField(forOneofMemberField(61, FieldType.STRING, oneof, String.class, false, null));
254     builder.withField(
255         forOneofMemberField(62, FieldType.MESSAGE, oneof, Proto2Message.class, false, null));
256     builder.withField(
257         forOneofMemberField(63, FieldType.BYTES, oneof, ByteString.class, false, null));
258     builder.withField(forOneofMemberField(64, FieldType.UINT32, oneof, Integer.class, false, null));
259     builder.withField(
260         forOneofMemberField(65, FieldType.SFIXED32, oneof, Integer.class, false, null));
261     builder.withField(forOneofMemberField(66, FieldType.SFIXED64, oneof, Long.class, false, null));
262     builder.withField(forOneofMemberField(67, FieldType.SINT32, oneof, Integer.class, false, null));
263     builder.withField(forOneofMemberField(68, FieldType.SINT64, oneof, Long.class, false, null));
264     builder.withField(
265         forOneofMemberField(
266             69, FieldType.GROUP, oneof, Proto2Message.FieldGroup69.class, false, null));
267 
268     Field bitField1 = field("bitField1_");
269     builder.withField(
270         forProto2RequiredField(
271             field("fieldRequiredDouble71_"),
272             71,
273             FieldType.DOUBLE,
274             bitField1,
275             0x00000008,
276             false,
277             null));
278     builder.withField(
279         forProto2RequiredField(
280             field("fieldRequiredFloat72_"),
281             72,
282             FieldType.FLOAT,
283             bitField1,
284             0x00000010,
285             false,
286             null));
287     builder.withField(
288         forProto2RequiredField(
289             field("fieldRequiredInt6473_"),
290             73,
291             FieldType.INT64,
292             bitField1,
293             0x00000020,
294             false,
295             null));
296     builder.withField(
297         forProto2RequiredField(
298             field("fieldRequiredUint6474_"),
299             74,
300             FieldType.UINT64,
301             bitField1,
302             0x00000040,
303             false,
304             null));
305     builder.withField(
306         forProto2RequiredField(
307             field("fieldRequiredInt3275_"),
308             75,
309             FieldType.INT32,
310             bitField1,
311             0x00000080,
312             false,
313             null));
314     builder.withField(
315         forProto2RequiredField(
316             field("fieldRequiredFixed6476_"),
317             76,
318             FieldType.FIXED64,
319             bitField1,
320             0x00000100,
321             false,
322             null));
323     builder.withField(
324         forProto2RequiredField(
325             field("fieldRequiredFixed3277_"),
326             77,
327             FieldType.FIXED32,
328             bitField1,
329             0x00000200,
330             false,
331             null));
332     builder.withField(
333         forProto2RequiredField(
334             field("fieldRequiredBool78_"), 78, FieldType.BOOL, bitField1, 0x00000400, false, null));
335     builder.withField(
336         forProto2RequiredField(
337             field("fieldRequiredString79_"),
338             79,
339             FieldType.STRING,
340             bitField1,
341             0x00000800,
342             false,
343             null));
344     builder.withField(
345         forProto2RequiredField(
346             field("fieldRequiredMessage80_"),
347             80,
348             FieldType.MESSAGE,
349             bitField1,
350             0x00001000,
351             false,
352             null));
353     builder.withField(
354         forProto2RequiredField(
355             field("fieldRequiredBytes81_"),
356             81,
357             FieldType.BYTES,
358             bitField1,
359             0x00002000,
360             false,
361             null));
362     builder.withField(
363         forProto2RequiredField(
364             field("fieldRequiredUint3282_"),
365             82,
366             FieldType.UINT32,
367             bitField1,
368             0x00004000,
369             false,
370             null));
371     builder.withField(
372         forProto2RequiredField(
373             field("fieldRequiredEnum83_"),
374             83,
375             FieldType.ENUM,
376             bitField1,
377             0x00008000,
378             false,
379             asVerifier(TestEnum.internalGetValueMap())));
380     builder.withField(
381         forProto2RequiredField(
382             field("fieldRequiredSfixed3284_"),
383             84,
384             FieldType.SFIXED32,
385             bitField1,
386             0x00010000,
387             false,
388             null));
389     builder.withField(
390         forProto2RequiredField(
391             field("fieldRequiredSfixed6485_"),
392             85,
393             FieldType.SFIXED64,
394             bitField1,
395             0x00020000,
396             false,
397             null));
398     builder.withField(
399         forProto2RequiredField(
400             field("fieldRequiredSint3286_"),
401             86,
402             FieldType.SINT32,
403             bitField1,
404             0x00040000,
405             false,
406             null));
407     builder.withField(
408         forProto2RequiredField(
409             field("fieldRequiredSint6487_"),
410             87,
411             FieldType.SINT64,
412             bitField1,
413             0x00080000,
414             false,
415             null));
416     builder.withField(
417         forProto2RequiredField(
418             field("fieldRequiredGroup88_"),
419             88,
420             FieldType.GROUP,
421             bitField1,
422             0x00100000,
423             false,
424             null));
425   }
426 
newMessageInfoForFieldGroup49()427   private static StructuralMessageInfo newMessageInfoForFieldGroup49() {
428     StructuralMessageInfo.Builder builder = StructuralMessageInfo.newBuilder(1);
429     builder.withSyntax(ProtoSyntax.PROTO2);
430     Field bitField0 = field(FieldGroup49.class, "bitField0_");
431     builder.withField(
432         forProto2OptionalField(
433             field(FieldGroup49.class, "fieldInt3250_"),
434             50,
435             FieldType.INT32,
436             bitField0,
437             0x00000001,
438             false,
439             null));
440     return builder.build();
441   }
442 
newMessageInfoForFieldGroupList51()443   private static StructuralMessageInfo newMessageInfoForFieldGroupList51() {
444     StructuralMessageInfo.Builder builder = StructuralMessageInfo.newBuilder(1);
445     builder.withSyntax(ProtoSyntax.PROTO2);
446     Field bitField0 = field(FieldGroupList51.class, "bitField0_");
447     builder.withField(
448         forProto2OptionalField(
449             field(FieldGroupList51.class, "fieldInt3252_"),
450             52,
451             FieldType.INT32,
452             bitField0,
453             0x00000001,
454             false,
455             null));
456     return builder.build();
457   }
458 
newMessageInfoForFieldGroup69()459   private static StructuralMessageInfo newMessageInfoForFieldGroup69() {
460     StructuralMessageInfo.Builder builder = StructuralMessageInfo.newBuilder(1);
461     builder.withSyntax(ProtoSyntax.PROTO2);
462     Field bitField0 = field(FieldGroup69.class, "bitField0_");
463     builder.withField(
464         forProto2OptionalField(
465             field(FieldGroup69.class, "fieldInt3270_"),
466             70,
467             FieldType.INT32,
468             bitField0,
469             0x00000001,
470             false,
471             null));
472     return builder.build();
473   }
474 
newMessageInfoForRequiredNestedMessage()475   private static StructuralMessageInfo newMessageInfoForRequiredNestedMessage() {
476     StructuralMessageInfo.Builder builder = StructuralMessageInfo.newBuilder(1);
477     builder.withSyntax(ProtoSyntax.PROTO2);
478     Field bitField0 = field(RequiredNestedMessage.class, "bitField0_");
479     builder.withField(
480         forProto2OptionalField(
481             field(RequiredNestedMessage.class, "value_"),
482             1,
483             FieldType.INT32,
484             bitField0,
485             0x00000001,
486             false,
487             null));
488     return builder.build();
489   }
490 
newMessageInfoForFieldRequiredGroup88()491   private static StructuralMessageInfo newMessageInfoForFieldRequiredGroup88() {
492     StructuralMessageInfo.Builder builder = StructuralMessageInfo.newBuilder(1);
493     builder.withSyntax(ProtoSyntax.PROTO2);
494     Field bitField0 = field(FieldRequiredGroup88.class, "bitField0_");
495     builder.withField(
496         forProto2OptionalField(
497             field(FieldRequiredGroup88.class, "fieldInt3289_"),
498             89,
499             FieldType.INT32,
500             bitField0,
501             0x00000001,
502             false,
503             null));
504     return builder.build();
505   }
506 
newMessageInfoForProto2Empty()507   private static StructuralMessageInfo newMessageInfoForProto2Empty() {
508     StructuralMessageInfo.Builder builder = StructuralMessageInfo.newBuilder(1);
509     builder.withSyntax(ProtoSyntax.PROTO2);
510     return builder.build();
511   }
512 
newMessageInfoForProto2MessageWithExtensions()513   private static StructuralMessageInfo newMessageInfoForProto2MessageWithExtensions() {
514     StructuralMessageInfo.Builder builder = StructuralMessageInfo.newBuilder(0);
515     builder.withSyntax(ProtoSyntax.PROTO2);
516     return builder.build();
517   }
518 
newMessageInfoForExtensionFieldGroup49()519   private static StructuralMessageInfo newMessageInfoForExtensionFieldGroup49() {
520     StructuralMessageInfo.Builder builder = StructuralMessageInfo.newBuilder(1);
521     builder.withSyntax(ProtoSyntax.PROTO2);
522     Field bitField0 = field(Proto2Testing.FieldGroup49.class, "bitField0_");
523     builder.withField(
524         forProto2OptionalField(
525             field(Proto2Testing.FieldGroup49.class, "fieldInt3250_"),
526             50,
527             FieldType.INT32,
528             bitField0,
529             0x00000001,
530             false,
531             null));
532     return builder.build();
533   }
534 
newMessageInfoForExtensionFieldGroupList51()535   private static StructuralMessageInfo newMessageInfoForExtensionFieldGroupList51() {
536     StructuralMessageInfo.Builder builder = StructuralMessageInfo.newBuilder(1);
537     builder.withSyntax(ProtoSyntax.PROTO2);
538     Field bitField0 = field(Proto2Testing.FieldGroupList51.class, "bitField0_");
539     builder.withField(
540         forProto2OptionalField(
541             field(Proto2Testing.FieldGroupList51.class, "fieldInt3252_"),
542             52,
543             FieldType.INT32,
544             bitField0,
545             0x00000001,
546             false,
547             null));
548     return builder.build();
549   }
550 
newMessageInfoForProto2MessageWithMaps()551   private static StructuralMessageInfo newMessageInfoForProto2MessageWithMaps() {
552     StructuralMessageInfo.Builder builder = StructuralMessageInfo.newBuilder();
553     builder.withCheckInitialized(
554         new int[] {
555           10, 27, 44, 61, 78, 95, 112, 129, 146, 163, 180, 197,
556         });
557     builder.withSyntax(ProtoSyntax.PROTO2);
558     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_bool_bool_1", 1));
559     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_bool_bytes_2", 2));
560     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_bool_double_3", 3));
561     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_bool_enum_4", 4));
562     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_bool_fixed32_5", 5));
563     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_bool_fixed64_6", 6));
564     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_bool_float_7", 7));
565     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_bool_int32_8", 8));
566     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_bool_int64_9", 9));
567     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_bool_message_10", 10));
568     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_bool_sfixed32_11", 11));
569     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_bool_sfixed64_12", 12));
570     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_bool_sint32_13", 13));
571     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_bool_sint64_14", 14));
572     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_bool_string_15", 15));
573     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_bool_uint32_16", 16));
574     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_bool_uint64_17", 17));
575     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_fixed32_bool_18", 18));
576     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_fixed32_bytes_19", 19));
577     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_fixed32_double_20", 20));
578     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_fixed32_enum_21", 21));
579     builder.withField(
580         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_fixed32_fixed32_22", 22));
581     builder.withField(
582         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_fixed32_fixed64_23", 23));
583     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_fixed32_float_24", 24));
584     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_fixed32_int32_25", 25));
585     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_fixed32_int64_26", 26));
586     builder.withField(
587         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_fixed32_message_27", 27));
588     builder.withField(
589         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_fixed32_sfixed32_28", 28));
590     builder.withField(
591         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_fixed32_sfixed64_29", 29));
592     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_fixed32_sint32_30", 30));
593     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_fixed32_sint64_31", 31));
594     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_fixed32_string_32", 32));
595     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_fixed32_uint32_33", 33));
596     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_fixed32_uint64_34", 34));
597     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_fixed64_bool_35", 35));
598     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_fixed64_bytes_36", 36));
599     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_fixed64_double_37", 37));
600     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_fixed64_enum_38", 38));
601     builder.withField(
602         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_fixed64_fixed32_39", 39));
603     builder.withField(
604         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_fixed64_fixed64_40", 40));
605     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_fixed64_float_41", 41));
606     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_fixed64_int32_42", 42));
607     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_fixed64_int64_43", 43));
608     builder.withField(
609         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_fixed64_message_44", 44));
610     builder.withField(
611         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_fixed64_sfixed32_45", 45));
612     builder.withField(
613         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_fixed64_sfixed64_46", 46));
614     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_fixed64_sint32_47", 47));
615     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_fixed64_sint64_48", 48));
616     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_fixed64_string_49", 49));
617     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_fixed64_uint32_50", 50));
618     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_fixed64_uint64_51", 51));
619     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_int32_bool_52", 52));
620     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_int32_bytes_53", 53));
621     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_int32_double_54", 54));
622     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_int32_enum_55", 55));
623     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_int32_fixed32_56", 56));
624     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_int32_fixed64_57", 57));
625     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_int32_float_58", 58));
626     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_int32_int32_59", 59));
627     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_int32_int64_60", 60));
628     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_int32_message_61", 61));
629     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_int32_sfixed32_62", 62));
630     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_int32_sfixed64_63", 63));
631     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_int32_sint32_64", 64));
632     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_int32_sint64_65", 65));
633     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_int32_string_66", 66));
634     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_int32_uint32_67", 67));
635     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_int32_uint64_68", 68));
636     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_int64_bool_69", 69));
637     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_int64_bytes_70", 70));
638     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_int64_double_71", 71));
639     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_int64_enum_72", 72));
640     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_int64_fixed32_73", 73));
641     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_int64_fixed64_74", 74));
642     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_int64_float_75", 75));
643     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_int64_int32_76", 76));
644     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_int64_int64_77", 77));
645     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_int64_message_78", 78));
646     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_int64_sfixed32_79", 79));
647     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_int64_sfixed64_80", 80));
648     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_int64_sint32_81", 81));
649     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_int64_sint64_82", 82));
650     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_int64_string_83", 83));
651     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_int64_uint32_84", 84));
652     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_int64_uint64_85", 85));
653     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sfixed32_bool_86", 86));
654     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sfixed32_bytes_87", 87));
655     builder.withField(
656         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sfixed32_double_88", 88));
657     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sfixed32_enum_89", 89));
658     builder.withField(
659         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sfixed32_fixed32_90", 90));
660     builder.withField(
661         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sfixed32_fixed64_91", 91));
662     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sfixed32_float_92", 92));
663     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sfixed32_int32_93", 93));
664     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sfixed32_int64_94", 94));
665     builder.withField(
666         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sfixed32_message_95", 95));
667     builder.withField(
668         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sfixed32_sfixed32_96", 96));
669     builder.withField(
670         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sfixed32_sfixed64_97", 97));
671     builder.withField(
672         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sfixed32_sint32_98", 98));
673     builder.withField(
674         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sfixed32_sint64_99", 99));
675     builder.withField(
676         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sfixed32_string_100", 100));
677     builder.withField(
678         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sfixed32_uint32_101", 101));
679     builder.withField(
680         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sfixed32_uint64_102", 102));
681     builder.withField(
682         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sfixed64_bool_103", 103));
683     builder.withField(
684         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sfixed64_bytes_104", 104));
685     builder.withField(
686         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sfixed64_double_105", 105));
687     builder.withField(
688         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sfixed64_enum_106", 106));
689     builder.withField(
690         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sfixed64_fixed32_107", 107));
691     builder.withField(
692         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sfixed64_fixed64_108", 108));
693     builder.withField(
694         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sfixed64_float_109", 109));
695     builder.withField(
696         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sfixed64_int32_110", 110));
697     builder.withField(
698         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sfixed64_int64_111", 111));
699     builder.withField(
700         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sfixed64_message_112", 112));
701     builder.withField(
702         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sfixed64_sfixed32_113", 113));
703     builder.withField(
704         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sfixed64_sfixed64_114", 114));
705     builder.withField(
706         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sfixed64_sint32_115", 115));
707     builder.withField(
708         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sfixed64_sint64_116", 116));
709     builder.withField(
710         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sfixed64_string_117", 117));
711     builder.withField(
712         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sfixed64_uint32_118", 118));
713     builder.withField(
714         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sfixed64_uint64_119", 119));
715     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sint32_bool_120", 120));
716     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sint32_bytes_121", 121));
717     builder.withField(
718         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sint32_double_122", 122));
719     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sint32_enum_123", 123));
720     builder.withField(
721         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sint32_fixed32_124", 124));
722     builder.withField(
723         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sint32_fixed64_125", 125));
724     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sint32_float_126", 126));
725     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sint32_int32_127", 127));
726     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sint32_int64_128", 128));
727     builder.withField(
728         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sint32_message_129", 129));
729     builder.withField(
730         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sint32_sfixed32_130", 130));
731     builder.withField(
732         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sint32_sfixed64_131", 131));
733     builder.withField(
734         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sint32_sint32_132", 132));
735     builder.withField(
736         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sint32_sint64_133", 133));
737     builder.withField(
738         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sint32_string_134", 134));
739     builder.withField(
740         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sint32_uint32_135", 135));
741     builder.withField(
742         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sint32_uint64_136", 136));
743     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sint64_bool_137", 137));
744     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sint64_bytes_138", 138));
745     builder.withField(
746         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sint64_double_139", 139));
747     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sint64_enum_140", 140));
748     builder.withField(
749         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sint64_fixed32_141", 141));
750     builder.withField(
751         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sint64_fixed64_142", 142));
752     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sint64_float_143", 143));
753     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sint64_int32_144", 144));
754     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sint64_int64_145", 145));
755     builder.withField(
756         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sint64_message_146", 146));
757     builder.withField(
758         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sint64_sfixed32_147", 147));
759     builder.withField(
760         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sint64_sfixed64_148", 148));
761     builder.withField(
762         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sint64_sint32_149", 149));
763     builder.withField(
764         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sint64_sint64_150", 150));
765     builder.withField(
766         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sint64_string_151", 151));
767     builder.withField(
768         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sint64_uint32_152", 152));
769     builder.withField(
770         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_sint64_uint64_153", 153));
771     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_string_bool_154", 154));
772     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_string_bytes_155", 155));
773     builder.withField(
774         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_string_double_156", 156));
775     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_string_enum_157", 157));
776     builder.withField(
777         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_string_fixed32_158", 158));
778     builder.withField(
779         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_string_fixed64_159", 159));
780     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_string_float_160", 160));
781     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_string_int32_161", 161));
782     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_string_int64_162", 162));
783     builder.withField(
784         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_string_message_163", 163));
785     builder.withField(
786         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_string_sfixed32_164", 164));
787     builder.withField(
788         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_string_sfixed64_165", 165));
789     builder.withField(
790         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_string_sint32_166", 166));
791     builder.withField(
792         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_string_sint64_167", 167));
793     builder.withField(
794         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_string_string_168", 168));
795     builder.withField(
796         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_string_uint32_169", 169));
797     builder.withField(
798         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_string_uint64_170", 170));
799     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_uint32_bool_171", 171));
800     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_uint32_bytes_172", 172));
801     builder.withField(
802         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_uint32_double_173", 173));
803     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_uint32_enum_174", 174));
804     builder.withField(
805         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_uint32_fixed32_175", 175));
806     builder.withField(
807         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_uint32_fixed64_176", 176));
808     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_uint32_float_177", 177));
809     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_uint32_int32_178", 178));
810     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_uint32_int64_179", 179));
811     builder.withField(
812         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_uint32_message_180", 180));
813     builder.withField(
814         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_uint32_sfixed32_181", 181));
815     builder.withField(
816         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_uint32_sfixed64_182", 182));
817     builder.withField(
818         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_uint32_sint32_183", 183));
819     builder.withField(
820         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_uint32_sint64_184", 184));
821     builder.withField(
822         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_uint32_string_185", 185));
823     builder.withField(
824         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_uint32_uint32_186", 186));
825     builder.withField(
826         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_uint32_uint64_187", 187));
827     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_uint64_bool_188", 188));
828     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_uint64_bytes_189", 189));
829     builder.withField(
830         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_uint64_double_190", 190));
831     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_uint64_enum_191", 191));
832     builder.withField(
833         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_uint64_fixed32_192", 192));
834     builder.withField(
835         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_uint64_fixed64_193", 193));
836     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_uint64_float_194", 194));
837     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_uint64_int32_195", 195));
838     builder.withField(mapFieldInfo(Proto2MessageWithMaps.class, "field_map_uint64_int64_196", 196));
839     builder.withField(
840         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_uint64_message_197", 197));
841     builder.withField(
842         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_uint64_sfixed32_198", 198));
843     builder.withField(
844         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_uint64_sfixed64_199", 199));
845     builder.withField(
846         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_uint64_sint32_200", 200));
847     builder.withField(
848         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_uint64_sint64_201", 201));
849     builder.withField(
850         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_uint64_string_202", 202));
851     builder.withField(
852         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_uint64_uint32_203", 203));
853     builder.withField(
854         mapFieldInfo(Proto2MessageWithMaps.class, "field_map_uint64_uint64_204", 204));
855 
856     return builder.build();
857   }
858 
mapFieldInfo(Class<?> clazz, String fieldName, int fieldNumber)859   private static FieldInfo mapFieldInfo(Class<?> clazz, String fieldName, int fieldNumber) {
860     try {
861       return forMapField(
862           field(clazz, SchemaUtil.toCamelCase(fieldName, false) + "_"),
863           fieldNumber,
864           SchemaUtil.getMapDefaultEntry(clazz, fieldName),
865           fieldName.contains("_enum_") ? asVerifier(TestEnum.internalGetValueMap()) : null);
866     } catch (Throwable t) {
867       throw new RuntimeException(t);
868     }
869   }
870 
871 
field(String name)872   private static Field field(String name) {
873     return field(Proto2Message.class, name);
874   }
875 
field(Class<?> clazz, String name)876   private static Field field(Class<?> clazz, String name) {
877     try {
878       return clazz.getDeclaredField(name);
879     } catch (NoSuchFieldException | SecurityException e) {
880       throw new RuntimeException(e);
881     }
882   }
883 
asVerifier(final Internal.EnumLiteMap<?> map)884   private static Internal.EnumVerifier asVerifier(final Internal.EnumLiteMap<?> map) {
885     return new Internal.EnumVerifier() {
886       @Override
887       public boolean isInRange(int number) {
888         return map.findValueByNumber(number) != null;
889       }
890     };
891   }
892 }
893