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 /// | 9 /// |
| 10 /// First searches [declaredMixins], then internal mixins declared by | 10 /// First searches [declaredMixins], then internal mixins declared by |
| 11 /// [findMixin]. | 11 /// [findMixin]. |
| 12 static PbMixin _getMixin(DescriptorProto desc, | 12 static PbMixin _getMixin(DescriptorProto desc, FileDescriptorProto file, |
| 13 Map<String, PbMixin> declaredMixins, PbMixin defaultMixin) { | 13 Map<String, PbMixin> declaredMixins, PbMixin 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)) { | 14 if (!desc.hasOptions() || !desc.options.hasExtension(Dart_options.mixin)) { |
| 20 return defaultMixin; | 15 return defaultMixin; |
| 21 } | 16 } |
| 22 | 17 |
| 23 String name = desc.options.getExtension(Dart_options.mixin); | 18 String name = desc.options.getExtension(Dart_options.mixin); |
| 24 return getMixinByName(name); | 19 if (name.isEmpty) return null; // don't use any mixins (override default) |
| 20 var mixin = declaredMixins[name] ?? findMixin(name); | |
| 21 if (mixin == null) { | |
| 22 throw throw '${desc.name} in ${file.name}: mixin "$name" not found'; | |
|
frederikmutzel
2016/06/28 08:15:13
double throw
skybrian
2016/06/28 08:40:34
Fixed.
| |
| 23 } | |
| 24 return mixin; | |
| 25 } | 25 } |
| 26 | 26 |
| 27 final String classname; | 27 final String classname; |
| 28 final String fqname; | 28 final String fqname; |
| 29 final PbMixin mixin; | 29 final PbMixin mixin; |
| 30 | 30 |
| 31 final ProtobufContainer _parent; | 31 final ProtobufContainer _parent; |
| 32 final DescriptorProto _descriptor; | 32 final DescriptorProto _descriptor; |
| 33 final List<EnumGenerator> _enumGenerators = <EnumGenerator>[]; | 33 final List<EnumGenerator> _enumGenerators = <EnumGenerator>[]; |
| 34 final List<MessageGenerator> _messageGenerators = <MessageGenerator>[]; | 34 final List<MessageGenerator> _messageGenerators = <MessageGenerator>[]; |
| 35 final List<ExtensionGenerator> _extensionGenerators = <ExtensionGenerator>[]; | 35 final List<ExtensionGenerator> _extensionGenerators = <ExtensionGenerator>[]; |
| 36 | 36 |
| 37 // populated by resolve() | 37 // populated by resolve() |
| 38 List<ProtobufField> _fieldList; | 38 List<ProtobufField> _fieldList; |
| 39 | 39 |
| 40 MessageGenerator(DescriptorProto descriptor, ProtobufContainer parent, | 40 MessageGenerator(DescriptorProto descriptor, ProtobufContainer parent, |
| 41 Map<String, PbMixin> declaredMixins, PbMixin defaultMixin) | 41 Map<String, PbMixin> declaredMixins, PbMixin defaultMixin) |
| 42 : _descriptor = descriptor, | 42 : _descriptor = descriptor, |
| 43 _parent = parent, | 43 _parent = parent, |
| 44 classname = (parent.classname == '') | 44 classname = (parent.classname == '') |
| 45 ? descriptor.name | 45 ? descriptor.name |
| 46 : '${parent.classname}_${descriptor.name}', | 46 : '${parent.classname}_${descriptor.name}', |
| 47 fqname = (parent == null || parent.fqname == null) | 47 fqname = (parent == null || parent.fqname == null) |
| 48 ? descriptor.name | 48 ? descriptor.name |
| 49 : (parent.fqname == '.' | 49 : (parent.fqname == '.' |
| 50 ? '.${descriptor.name}' | 50 ? '.${descriptor.name}' |
| 51 : '${parent.fqname}.${descriptor.name}'), | 51 : '${parent.fqname}.${descriptor.name}'), |
| 52 mixin = _getMixin(descriptor, declaredMixins, defaultMixin) { | 52 mixin = _getMixin(descriptor, parent.fileGen.descriptor, declaredMixins, |
| 53 defaultMixin) { | |
| 53 for (EnumDescriptorProto e in _descriptor.enumType) { | 54 for (EnumDescriptorProto e in _descriptor.enumType) { |
| 54 _enumGenerators.add(new EnumGenerator(e, this)); | 55 _enumGenerators.add(new EnumGenerator(e, this)); |
| 55 } | 56 } |
| 56 | 57 |
| 57 for (DescriptorProto n in _descriptor.nestedType) { | 58 for (DescriptorProto n in _descriptor.nestedType) { |
| 58 _messageGenerators | 59 _messageGenerators |
| 59 .add(new MessageGenerator(n, this, declaredMixins, defaultMixin)); | 60 .add(new MessageGenerator(n, this, declaredMixins, defaultMixin)); |
| 60 } | 61 } |
| 61 | 62 |
| 62 for (FieldDescriptorProto x in _descriptor.extension) { | 63 for (FieldDescriptorProto x in _descriptor.extension) { |
| (...skipping 317 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 380 | 381 |
| 381 for (var m in _messageGenerators) { | 382 for (var m in _messageGenerators) { |
| 382 m.generateConstants(out); | 383 m.generateConstants(out); |
| 383 } | 384 } |
| 384 | 385 |
| 385 for (var e in _enumGenerators) { | 386 for (var e in _enumGenerators) { |
| 386 e.generateConstants(out); | 387 e.generateConstants(out); |
| 387 } | 388 } |
| 388 } | 389 } |
| 389 } | 390 } |
| OLD | NEW |