Skip to content

Commit 2111ecb

Browse files
authored
Enable and fix a number of lints (flutter#19)
1 parent 97861d1 commit 2111ecb

File tree

4 files changed

+129
-117
lines changed

4 files changed

+129
-117
lines changed

analysis_options.yaml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
include: package:pedantic/analysis_options.yaml
2+
analyzer:
3+
strong-mode:
4+
implicit-casts: false
5+
linter:
6+
rules:
7+
- await_only_futures
8+
- implementation_imports
9+
- prefer_typing_uninitialized_variables
10+
- unnecessary_const
11+
- unnecessary_new

lib/pool.dart

Lines changed: 22 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -21,20 +21,20 @@ class Pool {
2121
///
2222
/// When an item is released, the next element of [_requestedResources] will
2323
/// be completed.
24-
final _requestedResources = new Queue<Completer<PoolResource>>();
24+
final _requestedResources = Queue<Completer<PoolResource>>();
2525

2626
/// Callbacks that must be called before additional resources can be
2727
/// allocated.
2828
///
2929
/// See [PoolResource.allowRelease].
30-
final _onReleaseCallbacks = new Queue<Function>();
30+
final _onReleaseCallbacks = Queue<void Function()>();
3131

3232
/// Completers that will be completed once `onRelease` callbacks are done
3333
/// running.
3434
///
3535
/// These are kept in a queue to ensure that the earliest request completes
3636
/// first regardless of what order the `onRelease` callbacks complete in.
37-
final _onReleaseCompleters = new Queue<Completer<PoolResource>>();
37+
final _onReleaseCompleters = Queue<Completer<PoolResource>>();
3838

3939
/// The maximum number of resources that may be allocated at once.
4040
final int _maxAllocatedResources;
@@ -82,7 +82,7 @@ class Pool {
8282
if (timeout != null) {
8383
// Start the timer canceled since we only want to start counting down once
8484
// we've run out of available resources.
85-
_timer = new RestartableTimer(timeout, _onTimeout)..cancel();
85+
_timer = RestartableTimer(timeout, _onTimeout)..cancel();
8686
}
8787
}
8888

@@ -92,16 +92,16 @@ class Pool {
9292
/// until one of them is released.
9393
Future<PoolResource> request() {
9494
if (isClosed) {
95-
throw new StateError("request() may not be called on a closed Pool.");
95+
throw StateError("request() may not be called on a closed Pool.");
9696
}
9797

9898
if (_allocatedResources < _maxAllocatedResources) {
9999
_allocatedResources++;
100-
return new Future.value(new PoolResource._(this));
100+
return Future.value(PoolResource._(this));
101101
} else if (_onReleaseCallbacks.isNotEmpty) {
102102
return _runOnRelease(_onReleaseCallbacks.removeFirst());
103103
} else {
104-
var completer = new Completer<PoolResource>();
104+
var completer = Completer<PoolResource>();
105105
_requestedResources.add(completer);
106106
_resetTimer();
107107
return completer.future;
@@ -114,16 +114,15 @@ class Pool {
114114
/// The return value of [callback] is piped to the returned Future.
115115
Future<T> withResource<T>(FutureOr<T> callback()) {
116116
if (isClosed) {
117-
throw new StateError(
118-
"withResource() may not be called on a closed Pool.");
117+
throw StateError("withResource() may not be called on a closed Pool.");
119118
}
120119

121120
// We can't use async/await here because we need to start the request
122121
// synchronously in case the pool is closed immediately afterwards. Async
123122
// functions have an asynchronous gap between calling and running the body,
124123
// and [close] could be called during that gap. See #3.
125124
return request().then((resource) {
126-
return new Future<T>.sync(callback).whenComplete(resource.release);
125+
return Future<T>.sync(callback).whenComplete(resource.release);
127126
});
128127
}
129128

@@ -143,9 +142,9 @@ class Pool {
143142

144143
_resetTimer();
145144

146-
_closeGroup = new FutureGroup();
145+
_closeGroup = FutureGroup();
147146
for (var callback in _onReleaseCallbacks) {
148-
_closeGroup.add(new Future.sync(callback));
147+
_closeGroup.add(Future.sync(callback));
149148
}
150149

151150
_allocatedResources -= _onReleaseCallbacks.length;
@@ -154,15 +153,15 @@ class Pool {
154153
if (_allocatedResources == 0) _closeGroup.close();
155154
return _closeGroup.future;
156155
});
157-
final _closeMemo = new AsyncMemoizer();
156+
final _closeMemo = AsyncMemoizer();
158157

159158
/// If there are any pending requests, this will fire the oldest one.
160159
void _onResourceReleased() {
161160
_resetTimer();
162161

163162
if (_requestedResources.isNotEmpty) {
164163
var pending = _requestedResources.removeFirst();
165-
pending.complete(new PoolResource._(this));
164+
pending.complete(PoolResource._(this));
166165
} else {
167166
_allocatedResources--;
168167
if (isClosed && _allocatedResources == 0) _closeGroup.close();
@@ -178,7 +177,7 @@ class Pool {
178177
var pending = _requestedResources.removeFirst();
179178
pending.complete(_runOnRelease(onRelease));
180179
} else if (isClosed) {
181-
_closeGroup.add(new Future.sync(onRelease));
180+
_closeGroup.add(Future.sync(onRelease));
182181
_allocatedResources--;
183182
if (_allocatedResources == 0) _closeGroup.close();
184183
} else {
@@ -194,13 +193,13 @@ class Pool {
194193
/// Futures returned by [_runOnRelease] always complete in the order they were
195194
/// created, even if earlier [onRelease] callbacks take longer to run.
196195
Future<PoolResource> _runOnRelease(onRelease()) {
197-
new Future.sync(onRelease).then((value) {
198-
_onReleaseCompleters.removeFirst().complete(new PoolResource._(this));
199-
}).catchError((error, stackTrace) {
196+
Future.sync(onRelease).then((value) {
197+
_onReleaseCompleters.removeFirst().complete(PoolResource._(this));
198+
}).catchError((error, StackTrace stackTrace) {
200199
_onReleaseCompleters.removeFirst().completeError(error, stackTrace);
201200
});
202201

203-
var completer = new Completer<PoolResource>.sync();
202+
var completer = Completer<PoolResource>.sync();
204203
_onReleaseCompleters.add(completer);
205204
return completer.future;
206205
}
@@ -221,11 +220,11 @@ class Pool {
221220
void _onTimeout() {
222221
for (var completer in _requestedResources) {
223222
completer.completeError(
224-
new TimeoutException(
223+
TimeoutException(
225224
"Pool deadlock: all resources have been "
226225
"allocated for too long.",
227226
_timeout),
228-
new Chain.current());
227+
Chain.current());
229228
}
230229
_requestedResources.clear();
231230
_timer = null;
@@ -248,7 +247,7 @@ class PoolResource {
248247
/// no longer allocated, and that a new [PoolResource] may be allocated.
249248
void release() {
250249
if (_released) {
251-
throw new StateError("A PoolResource may only be released once.");
250+
throw StateError("A PoolResource may only be released once.");
252251
}
253252
_released = true;
254253
_pool._onResourceReleased();
@@ -268,7 +267,7 @@ class PoolResource {
268267
/// may be complete, but it could still emit asynchronous errors.
269268
void allowRelease(onRelease()) {
270269
if (_released) {
271-
throw new StateError("A PoolResource may only be released once.");
270+
throw StateError("A PoolResource may only be released once.");
272271
}
273272
_released = true;
274273
_pool._onResourceReleaseAllowed(onRelease);

pubspec.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name: pool
2-
version: 1.3.6
2+
version: 1.3.7-dev
33

44
description: A class for managing a finite pool of resources.
55
author: Dart Team <[email protected]>
@@ -14,4 +14,5 @@ dependencies:
1414

1515
dev_dependencies:
1616
fake_async: ^1.0.0
17+
pedantic: ^1.4.0
1718
test: ^1.0.0

0 commit comments

Comments
 (0)