Chromium Code Reviews| 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 class MessageGenerator extends ProtobufContainer { | 7 class MessageGenerator extends ProtobufContainer { |
| 8 // Returns the mixin for this message, or null if none. | 8 /// Returns the mixin for this message, or null if none. |
| 9 static PbMixin _getMixin(DescriptorProto desc, PbMixin defaultValue) { | 9 /// |
| 10 if (!desc.hasOptions()) return defaultValue; | 10 /// First searches [declaredMixins], then internal mixins declared by |
| 11 if (!desc.options.hasExtension(Dart_options.mixin)) return defaultValue; | 11 /// [findMixin]. |
| 12 static PbMixin _getMixin(DescriptorProto desc, | |
| 13 Map<String, PbMixin> declaredMixins, String defaultMixin) { | |
| 14 PbMixin getMixinByName(String name) { | |
| 15 if (name.isEmpty) return null; // don't use a mixin (override any default) | |
| 16 return declaredMixins[name] ?? findMixin(name); | |
| 17 } | |
| 18 | |
| 19 if (!desc.hasOptions() || !desc.options.hasExtension(Dart_options.mixin)) { | |
| 20 return getMixinByName(defaultMixin); | |
| 21 } | |
| 12 | 22 |
| 13 String name = desc.options.getExtension(Dart_options.mixin); | 23 String name = desc.options.getExtension(Dart_options.mixin); |
| 14 if (name.isEmpty) return null; // don't use a mixin (override any default) | 24 return getMixinByName(name); |
| 15 var mixin = findMixin(name); | |
| 16 if (mixin == null) { | |
| 17 throw ("unknown mixin class: ${name}"); | |
| 18 } | |
| 19 return mixin; | |
| 20 } | 25 } |
| 21 | 26 |
| 22 final String classname; | 27 final String classname; |
| 23 final String fqname; | 28 final String fqname; |
| 24 final PbMixin mixin; | 29 final PbMixin mixin; |
| 25 | 30 |
| 26 final ProtobufContainer _parent; | 31 final ProtobufContainer _parent; |
| 27 final DescriptorProto _descriptor; | 32 final DescriptorProto _descriptor; |
| 28 final List<EnumGenerator> _enumGenerators = <EnumGenerator>[]; | 33 final List<EnumGenerator> _enumGenerators = <EnumGenerator>[]; |
| 29 final List<MessageGenerator> _messageGenerators = <MessageGenerator>[]; | 34 final List<MessageGenerator> _messageGenerators = <MessageGenerator>[]; |
| 30 final List<ExtensionGenerator> _extensionGenerators = <ExtensionGenerator>[]; | 35 final List<ExtensionGenerator> _extensionGenerators = <ExtensionGenerator>[]; |
| 31 | 36 |
| 32 // populated by resolve() | 37 // populated by resolve() |
| 33 List<ProtobufField> _fieldList; | 38 List<ProtobufField> _fieldList; |
| 34 | 39 |
| 35 MessageGenerator(DescriptorProto descriptor, ProtobufContainer parent, | 40 MessageGenerator(DescriptorProto descriptor, ProtobufContainer parent, |
| 36 PbMixin defaultMixin) | 41 Map<String, PbMixin> declaredMixins, String defaultMixin) |
|
skybrian
2016/06/23 19:01:42
Maybe change defaultMixin back to having type PbMi
frederikmutzel
2016/06/27 08:44:31
Done.
| |
| 37 : _descriptor = descriptor, | 42 : _descriptor = descriptor, |
| 38 _parent = parent, | 43 _parent = parent, |
| 39 classname = (parent.classname == '') | 44 classname = (parent.classname == '') |
| 40 ? descriptor.name | 45 ? descriptor.name |
| 41 : '${parent.classname}_${descriptor.name}', | 46 : '${parent.classname}_${descriptor.name}', |
| 42 fqname = (parent == null || parent.fqname == null) | 47 fqname = (parent == null || parent.fqname == null) |
| 43 ? descriptor.name | 48 ? descriptor.name |
| 44 : (parent.fqname == '.' | 49 : (parent.fqname == '.' |
| 45 ? '.${descriptor.name}' | 50 ? '.${descriptor.name}' |
| 46 : '${parent.fqname}.${descriptor.name}'), | 51 : '${parent.fqname}.${descriptor.name}'), |
| 47 mixin = _getMixin(descriptor, defaultMixin) { | 52 mixin = _getMixin(descriptor, declaredMixins, defaultMixin) { |
| 48 for (EnumDescriptorProto e in _descriptor.enumType) { | 53 for (EnumDescriptorProto e in _descriptor.enumType) { |
| 49 _enumGenerators.add(new EnumGenerator(e, this)); | 54 _enumGenerators.add(new EnumGenerator(e, this)); |
| 50 } | 55 } |
| 51 | 56 |
| 52 for (DescriptorProto n in _descriptor.nestedType) { | 57 for (DescriptorProto n in _descriptor.nestedType) { |
| 53 _messageGenerators.add(new MessageGenerator(n, this, defaultMixin)); | 58 _messageGenerators |
| 59 .add(new MessageGenerator(n, this, declaredMixins, defaultMixin)); | |
| 54 } | 60 } |
| 55 | 61 |
| 56 for (FieldDescriptorProto x in _descriptor.extension) { | 62 for (FieldDescriptorProto x in _descriptor.extension) { |
| 57 _extensionGenerators.add(new ExtensionGenerator(x, this)); | 63 _extensionGenerators.add(new ExtensionGenerator(x, this)); |
| 58 } | 64 } |
| 59 } | 65 } |
| 60 | 66 |
| 61 String get package => _parent.package; | 67 String get package => _parent.package; |
| 62 | 68 |
| 63 /// The generator of the .pb.dart file that will declare this type. | 69 /// The generator of the .pb.dart file that will declare this type. |
| (...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 374 | 380 |
| 375 for (var m in _messageGenerators) { | 381 for (var m in _messageGenerators) { |
| 376 m.generateConstants(out); | 382 m.generateConstants(out); |
| 377 } | 383 } |
| 378 | 384 |
| 379 for (var e in _enumGenerators) { | 385 for (var e in _enumGenerators) { |
| 380 e.generateConstants(out); | 386 e.generateConstants(out); |
| 381 } | 387 } |
| 382 } | 388 } |
| 383 } | 389 } |
| OLD | NEW |