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 |