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