Skip to content

Commit 5edc9c5

Browse files
committed
Address review comments
1 parent 812d07e commit 5edc9c5

File tree

8 files changed

+81
-66
lines changed

8 files changed

+81
-66
lines changed

dwds/lib/src/debugging/inspector.dart

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,9 @@ import 'package:webkit_inspection_protocol/webkit_inspection_protocol.dart';
3535
class AppInspector implements AppInspectorInterface {
3636
var _scriptCacheMemoizer = AsyncMemoizer<List<ScriptRef>>();
3737

38-
Future<List<ScriptRef>> getScriptRefs([
38+
Future<List<ScriptRef>> getScriptRefs({
3939
ModifiedModuleReport? modifiedModuleReport,
40-
]) => _populateScriptCaches(modifiedModuleReport);
40+
}) => _populateScriptCaches(modifiedModuleReport: modifiedModuleReport);
4141

4242
final _logger = Logger('AppInspector');
4343

@@ -107,7 +107,7 @@ class AppInspector implements AppInspectorInterface {
107107
/// Reset all caches and recompute any mappings.
108108
///
109109
/// Should be called across hot reloads with a valid [ModifiedModuleReport].
110-
Future<void> initialize([ModifiedModuleReport? modifiedModuleReport]) async {
110+
Future<void> initialize({ModifiedModuleReport? modifiedModuleReport}) async {
111111
_scriptCacheMemoizer = AsyncMemoizer<List<ScriptRef>>();
112112

113113
// TODO(srujzs): We can invalidate these in a smarter way instead of
@@ -118,7 +118,7 @@ class AppInspector implements AppInspectorInterface {
118118

119119
if (modifiedModuleReport != null) {
120120
// Invalidate `_libraryHelper` as we use it populate any script caches.
121-
_libraryHelper.initialize(modifiedModuleReport);
121+
_libraryHelper.initialize(modifiedModuleReport: modifiedModuleReport);
122122
} else {
123123
_libraryHelper = LibraryHelper(this)..initialize();
124124
_scriptRefsById.clear();
@@ -132,7 +132,9 @@ class AppInspector implements AppInspectorInterface {
132132
isolate.libraries?.clear();
133133
isolate.libraries?.addAll(libraries);
134134

135-
final scripts = await getScriptRefs(modifiedModuleReport);
135+
final scripts = await getScriptRefs(
136+
modifiedModuleReport: modifiedModuleReport,
137+
);
136138

137139
await DartUri.initialize();
138140
DartUri.recordAbsoluteUris(libraries.map((lib) => lib.uri).nonNulls);
@@ -730,9 +732,9 @@ class AppInspector implements AppInspectorInterface {
730732
/// recalculates caches for the modified libraries.
731733
///
732734
/// Returns the list of scripts refs cached.
733-
Future<List<ScriptRef>> _populateScriptCaches([
735+
Future<List<ScriptRef>> _populateScriptCaches({
734736
ModifiedModuleReport? modifiedModuleReport,
735-
]) {
737+
}) {
736738
return _scriptCacheMemoizer.runOnce(() async {
737739
final scripts =
738740
await globalToolConfiguration.loadStrategy

dwds/lib/src/debugging/libraries.dart

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@ class LibraryHelper extends Domain {
1717
final Logger _logger = Logger('LibraryHelper');
1818

1919
/// Map of library ID to [Library].
20-
late final Map<String, Library> _librariesById;
20+
final Map<String, Library> _librariesById = {};
2121

2222
/// Map of libraryRef ID to [LibraryRef].
23-
late final Map<String, LibraryRef> _libraryRefsById;
23+
final Map<String, LibraryRef> _libraryRefsById = {};
2424

2525
LibraryRef? _rootLib;
2626

@@ -32,7 +32,7 @@ class LibraryHelper extends Domain {
3232
///
3333
/// If [modifiedModuleReport] is not null, invalidates only modified libraries
3434
/// from the cache and recomputes values for any eager caches.
35-
void initialize([ModifiedModuleReport? modifiedModuleReport]) {
35+
void initialize({ModifiedModuleReport? modifiedModuleReport}) {
3636
_rootLib = null;
3737
if (modifiedModuleReport != null) {
3838
for (final library in modifiedModuleReport.modifiedLibraries) {
@@ -45,10 +45,10 @@ class LibraryHelper extends Domain {
4545
// map is empty before returning.
4646
_libraryRefsById[library] = _createLibraryRef(library);
4747
}
48-
} else {
49-
_librariesById = <String, Library>{};
50-
_libraryRefsById = <String, LibraryRef>{};
48+
return;
5149
}
50+
_librariesById.clear();
51+
_libraryRefsById.clear();
5252
}
5353

5454
Future<LibraryRef> get rootLib async {

dwds/lib/src/debugging/location.dart

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -152,10 +152,14 @@ class Locations {
152152

153153
Modules get modules => _modules;
154154

155+
/// Initialize any caches.
156+
///
157+
/// If [modifiedModuleReport] is not null, only invalidates the caches for the
158+
/// modified modules instead.
155159
Future<void> initialize(
156-
String entrypoint, [
160+
String entrypoint, {
157161
ModifiedModuleReport? modifiedModuleReport,
158-
]) async {
162+
}) async {
159163
// If we know that only certain modules are deleted or added, we can only
160164
// invalidate those.
161165
if (modifiedModuleReport != null) {
@@ -170,13 +174,13 @@ class Locations {
170174
}
171175
}
172176
}
173-
} else {
174-
_locationMemoizer.clear();
175-
_moduleToLocations.clear();
176-
_sourceToTokenPosTable.clear();
177-
_sourceToLocation.clear();
178-
_entrypoint = entrypoint;
177+
return;
179178
}
179+
_locationMemoizer.clear();
180+
_moduleToLocations.clear();
181+
_sourceToTokenPosTable.clear();
182+
_sourceToLocation.clear();
183+
_entrypoint = entrypoint;
180184
}
181185

182186
/// Returns all [Location] data for a provided Dart source.

dwds/lib/src/debugging/metadata/provider.dart

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -170,14 +170,10 @@ class MetadataProvider {
170170
return _moduleToModulePath.keys.toList();
171171
}
172172

173-
/// Compute metadata information after reading the metadata contents.
174-
///
175-
/// If [hotReload] is true, skips adding the SDK metadata and caches the
176-
/// computed [ModuleMetadata], returning the resulting cache.
177-
///
178-
/// Otherwise, adds all metadata and returns null.
179-
Future<Map<String, ModuleMetadata>?> _processMetadata(bool hotReload) async {
180-
final modules = hotReload ? <String, ModuleMetadata>{} : null;
173+
/// Compute metadata information after reading the metadata contents and
174+
/// return a map from module names to their [ModuleMetadata].
175+
Future<Map<String, ModuleMetadata>> _processMetadata() async {
176+
final modules = <String, ModuleMetadata>{};
181177
// The merged metadata resides next to the entrypoint.
182178
// Assume that <name>.bootstrap.js has <name>.ddc_merged_metadata
183179
if (entrypoint.endsWith('.bootstrap.js')) {
@@ -188,8 +184,6 @@ class MetadataProvider {
188184
);
189185
final merged = await _assetReader.metadataContents(serverPath);
190186
if (merged != null) {
191-
// We can't hot reload the SDK yet, so no need to invalidate this data.
192-
if (!hotReload) _addSdkMetadata();
193187
for (final contents in merged.split('\n')) {
194188
try {
195189
if (contents.isEmpty ||
@@ -201,11 +195,7 @@ class MetadataProvider {
201195
moduleJson as Map<String, dynamic>,
202196
);
203197
final moduleName = metadata.name;
204-
if (hotReload) {
205-
modules![moduleName] = metadata;
206-
} else {
207-
_addMetadata(metadata);
208-
}
198+
modules[moduleName] = metadata;
209199
_logger.fine('Loaded debug metadata for module: $moduleName');
210200
} catch (e) {
211201
_logger.warning('Failed to read metadata: $e');
@@ -217,9 +207,13 @@ class MetadataProvider {
217207
return modules;
218208
}
219209

220-
/// Process all metadata and compute caches once.
210+
/// Process all metadata, including SDK metadata, and compute caches once.
221211
Future<void> _initialize() async {
222-
await _metadataMemoizer.runOnce(() => _processMetadata(false));
212+
await _metadataMemoizer.runOnce(() async {
213+
final metadata = await _processMetadata();
214+
_addSdkMetadata();
215+
metadata.values.forEach(_addMetadata);
216+
});
223217
}
224218

225219
/// Given a map of hot reloaded modules mapped to their respective libraries,
@@ -231,7 +225,7 @@ class MetadataProvider {
231225
Future<ModifiedModuleReport> reinitializeAfterHotReload(
232226
Map<String, List> reloadedModulesToLibraries,
233227
) async {
234-
final modules = (await _processMetadata(true))!;
228+
final modules = await _processMetadata();
235229
final invalidatedLibraries = <String>{};
236230
void invalidateLibrary(String libraryImportUri) {
237231
invalidatedLibraries.add(libraryImportUri);

dwds/lib/src/debugging/modules.dart

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,9 @@ class Modules {
3838
/// If [modifiedModuleReport] is not null, removes and recalculates caches for
3939
/// any modified modules and libraries.
4040
Future<void> initialize(
41-
String entrypoint, [
41+
String entrypoint, {
4242
ModifiedModuleReport? modifiedModuleReport,
43-
]) async {
43+
}) async {
4444
if (modifiedModuleReport != null) {
4545
assert(_entrypoint == entrypoint);
4646
for (final library in modifiedModuleReport.modifiedLibraries) {
@@ -53,14 +53,14 @@ class Modules {
5353
_moduleToSources.remove(module);
5454
}
5555
await _initializeMapping(modifiedModuleReport);
56-
} else {
57-
_entrypoint = entrypoint;
58-
_sourceToLibrary.clear();
59-
_sourceToModule.clear();
60-
_libraryToModule.clear();
61-
_moduleToSources.clear();
62-
_moduleMemoizer = AsyncMemoizer();
56+
return;
6357
}
58+
_entrypoint = entrypoint;
59+
_sourceToLibrary.clear();
60+
_sourceToModule.clear();
61+
_libraryToModule.clear();
62+
_moduleToSources.clear();
63+
_moduleMemoizer = AsyncMemoizer();
6464
}
6565

6666
/// Returns the containing module for the provided Dart server path.

dwds/lib/src/debugging/skip_list.dart

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,26 +18,29 @@ class SkipLists {
1818

1919
SkipLists(this._root);
2020

21-
Future<void> initialize([
22-
String? entrypoint,
21+
/// Initialize any caches.
22+
///
23+
/// If [modifiedModuleReport] is not null, only invalidates the caches for the
24+
/// modified modules instead.
25+
Future<void> initialize(
26+
String entrypoint, {
2327
ModifiedModuleReport? modifiedModuleReport,
24-
]) async {
28+
}) async {
2529
if (modifiedModuleReport != null) {
26-
assert(entrypoint != null);
2730
for (final url in _urlToId.keys) {
2831
final dartUri = DartUri(url, _root);
2932
final serverPath = dartUri.serverPath;
3033
final module = await globalToolConfiguration.loadStrategy
31-
.moduleForServerPath(entrypoint!, serverPath);
34+
.moduleForServerPath(entrypoint, serverPath);
3235
if (modifiedModuleReport.modifiedModules.contains(module)) {
3336
_idToList.remove(_urlToId[url]!);
3437
_urlToId.remove(url);
3538
}
3639
}
37-
} else {
38-
_idToList.clear();
39-
_urlToId.clear();
40+
return;
4041
}
42+
_idToList.clear();
43+
_urlToId.clear();
4144
}
4245

4346
/// Returns a skipList as defined by the Chrome DevTools Protocol.

dwds/lib/src/services/chrome_proxy_service.dart

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -243,21 +243,33 @@ class ChromeProxyService implements VmServiceInterface {
243243
final entrypoint = inspector.appConnection.request.entrypointPath;
244244
final modifiedModuleReport = await globalToolConfiguration.loadStrategy
245245
.reinitializeProviderAfterHotReload(entrypoint, reloadedModules);
246-
await _initializeEntrypoint(entrypoint, modifiedModuleReport);
247-
await inspector.initialize(modifiedModuleReport);
246+
await _initializeEntrypoint(
247+
entrypoint,
248+
modifiedModuleReport: modifiedModuleReport,
249+
);
250+
await inspector.initialize(modifiedModuleReport: modifiedModuleReport);
248251
}
249252

250253
/// Initializes metadata in [Locations], [Modules], and [ExpressionCompiler].
251254
///
252255
/// If [modifiedModuleReport] is not null, only removes and reinitializes
253256
/// modified metadata.
254257
Future<void> _initializeEntrypoint(
255-
String entrypoint, [
258+
String entrypoint, {
256259
ModifiedModuleReport? modifiedModuleReport,
257-
]) async {
258-
await _modules.initialize(entrypoint, modifiedModuleReport);
259-
await _locations.initialize(entrypoint, modifiedModuleReport);
260-
await _skipLists.initialize(entrypoint, modifiedModuleReport);
260+
}) async {
261+
await _modules.initialize(
262+
entrypoint,
263+
modifiedModuleReport: modifiedModuleReport,
264+
);
265+
await _locations.initialize(
266+
entrypoint,
267+
modifiedModuleReport: modifiedModuleReport,
268+
);
269+
await _skipLists.initialize(
270+
entrypoint,
271+
modifiedModuleReport: modifiedModuleReport,
272+
);
261273
// We do not need to wait for compiler dependencies to be updated as the
262274
// [ExpressionEvaluator] is robust to evaluation requests during updates.
263275
safeUnawaited(_updateCompilerDependencies(entrypoint));

dwds/test/fixtures/fakes.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ class FakeInspector implements AppInspector {
6868
}
6969

7070
@override
71-
Future<void> initialize([ModifiedModuleReport? modifiedModuleReport]) async =>
71+
Future<void> initialize({ModifiedModuleReport? modifiedModuleReport}) async =>
7272
{};
7373

7474
@override
@@ -159,9 +159,9 @@ class FakeModules implements Modules {
159159

160160
@override
161161
Future<void> initialize(
162-
String entrypoint, [
162+
String entrypoint, {
163163
ModifiedModuleReport? modifiedModuleReport,
164-
]) async {}
164+
}) async {}
165165

166166
@override
167167
Future<Uri> libraryForSource(String serverPath) async => Uri(path: _library);

0 commit comments

Comments
 (0)