Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | |
| 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. | |
| 4 | |
| 5 /// Provides metadata about mixins to dart-protoc-plugin. | |
| 6 /// (Experimental API; subject to change.) | |
| 7 library protobuf.mixins.meta; | |
| 8 | |
| 9 /// Entry point called by dart-protoc-plugin. | |
| 10 PbMixin findMixin(String name) { | |
| 11 for (var m in _exportedMixins) { | |
| 12 if (m.name == name) { | |
| 13 return m; | |
| 14 } | |
| 15 } | |
| 16 return null; // not found | |
| 17 } | |
| 18 | |
| 19 /// PbMixin contains the metadata needed by dart-protoc-plugin to apply a mixin. | |
| 20 /// | |
| 21 /// The mixin can be applied to a message using the options in dart_options.prot o. | |
|
Søren Gjesse
2015/06/23 06:49:56
Long line.
skybrian
2015/06/24 18:39:04
Done.
| |
| 22 /// Only one mixin can be applied to each message, but that mixin can depend on | |
| 23 /// another mixin, recursively, similar to single inheritance. | |
| 24 class PbMixin { | |
| 25 | |
| 26 /// The Dart symbol to be imported into the .pb.dart file. | |
|
Søren Gjesse
2015/06/23 06:49:56
Maybe be more explicit in this comment that this i
skybrian
2015/06/24 18:39:04
Done.
| |
| 27 final String name; | |
| 28 | |
| 29 /// The name of the file that the .pb.dart file should import the symbol from. | |
| 30 final String importFrom; | |
| 31 | |
| 32 /// Another mixin to apply ahead of this one, or null for none. | |
| 33 final PbMixin parent; | |
| 34 | |
| 35 /// Names that shouldn't be used by properties in the generated child class. | |
| 36 /// May be null if the mixin doesn't reserve any new names. | |
| 37 final List<String> reservedNames; | |
| 38 | |
| 39 const PbMixin._raw(this.name, | |
| 40 {this.importFrom, this.parent, this.reservedNames}); | |
| 41 | |
| 42 /// Returns the mixin and its ancestors, in the order they should be applied. | |
| 43 Iterable<PbMixin> findMixinsToApply() { | |
| 44 var result = [this]; | |
| 45 for (var p = parent; p != null; p = p.parent) { | |
| 46 result.add(p); | |
| 47 } | |
| 48 return result.reversed; | |
| 49 } | |
| 50 | |
| 51 /// Returns all the reserved names, including from ancestor mixins. | |
| 52 Iterable<String> findReservedNames() { | |
| 53 var names = new Set<String>(); | |
| 54 for (var m = this; m != null; m = m.parent) { | |
| 55 if (m.reservedNames != null) { | |
| 56 names.addAll(m.reservedNames); | |
| 57 } | |
| 58 } | |
| 59 return names; | |
| 60 } | |
| 61 } | |
| 62 | |
| 63 /// The mixins that findMixin() can return. | |
| 64 const _exportedMixins = const [_pbMapMixin]; | |
| 65 | |
| 66 const _pbMapMixin = const PbMixin._raw("PbMapMixin", | |
| 67 importFrom: "package:protobuf/src/protobuf/mixins/map_mixin.dart", | |
| 68 parent: _mapMixin); | |
| 69 | |
| 70 const _mapMixin = const PbMixin._raw("MapMixin", | |
|
Søren Gjesse
2015/06/23 06:49:56
This mixin is in this registry because it is requi
skybrian
2015/06/24 18:39:03
I'm relying on _exportedMixins to indicate whether
| |
| 71 importFrom: "dart:collection", | |
| 72 reservedNames: const [ | |
| 73 'addAll', | |
| 74 'containsKey', | |
| 75 'containsValue', | |
| 76 'forEach', | |
| 77 'putIfAbsent', | |
| 78 'remove', | |
| 79 'isEmpty', | |
| 80 'isNotEmpty', | |
| 81 'keys', | |
| 82 'length', | |
| 83 'values', | |
| 84 ]); | |
| OLD | NEW |