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

Side by Side Diff: lib/message_generator.dart

Issue 40343003: Default handling of name conflicts when generating classes (Closed) Base URL: https://github.com/dart-lang/dart-protoc-plugin.git@master
Patch Set: Created 7 years, 1 month 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 | « Makefile ('k') | test/generated_message_test.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) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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 protoc; 5 part of protoc;
6 6
7 const String SP = ' '; 7 const String SP = ' ';
8 8
9 class MessageGenerator implements ProtobufContainer { 9 class MessageGenerator implements ProtobufContainer {
10 final String classname; 10 final String classname;
11 final String fqname; 11 final String fqname;
12 final GenerationContext _context; 12 final GenerationContext _context;
13 final DescriptorProto _descriptor; 13 final DescriptorProto _descriptor;
14 final List<EnumGenerator> _enumGenerators = <EnumGenerator>[]; 14 final List<EnumGenerator> _enumGenerators = <EnumGenerator>[];
15 final List<ProtobufField> _fieldList = <ProtobufField>[]; 15 final List<ProtobufField> _fieldList = <ProtobufField>[];
16 final List<MessageGenerator> _messageGenerators = <MessageGenerator>[]; 16 final List<MessageGenerator> _messageGenerators = <MessageGenerator>[];
17 final List<ExtensionGenerator> _extensionGenerators = <ExtensionGenerator>[]; 17 final List<ExtensionGenerator> _extensionGenerators = <ExtensionGenerator>[];
18 final Set<String> _methodNames = new Set<String>();
18 19
19 MessageGenerator(DescriptorProto descriptor, ProtobufContainer parent, 20 MessageGenerator(DescriptorProto descriptor, ProtobufContainer parent,
20 this._context) 21 this._context)
21 : _descriptor = descriptor, 22 : _descriptor = descriptor,
22 classname = (parent == null || parent.classname == '') ? 23 classname = (parent == null || parent.classname == '') ?
23 descriptor.name : '${parent.classname}_${descriptor.name}', 24 descriptor.name : '${parent.classname}_${descriptor.name}',
24 fqname = (parent == null || parent.fqname == null) ? descriptor.name : 25 fqname = (parent == null || parent.fqname == null) ? descriptor.name :
25 (parent.fqname == '.' ? 26 (parent.fqname == '.' ?
26 '.${descriptor.name}' : '${parent.fqname}.${descriptor.name}') { 27 '.${descriptor.name}' : '${parent.fqname}.${descriptor.name}') {
27 _context.register(this); 28 _context.register(this);
(...skipping 15 matching lines...) Expand all
43 _fieldList.clear(); 44 _fieldList.clear();
44 for (FieldDescriptorProto field in _descriptor.field) { 45 for (FieldDescriptorProto field in _descriptor.field) {
45 _fieldList.add(new ProtobufField(field, this, _context)); 46 _fieldList.add(new ProtobufField(field, this, _context));
46 } 47 }
47 for (MessageGenerator m in _messageGenerators) { 48 for (MessageGenerator m in _messageGenerators) {
48 m.initializeFields(); 49 m.initializeFields();
49 } 50 }
50 } 51 }
51 52
52 void generate(IndentingWriter out) { 53 void generate(IndentingWriter out) {
54 _methodNames.clear();
55 _methodNames.addAll(
56 ["hashCode", "noSuchMethod","runtimeType", "toString"]);
57 _methodNames.addAll(
58 ["fromBuffer", "fromJson", "hasRequiredFields", "isInitialized",
59 "clear", "getTagNumber", "check",
60 "writeToBuffer", "writeToCodedBufferWriter",
61 "mergeFromCodedBufferReader", "mergeFromBuffer",
62 "writeToJson", "mergeFromJson",
63 "addExtension", "getExtension", "setExtension",
64 "hasExtension", "clearExtension",
65 "getField", "setField", "hasField", "clearField",
66 "extensionsAreInitialized", "mergeFromMessage", "mergeUnknownFields"]);
Siggi Cherem (dart-lang) 2013/10/24 17:04:21 I'm slightly worried about how we maintain this li
Søren Gjesse 2013/10/25 09:02:20 Mirror currently does not work well with dart2dart
67
53 for (EnumGenerator e in _enumGenerators) { 68 for (EnumGenerator e in _enumGenerators) {
54 e.generate(out); 69 e.generate(out);
55 } 70 }
56 71
57 for (MessageGenerator m in _messageGenerators) { 72 for (MessageGenerator m in _messageGenerators) {
58 m.generate(out); 73 m.generate(out);
59 } 74 }
60 75
61 out.addBlock('class ${classname} extends GeneratedMessage${SP}{', 76 out.addBlock('class ${classname} extends GeneratedMessage${SP}{',
62 '}', () 77 '}', ()
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
182 } 197 }
183 } 198 }
184 } 199 }
185 } 200 }
186 return false; 201 return false;
187 } 202 }
188 203
189 void generateFieldsAccessorsMutators(IndentingWriter out) { 204 void generateFieldsAccessorsMutators(IndentingWriter out) {
190 for (ProtobufField field in _fieldList) { 205 for (ProtobufField field in _fieldList) {
191 out.println(); 206 out.println();
192 out.println('${field.typeString} get ${field.externalFieldName}' 207 String identifier = field.externalFieldName;
208 String hasIdentifier = "has" + field.titlecaseFieldName;
209 String clearIdentifier = "clear" + field.titlecaseFieldName;
210 if (field.single) {
211 while (_methodNames.contains(identifier) ||
212 _methodNames.contains(hasIdentifier) ||
213 _methodNames.contains(clearIdentifier)) {
214 identifier += field.number.toString();
215 hasIdentifier += field.number.toString();
216 clearIdentifier += field.number.toString();
217 }
218 _methodNames.add(identifier);
219 _methodNames.add(hasIdentifier);
220 _methodNames.add(clearIdentifier);
221 } else {
222 while (_methodNames.contains(identifier)) {
223 identifier += field.number.toString();
Siggi Cherem (dart-lang) 2013/10/24 17:04:21 should we also add an _ here? Not sure how import
Søren Gjesse 2013/10/25 09:02:20 Added the underscore always - this also makes the
224 }
225 _methodNames.add(identifier);
226 }
227 out.println('${field.typeString} get ${identifier}'
193 '${SP}=>${SP}getField(${field.number});'); 228 '${SP}=>${SP}getField(${field.number});');
194 if (field.single) { 229 if (field.single) {
195 out.println('void set ${field.externalFieldName}' 230 out.println('void set ${identifier}'
196 '(${field.typeString} v)${SP}' 231 '(${field.typeString} v)${SP}'
197 '{${SP}setField(${field.number},${SP}v);${SP}}'); 232 '{${SP}setField(${field.number},${SP}v);${SP}}');
198 out.println('bool has${field.titlecaseFieldName}()${SP}=>' 233 out.println('bool $hasIdentifier()${SP}=>'
199 '${SP}hasField(${field.number});'); 234 '${SP}hasField(${field.number});');
200 out.println('void clear${field.titlecaseFieldName}()${SP}=>' 235 out.println('void $clearIdentifier()${SP}=>'
201 '${SP}clearField(${field.number});'); 236 '${SP}clearField(${field.number});');
202 } 237 }
203 } 238 }
204 } 239 }
205 } 240 }
OLDNEW
« no previous file with comments | « Makefile ('k') | test/generated_message_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698