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

Unified 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, 6 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 side-by-side diff with in-line comments
Download patch
Index: lib/message_generator.dart
diff --git a/lib/message_generator.dart b/lib/message_generator.dart
index 4dd64bba2066d855bef896a69e4a1f39d2dc033c..4e87ffbab2aa6ef80bf2ab40de6a063977a7db67 100644
--- a/lib/message_generator.dart
+++ b/lib/message_generator.dart
@@ -5,18 +5,23 @@
part of protoc;
class MessageGenerator extends ProtobufContainer {
- // Returns the mixin for this message, or null if none.
- static PbMixin _getMixin(DescriptorProto desc, PbMixin defaultValue) {
- if (!desc.hasOptions()) return defaultValue;
- if (!desc.options.hasExtension(Dart_options.mixin)) return defaultValue;
+ /// Returns the mixin for this message, or null if none.
+ ///
+ /// First searches [declaredMixins], then internal mixins declared by
+ /// [findMixin].
+ static PbMixin _getMixin(DescriptorProto desc,
+ Map<String, PbMixin> declaredMixins, String defaultMixin) {
+ PbMixin getMixinByName(String name) {
+ if (name.isEmpty) return null; // don't use a mixin (override any default)
+ return declaredMixins[name] ?? findMixin(name);
+ }
- String name = desc.options.getExtension(Dart_options.mixin);
- if (name.isEmpty) return null; // don't use a mixin (override any default)
- var mixin = findMixin(name);
- if (mixin == null) {
- throw ("unknown mixin class: ${name}");
+ if (!desc.hasOptions() || !desc.options.hasExtension(Dart_options.mixin)) {
+ return getMixinByName(defaultMixin);
}
- return mixin;
+
+ String name = desc.options.getExtension(Dart_options.mixin);
+ return getMixinByName(name);
}
final String classname;
@@ -33,7 +38,7 @@ class MessageGenerator extends ProtobufContainer {
List<ProtobufField> _fieldList;
MessageGenerator(DescriptorProto descriptor, ProtobufContainer parent,
- PbMixin defaultMixin)
+ 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.
: _descriptor = descriptor,
_parent = parent,
classname = (parent.classname == '')
@@ -44,13 +49,14 @@ class MessageGenerator extends ProtobufContainer {
: (parent.fqname == '.'
? '.${descriptor.name}'
: '${parent.fqname}.${descriptor.name}'),
- mixin = _getMixin(descriptor, defaultMixin) {
+ mixin = _getMixin(descriptor, declaredMixins, defaultMixin) {
for (EnumDescriptorProto e in _descriptor.enumType) {
_enumGenerators.add(new EnumGenerator(e, this));
}
for (DescriptorProto n in _descriptor.nestedType) {
- _messageGenerators.add(new MessageGenerator(n, this, defaultMixin));
+ _messageGenerators
+ .add(new MessageGenerator(n, this, declaredMixins, defaultMixin));
}
for (FieldDescriptorProto x in _descriptor.extension) {

Powered by Google App Engine
This is Rietveld 408576698