From f6de2fbf2f6a14737ea4ee2ba0cd5029e5de5768 Mon Sep 17 00:00:00 2001 From: John McCutchan Date: Fri, 22 Jul 2016 07:20:07 -0700 Subject: [PATCH] Fix hot reload failure handling --- packages/flutter_tools/lib/src/flx.dart | 2 +- packages/flutter_tools/lib/src/observatory.dart | 16 ++++++---------- packages/flutter_tools/lib/src/run.dart | 11 ++++++----- 3 files changed, 13 insertions(+), 16 deletions(-) diff --git a/packages/flutter_tools/lib/src/flx.dart b/packages/flutter_tools/lib/src/flx.dart index 7b016899aa..d28e65ce1d 100644 --- a/packages/flutter_tools/lib/src/flx.dart +++ b/packages/flutter_tools/lib/src/flx.dart @@ -211,7 +211,7 @@ ZipEntry _obtainLicenses( // splitting each one into each component license (so that we can // de-dupe if possible). final Set packageLicenses = new Set(); - final List packages = packageMap.map.values; + final Iterable packages = packageMap.map.values; for (Uri package in packages) { if (package != null && package.scheme == 'file') { final File file = new File.fromUri(package.resolve('../LICENSE')); diff --git a/packages/flutter_tools/lib/src/observatory.dart b/packages/flutter_tools/lib/src/observatory.dart index bc6a31568e..c04c9b97f1 100644 --- a/packages/flutter_tools/lib/src/observatory.dart +++ b/packages/flutter_tools/lib/src/observatory.dart @@ -114,17 +114,13 @@ class Observatory { }); } - Future reloadSources(String isolateId) async { - Completer whenIsolateReloads = new Completer(); - StreamSubscription sub = onIsolateEvent - .where((Event event) => event.kind == 'IsolateReload') - .listen((Event event) => whenIsolateReloads.complete(event)); - + Future reloadSources(String isolateId) async { try { - await sendRequest('_reloadSources', { 'isolateId': isolateId }); - return await whenIsolateReloads.future.timeout(new Duration(seconds: 20)); - } finally { - await sub.cancel(); + await sendRequest('_reloadSources', + { 'isolateId': isolateId }); + return null; + } catch (e) { + return new Future.error(e.data['details']); } } diff --git a/packages/flutter_tools/lib/src/run.dart b/packages/flutter_tools/lib/src/run.dart index 959364dcff..d261c701b9 100644 --- a/packages/flutter_tools/lib/src/run.dart +++ b/packages/flutter_tools/lib/src/run.dart @@ -378,13 +378,14 @@ class RunAndStayResident { await _updateDevFS(); } Status reloadStatus = logger.startProgress('Performing hot reload'); - Event result = await observatory.reloadSources(observatory.firstIsolateId); - reloadStatus.stop(showElapsedTime: true); - dynamic error = result.response['reloadError']; - if (error != null) { - printError('Error reloading application sources: $error'); + try { + await observatory.reloadSources(observatory.firstIsolateId); + } catch (errorMessage) { + reloadStatus.stop(showElapsedTime: true); + printError('Hot reload was rejected:\n$errorMessage'); return false; } + reloadStatus.stop(showElapsedTime: true); Status reassembleStatus = logger.startProgress('Reassembling application'); await observatory.flutterReassemble(observatory.firstIsolateId);