Refactor Future constructors.

BUG=

Review URL: https://codereview.chromium.org//14070010

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@21517 260f80e4-7a28-3924-810f-c04153c831b5
This commit is contained in:
floitsch@google.com 2013-04-15 21:24:27 +00:00
parent 6c6ee276eb
commit 466d6670c1
104 changed files with 372 additions and 269 deletions

View file

@ -38,7 +38,7 @@ Future<AnalysisResult> run(List<String> args) {
var options = new CommandLineOptions.parse(args);
if (options == null) {
return new Future.immediate(new AnalysisResult.forFailure());
return new Future.value(new AnalysisResult.forFailure());
}
//TODO(pquitslund): call out to analyzer...

View file

@ -164,7 +164,7 @@ Future writeStreamToSink(Stream stream, EventSink sink) {
}
/// Returns a [Future] that asynchronously completes to `null`.
Future get async => new Future.immediate(null);
Future get async => new Future.value();
/// Returns a closed [Stream] with no elements.
Stream get emptyStream => streamFromIterable([]);
@ -234,7 +234,7 @@ void chainToCompleter(Future future, Completer completer) {
Future forEachFuture(Iterable input, Future fn(element)) {
var iterator = input.iterator;
Future nextElement(_) {
if (!iterator.moveNext()) return new Future.immediate(null);
if (!iterator.moveNext()) return new Future.value();
return fn(iterator.current).then(nextElement);
}
return nextElement(null);

View file

@ -19,7 +19,7 @@ import 'utils.dart';
void main() {
test('handles a request', () {
var client = new MockClient((request) {
return new Future.immediate(new http.Response(
return new Future.value(new http.Response(
json.stringify(request.bodyFields), 200,
request: request, headers: {'content-type': 'application/json'}));
});
@ -57,7 +57,7 @@ void main() {
test('handles a request with no body', () {
var client = new MockClient((request) {
return new Future.immediate(new http.Response('you did it', 200));
return new Future.value(new http.Response('you did it', 200));
});
expect(client.read("http://example.com/foo"),

View file

@ -213,7 +213,7 @@ void main() {
tearDown(() => tempDir.deleteSync(recursive: true));
test('with a file from disk', () {
expect(new Future.of(() {
expect(new Future.sync(() {
var filePath = path.join(tempDir.path, 'test-file');
new File(filePath).writeAsStringSync('hello');
return http.MultipartFile.fromPath('file', filePath);

View file

@ -28,7 +28,7 @@ MessageLookupByLibrary _findExact(localeName) {
initializeMessages(localeName) {
initializeInternalMessageLookup(() => new CompositeMessageLookup());
messageLookup.addLocale(localeName, _findGeneratedMessagesFor);
return new Future.immediate(null);
return new Future.value();
}
MessageLookupByLibrary _findGeneratedMessagesFor(locale) {

View file

@ -31,7 +31,7 @@ import "date_time_patterns.dart";
Future initializeDateFormatting(String locale, String ignored) {
initializeDateSymbols(dateTimeSymbolMap);
initializeDatePatterns(dateTimePatternMap);
return new Future.immediate(null);
return new Future.value();
}
/**

View file

@ -183,7 +183,7 @@ const closing = """
initializeMessages(localeName) {
initializeInternalMessageLookup(() => new CompositeMessageLookup());
messageLookup.addLocale(localeName, _findGeneratedMessagesFor);
return new Future.immediate(null);
return new Future.value();
}
MessageLookupByLibrary _findGeneratedMessagesFor(locale) {

View file

@ -27,5 +27,5 @@ import "intl.dart";
*/
Future<String> findSystemLocale() {
Intl.systemLocale = Intl.canonicalizedLocale(window.navigator.language);
return new Future.immediate(Intl.systemLocale);
return new Future.value(Intl.systemLocale);
}

View file

@ -43,7 +43,7 @@ Future<String> findSystemLocale() {
return _getAppleDefaults();
}
// We can't find anything, don't set the system locale and return null.
return new Future.immediate(null);
return new Future.value();
}
/**
@ -83,12 +83,12 @@ Future _getAppleDefaults() {
* then don't set the variable and return a future that completes with null.
*/
Future<String> _checkResult(ProcessResult result, RegExp regex) {
if (result.exitCode != 0) return new Future.immediate(null);
if (result.exitCode != 0) return new Future.value();
var match = regex.firstMatch(result.stdout);
if (match == null) return new Future.immediate(null);
if (match == null) return new Future.value();
var locale = match.group(1);
_setLocale(locale);
return new Future.immediate(locale);
return new Future.value(locale);
}
/**
@ -96,5 +96,5 @@ Future<String> _checkResult(ProcessResult result, RegExp regex) {
*/
Future<String> _setLocale(aLocale) {
Intl.systemLocale = Intl.canonicalizedLocale(aLocale);
return new Future.immediate(Intl.systemLocale);
return new Future.value(Intl.systemLocale);
}

View file

@ -83,7 +83,7 @@ class Client extends http.BaseClient {
/// the request if necessary.
Future<http.StreamedResponse> send(http.BaseRequest request) {
return async.then((_) {
if (!credentials.isExpired) return new Future.immediate(null);
if (!credentials.isExpired) return new Future.value();
if (!credentials.canRefresh) throw new ExpirationException(credentials);
return refreshCredentials();
}).then((_) {

View file

@ -154,7 +154,7 @@ void main() {
'client_secret': 'secret'
}));
return new Future.immediate(new http.Response(JSON.stringify({
return new Future.value(new http.Response(JSON.stringify({
'access_token': 'access token',
'token_type': 'bearer',
}), 200, headers: {'content-type': 'application/json'}));
@ -198,7 +198,7 @@ void main() {
'client_secret': 'secret'
}));
return new Future.immediate(new http.Response(JSON.stringify({
return new Future.value(new http.Response(JSON.stringify({
'access_token': 'access token',
'token_type': 'bearer',
}), 200, headers: {'content-type': 'application/json'}));

View file

@ -57,7 +57,7 @@ void main() {
httpClient.expectRequest((request) {
expect(request.method, equals('POST'));
expect(request.url.toString(), equals(tokenEndpoint.toString()));
return new Future.immediate(new http.Response(JSON.stringify({
return new Future.value(new http.Response(JSON.stringify({
'access_token': 'new access token',
'token_type': 'bearer'
}), 200, headers: {'content-type': 'application/json'}));
@ -69,7 +69,7 @@ void main() {
expect(request.headers['authorization'],
equals('Bearer new access token'));
return new Future.immediate(new http.Response('good job', 200));
return new Future.value(new http.Response('good job', 200));
});
expect(client.read(requestUri).then((_) {
@ -92,7 +92,7 @@ void main() {
expect(request.headers['authorization'],
equals('Bearer access token'));
return new Future.immediate(new http.Response('good job', 200));
return new Future.value(new http.Response('good job', 200));
});
expect(client.read(requestUri), completion(equals('good job')));
@ -107,7 +107,7 @@ void main() {
httpClient.expectRequest((request) {
expect(request.method, equals('POST'));
expect(request.url.toString(), equals(tokenEndpoint.toString()));
return new Future.immediate(new http.Response(JSON.stringify({
return new Future.value(new http.Response(JSON.stringify({
'access_token': 'new access token',
'token_type': 'bearer'
}), 200, headers: {'content-type': 'application/json'}));
@ -144,7 +144,7 @@ void main() {
var authenticate = 'Bearer error="invalid_token", error_description='
'"Something is terribly wrong."';
return new Future.immediate(new http.Response('bad job', 401,
return new Future.value(new http.Response('bad job', 401,
headers: {'www-authenticate': authenticate}));
});
@ -163,7 +163,7 @@ void main() {
expect(request.headers['authorization'],
equals('Bearer access token'));
return new Future.immediate(new http.Response('bad job', 401));
return new Future.value(new http.Response('bad job', 401));
});
expect(
@ -184,7 +184,7 @@ void main() {
var authenticate = 'Bearer error="invalid_token", error_description='
'"Something is terribly wrong.", ';
return new Future.immediate(new http.Response('bad job', 401,
return new Future.value(new http.Response('bad job', 401,
headers: {'www-authenticate': authenticate}));
});
@ -204,7 +204,7 @@ void main() {
expect(request.headers['authorization'],
equals('Bearer access token'));
return new Future.immediate(new http.Response('bad job', 401,
return new Future.value(new http.Response('bad job', 401,
headers: {'www-authenticate': 'Digest'}));
});
@ -224,7 +224,7 @@ void main() {
expect(request.headers['authorization'],
equals('Bearer access token'));
return new Future.immediate(new http.Response('bad job', 401,
return new Future.value(new http.Response('bad job', 401,
headers: {'www-authenticate': 'Bearer'}));
});

View file

@ -76,7 +76,7 @@ void main() {
"client_secret": "secret"
}));
return new Future.immediate(new http.Response(JSON.stringify({
return new Future.value(new http.Response(JSON.stringify({
'access_token': 'new access token',
'token_type': 'bearer',
'refresh_token': 'new refresh token'
@ -106,7 +106,7 @@ void main() {
"client_secret": "secret"
}));
return new Future.immediate(new http.Response(JSON.stringify({
return new Future.value(new http.Response(JSON.stringify({
'access_token': 'new access token',
'token_type': 'bearer'
}), 200, headers: {'content-type': 'application/json'}));

View file

@ -38,7 +38,7 @@ class ExpectClient extends MockClient {
Future<http.Response> _handleRequest(http.Request request) {
if (_handlers.isEmpty) {
return new Future.immediate(new http.Response('not found', 404));
return new Future.value(new http.Response('not found', 404));
} else {
return _handlers.removeFirst()(request);
}

View file

@ -134,9 +134,9 @@ class ScheduledProcess {
_handleExit(exitCodeCompleter);
return Future.wait([
new Future.of(() => executable),
new Future.sync(() => executable),
awaitObject(arguments),
new Future.of(() => options)
new Future.sync(() => options)
]).then((results) {
executable = results[0];
arguments = results[1];

View file

@ -91,7 +91,7 @@ class ScheduledServer {
/// responsibility to check that the method/path are correct and that it's
/// being run at the correct time.
void _handleRequest(HttpRequest request) {
wrapFuture(new Future.of(() {
wrapFuture(new Future.sync(() {
if (_handlers.isEmpty) {
throw "'$description' received ${request.method} ${request.uri.path} "
"when no more requests were expected.";

View file

@ -46,7 +46,7 @@ class DirectoryDescriptor extends Descriptor {
}
return Future.wait(contents.map((entry) {
return new Future.of(() => entry.validateNow(fullPath))
return new Future.sync(() => entry.validateNow(fullPath))
.then((_) => null)
.catchError((e) => e);
})).then((results) {
@ -57,7 +57,7 @@ class DirectoryDescriptor extends Descriptor {
}
Stream<List<int>> load(String pathToLoad) {
return futureStream(new Future.immediate(null).then((_) {
return futureStream(new Future.value().then((_) {
if (_path.isAbsolute(pathToLoad)) {
throw "Can't load absolute path '$pathToLoad'.";
}

View file

@ -63,7 +63,7 @@ class FileDescriptor extends Descriptor {
});
}
Stream<List<int>> read() => new Future.immediate(contents).asStream();
Stream<List<int>> read() => new Future.value(contents).asStream();
String describe() => name;

View file

@ -19,12 +19,12 @@ class NothingDescriptor extends Descriptor {
NothingDescriptor(String name)
: super(name);
Future create([String parent]) => new Future.immediate(null);
Future create([String parent]) => new Future.value();
Future validate([String parent]) => schedule(() => validateNow(parent),
"validating '$name' doesn't exist");
Future validateNow([String parent]) => new Future.of(() {
Future validateNow([String parent]) => new Future.sync(() {
if (parent == null) parent = defaultRoot;
var fullPath = path.join(parent, name);
if (new File(fullPath).existsSync()) {

View file

@ -110,7 +110,7 @@ class PatternDescriptor extends Descriptor {
return '/${regExp.pattern}/$flags';
}
Future create([String parent]) => new Future.immediateError(
Future create([String parent]) => new Future.error(
new UnsupportedError("Pattern descriptors don't support create()."));
Stream<List<int>> load(String pathToLoad) => errorStream(

View file

@ -64,7 +64,7 @@ class Clock {
void tick([int milliseconds=1]) {
for (var i = 0; i < milliseconds; i++) {
var tickTime = ++_time;
new Future.immediate(null).then((_) => _onTickController.add(tickTime));
new Future.value().then((_) => _onTickController.add(tickTime));
}
}

View file

@ -131,7 +131,7 @@ class Schedule {
/// Sets up this schedule by running [setUp], then runs all the task queues in
/// order. Any errors in [setUp] will cause [onException] to run.
Future run(void setUp()) {
return new Future.immediate(null).then((_) {
return new Future.value().then((_) {
try {
setUp();
} catch (e, stackTrace) {
@ -432,13 +432,13 @@ class TaskQueue {
if (isRunning) {
var task = _schedule.currentTask;
var wrappedFn = () => _schedule.wrapFuture(
new Future.immediate(null).then((_) => fn()));
new Future.value().then((_) => fn()));
if (task == null) return wrappedFn();
return task.runChild(wrappedFn, description);
}
var task = new Task(() {
return new Future.of(fn).catchError((e) {
return new Future.sync(fn).catchError((e) {
throw new ScheduleError.from(_schedule, e);
});
}, description, this);
@ -557,7 +557,7 @@ class TaskQueue {
} else if (_taskFuture != null) {
// Catch errors coming off the old task future, in case it completes after
// timing out.
_taskFuture.substitute(new Future.immediateError(error)).catchError((e) {
_taskFuture.substitute(new Future.error(error)).catchError((e) {
_schedule._signalPostTimeoutError(e);
});
} else {

View file

@ -54,7 +54,7 @@ class Handler {
// between a test failing while waiting for a handler and a test failing
// while executing a handler.
chainToCompleter(schedule(() {
return new Future.of(() {
return new Future.sync(() {
if (request.method != method || request.uri.path != path) {
throw "'${server.description}' expected $method $path, "
"but got ${request.method} ${request.uri.path}.";

View file

@ -79,7 +79,7 @@ class Task {
}
_state = TaskState.RUNNING;
var future = new Future.immediate(null).then((_) => fn())
var future = new Future.value().then((_) => fn())
.whenComplete(() {
if (_childGroup == null || _childGroup.completed) return;
return _childGroup.future;

View file

@ -50,8 +50,8 @@ String prefixLines(String text, {String prefix: '| ', String firstPrefix}) {
/// times. By default, this should pump the event queue enough times to allow
/// any code to run, as long as it's not waiting on some external event.
Future pumpEventQueue([int times=20]) {
if (times == 0) return new Future.immediate(null);
return new Future.immediate(null).then((_) => pumpEventQueue(times - 1));
if (times == 0) return new Future.value();
return new Future.value().then((_) => pumpEventQueue(times - 1));
}
/// Returns whether [iterable1] has the same elements in the same order as
@ -71,7 +71,7 @@ bool orderedIterableEquals(Iterable iterable1, Iterable iterable2) {
// TODO(nweiz): remove this when issue 8731 is fixed.
/// Returns a [Stream] that will immediately emit [error] and then close.
Stream errorStream(error) => new Future.immediateError(error).asStream();
Stream errorStream(error) => new Future.error(error).asStream();
/// Returns a buffered stream that will emit the same values as the stream
/// returned by [future] once [future] completes. If [future] completes to an
@ -163,7 +163,7 @@ Future awaitObject(object) {
if (object is Iterable) {
return Future.wait(object.map(awaitObject).toList());
}
if (object is! Map) return new Future.immediate(object);
if (object is! Map) return new Future.value(object);
var pairs = <Future<Pair>>[];
object.forEach((key, value) {

View file

@ -126,7 +126,7 @@ void main() {
test('test', () {
scheduleSandbox();
expect(d.async(new Future.immediate(d.file('name.txt')))
expect(d.async(new Future.value(d.file('name.txt')))
.load('path').toList(),
throwsA(equals("AsyncDescriptors don't support load().")));
});
@ -136,7 +136,7 @@ void main() {
test('test', () {
scheduleSandbox();
expect(d.async(new Future.immediate(d.file('name.txt'))).read().toList(),
expect(d.async(new Future.value(d.file('name.txt'))).read().toList(),
throwsA(equals("AsyncDescriptors don't support read().")));
});
});

View file

@ -30,14 +30,14 @@ void main() {
expectTestsPass('a scheduled test with a correct asynchronous expectation '
'should pass', () {
test('test', () {
expect(new Future.immediate('foo'), completion(equals('foo')));
expect(new Future.value('foo'), completion(equals('foo')));
});
});
expectTestsFail('a scheduled test with an incorrect asynchronous expectation '
'should fail', () {
test('test', () {
expect(new Future.immediate('foo'), completion(equals('bar')));
expect(new Future.value('foo'), completion(equals('bar')));
});
});
@ -57,7 +57,7 @@ void main() {
'register', () {
test('test', () {
schedule(() =>
expect(new Future.immediate('foo'), completion(equals('foo'))));
expect(new Future.value('foo'), completion(equals('foo'))));
});
});
@ -65,7 +65,7 @@ void main() {
'register', () {
test('test', () {
schedule(() =>
expect(new Future.immediate('foo'), completion(equals('bar'))));
expect(new Future.value('foo'), completion(equals('bar'))));
});
});
@ -88,7 +88,7 @@ void main() {
});
test('asynchronous value', () {
var future = schedule(() => new Future.immediate('value'));
var future = schedule(() => new Future.value('value'));
expect(future, completion(equals('value')));
});
});
@ -107,7 +107,7 @@ void main() {
expectTestsFail('a test failure in a chained future in a scheduled block '
'should be registered', () {
test('test', () {
schedule(() => new Future.immediate('foo')
schedule(() => new Future.value('foo')
.then((v) => expect(v, equals('bar'))));
});
});
@ -115,7 +115,7 @@ void main() {
expectTestsFail('an error in a chained future in a scheduled block should be '
'registered', () {
test('test', () {
schedule(() => new Future.immediate(null).then((_) {
schedule(() => new Future.value().then((_) {
throw 'error';
}));
});

View file

@ -148,7 +148,7 @@ void main() {
var completer = new Completer();
var future = new SubstituteFuture(completer.future);
completer.complete('success');
expect(() => future.substitute(new Future.immediate(null)),
expect(() => future.substitute(new Future.value()),
throwsStateError);
});
}

View file

@ -26,7 +26,7 @@ export 'package:scheduled_test/src/utils.dart';
Future timeout(Future input, int milliseconds, onTimeout()) {
var completer = new Completer();
var timer = new Timer(new Duration(milliseconds: milliseconds), () {
chainToCompleter(new Future.of(onTimeout), completer);
chainToCompleter(new Future.sync(onTimeout), completer);
});
input.then((value) {
if (completer.isCompleted) return;

View file

@ -668,7 +668,7 @@ void _reportTestError(String msg, String trace) {
* (as we do in unitttest_test.dart).
*/
_defer(void callback()) {
(new Future.immediate(null)).then((_) => callback());
(new Future.value()).then((_) => callback());
}
void rerunTests() {

View file

@ -15,7 +15,7 @@ import 'dart:async';
import 'package:unittest/unittest.dart';
Future _defer(void fn()) {
return new Future.of(fn);
return new Future.sync(fn);
}
String buildStatusString(int passed, int failed, int errors,
@ -154,37 +154,37 @@ runTest() {
} else if (testName == 'async setup/teardown test') {
group('good setup/good teardown', () {
setUp(() {
return new Future.immediate(0);
return new Future.value(0);
});
tearDown(() {
return new Future.immediate(0);
return new Future.value(0);
});
test('foo1', (){});
});
group('good setup/bad teardown', () {
setUp(() {
return new Future.immediate(0);
return new Future.value(0);
});
tearDown(() {
return new Future.immediateError("Failed to complete tearDown");
return new Future.error("Failed to complete tearDown");
});
test('foo2', (){});
});
group('bad setup/good teardown', () {
setUp(() {
return new Future.immediateError("Failed to complete setUp");
return new Future.error("Failed to complete setUp");
});
tearDown(() {
return new Future.immediate(0);
return new Future.value(0);
});
test('foo3', (){});
});
group('bad setup/bad teardown', () {
setUp(() {
return new Future.immediateError("Failed to complete setUp");
return new Future.error("Failed to complete setUp");
});
tearDown(() {
return new Future.immediateError("Failed to complete tearDown");
return new Future.error("Failed to complete tearDown");
});
test('foo4', (){});
});

View file

@ -115,11 +115,11 @@ class _NativeSocket extends NativeFieldWrapperClass1 {
var socket = new _NativeSocket.listen();
var result = socket.nativeCreateBindListen(address, port, backlog);
if (result is OSError) {
return new Future.immediateError(
return new Future.error(
new SocketIOException("Failed to create server socket", result));
}
if (port != 0) socket.localPort = port;
return new Future.immediate(socket);
return new Future.value(socket);
}
_NativeSocket.normal() : typeFlags = TYPE_NORMAL_SOCKET {
@ -699,7 +699,7 @@ class _SocketStreamConsumer extends StreamConsumer<List<int>> {
Future<Socket> close() {
socket._consumerDone();
return new Future.immediate(socket);
return new Future.value(socket);
}
void write() {

View file

@ -9,7 +9,7 @@ patch class DeferredLibrary {
// Dummy implementation that should eventually be replaced by real
// implementation.
Future future =
new Future<bool>.immediate(!_loadedLibraries.contains(libraryName));
new Future<bool>.value(!_loadedLibraries.contains(libraryName));
_loadedLibraries.add(libraryName);
return future;
}

View file

@ -105,7 +105,7 @@ Future<String> compile(Uri script,
..close();
code = ''; // Non-null signals success.
}
return new Future.immediate(code);
return new Future.value(code);
}
/**

View file

@ -835,7 +835,7 @@ class _BufferingSendPort extends _BaseSendPort implements SendPort {
SendPort _port;
/**
* Future of the underlying port, so that we can detect when this port can be
* Future.sync the underlying port, so that we can detect when this port can be
* sent on messages.
*/
Future<SendPort> _futurePort;

View file

@ -265,11 +265,9 @@ Future<MirrorSystem> analyzeUri(List<Uri> libraries,
compiler.librariesToAnalyzeWhenRun = libraries;
bool success = compiler.run(null);
if (success && !compilationFailed) {
return new Future<MirrorSystem>.immediate(
new Dart2JsMirrorSystem(compiler));
return new Future<MirrorSystem>.value(new Dart2JsMirrorSystem(compiler));
} else {
return new Future<MirrorSystem>.immediateError(
'Failed to create mirror system.');
return new Future<MirrorSystem>.error('Failed to create mirror system.');
}
}
@ -1626,7 +1624,7 @@ class Dart2JsListConstantMirror extends Dart2JsConstantMirror
Future<InstanceMirror> operator[](int index) {
if (index < 0) throw new RangeError('Negative index');
if (index >= _constant.length) throw new RangeError('Index out of bounds');
return new Future<InstanceMirror>.immediate(
return new Future<InstanceMirror>.value(
_convertConstantToInstanceMirror(mirrors, _constant.entries[index]));
}
}
@ -1663,7 +1661,7 @@ class Dart2JsMapConstantMirror extends Dart2JsConstantMirror
Future<InstanceMirror> operator[](String key) {
int index = _list.indexOf(key);
if (index == -1) return null;
return new Future<InstanceMirror>.immediate(
return new Future<InstanceMirror>.value(
_convertConstantToInstanceMirror(mirrors, _constant.values[index]));
}
}
@ -1709,7 +1707,7 @@ class Dart2JsConstructedConstantMirror extends Dart2JsConstantMirror {
Future<InstanceMirror> getField(String fieldName) {
Constant fieldConstant = _fieldMap[fieldName];
if (fieldConstant != null) {
return new Future<InstanceMirror>.immediate(
return new Future<InstanceMirror>.value(
_convertConstantToInstanceMirror(mirrors, fieldConstant));
}
return super.getField(fieldName);
@ -1745,13 +1743,13 @@ class Dart2JsCommentInstanceMirror implements CommentInstanceMirror {
Future<InstanceMirror> getField(String fieldName) {
if (fieldName == 'isDocComment') {
return new Future.immediate(
return new Future.value(
new Dart2JsBoolConstantMirror.fromBool(mirrors, isDocComment));
} else if (fieldName == 'text') {
return new Future.immediate(
return new Future.value(
new Dart2JsStringConstantMirror.fromString(mirrors, text));
} else if (fieldName == 'trimmedText') {
return new Future.immediate(
return new Future.value(
new Dart2JsStringConstantMirror.fromString(mirrors, trimmedText));
}
// TODO(johnniwinther): Which exception/error should be thrown here?

View file

@ -45,7 +45,7 @@ class SourceFileProvider {
dartCharactersRead += source.length;
sourceFiles[resourceUri.toString()] =
new SourceFile(relativize(cwd, resourceUri, isWindows), source);
return new Future.immediate(source);
return new Future.value(source);
}
}

View file

@ -149,7 +149,7 @@ Future compileScript(int mode, Path outputDir, Path libPath) {
void _compileScript() {
port.receive((message, replyTo) {
new Future.of(() {
new Future.sync(() {
var clientScript = (message['mode'] == MODE_STATIC) ?
'static' : 'live-nav';
var dartPath = pathos.join(message['libPath'], 'lib', '_internal',

View file

@ -84,28 +84,43 @@ part of dart.async;
*/
// TODO(floitsch): document chaining.
abstract class Future<T> {
/**
* Creates a future containing the result of calling [function].
* Creates a future containing the result of calling [computation]
* asynchronously with [runAsync].
*
* The result of computing [:function():] is either a returned value or
* a throw.
* if the result of executing [computation] throws, the returned future is
* completed with the error. If a thrown value is an [AsyncError], it is used
* directly, instead of wrapping this error again in another [AsyncError].
*
* If the returned value is itself a [Future], completion of
* the created future will wait until the returned future completes,
* and will then complete with the same result.
*
* If a value is returned, it becomes the result of the created future.
*/
factory Future(computation()) {
_ThenFuture<dynamic, T> future =
new _ThenFuture<dynamic, T>((_) => computation());
runAsync(() => future._sendValue(null));
return future;
}
/**
* Creates a future containing the result of immediately calling
* [computation].
*
* If calling [function] throws, the created [Future] will be completed
* with an async error containing the thrown value and a captured
* stacktrace.
*
* However, if the result of calling [function] is already an asynchronous
* result, we treat it specially.
* if the result of executing [computation] throws, the returned future is
* completed with the error. If a thrown value is an [AsyncError], it is used
* directly, instead of wrapping this error again in another [AsyncError].
*
* If the returned value is itself a [Future], completion of
* the created future will wait until the returned future completes,
* and will then complete with the same result.
*/
factory Future.of(function()) {
factory Future.sync(computation()) {
try {
var result = function();
var result = computation();
return new _FutureImpl<T>().._setOrChainValue(result);
} catch (error, stackTrace) {
return new _FutureImpl<T>.immediateError(error, stackTrace);
@ -116,18 +131,18 @@ abstract class Future<T> {
* A future whose value is available in the next event-loop iteration.
*
* If [value] is not a [Future], using this constructor is equivalent
* to [:new Future.of(() => value):].
* to [:new Future.sync(() => value):].
*
* See [Completer] to create a Future and complete it later.
*/
factory Future.immediate(T value) => new _FutureImpl<T>.immediate(value);
factory Future.value([T value]) => new _FutureImpl<T>.immediate(value);
/**
* A future that completes with an error in the next event-loop iteration.
*
* See [Completer] to create a Future and complete it later.
*/
factory Future.immediateError(var error, [Object stackTrace]) {
factory Future.error(var error, [Object stackTrace]) {
return new _FutureImpl<T>.immediateError(error, stackTrace);
}
@ -184,7 +199,7 @@ abstract class Future<T> {
Iterator iterator = input.iterator;
void nextElement(_) {
if (iterator.moveNext()) {
new Future.of(() => f(iterator.current))
new Future.sync(() => f(iterator.current))
.then(nextElement, onError: doneSignal._setError);
} else {
doneSignal._setValue(null);

View file

@ -134,7 +134,7 @@ class _FutureImpl<T> implements Future<T> {
});
}
if (remaining == 0) {
return new Future.immediate(const []);
return new Future.value(const []);
}
values = new List(remaining);
completer = new Completer<List>();

View file

@ -143,7 +143,7 @@ class Cursor native "*IDBCursor" {
try {
return _completeRequest($dom_delete());
} catch (e, stacktrace) {
return new Future.immediateError(e, stacktrace);
return new Future.error(e, stacktrace);
}
}
@ -152,7 +152,7 @@ class Cursor native "*IDBCursor" {
try {
return _completeRequest($dom_update(value));
} catch (e, stacktrace) {
return new Future.immediateError(e, stacktrace);
return new Future.error(e, stacktrace);
}
}
@ -367,7 +367,7 @@ class IdbFactory native "*IDBFactory" {
{int version, void onUpgradeNeeded(VersionChangeEvent),
void onBlocked(Event)}) {
if ((version == null) != (onUpgradeNeeded == null)) {
return new Future.immediateError(new ArgumentError(
return new Future.error(new ArgumentError(
'version and onUpgradeNeeded must be specified together'));
}
try {
@ -386,7 +386,7 @@ class IdbFactory native "*IDBFactory" {
}
return _completeRequest(request);
} catch (e, stacktrace) {
return new Future.immediateError(e, stacktrace);
return new Future.error(e, stacktrace);
}
}
@ -401,7 +401,7 @@ class IdbFactory native "*IDBFactory" {
}
return _completeRequest(request);
} catch (e, stacktrace) {
return new Future.immediateError(e, stacktrace);
return new Future.error(e, stacktrace);
}
}
@ -414,7 +414,7 @@ class IdbFactory native "*IDBFactory" {
return _completeRequest(request);
} catch (e, stacktrace) {
return new Future.immediateError(e, stacktrace);
return new Future.error(e, stacktrace);
}
}
@ -492,7 +492,7 @@ class Index native "*IDBIndex" {
}
return _completeRequest(request);
} catch (e, stacktrace) {
return new Future.immediateError(e, stacktrace);
return new Future.error(e, stacktrace);
}
}
@ -503,7 +503,7 @@ class Index native "*IDBIndex" {
return _completeRequest(request);
} catch (e, stacktrace) {
return new Future.immediateError(e, stacktrace);
return new Future.error(e, stacktrace);
}
}
@ -514,7 +514,7 @@ class Index native "*IDBIndex" {
return _completeRequest(request);
} catch (e, stacktrace) {
return new Future.immediateError(e, stacktrace);
return new Future.error(e, stacktrace);
}
}
@ -714,7 +714,7 @@ class ObjectStore native "*IDBObjectStore" {
}
return _completeRequest(request);
} catch (e, stacktrace) {
return new Future.immediateError(e, stacktrace);
return new Future.error(e, stacktrace);
}
}
@ -723,7 +723,7 @@ class ObjectStore native "*IDBObjectStore" {
try {
return _completeRequest($dom_clear());
} catch (e, stacktrace) {
return new Future.immediateError(e, stacktrace);
return new Future.error(e, stacktrace);
}
}
@ -732,7 +732,7 @@ class ObjectStore native "*IDBObjectStore" {
try {
return _completeRequest($dom_delete(key_OR_keyRange));
} catch (e, stacktrace) {
return new Future.immediateError(e, stacktrace);
return new Future.error(e, stacktrace);
}
}
@ -747,7 +747,7 @@ class ObjectStore native "*IDBObjectStore" {
}
return _completeRequest(request);
} catch (e, stacktrace) {
return new Future.immediateError(e, stacktrace);
return new Future.error(e, stacktrace);
}
}
@ -762,7 +762,7 @@ class ObjectStore native "*IDBObjectStore" {
}
return _completeRequest(request);
} catch (e, stacktrace) {
return new Future.immediateError(e, stacktrace);
return new Future.error(e, stacktrace);
}
}
@ -773,7 +773,7 @@ class ObjectStore native "*IDBObjectStore" {
return _completeRequest(request);
} catch (e, stacktrace) {
return new Future.immediateError(e, stacktrace);
return new Future.error(e, stacktrace);
}
}

View file

@ -45,7 +45,7 @@ class Cursor extends NativeFieldWrapperClass1 {
try {
return _completeRequest($dom_delete());
} catch (e, stacktrace) {
return new Future.immediateError(e, stacktrace);
return new Future.error(e, stacktrace);
}
}
@ -54,7 +54,7 @@ class Cursor extends NativeFieldWrapperClass1 {
try {
return _completeRequest($dom_update(value));
} catch (e, stacktrace) {
return new Future.immediateError(e, stacktrace);
return new Future.error(e, stacktrace);
}
}
@ -261,7 +261,7 @@ class IdbFactory extends NativeFieldWrapperClass1 {
{int version, void onUpgradeNeeded(VersionChangeEvent),
void onBlocked(Event)}) {
if ((version == null) != (onUpgradeNeeded == null)) {
return new Future.immediateError(new ArgumentError(
return new Future.error(new ArgumentError(
'version and onUpgradeNeeded must be specified together'));
}
try {
@ -280,7 +280,7 @@ class IdbFactory extends NativeFieldWrapperClass1 {
}
return _completeRequest(request);
} catch (e, stacktrace) {
return new Future.immediateError(e, stacktrace);
return new Future.error(e, stacktrace);
}
}
@ -295,7 +295,7 @@ class IdbFactory extends NativeFieldWrapperClass1 {
}
return _completeRequest(request);
} catch (e, stacktrace) {
return new Future.immediateError(e, stacktrace);
return new Future.error(e, stacktrace);
}
}
@ -308,7 +308,7 @@ class IdbFactory extends NativeFieldWrapperClass1 {
return _completeRequest(request);
} catch (e, stacktrace) {
return new Future.immediateError(e, stacktrace);
return new Future.error(e, stacktrace);
}
}
@ -388,7 +388,7 @@ class Index extends NativeFieldWrapperClass1 {
}
return _completeRequest(request);
} catch (e, stacktrace) {
return new Future.immediateError(e, stacktrace);
return new Future.error(e, stacktrace);
}
}
@ -399,7 +399,7 @@ class Index extends NativeFieldWrapperClass1 {
return _completeRequest(request);
} catch (e, stacktrace) {
return new Future.immediateError(e, stacktrace);
return new Future.error(e, stacktrace);
}
}
@ -410,7 +410,7 @@ class Index extends NativeFieldWrapperClass1 {
return _completeRequest(request);
} catch (e, stacktrace) {
return new Future.immediateError(e, stacktrace);
return new Future.error(e, stacktrace);
}
}
@ -749,7 +749,7 @@ class ObjectStore extends NativeFieldWrapperClass1 {
}
return _completeRequest(request);
} catch (e, stacktrace) {
return new Future.immediateError(e, stacktrace);
return new Future.error(e, stacktrace);
}
}
@ -758,7 +758,7 @@ class ObjectStore extends NativeFieldWrapperClass1 {
try {
return _completeRequest($dom_clear());
} catch (e, stacktrace) {
return new Future.immediateError(e, stacktrace);
return new Future.error(e, stacktrace);
}
}
@ -767,7 +767,7 @@ class ObjectStore extends NativeFieldWrapperClass1 {
try {
return _completeRequest($dom_delete(key_OR_keyRange));
} catch (e, stacktrace) {
return new Future.immediateError(e, stacktrace);
return new Future.error(e, stacktrace);
}
}
@ -782,7 +782,7 @@ class ObjectStore extends NativeFieldWrapperClass1 {
}
return _completeRequest(request);
} catch (e, stacktrace) {
return new Future.immediateError(e, stacktrace);
return new Future.error(e, stacktrace);
}
}
@ -797,7 +797,7 @@ class ObjectStore extends NativeFieldWrapperClass1 {
}
return _completeRequest(request);
} catch (e, stacktrace) {
return new Future.immediateError(e, stacktrace);
return new Future.error(e, stacktrace);
}
}
@ -808,7 +808,7 @@ class ObjectStore extends NativeFieldWrapperClass1 {
return _completeRequest(request);
} catch (e, stacktrace) {
return new Future.immediateError(e, stacktrace);
return new Future.error(e, stacktrace);
}
}

View file

@ -64,14 +64,14 @@ class _Directory implements Directory {
} else {
future = future.then((index) {
if (index != notFound) {
return new Future.immediate(index);
return new Future.value(index);
}
return dirsToCreate[i].exists().then((e) => e ? i : notFound);
});
}
}
if (future == null) {
return new Future.immediate(notFound);
return new Future.value(notFound);
} else {
return future;
}
@ -100,7 +100,7 @@ class _Directory implements Directory {
}
}
if (future == null) {
return new Future.immediate(this);
return new Future.value(this);
} else {
return future.then((_) => this);
}

View file

@ -63,7 +63,7 @@ class _FileStream extends Stream<List<int>> {
_openedFile = null;
return closeFuture;
} else {
return new Future.immediate(null);
return new Future.value();
}
}
@ -111,7 +111,7 @@ class _FileStream extends Stream<List<int>> {
if (_path != null) {
openFuture = new File(_path).open(mode: FileMode.READ);
} else {
openFuture = new Future.immediate(_File._openStdioSync(0));
openFuture = new Future.value(_File._openStdioSync(0));
}
openFuture
.then((RandomAccessFile opened) {
@ -146,7 +146,7 @@ class _FileStreamConsumer extends StreamConsumer<List<int>> {
_FileStreamConsumer.fromStdio(int fd) {
assert(1 <= fd && fd <= 2);
_openFuture = new Future.immediate(_File._openStdioSync(fd));
_openFuture = new Future.value(_File._openStdioSync(fd));
}
Future<File> addStream(Stream<List<int>> stream) {
@ -545,7 +545,7 @@ class _File extends _FileBase implements File {
sink.close();
return sink.done.then((_) => this);;
} catch (e) {
return new Future.immediateError(e);
return new Future.error(e);
}
}
@ -704,7 +704,7 @@ class _RandomAccessFile extends _FileBase implements RandomAccessFile {
if (buffer is !List ||
(start != null && start is !int) ||
(end != null && end is !int)) {
return new Future.immediateError(new FileIOException(
return new Future.error(new FileIOException(
"Invalid arguments to readInto for file '$_path'"));
};
Completer<int> completer = new Completer<int>();
@ -805,7 +805,7 @@ class _RandomAccessFile extends _FileBase implements RandomAccessFile {
if ((buffer is !List && buffer is !ByteData) ||
(start != null && start is !int) ||
(end != null && end is !int)) {
return new Future.immediateError(new FileIOException(
return new Future.error(new FileIOException(
"Invalid arguments to writeFrom for file '$_path'"));
}
Completer<RandomAccessFile> completer = new Completer<RandomAccessFile>();
@ -816,7 +816,7 @@ class _RandomAccessFile extends _FileBase implements RandomAccessFile {
try {
result = _ensureFastAndSerializableBuffer(buffer, start, end);
} catch (e) {
return new Future.immediateError(e);
return new Future.error(e);
}
List request = new List(5);

View file

@ -215,7 +215,7 @@ class _HttpClientResponse
if (followLoops != true) {
for (var redirect in redirects) {
if (redirect.location == url) {
return new Future.immediateError(
return new Future.error(
new RedirectLoopException(redirects));
}
}
@ -282,7 +282,7 @@ class _HttpClientResponse
// Fall through to here to perform normal response handling if
// there is no sensible authorization handling.
return new Future.immediate(this);
return new Future.value(this);
}
List<String> challenge = headers[HttpHeaders.WWW_AUTHENTICATE];
@ -324,7 +324,7 @@ class _HttpClientResponse
}
// No credentials were found and the callback was not set.
return new Future.immediate(this);
return new Future.value(this);
}
Future<HttpClientResponse> _authenticateProxy() {
@ -371,7 +371,7 @@ class _HttpClientResponse
}
// No credentials were found and the callback was not set.
return new Future.immediate(this);
return new Future.value(this);
}
}
@ -509,7 +509,7 @@ abstract class _HttpOutboundMessage<T> implements IOSink {
headers.contentLength = 0;
} else if (!_ignoreBody && headers.contentLength > 0) {
_headersSink.close().catchError((_) {});
return new Future.immediateError(new HttpException(
return new Future.error(new HttpException(
"No content while contentLength was specified to be greater "
" than 0: ${headers.contentLength}."));
}
@ -862,7 +862,7 @@ class _HttpClientRequest extends _HttpOutboundMessage<HttpClientResponse>
} else {
// End with exception, too many redirects.
future = response.fold(null, (x, y) {})
.then((_) => new Future.immediateError(
.then((_) => new Future.error(
new RedirectLimitExceededException(response.redirects)));
}
} else if (response._shouldAuthenticateProxy) {
@ -870,7 +870,7 @@ class _HttpClientRequest extends _HttpOutboundMessage<HttpClientResponse>
} else if (response._shouldAuthenticate) {
future = response._authenticate();
} else {
future = new Future<HttpClientResponse>.immediate(response);
future = new Future<HttpClientResponse>.value(response);
}
future.then(
(v) => _responseCompleter.complete(v),
@ -1018,7 +1018,7 @@ class _HttpOutgoing implements StreamConsumer<List<int>> {
Future close() {
_doneCompleter.complete(_consumer);
return new Future.immediate(null);
return new Future.value();
}
Future get done => _doneCompleter.future;
@ -1294,7 +1294,7 @@ class _HttpClient implements HttpClient {
try {
proxyConf = new _ProxyConfiguration(_findProxy(uri));
} catch (error, stackTrace) {
return new Future.immediateError(error, stackTrace);
return new Future.error(error, stackTrace);
}
}
return _getConnection(uri.domain, port, proxyConf, isSecure)
@ -1360,7 +1360,7 @@ class _HttpClient implements HttpClient {
Iterator<_Proxy> proxies = proxyConf.proxies.iterator;
Future<_ConnnectionInfo> connect(error) {
if (!proxies.moveNext()) return new Future.immediateError(error);
if (!proxies.moveNext()) return new Future.error(error);
_Proxy proxy = proxies.current;
String host = proxy.isDirect ? uriHost: proxy.host;
int port = proxy.isDirect ? uriPort: proxy.port;
@ -1372,7 +1372,7 @@ class _HttpClient implements HttpClient {
_idleConnections.remove(key);
}
_activeConnections.add(connection);
return new Future.immediate(new _ConnnectionInfo(connection, proxy));
return new Future.value(new _ConnnectionInfo(connection, proxy));
}
return (isSecure && proxy.isDirect
? SecureSocket.connect(host,

View file

@ -231,7 +231,7 @@ class _HttpParser
Future<_HttpParser> close() {
_onDone();
return new Future.immediate(this);
return new Future.value(this);
}
// From RFC 2616.

View file

@ -130,7 +130,7 @@ class _Link extends FileSystemEntity implements Link {
Future<bool> exists() {
// TODO(whesse): Replace with asynchronous version.
return new Future.immediate(existsSync());
return new Future.value(existsSync());
}
bool existsSync() => FileSystemEntity.isLinkSync(path);
@ -205,7 +205,7 @@ class _Link extends FileSystemEntity implements Link {
Future<String> target() {
// TODO(whesse): Replace with asynchronous version.
return new Future.of(targetSync);
return new Future.sync(targetSync);
}
String targetSync() {

View file

@ -263,7 +263,7 @@ class _RawSecureSocket extends Stream<RawSocketEvent>
if (socket == null) {
futureSocket = RawSocket.connect(host, requestedPort);
} else {
futureSocket = new Future.immediate(socket);
futureSocket = new Future.value(socket);
}
futureSocket.then((rawSocket) {
rawSocket.writeEventsEnabled = false;

View file

@ -385,7 +385,7 @@ class _WebSocketTransformerImpl implements WebSocketTransformer {
response.contentLength = 0;
response.close();
});
return new Future.immediateError(
return new Future.error(
new WebSocketException("Invalid WebSocket upgrade request"));
}

View file

@ -222,6 +222,17 @@ LibTest/core/List/insertRange_A05_t01: Fail # insertRange is removed. Issue 403
LibTest/core/List/insertRange_A06_t01: Fail # insertRange is removed. Issue 403
LibTest/core/List/insertRange_A07_t01: Fail # insertRange is removed. Issue 403
LibTest/async/Future/catchError_A01_t01: Fail # Future constructors have changed # issues 408
LibTest/async/Future/Future.immediateError_A01_t01: Fail # Future constructors have changed # issues 408
LibTest/async/Future/asStream_A01_t01: Fail # Future constructors have changed # issue 408
LibTest/async/Future/Future.immediate_A01_t01: Fail # Future constructors have changed # issue 408
LibTest/async/Future/then_A01_t03: Fail # Future constructors have changed # issue 408
LibTest/async/Future/catchError_A01_t01: Fail # Future constructors have changed # issue 408
LibTest/async/Future/forEach_A03_t01: Fail # Future constructors have changed # issue 408
LibTest/async/Future/asStream_A01_t02: Fail # Future constructors have changed # issue 408
LibTest/async/Future/Future.immediateError_A01_t01: Fail # Future constructors have changed # issue 408
LibTest/async/Future/asStream_A02_t01: Fail # Future constructors have changed # issue 408
Language/11_Expressions/06_Lists_A06_t01: Fail # Issue 397
LibTest/core/Iterable/where_A01_t07: Fail # Issue 397
LibTest/core/List/addLast_A01_t01: Fail # Issue 397

View file

@ -531,6 +531,17 @@ LibTest/core/List/getRange_A01_t01: Fail # getRange now takes end-argument and r
LibTest/core/List/getRange_A04_t01: Fail # getRange now takes end-argument and returns Iterable. Issue 399
LibTest/core/List/operator_subscript_A01_t02: Fail # getRange now takes end-argument and returns Iterable. Issue 399
LibTest/async/Future/catchError_A01_t01: Fail # Future constructors have changed # issues 408
LibTest/async/Future/Future.immediateError_A01_t01: Fail # Future constructors have changed # issues 408
LibTest/async/Future/asStream_A01_t01: Fail # Future constructors have changed # issue 408
LibTest/async/Future/Future.immediate_A01_t01: Fail # Future constructors have changed # issue 408
LibTest/async/Future/then_A01_t03: Fail # Future constructors have changed # issue 408
LibTest/async/Future/catchError_A01_t01: Fail # Future constructors have changed # issue 408
LibTest/async/Future/forEach_A03_t01: Fail # Future constructors have changed # issue 408
LibTest/async/Future/asStream_A01_t02: Fail # Future constructors have changed # issue 408
LibTest/async/Future/Future.immediateError_A01_t01: Fail # Future constructors have changed # issue 408
LibTest/async/Future/asStream_A02_t01: Fail # Future constructors have changed # issue 408
LibTest/core/Iterable/any_A01_t04: Fail # setRange now takes end-argument. Issue 402
LibTest/core/List/setRange_A01_t02: Fail # setRange now takes end-argument. Issue 402
LibTest/core/List/setRange_A02_t01: Fail # setRange now takes end-argument. Issue 402

View file

@ -512,6 +512,17 @@ LibTest/core/List/getRange_A01_t01: Fail # getRange now takes end-argument and r
LibTest/core/List/getRange_A04_t01: Fail # getRange now takes end-argument and returns Iterable. Issue 399
LibTest/core/List/operator_subscript_A01_t02: Fail # getRange now takes end-argument and returns Iterable. Issue 399
LibTest/async/Future/catchError_A01_t01: Fail # Future constructors have changed # issues 408
LibTest/async/Future/Future.immediateError_A01_t01: Fail # Future constructors have changed # issues 408
LibTest/async/Future/asStream_A01_t01: Fail # Future constructors have changed # issue 408
LibTest/async/Future/Future.immediate_A01_t01: Fail # Future constructors have changed # issue 408
LibTest/async/Future/then_A01_t03: Fail # Future constructors have changed # issue 408
LibTest/async/Future/catchError_A01_t01: Fail # Future constructors have changed # issue 408
LibTest/async/Future/forEach_A03_t01: Fail # Future constructors have changed # issue 408
LibTest/async/Future/asStream_A01_t02: Fail # Future constructors have changed # issue 408
LibTest/async/Future/Future.immediateError_A01_t01: Fail # Future constructors have changed # issue 408
LibTest/async/Future/asStream_A02_t01: Fail # Future constructors have changed # issue 408
LibTest/core/Iterable/any_A01_t04: Fail # setRange now takes end-argument. Issue 402
LibTest/core/List/setRange_A01_t02: Fail # setRange now takes end-argument. Issue 402
LibTest/core/List/setRange_A02_t01: Fail # setRange now takes end-argument. Issue 402

View file

@ -214,6 +214,16 @@ LibTest/core/Date/operator_equality_A01_t01: Fail # DateTime.== now looks at tim
Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A03_t03: Fail # issue 6085
LibTest/async/Future/catchError_A01_t01: Fail # Future constructors have changed # issues 408
LibTest/async/Future/Future.immediateError_A01_t01: Fail # Future constructors have changed # issues 408
LibTest/async/Future/asStream_A01_t01: Fail # Future constructors have changed # issue 408
LibTest/async/Future/Future.immediate_A01_t01: Fail # Future constructors have changed # issue 408
LibTest/async/Future/then_A01_t03: Fail # Future constructors have changed # issue 408
LibTest/async/Future/catchError_A01_t01: Fail # Future constructors have changed # issue 408
LibTest/async/Future/forEach_A03_t01: Fail # Future constructors have changed # issue 408
LibTest/async/Future/asStream_A01_t02: Fail # Future constructors have changed # issue 408
LibTest/async/Future/Future.immediateError_A01_t01: Fail # Future constructors have changed # issue 408
LibTest/async/Future/asStream_A02_t01: Fail # Future constructors have changed # issue 408
[ $compiler == none && $runtime == vm && $checked ]
Language/12_Statements/09_Switch_A05_t01: Fail # TODO(vm-team): Please triage this failure.

View file

@ -19,7 +19,7 @@ runCompiler(String main, List<String> options,
Future<String> localProvider(Uri uri) {
if (uri.scheme != 'main') return dummy.provider(uri);
return new Future<String>.immediate(main);
return new Future<String>.value(main);
}
void localHandler(Uri uri, int begin, int end,

View file

@ -92,25 +92,25 @@ testDart2DartWithLibrary(
final libUri = fileUri('mylib.dart');
provider(uri) {
if (uri == scriptUri) return new Future.immediate(srcMain);
if (uri == scriptUri) return new Future.value(srcMain);
if (uri.toString() == libUri.toString()) {
return new Future.immediate(srcLibrary);
return new Future.value(srcLibrary);
}
if (uri.path.endsWith('/core.dart')) {
return new Future.immediate(coreLib);
return new Future.value(coreLib);
} else if (uri.path.endsWith('/io.dart')) {
return new Future.immediate(ioLib);
return new Future.value(ioLib);
} else if (uri.path.endsWith('/js_helper.dart')) {
return new Future.immediate(helperLib);
return new Future.value(helperLib);
} else if (uri.path.endsWith('/html_dart2js.dart')) {
// TODO(smok): The file should change to html_dartium at some point.
return new Future.immediate(htmlLib);
return new Future.value(htmlLib);
} else if (uri.path.endsWith('/foreign_helper.dart')) {
return new Future.immediate(foreignLib);
return new Future.value(foreignLib);
} else if (uri.path.endsWith('/isolate_helper.dart')) {
return new Future.immediate(isolateHelperLib);
return new Future.value(isolateHelperLib);
}
return new Future.immediate('');
return new Future.value('');
}
handler(uri, begin, end, message, kind) {

View file

@ -32,10 +32,10 @@ class MemorySourceFileProvider extends SourceFileProvider {
return super.readStringFromUri(resourceUri);
}
String source = MEMORY_SOURCE_FILES[resourceUri.path];
// TODO(ahe): Return new Future.immediateError(...) ?
// TODO(ahe): Return new Future.error(...) ?
if (source == null) throw 'No such file $resourceUri';
String resourceName = '$resourceUri';
this.sourceFiles[resourceName] = new SourceFile(resourceName, source);
return new Future.immediate(source);
return new Future.value(source);
}
}

View file

@ -99,7 +99,7 @@ main() {
return fs.root.createDirectory(
'directory3')
.then((DirectoryEntry dir) {
return new Future.immediate(new FileAndDir(file, dir));
return new Future.value(new FileAndDir(file, dir));
});
});
}

View file

@ -110,7 +110,7 @@ main() {
test('Web Database', () {
// Skip if not supported.
if (!SqlDatabase.supported) {
return new Future.immediate(null);
return new Future.value();
}
final tableName = 'test_table';

View file

@ -22,7 +22,7 @@ class A {
foo(obj) {
var a = obj.foo;
return new Future.immediate(null).then((val) { });
return new Future.value().then((val) { });
}
main() {

View file

@ -0,0 +1,38 @@
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
library future_test;
import "package:expect/expect.dart";
import 'dart:async';
import 'dart:isolate';
main() {
compare(func) {
// Compare the results of the following two futures.
Future f1 = new Future(func);
Future f2 = new Future.value().then((_) => func());
f2.catchError((_){}); // I'll get the error later.
f1.then((v1) { f2.then((v2) { Expect.equals(v1, v2); }); },
onError: (e1) {
f2.then((_) { Expect.fail("Expected error"); },
onError: (e2) {
Expect.equals(e1, e2);
});
});
}
Future val = new Future.value(42);
Future err1 = new Future.error("Error")..catchError((_){});
compare(() => 42);
compare(() => val);
compare(() { throw "Flif"; });
compare(() => err1);
bool hasExecuted = false;
compare(() {
hasExecuted = true;
return 499;
});
Expect.isFalse(hasExecuted);
}

View file

@ -12,7 +12,7 @@ testImmediateError() {
// An open ReceivePort keeps the VM running. If the error-handler below is not
// executed then the test will fail with a timeout.
var port = new ReceivePort();
var future = new Future.immediateError("error");
var future = new Future.error("error");
future.catchError((error) {
port.close();
Expect.equals(error, "error");

View file

@ -10,8 +10,8 @@ import 'dart:isolate';
const Duration MS = const Duration(milliseconds: 1);
testImmediate() {
final future = new Future<String>.immediate("42");
testValue() {
final future = new Future<String>.value("42");
var port = new ReceivePort();
future.then((x) {
Expect.equals("42", x);
@ -19,11 +19,11 @@ testImmediate() {
});
}
testOf() {
testSync() {
compare(func) {
// Compare the results of the following two futures.
Future f1 = new Future.of(func);
Future f2 = new Future.immediate(null).then((_) => func());
Future f1 = new Future.sync(func);
Future f2 = new Future.value().then((_) => func());
f2.catchError((_){}); // I'll get the error later.
f1.then((v1) { f2.then((v2) { Expect.equals(v1, v2); }); },
onError: (e1) {
@ -33,17 +33,23 @@ testOf() {
});
});
}
Future val = new Future.immediate(42);
Future err1 = new Future.immediateError("Error")..catchError((_){});
Future val = new Future.value(42);
Future err1 = new Future.error("Error")..catchError((_){});
try {
throw new List(0);
} catch (e, st) {
Future err2 = new Future.immediateError(e, st)..catchError((_){});
Future err2 = new Future.error(e, st)..catchError((_){});
}
compare(() => 42);
compare(() => val);
compare(() { throw "Flif"; });
compare(() => err1);
bool hasExecuted = false;
compare(() {
hasExecuted = true;
return 499;
});
Expect.isTrue(hasExecuted);
}
testNeverComplete() {
@ -242,7 +248,7 @@ testFutureAsStreamCompleteBefore() {
testFutureAsStreamCompleteImmediate() {
bool gotValue = false;
var port = new ReceivePort();
new Future.immediate("value").asStream().listen(
new Future.value("value").asStream().listen(
(data) {
Expect.isFalse(gotValue);
gotValue = true;
@ -564,7 +570,7 @@ testChainedFutureValue() {
final future = completer.future;
var port = new ReceivePort();
future.then((v) => new Future.immediate(v * 2))
future.then((v) => new Future.value(v * 2))
.then((v) {
Expect.equals(42, v);
port.close();
@ -600,7 +606,7 @@ testChainedFutureError() {
final future = completer.future;
var port = new ReceivePort();
future.then((v) => new Future.immediateError("Fehler"))
future.then((v) => new Future.error("Fehler"))
.then((v) { Expect.fail("unreachable!"); }, onError: (error) {
Expect.equals("Fehler", error);
port.close();
@ -609,8 +615,8 @@ testChainedFutureError() {
}
main() {
testImmediate();
testOf();
testValue();
testSync();
testNeverComplete();
testComplete();

View file

@ -84,7 +84,7 @@ Future testForEach() {
var seen = <int>[];
return Future.forEach([1, 2, 3, 4, 5], (n) {
seen.add(n);
return new Future.immediate(null);
return new Future.value();
}).then((_) => Expect.listEquals([1, 2, 3, 4, 5], seen));
}
@ -93,7 +93,7 @@ Future testForEachWithException() {
return Future.forEach([1, 2, 3, 4, 5], (n) {
if (n == 4) throw 'correct exception';
seen.add(n);
return new Future.immediate(null);
return new Future.value();
}).then((_) {
throw 'incorrect exception';
}).catchError((error) {

View file

@ -58,7 +58,7 @@ class SlowConsumer extends StreamConsumer {
}
Future close() {
return new Future.immediate(finalCount);
return new Future.value(finalCount);
}
}

View file

@ -58,7 +58,7 @@ class SlowConsumer extends StreamConsumer {
}
Future close() {
return new Future.immediate(finalCount);
return new Future.value(finalCount);
}
}

View file

@ -15,7 +15,7 @@ const int MB = KB * KB;
const int GB = KB * KB * KB;
class SlowConsumer extends StreamConsumer {
var current = new Future.immediate(0);
var current = new Future.value(0);
final int bytesPerSecond;
int finalCount;
@ -55,7 +55,7 @@ class SlowConsumer extends StreamConsumer {
}
Future close() {
return new Future.immediate(finalCount);
return new Future.value(finalCount);
}
}

View file

@ -51,7 +51,7 @@ fuzzAsyncMethods() {
futures.add(doItAsync(() {
return d.exists().then((res) {
if (!res) return d.delete(recursive: true);
return new Future.immediate(true);
return new Future.value(true);
});
}));
typeMapping.forEach((k2, v2) {

View file

@ -7,7 +7,7 @@ import "dart:async";
import "dart:io";
Future throws(callback()) {
return new Future.immediate(null)
return new Future.value()
.then((_) => callback())
.then((_) { throw "Expected error"; },
onError: (_) {});

View file

@ -220,7 +220,7 @@ void testLocalServerBasic() {
Uri.parse("http://127.0.0.1/basic"),
"test",
new HttpClientBasicCredentials("test", "test"));
return new Future.immediate(true);
return new Future.value(true);
};
HttpClientConnection conn =
@ -243,7 +243,7 @@ void testLocalServerDigest() {
Uri.parse("http://127.0.0.1/digest"),
"test",
new HttpClientDigestCredentials("test", "test"));
return new Future.immediate(true);
return new Future.value(true);
};
HttpClientConnection conn =

View file

@ -494,7 +494,7 @@ void testProxyAuthenticate() {
proxyServer.port,
"realm",
new HttpClientBasicCredentials("test", "test"));
return new Future.immediate(true);
return new Future.value(true);
};
for (int i = 0; i < loopCount; i++) {

View file

@ -34,7 +34,7 @@ class TestConsumer implements StreamConsumer {
}
Future close() {
return new Future.immediate(null)
return new Future.value()
.then((_) {
if (closePort != null) closePort.close();
Expect.listEquals(expected, received);

View file

@ -4,6 +4,10 @@
package/invalid_uri_test: Fail, OK # Fails intentionally
[ $runtime == vm ]
io/test_runner_test: Fail # Fails because checked-in dart executable is not up to date.
io/skipping_dart2js_compilations_test: Fail # Fails because checked-in dart executable is not up to date.
[ $runtime == vm && ( $system == windows ) ]
io/raw_socket_test: Pass, Fail # Issue 8901
io/http_shutdown_test: Pass, Fail # Issue 9101

View file

@ -64,7 +64,7 @@ Future<bool> convert(Path libPath, Path jsonPath) {
}
Future<bool> _exportJsonToFile(Map convertedJson, Path jsonPath) {
return new Future.of(() {
return new Future.sync(() {
final jsonFile = new File.fromPath(jsonPath);
var writeJson = prettySerialize(convertedJson);

View file

@ -10,7 +10,7 @@ $(ANNOTATIONS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
try {
return _completeRequest($dom_delete());
} catch (e, stacktrace) {
return new Future.immediateError(e, stacktrace);
return new Future.error(e, stacktrace);
}
}
@ -19,7 +19,7 @@ $(ANNOTATIONS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
try {
return _completeRequest($dom_update(value));
} catch (e, stacktrace) {
return new Future.immediateError(e, stacktrace);
return new Future.error(e, stacktrace);
}
}

View file

@ -24,7 +24,7 @@ $endif
{int version, void onUpgradeNeeded(VersionChangeEvent),
void onBlocked(Event)}) {
if ((version == null) != (onUpgradeNeeded == null)) {
return new Future.immediateError(new ArgumentError(
return new Future.error(new ArgumentError(
'version and onUpgradeNeeded must be specified together'));
}
try {
@ -43,7 +43,7 @@ $endif
}
return _completeRequest(request);
} catch (e, stacktrace) {
return new Future.immediateError(e, stacktrace);
return new Future.error(e, stacktrace);
}
}
@ -58,7 +58,7 @@ $endif
}
return _completeRequest(request);
} catch (e, stacktrace) {
return new Future.immediateError(e, stacktrace);
return new Future.error(e, stacktrace);
}
}
@ -71,7 +71,7 @@ $endif
return _completeRequest(request);
} catch (e, stacktrace) {
return new Future.immediateError(e, stacktrace);
return new Future.error(e, stacktrace);
}
}

View file

@ -16,7 +16,7 @@ $(ANNOTATIONS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
}
return _completeRequest(request);
} catch (e, stacktrace) {
return new Future.immediateError(e, stacktrace);
return new Future.error(e, stacktrace);
}
}
@ -27,7 +27,7 @@ $(ANNOTATIONS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
return _completeRequest(request);
} catch (e, stacktrace) {
return new Future.immediateError(e, stacktrace);
return new Future.error(e, stacktrace);
}
}
@ -38,7 +38,7 @@ $(ANNOTATIONS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
return _completeRequest(request);
} catch (e, stacktrace) {
return new Future.immediateError(e, stacktrace);
return new Future.error(e, stacktrace);
}
}

View file

@ -17,7 +17,7 @@ $(ANNOTATIONS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
}
return _completeRequest(request);
} catch (e, stacktrace) {
return new Future.immediateError(e, stacktrace);
return new Future.error(e, stacktrace);
}
}
@ -26,7 +26,7 @@ $(ANNOTATIONS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
try {
return _completeRequest($dom_clear());
} catch (e, stacktrace) {
return new Future.immediateError(e, stacktrace);
return new Future.error(e, stacktrace);
}
}
@ -35,7 +35,7 @@ $(ANNOTATIONS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
try {
return _completeRequest($dom_delete(key_OR_keyRange));
} catch (e, stacktrace) {
return new Future.immediateError(e, stacktrace);
return new Future.error(e, stacktrace);
}
}
@ -50,7 +50,7 @@ $(ANNOTATIONS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
}
return _completeRequest(request);
} catch (e, stacktrace) {
return new Future.immediateError(e, stacktrace);
return new Future.error(e, stacktrace);
}
}
@ -65,7 +65,7 @@ $(ANNOTATIONS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
}
return _completeRequest(request);
} catch (e, stacktrace) {
return new Future.immediateError(e, stacktrace);
return new Future.error(e, stacktrace);
}
}
@ -76,7 +76,7 @@ $(ANNOTATIONS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
return _completeRequest(request);
} catch (e, stacktrace) {
return new Future.immediateError(e, stacktrace);
return new Future.error(e, stacktrace);
}
}

View file

@ -149,7 +149,7 @@ class Version {
Future<int> getRevision() {
if (repositoryType == RepositoryType.UNKNOWN) {
return new Future.immediate(0);
return new Future.value(0);
}
var isSvn = repositoryType == RepositoryType.SVN;
var command = isSvn ? "svn" : "git";

View file

@ -59,7 +59,7 @@ class UploaderCommand extends PubCommand {
exit(exit_codes.USAGE);
}
return new Future.of(() {
return new Future.sync(() {
var package = commandOptions['package'];
if (package != null) return package;
return new Entrypoint(path.current, cache).root.name;

View file

@ -71,7 +71,7 @@ class Entrypoint {
if (pendingOrCompleted != null) return pendingOrCompleted;
var packageDir = path.join(packagesDir, id.name);
var future = new Future.of(() {
var future = new Future.sync(() {
ensureDir(path.dirname(packageDir));
if (entryExists(packageDir)) {
@ -102,7 +102,7 @@ class Entrypoint {
/// directory, respecting the [LockFile] if present. Returns a [Future] that
/// completes when all dependencies are installed.
Future installDependencies() {
return new Future.of(() {
return new Future.sync(() {
return resolveVersions(cache.sources, root, loadLockFile());
}).then(_installDependencies);
}
@ -119,7 +119,7 @@ class Entrypoint {
/// other dependencies as specified by the [LockFile] if possible. Returns a
/// [Future] that completes when all dependencies are installed.
Future updateDependencies(List<String> dependencies) {
return new Future.of(() {
return new Future.sync(() {
var solver = new VersionSolver(cache.sources, root, loadLockFile());
for (var dependency in dependencies) {
solver.useLatestVersion(dependency);
@ -131,10 +131,10 @@ class Entrypoint {
/// Removes the old packages directory, installs all dependencies listed in
/// [packageVersions], and writes a [LockFile].
Future _installDependencies(List<PackageId> packageVersions) {
return new Future.of(() {
return new Future.sync(() {
cleanDir(packagesDir);
return Future.wait(packageVersions.map((id) {
if (id.isRoot) return new Future.immediate(id);
if (id.isRoot) return new Future.value(id);
return install(id);
}).toList());
}).then((ids) {
@ -148,13 +148,13 @@ class Entrypoint {
/// reached packages. This should only be called after the lockfile has been
/// successfully generated.
Future<List<Pubspec>> walkDependencies() {
return new Future.of(() {
return new Future.sync(() {
var lockFile = loadLockFile();
var group = new FutureGroup<Pubspec>();
var visited = new Set<String>();
// Include the root package in the results.
group.add(new Future.immediate(root.pubspec));
group.add(new Future.value(root.pubspec));
visitPackage(Pubspec pubspec) {
for (var ref in pubspec.dependencies) {
@ -166,7 +166,7 @@ class Entrypoint {
visited.add(ref.name);
var future;
if (ref.name == root.name) {
future = new Future<Pubspec>.immediate(root.pubspec);
future = new Future<Pubspec>.value(root.pubspec);
} else {
future = cache.describe(id);
}

View file

@ -269,7 +269,7 @@ class _ErrorGroupStream extends Stream {
if (_isDone) return;
_subscription.cancel();
// Call these asynchronously to work around issue 7913.
new Future.immediate(null).then((_) {
new Future.value().then((_) {
_controller.addError(e);
_controller.close();
});

View file

@ -13,7 +13,7 @@ import 'utils.dart';
/// Tests whether or not the git command-line app is available for use.
Future<bool> get isInstalled {
if (_isGitInstalledCache != null) {
return new Future.immediate(_isGitInstalledCache);
return new Future.value(_isGitInstalledCache);
}
return _gitCommand.then((git) => git != null);
@ -44,7 +44,7 @@ String _gitCommandCache;
/// found on the user's PATH.
Future<String> get _gitCommand {
if (_gitCommandCache != null) {
return new Future.immediate(_gitCommandCache);
return new Future.value(_gitCommandCache);
}
return _tryGitCommand("git").then((success) {

View file

@ -123,7 +123,7 @@ class GitSource extends Source {
/// future that completes once this is finished and throws an exception if it
/// fails.
Future _ensureRepoCache(PackageId id) {
return new Future.of(() {
return new Future.sync(() {
var path = _repoCachePath(id);
if (!entryExists(path)) return _clone(_getUrl(id), path, mirror: true);
return git.run(["fetch"], workingDir: path).then((result) => null);
@ -143,7 +143,7 @@ class GitSource extends Source {
/// the working tree, but instead makes the repository a local mirror of the
/// remote repository. See the manpage for `git clone` for more information.
Future _clone(String from, String to, {bool mirror: false}) {
return new Future.of(() {
return new Future.sync(() {
// Git on Windows does not seem to automatically create the destination
// directory.
ensureDir(to);

View file

@ -63,7 +63,7 @@ class HostedSource extends Source {
/// Downloads a package from the site and unpacks it.
Future<bool> install(PackageId id, String destPath) {
return new Future.of(() {
return new Future.sync(() {
var url = _makeVersionUrl(id, (server, package, version) =>
"$server/packages/$package/versions/$version.tar.gz");
log.io("Install package from $url.");
@ -98,7 +98,7 @@ class HostedSource extends Source {
return '%${match[0].codeUnitAt(0)}';
});
return new Future.immediate(
return new Future.value(
path.join(systemCacheRoot, urlDir, "${parsed.first}-${id.version}"));
}

View file

@ -550,9 +550,9 @@ Future timeout(Future input, int milliseconds, String description) {
/// Returns a future that completes to the value that the future returned from
/// [fn] completes to.
Future withTempDir(Future fn(String path)) {
return new Future.of(() {
return new Future.sync(() {
var tempDir = createTempDir();
return new Future.of(() => fn(tempDir))
return new Future.sync(() => fn(tempDir))
.whenComplete(() => deleteEntry(tempDir));
});
}

View file

@ -104,7 +104,7 @@ Future withClient(SystemCache cache, Future fn(Client client)) {
/// Gets a new OAuth2 client. If saved credentials are available, those are
/// used; otherwise, the user is prompted to authorize the pub client.
Future<Client> _getClient(SystemCache cache) {
return new Future.of(() {
return new Future.sync(() {
var credentials = _loadCredentials(cache);
if (credentials == null) return _authorize();

View file

@ -25,7 +25,7 @@ class PathSource extends Source {
final shouldCache = false;
Future<Pubspec> describe(PackageId id) {
return new Future.of(() {
return new Future.sync(() {
_validatePath(id.name, id.description);
return new Pubspec.load(id.name, id.description["path"],
systemCache.sources);
@ -40,7 +40,7 @@ class PathSource extends Source {
}
Future<bool> install(PackageId id, String destination) {
return new Future.of(() {
return new Future.sync(() {
try {
_validatePath(id.name, id.description);
} on FormatException catch(err) {

View file

@ -145,7 +145,7 @@ main() {
/// Checks that pub is running on a supported platform. If it isn't, it prints
/// an error message and exits. Completes when the validation is done.
Future validatePlatform() {
return new Future.of(() {
return new Future.sync(() {
if (Platform.operatingSystem != 'windows') return;
return runProcess('ver', []).then((result) {
@ -267,7 +267,7 @@ abstract class PubCommand {
exit(_chooseExitCode(error));
}
new Future.of(() {
new Future.sync(() {
if (requiresEntrypoint) {
// TODO(rnystrom): Will eventually need better logic to walk up
// subdirectories until we hit one that looks package-like. For now,

View file

@ -154,7 +154,7 @@ abstract class Source {
///
/// This doesn't need to be implemented if [shouldCache] is false.
Future<String> systemCacheDirectory(PackageId id) {
return new Future.immediateError(
return new Future.error(
"systemCacheDirectory() must be implemented if shouldCache is true.");
}
@ -206,7 +206,7 @@ abstract class Source {
/// [descriptionsEqual].
///
/// By default, this just returns [id].
Future<PackageId> resolveId(PackageId id) => new Future.immediate(id);
Future<PackageId> resolveId(PackageId id) => new Future.value(id);
/// Returns the [Package]s that have been installed in the system cache.
List<Package> getCachedPackages() {

View file

@ -249,7 +249,7 @@ Stream<String> streamToLines(Stream<String> stream) {
Future<Iterable> futureWhere(Iterable iter, test(value)) {
return Future.wait(iter.map((e) {
var result = test(e);
if (result is! Future) result = new Future.immediate(result);
if (result is! Future) result = new Future.value(result);
return result.then((result) => new Pair(e, result));
}))
.then((pairs) => pairs.where((pair) => pair.last))
@ -343,7 +343,7 @@ Future awaitObject(object) {
if (object is Iterable) {
return Future.wait(object.map(awaitObject).toList());
}
if (object is! Map) return new Future.immediate(object);
if (object is! Map) return new Future.value(object);
var pairs = <Future<Pair>>[];
object.forEach((key, value) {

View file

@ -20,7 +20,7 @@ class CompiledDartdocValidator extends Validator {
: super(entrypoint);
Future validate() {
return new Future.of(() {
return new Future.sync(() {
for (var entry in listDir(entrypoint.root.dir, recursive: true)) {
if (path.basename(entry) != "nav.json") continue;
var dir = path.dirname(entry);

View file

@ -31,12 +31,12 @@ class DependencyValidator extends Validator {
'package.\n'
'Pub enables "package:${entrypoint.root.name}" imports '
'implicitly.');
return new Future.immediate(null);
return new Future.value();
}
if (dependency.constraint.isAny) _warnAboutConstraint(dependency);
return new Future.immediate(null);
return new Future.value();
});
}

View file

@ -21,7 +21,7 @@ class DirectoryValidator extends Validator {
static final _PLURAL_NAMES = ["tools", "tests", "docs", "examples"];
Future validate() {
return new Future.of(() {
return new Future.sync(() {
for (var dir in listDir(entrypoint.root.dir)) {
if (!dirExists(dir)) continue;

View file

@ -23,7 +23,7 @@ class LibValidator extends Validator {
: super(entrypoint);
Future validate() {
return new Future.of(() {
return new Future.sync(() {
var libDir = path.join(entrypoint.root.dir, "lib");
if (!dirExists(libDir)) {

View file

@ -19,7 +19,7 @@ class LicenseValidator extends Validator {
: super(entrypoint);
Future validate() {
return new Future.of(() {
return new Future.sync(() {
var licenseLike = new RegExp(
r"^([a-zA-Z0-9]+[-_])?(LICENSE|COPYING)(\..*)?$");
if (listDir(entrypoint.root.dir)

View file

@ -28,7 +28,7 @@ class NameValidator extends Validator {
: super(entrypoint);
Future validate() {
return new Future.of(() {
return new Future.sync(() {
_checkName(entrypoint.root.name, 'Package name "${entrypoint.root.name}"',
isPackage: true);

View file

@ -56,6 +56,6 @@ class PubspecFieldValidator extends Validator {
errors.add('Your pubspec.yaml is missing a "version" field.');
}
return new Future.immediate(null);
return new Future.value();
}
}

View file

@ -20,7 +20,7 @@ class Utf8ReadmeValidator extends Validator {
: super(entrypoint);
Future validate() {
return new Future.of(() {
return new Future.sync(() {
var readme = entrypoint.root.readmePath;
if (readme == null) return;
var bytes = readBinaryFile(readme);

View file

@ -97,7 +97,7 @@ class VersionSolver {
Future processNextWorkItem(_) {
while (true) {
// Stop if we are done.
if (_work.isEmpty) return new Future.immediate(buildResults());
if (_work.isEmpty) return new Future.value(buildResults());
// If we appear to be stuck in a loop, then we probably have an unstable
// graph, bail. We guess this based on a rough heuristic that it should
@ -284,8 +284,7 @@ class ChangeVersion implements WorkItem {
Version version) {
// If there is no version, it means no package, so no dependencies.
if (version == null) {
return new Future<Map<String, PackageRef>>.immediate(
<String, PackageRef>{});
return new Future<Map<String, PackageRef>>.value(<String, PackageRef>{});
}
var id = new PackageId(package, source, version, description);
@ -475,7 +474,7 @@ class PubspecCache {
Future<Pubspec> load(PackageId id) {
// Complete immediately if it's already cached.
if (_pubspecs.containsKey(id)) {
return new Future<Pubspec>.immediate(_pubspecs[id]);
return new Future<Pubspec>.value(_pubspecs[id]);
}
return id.describe().then((pubspec) {

View file

@ -36,7 +36,7 @@ main() {
expect(errorGroup.done, throwsFormatException);
errorGroup.signalError(new FormatException());
expect(() => errorGroup.registerFuture(new Future.immediate(null)),
expect(() => errorGroup.registerFuture(new Future.value()),
throwsStateError);
expect(() => errorGroup.registerStream(new StreamController().stream),
throwsStateError);
@ -63,7 +63,7 @@ main() {
"been called", () {
completer.complete('value');
expect(() => errorGroup.registerFuture(new Future.immediate(null)),
expect(() => errorGroup.registerFuture(new Future.value()),
throwsStateError);
expect(() => errorGroup.registerStream(new StreamController().stream),
throwsStateError);

Some files were not shown because too many files have changed in this diff Show more