Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(272)

Side by Side Diff: lib/src/protobuf/builder_info.dart

Issue 1844293003: Add generic types for strong mode (Closed) Base URL: git@github.com:dart-lang/dart-protobuf.git@master
Patch Set: oops, change all callers to use fi._createRepeatedField Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 part of protobuf; 5 part of protobuf;
6 6
7 /** 7 /**
8 * Per-message type setup. 8 * Per-message type setup.
9 */ 9 */
10 class BuilderInfo { 10 class BuilderInfo {
11 final String messageName; 11 final String messageName;
12 final Map<int, FieldInfo> fieldInfo = new Map<int, FieldInfo>(); 12 final Map<int, FieldInfo> fieldInfo = new Map<int, FieldInfo>();
13 final Map<String, FieldInfo> byTagAsString = <String, FieldInfo>{}; 13 final Map<String, FieldInfo> byTagAsString = <String, FieldInfo>{};
14 final Map<String, FieldInfo> byName = <String, FieldInfo>{}; 14 final Map<String, FieldInfo> byName = <String, FieldInfo>{};
15 bool hasExtensions = false; 15 bool hasExtensions = false;
16 bool hasRequiredFields = true; 16 bool hasRequiredFields = true;
17 List<FieldInfo> _sortedByTag; 17 List<FieldInfo> _sortedByTag;
18 18
19 BuilderInfo(this.messageName); 19 BuilderInfo(this.messageName);
20 20
21 void add(int tagNumber, String name, int fieldType, 21 void add/*<T>*/(
22 dynamic defaultOrMaker, 22 int tagNumber,
23 CreateBuilderFunc subBuilder, 23 String name,
24 ValueOfFunc valueOf) { 24 int fieldType,
25 dynamic defaultOrMaker,
26 CreateBuilderFunc subBuilder,
27 ValueOfFunc valueOf) {
25 var index = fieldInfo.length; 28 var index = fieldInfo.length;
26 addField(new FieldInfo( 29 addField(new FieldInfo/*<T>*/(name, tagNumber, index, fieldType,
27 name, tagNumber, index, fieldType, defaultOrMaker, subBuilder, valueOf)); 30 defaultOrMaker, subBuilder, valueOf));
28 } 31 }
29 32
30 void addRepeated(int tagNumber, String name, int fieldType, 33 void addRepeated/*<T>*/(int tagNumber, String name, int fieldType,
31 CheckFunc check, 34 CheckFunc check, CreateBuilderFunc subBuilder, ValueOfFunc valueOf) {
32 CreateBuilderFunc subBuilder,
33 ValueOfFunc valueOf) {
34 var index = fieldInfo.length; 35 var index = fieldInfo.length;
35 addField(new FieldInfo.repeated( 36 addField(new FieldInfo/*<T>*/ .repeated(
36 name, tagNumber, index, fieldType, check, subBuilder, valueOf)); 37 name, tagNumber, index, fieldType, check, subBuilder, valueOf));
37 } 38 }
38 39
39 void addField(FieldInfo fi) { 40 void addField(FieldInfo fi) {
40 fieldInfo[fi.tagNumber] = fi; 41 fieldInfo[fi.tagNumber] = fi;
41 byTagAsString["${fi.tagNumber}"] = fi; 42 byTagAsString["${fi.tagNumber}"] = fi;
42 byName[fi.name] = fi; 43 byName[fi.name] = fi;
43 } 44 }
44 45
45 void a(int tagNumber, String name, int fieldType, 46 void a/*<T>*/(int tagNumber, String name, int fieldType,
46 [dynamic defaultOrMaker, 47 [dynamic defaultOrMaker,
47 CreateBuilderFunc subBuilder, 48 CreateBuilderFunc subBuilder,
48 ValueOfFunc valueOf]) { 49 ValueOfFunc valueOf]) {
49 add(tagNumber, name, fieldType, 50 add/*<T>*/(tagNumber, name, fieldType, defaultOrMaker, subBuilder, valueOf);
50 defaultOrMaker, subBuilder, valueOf);
51 } 51 }
52 52
53 // Enum. 53 // Enum.
54 void e(int tagNumber, String name, int fieldType, 54 void e/*<T>*/(int tagNumber, String name, int fieldType,
55 dynamic defaultOrMaker, ValueOfFunc valueOf) { 55 dynamic defaultOrMaker, ValueOfFunc valueOf) {
56 add(tagNumber, name, fieldType, 56 add/*<T>*/(tagNumber, name, fieldType, defaultOrMaker, null, valueOf);
57 defaultOrMaker, null, valueOf);
58 } 57 }
59 58
60 // Repeated message. 59 // Repeated message.
61 // TODO(skybrian): migrate to pp() and remove. 60 // TODO(skybrian): migrate to pp() and remove.
62 void m(int tagNumber, String name, 61 void m/*<T>*/(int tagNumber, String name, CreateBuilderFunc subBuilder,
63 CreateBuilderFunc subBuilder, MakeDefaultFunc makeDefault) { 62 MakeDefaultFunc makeDefault) {
64 add(tagNumber, name, PbFieldType._REPEATED_MESSAGE, 63 add/*<T>*/(tagNumber, name, PbFieldType._REPEATED_MESSAGE, makeDefault,
65 makeDefault, subBuilder, null); 64 subBuilder, null);
66 } 65 }
67 66
68 // Repeated, not a message, group, or enum. 67 // Repeated, not a message, group, or enum.
69 void p(int tagNumber, String name, int fieldType) { 68 void p/*<T>*/(int tagNumber, String name, int fieldType) {
70 assert(!_isGroupOrMessage(fieldType) && !_isEnum(fieldType)); 69 assert(!_isGroupOrMessage(fieldType) && !_isEnum(fieldType));
71 addRepeated(tagNumber, name, fieldType, 70 addRepeated/*<T>*/(
72 getCheckFunction(fieldType), null, null); 71 tagNumber, name, fieldType, getCheckFunction(fieldType), null, null);
73 } 72 }
74 73
75 // Repeated message, group, or enum. 74 // Repeated message, group, or enum.
76 void pp(int tagNumber, String name, int fieldType, CheckFunc check, 75 void pp/*<T>*/(int tagNumber, String name, int fieldType, CheckFunc check,
77 [CreateBuilderFunc subBuilder, ValueOfFunc valueOf]) { 76 [CreateBuilderFunc subBuilder, ValueOfFunc valueOf]) {
78 assert(_isGroupOrMessage(fieldType) || _isEnum(fieldType)); 77 assert(_isGroupOrMessage(fieldType) || _isEnum(fieldType));
79 addRepeated(tagNumber, name, fieldType, check, subBuilder, valueOf); 78 addRepeated/*<T>*/(tagNumber, name, fieldType, check, subBuilder, valueOf);
80 } 79 }
81 80
82 bool containsTagNumber(int tagNumber) => fieldInfo.containsKey(tagNumber); 81 bool containsTagNumber(int tagNumber) => fieldInfo.containsKey(tagNumber);
83 82
84 defaultValue(int tagNumber) { 83 defaultValue(int tagNumber) {
85 MakeDefaultFunc func = makeDefault(tagNumber); 84 MakeDefaultFunc func = makeDefault(tagNumber);
86 return func == null ? null : func(); 85 return func == null ? null : func();
87 } 86 }
88 87
89 // Returns the field name for a given tag number, for debugging purposes. 88 // Returns the field name for a given tag number, for debugging purposes.
(...skipping 26 matching lines...) Expand all
116 FieldInfo i = fieldInfo[tagNumber]; 115 FieldInfo i = fieldInfo[tagNumber];
117 return i != null ? i.valueOf : null; 116 return i != null ? i.valueOf : null;
118 } 117 }
119 118
120 /// Returns the FieldInfo for each field in tag number order. 119 /// Returns the FieldInfo for each field in tag number order.
121 List<FieldInfo> get sortedByTag { 120 List<FieldInfo> get sortedByTag {
122 if (_sortedByTag != null) return _sortedByTag; 121 if (_sortedByTag != null) return _sortedByTag;
123 // TODO(skybrian): perhaps the code generator should insert the FieldInfos 122 // TODO(skybrian): perhaps the code generator should insert the FieldInfos
124 // in tag number order, to avoid sorting them? 123 // in tag number order, to avoid sorting them?
125 _sortedByTag = new List<FieldInfo>.from(fieldInfo.values) 124 _sortedByTag = new List<FieldInfo>.from(fieldInfo.values)
126 ..sort((a, b) => a.tagNumber.compareTo(b.tagNumber)); 125 ..sort((a, b) => a.tagNumber.compareTo(b.tagNumber));
127 return _sortedByTag; 126 return _sortedByTag;
128 } 127 }
129 128
130 GeneratedMessage _makeEmptyMessage( 129 GeneratedMessage _makeEmptyMessage(
131 int tagNumber, ExtensionRegistry extensionRegistry) { 130 int tagNumber, ExtensionRegistry extensionRegistry) {
132 CreateBuilderFunc subBuilderFunc = subBuilder(tagNumber); 131 CreateBuilderFunc subBuilderFunc = subBuilder(tagNumber);
133 if (subBuilderFunc == null && extensionRegistry != null) { 132 if (subBuilderFunc == null && extensionRegistry != null) {
134 subBuilderFunc = extensionRegistry.getExtension(messageName, 133 subBuilderFunc =
135 tagNumber).subBuilder; 134 extensionRegistry.getExtension(messageName, tagNumber).subBuilder;
136 } 135 }
137 return subBuilderFunc(); 136 return subBuilderFunc();
138 } 137 }
139 138
140 _decodeEnum(int tagNumber, ExtensionRegistry registry, int rawValue) { 139 _decodeEnum(int tagNumber, ExtensionRegistry registry, int rawValue) {
141
142 ValueOfFunc f = valueOfFunc(tagNumber); 140 ValueOfFunc f = valueOfFunc(tagNumber);
143 if (f == null && registry != null) { 141 if (f == null && registry != null) {
144 f = registry.getExtension(messageName, tagNumber).valueOf; 142 f = registry.getExtension(messageName, tagNumber).valueOf;
145 } 143 }
146 return f(rawValue); 144 return f(rawValue);
147 } 145 }
148 } 146 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698