diff --git a/bin/cache/engine.version b/bin/cache/engine.version index 8b1f825b770..aa12103d5bd 100644 --- a/bin/cache/engine.version +++ b/bin/cache/engine.version @@ -1 +1 @@ -28e9b3bc49a83cf5d7a1da2222c02f0f929b1909 +b2e592592fa070afebd7c062cad245d152a4d370 diff --git a/packages/flutter_tools/lib/src/hot.dart b/packages/flutter_tools/lib/src/hot.dart index fa98e838d6d..9e9dc702c97 100644 --- a/packages/flutter_tools/lib/src/hot.dart +++ b/packages/flutter_tools/lib/src/hot.dart @@ -445,9 +445,18 @@ class HotRunner extends ResidentRunner { } else { flutterUsage.sendEvent('hot', 'reload'); } - } catch (errorMessage, st) { + } catch (error, st) { + int errorCode = error['code']; + if (errorCode == Isolate.kIsolateReloadBarred) { + printError('Unable to hot reload app due to an unrecoverable error in ' + 'the source code. Please address the error and then ' + 'Use "R" to restart the app.'); + flutterUsage.sendEvent('hot', 'reload-barred'); + return false; + } + String errorMessage = error['message']; reloadStatus.stop(showElapsedTime: true); - printError('Hot reload failed:\n$errorMessage\n$st'); + printError('Hot reload failed:\ncode = $errorCode\nmessage = $errorMessage\n$st'); return false; } await _evictDirtyAssets(); diff --git a/packages/flutter_tools/lib/src/vmservice.dart b/packages/flutter_tools/lib/src/vmservice.dart index cc021eda583..153c0024939 100644 --- a/packages/flutter_tools/lib/src/vmservice.dart +++ b/packages/flutter_tools/lib/src/vmservice.dart @@ -749,12 +749,18 @@ class Isolate extends ServiceObjectOwner { _upgradeCollection(map, this); } + static final int kIsolateReloadBarred = 1005; + Future> reloadSources() async { try { Map response = await invokeRpcRaw('_reloadSources'); return response; - } catch (e) { - return new Future>.error(e.data['details']); + } on rpc.RpcException catch(e) { + return new Future>.error({ + 'code': e.code, + 'message': e.message, + 'data': e.data, + }); } }