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

Side by Side Diff: lib/message_generator.dart

Issue 2103743002: Rename mixin protos and add a check for undefined mixin name (Closed) Base URL: git@github.com:dart-lang/dart-protoc-plugin.git@master
Patch Set: 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 /// 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
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 }
OLDNEW
« lib/file_generator.dart ('K') | « lib/linker.dart ('k') | lib/src/dart_options.pb.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698