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

Side by Side Diff: lib/message_generator.dart

Issue 2086253002: Allow application of external mixins to generated dart protos. (Closed) Base URL: https://github.com/dart-lang/dart-protoc-plugin.git@master
Patch Set: Update from code review. Created 4 years, 5 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
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 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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698