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

Side by Side Diff: lib/message_generator.dart

Issue 93743006: Use package names as import prefixes when generating code (Closed) Base URL: https://github.com/dart-lang/dart-protoc-plugin.git@master
Patch Set: Addressed review commetns Created 6 years, 11 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/file_generator.dart ('k') | lib/protobuf_field.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 // List of names which cannot be used in a subclass of GeneratedMessage. 10 // List of names which cannot be used in a subclass of GeneratedMessage.
11 static final List<String> reservedNames = 11 static final List<String> reservedNames =
12 ['hashCode', 'noSuchMethod','runtimeType', 'toString', 12 ['hashCode', 'noSuchMethod','runtimeType', 'toString',
13 'fromBuffer', 'fromJson', 'hasRequiredFields', 'isInitialized', 13 'fromBuffer', 'fromJson', 'hasRequiredFields', 'isInitialized',
14 'clear', 'getTagNumber', 'check', 14 'clear', 'getTagNumber', 'check',
15 'writeToBuffer', 'writeToCodedBufferWriter', 15 'writeToBuffer', 'writeToCodedBufferWriter',
16 'mergeFromCodedBufferReader', 'mergeFromBuffer', 16 'mergeFromCodedBufferReader', 'mergeFromBuffer',
17 'writeToJson', 'mergeFromJson', 17 'writeToJson', 'mergeFromJson',
18 'addExtension', 'getExtension', 'setExtension', 18 'addExtension', 'getExtension', 'setExtension',
19 'hasExtension', 'clearExtension', 19 'hasExtension', 'clearExtension',
20 'getField', 'setField', 'hasField', 'clearField', 20 'getField', 'setField', 'hasField', 'clearField',
21 'extensionsAreInitialized', 'mergeFromMessage', 'mergeUnknownFields', 21 'extensionsAreInitialized', 'mergeFromMessage', 'mergeUnknownFields',
22 '==', 'info_', 'GeneratedMessage', 'Object']; 22 '==', 'info_', 'GeneratedMessage', 'Object'];
23 23
24 final String classname; 24 final String classname;
25 final String fqname; 25 final String fqname;
26 final ProtobufContainer _parent;
26 final GenerationContext _context; 27 final GenerationContext _context;
27 final DescriptorProto _descriptor; 28 final DescriptorProto _descriptor;
28 final List<EnumGenerator> _enumGenerators = <EnumGenerator>[]; 29 final List<EnumGenerator> _enumGenerators = <EnumGenerator>[];
29 final List<ProtobufField> _fieldList = <ProtobufField>[]; 30 final List<ProtobufField> _fieldList = <ProtobufField>[];
30 final List<MessageGenerator> _messageGenerators = <MessageGenerator>[]; 31 final List<MessageGenerator> _messageGenerators = <MessageGenerator>[];
31 final List<ExtensionGenerator> _extensionGenerators = <ExtensionGenerator>[]; 32 final List<ExtensionGenerator> _extensionGenerators = <ExtensionGenerator>[];
32 final Set<String> _methodNames = new Set<String>(); 33 final Set<String> _methodNames = new Set<String>();
33 34
34 MessageGenerator(DescriptorProto descriptor, ProtobufContainer parent, 35 MessageGenerator(
35 this._context) 36 DescriptorProto descriptor, ProtobufContainer parent, this._context)
36 : _descriptor = descriptor, 37 : _descriptor = descriptor,
37 classname = (parent == null || parent.classname == '') ? 38 _parent = parent,
39 classname = (parent.classname == '') ?
38 descriptor.name : '${parent.classname}_${descriptor.name}', 40 descriptor.name : '${parent.classname}_${descriptor.name}',
39 fqname = (parent == null || parent.fqname == null) ? descriptor.name : 41 fqname = (parent == null || parent.fqname == null) ? descriptor.name :
40 (parent.fqname == '.' ? 42 (parent.fqname == '.' ?
41 '.${descriptor.name}' : '${parent.fqname}.${descriptor.name}') { 43 '.${descriptor.name}' : '${parent.fqname}.${descriptor.name}') {
42 _context.register(this); 44 _context.register(this);
43 45
44 for (EnumDescriptorProto e in _descriptor.enumType) { 46 for (EnumDescriptorProto e in _descriptor.enumType) {
45 _enumGenerators.add(new EnumGenerator(e, this, _context)); 47 _enumGenerators.add(new EnumGenerator(e, this, _context));
46 } 48 }
47 49
48 for (DescriptorProto n in _descriptor.nestedType) { 50 for (DescriptorProto n in _descriptor.nestedType) {
49 _messageGenerators.add(new MessageGenerator(n, this, _context)); 51 _messageGenerators.add(new MessageGenerator(n, this, _context));
50 } 52 }
51 53
52 for (FieldDescriptorProto x in _descriptor.extension) { 54 for (FieldDescriptorProto x in _descriptor.extension) {
53 _extensionGenerators.add(new ExtensionGenerator(x, this, _context)); 55 _extensionGenerators.add(new ExtensionGenerator(x, this, _context));
54 } 56 }
55 } 57 }
56 58
59 String get package => _parent.package;
60
57 void initializeFields() { 61 void initializeFields() {
58 _fieldList.clear(); 62 _fieldList.clear();
59 for (FieldDescriptorProto field in _descriptor.field) { 63 for (FieldDescriptorProto field in _descriptor.field) {
60 _fieldList.add(new ProtobufField(field, this, _context)); 64 _fieldList.add(new ProtobufField(field, this, _context));
61 } 65 }
62 for (MessageGenerator m in _messageGenerators) { 66 for (MessageGenerator m in _messageGenerators) {
63 m.initializeFields(); 67 m.initializeFields();
64 } 68 }
65 } 69 }
66 70
(...skipping 10 matching lines...) Expand all
77 } 81 }
78 82
79 out.addBlock('class ${classname} extends GeneratedMessage${SP}{', 83 out.addBlock('class ${classname} extends GeneratedMessage${SP}{',
80 '}', () 84 '}', ()
81 { 85 {
82 out.addBlock( 86 out.addBlock(
83 'static final BuilderInfo _i = new BuilderInfo(\'${classname}\')', 87 'static final BuilderInfo _i = new BuilderInfo(\'${classname}\')',
84 ';', () { 88 ';', () {
85 for (ProtobufField field in _fieldList) { 89 for (ProtobufField field in _fieldList) {
86 String type = field.shortTypeName; 90 String type = field.shortTypeName;
91 String fieldType = field.baseTypeForPackage(package);
87 92
88 String makeDefault = null; 93 String makeDefault = null;
89 if (field.hasInitialization) { 94 if (field.hasInitialization) {
90 makeDefault = '${field.initialization}'; 95 makeDefault = field.initializationForPackage(package);
91 } 96 }
92 String subBuilder = null; 97 String subBuilder = null;
93 if (field.message || field.group) { 98 if (field.message || field.group) {
94 subBuilder = '()${SP}=>${SP}new ${field.baseType}()'; 99 subBuilder = '()${SP}=>${SP}new ${fieldType}()';
95 } 100 }
96 String valueOf = null; 101 String valueOf = null;
97 if (field.enm) { 102 if (field.enm) {
98 valueOf = '(var v)${SP}=>${SP}${field.baseType}.valueOf(v)'; 103 valueOf = '(var v)${SP}=>${SP}${fieldType}.valueOf(v)';
99 } 104 }
100 if ('PM' == type) { 105 if ('PM' == type) {
101 // Repeated message: default is an empty list 106 // Repeated message: default is an empty list
102 out.println('..m(${field.number},${SP}' 107 out.println('..m(${field.number},${SP}'
103 '\'${field.externalFieldName}\',${SP}$subBuilder,' 108 '\'${field.externalFieldName}\',${SP}$subBuilder,'
104 '${SP}()${SP}=>${SP}new PbList<${field.baseType}>())'); 109 '${SP}()${SP}=>${SP}new PbList<${fieldType}>())');
105 } else if (type[0] == 'P' && type != 'PG' && type != 'PE') { 110 } else if (type[0] == 'P' && type != 'PG' && type != 'PE') {
106 // Repeated, not a message or enum: default is an empty list, 111 // Repeated, not a message or enum: default is an empty list,
107 // subBuilder is null, valueOf is null. 112 // subBuilder is null, valueOf is null.
108 out.println('..p(${field.number},${SP}' 113 out.println('..p(${field.number},${SP}'
109 '\'${field.externalFieldName}\',${SP}GeneratedMessage.$type)'); 114 '\'${field.externalFieldName}\',${SP}GeneratedMessage.$type)');
110 } else if (type == 'OE' || type == 'QE') { 115 } else if (type == 'OE' || type == 'QE') {
111 out.println('..e(${field.number},${SP}' 116 out.println('..e(${field.number},${SP}'
112 '\'${field.externalFieldName}\',${SP}GeneratedMessage.$type,' 117 '\'${field.externalFieldName}\',${SP}GeneratedMessage.$type,'
113 '${SP}$makeDefault,${SP}$valueOf)'); 118 '${SP}$makeDefault,${SP}$valueOf)');
114 } else { 119 } else {
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
220 } 225 }
221 _methodNames.add(identifier); 226 _methodNames.add(identifier);
222 _methodNames.add(hasIdentifier); 227 _methodNames.add(hasIdentifier);
223 _methodNames.add(clearIdentifier); 228 _methodNames.add(clearIdentifier);
224 } else { 229 } else {
225 while (_methodNames.contains(identifier)) { 230 while (_methodNames.contains(identifier)) {
226 identifier += '_' + field.number.toString(); 231 identifier += '_' + field.number.toString();
227 } 232 }
228 _methodNames.add(identifier); 233 _methodNames.add(identifier);
229 } 234 }
230 out.println('${field.typeString} get ${identifier}' 235 var fieldTypeString = field.typeStringForPackage(package);
236 out.println('${fieldTypeString} get ${identifier}'
231 '${SP}=>${SP}getField(${field.number});'); 237 '${SP}=>${SP}getField(${field.number});');
232 if (field.single) { 238 if (field.single) {
233 out.println('void set ${identifier}' 239 out.println('void set ${identifier}'
234 '(${field.typeString} v)${SP}' 240 '(${fieldTypeString} v)${SP}'
235 '{${SP}setField(${field.number},${SP}v);${SP}}'); 241 '{${SP}setField(${field.number},${SP}v);${SP}}');
236 out.println('bool $hasIdentifier()${SP}=>' 242 out.println('bool $hasIdentifier()${SP}=>'
237 '${SP}hasField(${field.number});'); 243 '${SP}hasField(${field.number});');
238 out.println('void $clearIdentifier()${SP}=>' 244 out.println('void $clearIdentifier()${SP}=>'
239 '${SP}clearField(${field.number});'); 245 '${SP}clearField(${field.number});');
240 } 246 }
241 } 247 }
242 } 248 }
243 } 249 }
OLDNEW
« no previous file with comments | « lib/file_generator.dart ('k') | lib/protobuf_field.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698