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

Side by Side Diff: lib/src/unmodifiable_wrappers.dart

Issue 1817463002: Finish @nex3's strong-mode fixes in package:collection and test it in Travis (Closed) Base URL: https://github.com/ochafik/collection.git@master
Patch Set: Created 4 years, 9 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 export "dart:collection" show UnmodifiableListView, UnmodifiableMapView; 5 export "dart:collection" show UnmodifiableListView, UnmodifiableMapView;
6 6
7 import 'wrappers.dart'; 7 import 'wrappers.dart';
8 8
9 /// A fixed-length list. 9 /// A fixed-length list.
10 /// 10 ///
11 /// A `NonGrowableListView` contains a [List] object and ensures that 11 /// A `NonGrowableListView` contains a [List] object and ensures that
12 /// its length does not change. 12 /// its length does not change.
13 /// Methods that would change the length of the list, 13 /// Methods that would change the length of the list,
14 /// such as [add] and [remove], throw an [UnsupportedError]. 14 /// such as [add] and [remove], throw an [UnsupportedError].
15 /// All other methods work directly on the underlying list. 15 /// All other methods work directly on the underlying list.
16 /// 16 ///
17 /// This class _does_ allow changes to the contents of the wrapped list. 17 /// This class _does_ allow changes to the contents of the wrapped list.
18 /// You can, for example, [sort] the list. 18 /// You can, for example, [sort] the list.
19 /// Permitted operations defer to the wrapped list. 19 /// Permitted operations defer to the wrapped list.
20 class NonGrowableListView<E> extends DelegatingList<E> 20 class NonGrowableListView<E> extends DelegatingList<E>
21 with NonGrowableListMixin<E> { 21 with NonGrowableListMixin<E> {
22 NonGrowableListView(List<E> listBase) : super(listBase); 22 NonGrowableListView(List<E> listBase) : super(listBase);
23 } 23 }
24 24
25 /// Mixin class that implements a throwing version of all list operations that 25 /// Mixin class that implements a throwing version of all list operations that
26 /// change the List's length. 26 /// change the List's length.
27 abstract class NonGrowableListMixin<E> implements List<E> { 27 abstract class NonGrowableListMixin<E> implements List<E> {
28 static _throw() { 28 static final _error = new UnsupportedError(
Leaf 2016/03/18 16:35:40 Another way to tackle this is to define static
ochafik 2016/03/19 01:38:33 Like it, thanks!
29 throw new UnsupportedError( 29 "Cannot change the length of a fixed-length list");
30 "Cannot change the length of a fixed-length list"); 30
31 /// Throws an [UnsupportedError];
32 /// operations that change the length of the list are disallowed.
33 void set length(int newLength) {
34 throw _error;
31 } 35 }
32 36
33 /// Throws an [UnsupportedError]; 37 /// Throws an [UnsupportedError];
34 /// operations that change the length of the list are disallowed. 38 /// operations that change the length of the list are disallowed.
35 void set length(int newLength) => _throw(); 39 bool add(E value) {
40 throw _error;
41 }
36 42
37 /// Throws an [UnsupportedError]; 43 /// Throws an [UnsupportedError];
38 /// operations that change the length of the list are disallowed. 44 /// operations that change the length of the list are disallowed.
39 bool add(E value) => _throw(); 45 void addAll(Iterable<E> iterable) {
46 throw _error;
47 }
40 48
41 /// Throws an [UnsupportedError]; 49 /// Throws an [UnsupportedError];
42 /// operations that change the length of the list are disallowed. 50 /// operations that change the length of the list are disallowed.
43 void addAll(Iterable<E> iterable) => _throw(); 51 void insert(int index, E element) {
52 throw _error;
53 }
44 54
45 /// Throws an [UnsupportedError]; 55 /// Throws an [UnsupportedError];
46 /// operations that change the length of the list are disallowed. 56 /// operations that change the length of the list are disallowed.
47 void insert(int index, E element) => _throw(); 57 void insertAll(int index, Iterable<E> iterable) {
58 throw _error;
59 }
48 60
49 /// Throws an [UnsupportedError]; 61 /// Throws an [UnsupportedError];
50 /// operations that change the length of the list are disallowed. 62 /// operations that change the length of the list are disallowed.
51 void insertAll(int index, Iterable<E> iterable) => _throw(); 63 bool remove(Object value) {
64 throw _error;
65 }
52 66
53 /// Throws an [UnsupportedError]; 67 /// Throws an [UnsupportedError];
54 /// operations that change the length of the list are disallowed. 68 /// operations that change the length of the list are disallowed.
55 bool remove(Object value) => _throw(); 69 E removeAt(int index) {
70 throw _error;
71 }
56 72
57 /// Throws an [UnsupportedError]; 73 /// Throws an [UnsupportedError];
58 /// operations that change the length of the list are disallowed. 74 /// operations that change the length of the list are disallowed.
59 E removeAt(int index) => _throw(); 75 E removeLast() {
76 throw _error;
77 }
60 78
61 /// Throws an [UnsupportedError]; 79 /// Throws an [UnsupportedError];
62 /// operations that change the length of the list are disallowed. 80 /// operations that change the length of the list are disallowed.
63 E removeLast() => _throw(); 81 void removeWhere(bool test(E element)) {
82 throw _error;
83 }
64 84
65 /// Throws an [UnsupportedError]; 85 /// Throws an [UnsupportedError];
66 /// operations that change the length of the list are disallowed. 86 /// operations that change the length of the list are disallowed.
67 void removeWhere(bool test(E element)) => _throw(); 87 void retainWhere(bool test(E element)) {
88 throw _error;
89 }
68 90
69 /// Throws an [UnsupportedError]; 91 /// Throws an [UnsupportedError];
70 /// operations that change the length of the list are disallowed. 92 /// operations that change the length of the list are disallowed.
71 void retainWhere(bool test(E element)) => _throw(); 93 void removeRange(int start, int end) {
94 throw _error;
95 }
72 96
73 /// Throws an [UnsupportedError]; 97 /// Throws an [UnsupportedError];
74 /// operations that change the length of the list are disallowed. 98 /// operations that change the length of the list are disallowed.
75 void removeRange(int start, int end) => _throw(); 99 void replaceRange(int start, int end, Iterable<E> iterable) {
100 throw _error;
101 }
76 102
77 /// Throws an [UnsupportedError]; 103 /// Throws an [UnsupportedError];
78 /// operations that change the length of the list are disallowed. 104 /// operations that change the length of the list are disallowed.
79 void replaceRange(int start, int end, Iterable<E> iterable) => _throw(); 105 void clear() {
80 106 throw _error;
81 /// Throws an [UnsupportedError]; 107 }
82 /// operations that change the length of the list are disallowed.
83 void clear() => _throw();
84 } 108 }
85 109
86 /// An unmodifiable set. 110 /// An unmodifiable set.
87 /// 111 ///
88 /// An UnmodifiableSetView contains a [Set] object and ensures 112 /// An UnmodifiableSetView contains a [Set] object and ensures
89 /// that it does not change. 113 /// that it does not change.
90 /// Methods that would change the set, 114 /// Methods that would change the set,
91 /// such as [add] and [remove], throw an [UnsupportedError]. 115 /// such as [add] and [remove], throw an [UnsupportedError].
92 /// Permitted operations defer to the wrapped set. 116 /// Permitted operations defer to the wrapped set.
93 class UnmodifiableSetView<E> extends DelegatingSet<E> 117 class UnmodifiableSetView<E> extends DelegatingSet<E>
94 with UnmodifiableSetMixin<E> { 118 with UnmodifiableSetMixin<E> {
95 UnmodifiableSetView(Set<E> setBase) : super(setBase); 119 UnmodifiableSetView(Set<E> setBase) : super(setBase);
96 } 120 }
97 121
98 /// Mixin class that implements a throwing version of all set operations that 122 /// Mixin class that implements a throwing version of all set operations that
99 /// change the Set. 123 /// change the Set.
100 abstract class UnmodifiableSetMixin<E> implements Set<E> { 124 abstract class UnmodifiableSetMixin<E> implements Set<E> {
101 _throw() { 125 static final _error =
102 throw new UnsupportedError("Cannot modify an unmodifiable Set"); 126 new UnsupportedError("Cannot modify an unmodifiable Set");
127
128 /// Throws an [UnsupportedError];
129 /// operations that change the set are disallowed.
130 bool add(E value) {
131 throw _error;
103 } 132 }
104 133
105 /// Throws an [UnsupportedError]; 134 /// Throws an [UnsupportedError];
106 /// operations that change the set are disallowed. 135 /// operations that change the set are disallowed.
107 bool add(E value) => _throw(); 136 void addAll(Iterable<E> elements) {
137 throw _error;
138 }
108 139
109 /// Throws an [UnsupportedError]; 140 /// Throws an [UnsupportedError];
110 /// operations that change the set are disallowed. 141 /// operations that change the set are disallowed.
111 void addAll(Iterable<E> elements) => _throw(); 142 bool remove(Object value) {
143 throw _error;
144 }
112 145
113 /// Throws an [UnsupportedError]; 146 /// Throws an [UnsupportedError];
114 /// operations that change the set are disallowed. 147 /// operations that change the set are disallowed.
115 bool remove(Object value) => _throw(); 148 void removeAll(Iterable elements) {
149 throw _error;
150 }
116 151
117 /// Throws an [UnsupportedError]; 152 /// Throws an [UnsupportedError];
118 /// operations that change the set are disallowed. 153 /// operations that change the set are disallowed.
119 void removeAll(Iterable elements) => _throw(); 154 void retainAll(Iterable elements) {
155 throw _error;
156 }
120 157
121 /// Throws an [UnsupportedError]; 158 /// Throws an [UnsupportedError];
122 /// operations that change the set are disallowed. 159 /// operations that change the set are disallowed.
123 void retainAll(Iterable elements) => _throw(); 160 void removeWhere(bool test(E element)) {
161 throw _error;
162 }
124 163
125 /// Throws an [UnsupportedError]; 164 /// Throws an [UnsupportedError];
126 /// operations that change the set are disallowed. 165 /// operations that change the set are disallowed.
127 void removeWhere(bool test(E element)) => _throw(); 166 void retainWhere(bool test(E element)) {
167 throw _error;
168 }
128 169
129 /// Throws an [UnsupportedError]; 170 /// Throws an [UnsupportedError];
130 /// operations that change the set are disallowed. 171 /// operations that change the set are disallowed.
131 void retainWhere(bool test(E element)) => _throw(); 172 void clear() {
132 173 throw _error;
133 /// Throws an [UnsupportedError]; 174 }
134 /// operations that change the set are disallowed.
135 void clear() => _throw();
136 } 175 }
137 176
138 /// Mixin class that implements a throwing version of all map operations that 177 /// Mixin class that implements a throwing version of all map operations that
139 /// change the Map. 178 /// change the Map.
140 abstract class UnmodifiableMapMixin<K, V> implements Map<K, V> { 179 abstract class UnmodifiableMapMixin<K, V> implements Map<K, V> {
141 static _throw() { 180 static final _error =
142 throw new UnsupportedError("Cannot modify an unmodifiable Map"); 181 new UnsupportedError("Cannot modify an unmodifiable Map");
182
183 /// Throws an [UnsupportedError];
184 /// operations that change the map are disallowed.
185 void operator []=(K key, V value) {
186 throw _error;
143 } 187 }
144 188
145 /// Throws an [UnsupportedError]; 189 /// Throws an [UnsupportedError];
146 /// operations that change the map are disallowed. 190 /// operations that change the map are disallowed.
147 void operator []=(K key, V value) => _throw(); 191 V putIfAbsent(K key, V ifAbsent()) {
192 throw _error;
193 }
148 194
149 /// Throws an [UnsupportedError]; 195 /// Throws an [UnsupportedError];
150 /// operations that change the map are disallowed. 196 /// operations that change the map are disallowed.
151 V putIfAbsent(K key, V ifAbsent()) => _throw(); 197 void addAll(Map<K, V> other) {
198 throw _error;
199 }
152 200
153 /// Throws an [UnsupportedError]; 201 /// Throws an [UnsupportedError];
154 /// operations that change the map are disallowed. 202 /// operations that change the map are disallowed.
155 void addAll(Map<K, V> other) => _throw(); 203 V remove(Object key) {
204 throw _error;
205 }
156 206
157 /// Throws an [UnsupportedError]; 207 /// Throws an [UnsupportedError];
158 /// operations that change the map are disallowed. 208 /// operations that change the map are disallowed.
159 V remove(Object key) => _throw(); 209 void clear() {
160 210 throw _error;
161 /// Throws an [UnsupportedError]; 211 }
162 /// operations that change the map are disallowed.
163 void clear() => _throw();
164 } 212 }
OLDNEW
« lib/src/equality.dart ('K') | « lib/src/queue_list.dart ('k') | lib/src/wrappers.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698