Index: runtime/observatory/lib/src/service/object.dart |
diff --git a/runtime/observatory/lib/src/service/object.dart b/runtime/observatory/lib/src/service/object.dart |
index 07970072c01e48b8f475a2f4934daab3fa4a69f8..2944d0ca0fcef93f6cd044379c35b18dc0a2157b 100644 |
--- a/runtime/observatory/lib/src/service/object.dart |
+++ b/runtime/observatory/lib/src/service/object.dart |
@@ -1147,6 +1147,7 @@ class Isolate extends ServiceObjectOwner { |
@observable bool loading = true; |
@observable bool runnable = false; |
@observable bool ioEnabled = false; |
+ @observable bool reloading = false; |
final List<String> extensionRPCs = new List<String>(); |
@@ -1190,6 +1191,22 @@ class Isolate extends ServiceObjectOwner { |
return invokeRpc('getSourceReport', params); |
} |
+ Future<ServiceMap> reloadSources() { |
+ return invokeRpc('_reloadSources', {}).then((_) { |
+ reloading = true; |
+ }); |
+ } |
+ |
+ void _handleIsolateReloadEvent(ServiceEvent event) { |
+ reloading = false; |
+ if (event.reloadError != null) { |
+ // Failure. |
+ print('Reload failed: ${event.reloadError}'); |
+ } else { |
+ _cache.clear(); |
+ } |
+ } |
+ |
/// Fetches and builds the class hierarchy for this isolate. Returns the |
/// Object class object. |
Future<Class> getClassHierarchy() { |
@@ -1495,7 +1512,9 @@ class Isolate extends ServiceObjectOwner { |
case ServiceEvent.kInspect: |
// Handled elsewhere. |
break; |
- |
+ case ServiceEvent.kIsolateReload: |
+ _handleIsolateReloadEvent(event); |
+ break; |
case ServiceEvent.kBreakpointAdded: |
_addBreakpoint(event.breakpoint); |
break; |
@@ -1819,6 +1838,7 @@ class ServiceEvent extends ServiceObject { |
static const kIsolateRunnable = 'IsolateRunnable'; |
static const kIsolateExit = 'IsolateExit'; |
static const kIsolateUpdate = 'IsolateUpdate'; |
+ static const kIsolateReload = 'IsolateReload'; |
static const kServiceExtensionAdded = 'ServiceExtensionAdded'; |
static const kPauseStart = 'PauseStart'; |
static const kPauseExit = 'PauseExit'; |
@@ -1850,6 +1870,7 @@ class ServiceEvent extends ServiceObject { |
@observable Frame topFrame; |
@observable String extensionRPC; |
@observable Instance exception; |
+ @observable Instance reloadError; |
@observable bool atAsyncSuspension; |
@observable ServiceObject inspectee; |
@observable ByteData data; |
@@ -1921,6 +1942,7 @@ class ServiceEvent extends ServiceObject { |
if (map['count'] != null) { |
count = map['count']; |
} |
+ reloadError = map['reloadError']; |
if (map['_debuggerSettings'] != null && |
map['_debuggerSettings']['_exceptions'] != null) { |
exceptions = map['_debuggerSettings']['_exceptions']; |
@@ -2853,6 +2875,7 @@ class Script extends HeapObject { |
final lines = new ObservableList<ScriptLine>(); |
@observable String uri; |
@observable String kind; |
+ @observable DateTime loadTime; |
@observable int firstTokenPos; |
@observable int lastTokenPos; |
@observable int lineOffset; |
@@ -2955,6 +2978,8 @@ class Script extends HeapObject { |
return; |
} |
_loaded = true; |
+ int loadTimeMillis = map['_loadTime']; |
+ loadTime = new DateTime.fromMillisecondsSinceEpoch(loadTimeMillis); |
lineOffset = map['lineOffset']; |
columnOffset = map['columnOffset']; |
_parseTokenPosTable(map['tokenPosTable']); |