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

Side by Side Diff: lib/mixins_meta.dart

Issue 2090033002: Make PbMixin constructor public, bump version number to 0.5.2. (Closed) Base URL: https://github.com/dart-lang/dart-protobuf.git@master
Patch Set: 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 unified diff | Download patch
« no previous file with comments | « no previous file | pubspec.yaml » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file 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 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 /// Provides metadata about mixins to dart-protoc-plugin. 5 /// Provides metadata about mixins to dart-protoc-plugin.
6 /// (Experimental API; subject to change.) 6 /// (Experimental API; subject to change.)
7 library protobuf.mixins.meta; 7 library protobuf.mixins.meta;
8 8
9 /// Entry point called by dart-protoc-plugin. 9 /// Entry point called by dart-protoc-plugin.
10 PbMixin findMixin(String name) { 10 PbMixin findMixin(String name) {
11 for (var m in _exportedMixins) { 11 for (var m in _exportedMixins) {
12 if (m.name == name) { 12 if (m.name == name) {
13 return m; 13 return m;
14 } 14 }
15 } 15 }
16 return null; // not found 16 return null; // not found
17 } 17 }
18 18
19 /// PbMixin contains metadata needed by dart-protoc-plugin to apply a mixin. 19 /// PbMixin contains metadata needed by dart-protoc-plugin to apply a mixin.
20 /// 20 ///
21 /// The mixin can be applied to a message using options in dart_options.proto. 21 /// The mixin can be applied to a message using options in dart_options.proto.
22 /// Only one mixin can be applied to each message, but that mixin can depend 22 /// Only one mixin can be applied to each message, but that mixin can depend
23 /// on another mixin, recursively, similar to single inheritance. 23 /// on another mixin, recursively, similar to single inheritance.
24 class PbMixin { 24 class PbMixin {
25
26 /// The name of the mixin class to import into the .pb.dart file. 25 /// The name of the mixin class to import into the .pb.dart file.
27 final String name; 26 final String name;
28 27
29 /// The file that the .pb.dart file should import the symbol from. 28 /// The file that the .pb.dart file should import the symbol from.
30 final String importFrom; 29 final String importFrom;
31 30
32 /// Another mixin to apply ahead of this one, or null for none. 31 /// Another mixin to apply ahead of this one, or null for none.
33 final PbMixin parent; 32 final PbMixin parent;
34 33
35 /// Names that shouldn't be used by properties in the generated child class. 34 /// 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. 35 /// May be null if the mixin doesn't reserve any new names.
37 final List<String> reservedNames; 36 final List<String> reservedNames;
38 37
39 const PbMixin._raw(this.name, 38 const PbMixin(this.name, {this.importFrom, this.parent, this.reservedNames});
40 {this.importFrom, this.parent, this.reservedNames});
41 39
42 /// Returns the mixin and its ancestors, in the order they should be applied. 40 /// Returns the mixin and its ancestors, in the order they should be applied.
43 Iterable<PbMixin> findMixinsToApply() { 41 Iterable<PbMixin> findMixinsToApply() {
44 var result = [this]; 42 var result = [this];
45 for (var p = parent; p != null; p = p.parent) { 43 for (var p = parent; p != null; p = p.parent) {
46 result.add(p); 44 result.add(p);
47 } 45 }
48 return result.reversed; 46 return result.reversed;
49 } 47 }
50 48
51 /// Returns all the reserved names, including from ancestor mixins. 49 /// Returns all the reserved names, including from ancestor mixins.
52 Iterable<String> findReservedNames() { 50 Iterable<String> findReservedNames() {
53 var names = new Set<String>(); 51 var names = new Set<String>();
54 for (var m = this; m != null; m = m.parent) { 52 for (var m = this; m != null; m = m.parent) {
55 names.add(m.name); 53 names.add(m.name);
56 if (m.reservedNames != null) { 54 if (m.reservedNames != null) {
57 names.addAll(m.reservedNames); 55 names.addAll(m.reservedNames);
58 } 56 }
59 } 57 }
60 return names; 58 return names;
61 } 59 }
62 } 60 }
63 61
64 /// The mixins that findMixin() can return. 62 /// The mixins that findMixin() can return.
65 const _exportedMixins = const [_pbMapMixin, _pbEventMixin]; 63 final _exportedMixins = [_pbMapMixin, _pbEventMixin];
66 64
67 const _pbMapMixin = const PbMixin._raw("PbMapMixin", 65 const _pbMapMixin = const PbMixin("PbMapMixin",
68 importFrom: "package:protobuf/src/protobuf/mixins/map_mixin.dart", 66 importFrom: "package:protobuf/src/protobuf/mixins/map_mixin.dart",
69 parent: _mapMixin); 67 parent: _mapMixin);
70 68
71 const _pbEventMixin = const PbMixin._raw("PbEventMixin", 69 const _pbEventMixin = const PbMixin("PbEventMixin",
72 importFrom: "package:protobuf/src/protobuf/mixins/event_mixin.dart", 70 importFrom: "package:protobuf/src/protobuf/mixins/event_mixin.dart",
73 reservedNames: const ["changes", "deliverChanges"]); 71 reservedNames: const ["changes", "deliverChanges"]);
74 72
75 const List<String> _reservedNamesForMap = const [ 73 const List<String> _reservedNamesForMap = const [
76 '[]', 74 '[]',
77 '[]=', 75 '[]=',
78 'addAll', 76 'addAll',
79 'containsKey', 77 'containsKey',
80 'containsValue', 78 'containsValue',
81 'forEach', 79 'forEach',
82 'putIfAbsent', 80 'putIfAbsent',
83 'remove', 81 'remove',
84 'isEmpty', 82 'isEmpty',
85 'isNotEmpty', 83 'isNotEmpty',
86 'keys', 84 'keys',
87 'length', 85 'length',
88 'values', 86 'values',
89 ]; 87 ];
90 88
91 const _mapMixin = const PbMixin._raw("MapMixin", 89 const _mapMixin = const PbMixin("MapMixin",
92 importFrom: "dart:collection", 90 importFrom: "dart:collection", reservedNames: _reservedNamesForMap);
93 reservedNames: _reservedNamesForMap);
OLDNEW
« no previous file with comments | « no previous file | pubspec.yaml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698