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

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

Issue 1277863003: cleanup: move fieldType constants and functions to a separate file (Closed) Base URL: git@github.com:dart-lang/dart-protobuf.git@master
Patch Set: _validateMessage should call _baseType, not callers Created 5 years, 4 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
« no previous file with comments | « lib/protobuf.dart ('k') | lib/src/protobuf/coded_buffer_writer.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 {
(...skipping 25 matching lines...) Expand all
36 void e(int tagNumber, String name, int fieldType, 36 void e(int tagNumber, String name, int fieldType,
37 dynamic defaultOrMaker, ValueOfFunc valueOf) { 37 dynamic defaultOrMaker, ValueOfFunc valueOf) {
38 add(tagNumber, name, fieldType, 38 add(tagNumber, name, fieldType,
39 defaultOrMaker, null, valueOf); 39 defaultOrMaker, null, valueOf);
40 } 40 }
41 41
42 // Repeated message. 42 // Repeated message.
43 // TODO(antonm): change the order of CreateBuilderFunc and MakeDefaultFunc. 43 // TODO(antonm): change the order of CreateBuilderFunc and MakeDefaultFunc.
44 void m(int tagNumber, String name, 44 void m(int tagNumber, String name,
45 CreateBuilderFunc subBuilder, MakeDefaultFunc makeDefault) { 45 CreateBuilderFunc subBuilder, MakeDefaultFunc makeDefault) {
46 add(tagNumber, name, GeneratedMessage._REPEATED_MESSAGE, 46 add(tagNumber, name, FieldType._REPEATED_MESSAGE,
47 makeDefault, subBuilder, null); 47 makeDefault, subBuilder, null);
48 } 48 }
49 49
50 // Repeated non-message. 50 // Repeated non-message.
51 void p(int tagNumber, String name, int fieldType) { 51 void p(int tagNumber, String name, int fieldType) {
52 MakeDefaultFunc makeDefault; 52 MakeDefaultFunc makeDefault;
53 switch (fieldType & ~0x7) { 53 switch (fieldType & ~0x7) {
54 case GeneratedMessage._BOOL_BIT: 54 case FieldType._BOOL_BIT:
55 makeDefault = () => new PbList<bool>(); 55 makeDefault = () => new PbList<bool>();
56 break; 56 break;
57 case GeneratedMessage._BYTES_BIT: 57 case FieldType._BYTES_BIT:
58 makeDefault = () => new PbList<List<int>>(); 58 makeDefault = () => new PbList<List<int>>();
59 break; 59 break;
60 case GeneratedMessage._STRING_BIT: 60 case FieldType._STRING_BIT:
61 makeDefault = () => new PbList<String>(); 61 makeDefault = () => new PbList<String>();
62 break; 62 break;
63 case GeneratedMessage._FLOAT_BIT: 63 case FieldType._FLOAT_BIT:
64 makeDefault = () => new PbFloatList(); 64 makeDefault = () => new PbFloatList();
65 break; 65 break;
66 case GeneratedMessage._DOUBLE_BIT: 66 case FieldType._DOUBLE_BIT:
67 makeDefault = () => new PbList<double>(); 67 makeDefault = () => new PbList<double>();
68 break; 68 break;
69 case GeneratedMessage._ENUM_BIT: 69 case FieldType._ENUM_BIT:
70 makeDefault = () => new PbList<ProtobufEnum>(); 70 makeDefault = () => new PbList<ProtobufEnum>();
71 break; 71 break;
72 case GeneratedMessage._INT32_BIT: 72 case FieldType._INT32_BIT:
73 case GeneratedMessage._SINT32_BIT: 73 case FieldType._SINT32_BIT:
74 case GeneratedMessage._SFIXED32_BIT: 74 case FieldType._SFIXED32_BIT:
75 makeDefault = () => new PbSint32List(); 75 makeDefault = () => new PbSint32List();
76 break; 76 break;
77 case GeneratedMessage._UINT32_BIT: 77 case FieldType._UINT32_BIT:
78 case GeneratedMessage._FIXED32_BIT: 78 case FieldType._FIXED32_BIT:
79 makeDefault = () => new PbUint32List(); 79 makeDefault = () => new PbUint32List();
80 break; 80 break;
81 case GeneratedMessage._INT64_BIT: 81 case FieldType._INT64_BIT:
82 case GeneratedMessage._SINT64_BIT: 82 case FieldType._SINT64_BIT:
83 case GeneratedMessage._SFIXED64_BIT: 83 case FieldType._SFIXED64_BIT:
84 makeDefault = () => new PbSint64List(); 84 makeDefault = () => new PbSint64List();
85 break; 85 break;
86 case GeneratedMessage._UINT64_BIT: 86 case FieldType._UINT64_BIT:
87 case GeneratedMessage._FIXED64_BIT: 87 case FieldType._FIXED64_BIT:
88 makeDefault = () => new PbUint64List(); 88 makeDefault = () => new PbUint64List();
89 break; 89 break;
90 case GeneratedMessage._MESSAGE_BIT: 90 case FieldType._MESSAGE_BIT:
91 throw new ArgumentError('use BuilderInfo.m() for repeated messages'); 91 throw new ArgumentError('use BuilderInfo.m() for repeated messages');
92 default: 92 default:
93 throw new ArgumentError('unknown type ${fieldType}'); 93 throw new ArgumentError('unknown type ${fieldType}');
94 } 94 }
95 95
96 add(tagNumber, name, fieldType, makeDefault, null, null); 96 add(tagNumber, name, fieldType, makeDefault, null, null);
97 } 97 }
98 98
99 bool containsTagNumber(int tagNumber) => fieldInfo.containsKey(tagNumber); 99 bool containsTagNumber(int tagNumber) => fieldInfo.containsKey(tagNumber);
100 100
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
137 ValueOfFunc valueOfFunc(int tagNumber) { 137 ValueOfFunc valueOfFunc(int tagNumber) {
138 FieldInfo i = fieldInfo[tagNumber]; 138 FieldInfo i = fieldInfo[tagNumber];
139 return i != null ? i.valueOf : null; 139 return i != null ? i.valueOf : null;
140 } 140 }
141 141
142 bool _isFieldInitialized(Map<int, dynamic> fieldValues, int tagNumber, 142 bool _isFieldInitialized(Map<int, dynamic> fieldValues, int tagNumber,
143 [int fieldType = null]) { 143 [int fieldType = null]) {
144 if (fieldType == null) { 144 if (fieldType == null) {
145 fieldType = fieldInfo[tagNumber].type; 145 fieldType = fieldInfo[tagNumber].type;
146 } 146 }
147 if ((fieldType & 147 if (_isGroupOrMessage(fieldType)) {
148 (GeneratedMessage._MESSAGE_BIT | GeneratedMessage._GROUP_BIT)) != 0) { 148 if (_isRequired(fieldType)) {
149 if ((fieldType & GeneratedMessage._REQUIRED_BIT) != 0) {
150 GeneratedMessage message = fieldValues[tagNumber]; 149 GeneratedMessage message = fieldValues[tagNumber];
151 // Required message/group must be present and initialized. 150 // Required message/group must be present and initialized.
152 if (message == null || !message.isInitialized()) { 151 if (message == null || !message.isInitialized()) {
153 return false; 152 return false;
154 } 153 }
155 } else if ((fieldType & GeneratedMessage._REPEATED_BIT) != 0) { 154 } else if (_isRepeated(fieldType)) {
156 if (fieldValues.containsKey(tagNumber)) { 155 if (fieldValues.containsKey(tagNumber)) {
157 // Repeated message/group must have all its members initialized. 156 // Repeated message/group must have all its members initialized.
158 List list = fieldValues[tagNumber]; 157 List list = fieldValues[tagNumber];
159 // For message types that (recursively) contain no required fields, 158 // For message types that (recursively) contain no required fields,
160 // short-circuit the loop. 159 // short-circuit the loop.
161 if (!list.isEmpty && list[0].hasRequiredFields()) { 160 if (!list.isEmpty && list[0].hasRequiredFields()) {
162 if (!list.every((message) => message.isInitialized())) { 161 if (!list.every((message) => message.isInitialized())) {
163 return false; 162 return false;
164 } 163 }
165 } 164 }
166 } 165 }
167 } else { 166 } else {
168 GeneratedMessage message = fieldValues[tagNumber]; 167 GeneratedMessage message = fieldValues[tagNumber];
169 // Optional message/group must be initialized if it is present. 168 // Optional message/group must be initialized if it is present.
170 if (message != null && !message.isInitialized()) { 169 if (message != null && !message.isInitialized()) {
171 return false; 170 return false;
172 } 171 }
173 } 172 }
174 173
175 } else if ((fieldType & GeneratedMessage._REQUIRED_BIT) != 0) { 174 } else if (_isRequired(fieldType)) {
176 // Required 'primitive' must be present. 175 // Required 'primitive' must be present.
177 if (fieldValues[tagNumber] == null) { 176 if (fieldValues[tagNumber] == null) {
178 return false; 177 return false;
179 } 178 }
180 } 179 }
181 return true; 180 return true;
182 } 181 }
183 182
184 List<String> _findInvalidFields(Map<int, dynamic> fieldValues, 183 List<String> _findInvalidFields(Map<int, dynamic> fieldValues,
185 List<String> invalidFields, [String prefix = '']) { 184 List<String> invalidFields, [String prefix = '']) {
186 fieldInfo.forEach((int tagNumber, FieldInfo field) { 185 fieldInfo.forEach((int tagNumber, FieldInfo field) {
187 int fieldType = field.type; 186 int fieldType = field.type;
188 if ((fieldType & 187 if (_isGroupOrMessage(fieldType)) {
189 (GeneratedMessage._MESSAGE_BIT | GeneratedMessage._GROUP_BIT)) != 0) { 188 if (_isRequired(fieldType)) {
190 if ((fieldType & GeneratedMessage._REQUIRED_BIT) != 0) {
191 GeneratedMessage message = fieldValues[tagNumber]; 189 GeneratedMessage message = fieldValues[tagNumber];
192 // Required message/group must be present. 190 // Required message/group must be present.
193 if (message == null) { 191 if (message == null) {
194 invalidFields.add('${prefix}${field.name}'); 192 invalidFields.add('${prefix}${field.name}');
195 } else { 193 } else {
196 message._findInvalidFields( 194 message._findInvalidFields(
197 invalidFields, '${prefix}${field.name}.'); 195 invalidFields, '${prefix}${field.name}.');
198 } 196 }
199 } else if ((fieldType & GeneratedMessage._REPEATED_BIT) != 0) { 197 } else if (_isRepeated(fieldType)) {
200 if (fieldValues.containsKey(tagNumber)) { 198 if (fieldValues.containsKey(tagNumber)) {
201 // Repeated message/group must have all its members initialized. 199 // Repeated message/group must have all its members initialized.
202 List list = fieldValues[tagNumber]; 200 List list = fieldValues[tagNumber];
203 // For messages that (recursively) contain no required fields, 201 // For messages that (recursively) contain no required fields,
204 // short-circuit the loop. 202 // short-circuit the loop.
205 if (!list.isEmpty && list[0].hasRequiredFields()) { 203 if (!list.isEmpty && list[0].hasRequiredFields()) {
206 int position = 0; 204 int position = 0;
207 for (GeneratedMessage message in list) { 205 for (GeneratedMessage message in list) {
208 if (message.hasRequiredFields()) { 206 if (message.hasRequiredFields()) {
209 message._findInvalidFields( 207 message._findInvalidFields(
210 invalidFields, '${prefix}${field.name}[${position}].'); 208 invalidFields, '${prefix}${field.name}[${position}].');
211 } 209 }
212 position++; 210 position++;
213 } 211 }
214 } 212 }
215 } 213 }
216 } else { 214 } else {
217 GeneratedMessage message = fieldValues[tagNumber]; 215 GeneratedMessage message = fieldValues[tagNumber];
218 // Required message/group must be present. 216 // Required message/group must be present.
219 if (message != null) { 217 if (message != null) {
220 message._findInvalidFields(invalidFields, '${prefix}${field.name}.') ; 218 message._findInvalidFields(invalidFields, '${prefix}${field.name}.') ;
221 } 219 }
222 } 220 }
223 221
224 } else if((fieldType & GeneratedMessage._REQUIRED_BIT) != 0) { 222 } else if(_isRequired(fieldType)) {
225 // Required 'primitive' must be present. 223 // Required 'primitive' must be present.
226 if (fieldValues[tagNumber] == null) { 224 if (fieldValues[tagNumber] == null) {
227 invalidFields.add('${prefix}${field.name}'); 225 invalidFields.add('${prefix}${field.name}');
228 } 226 }
229 } 227 }
230 }); 228 });
231 return invalidFields; 229 return invalidFields;
232 } 230 }
233 } 231 }
OLDNEW
« no previous file with comments | « lib/protobuf.dart ('k') | lib/src/protobuf/coded_buffer_writer.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698