| OLD | NEW | 
|---|
| 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  Loading... | 
| 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  Loading... | 
| 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 } | 
| OLD | NEW | 
|---|