in dwds/lib/src/debugging/metadata/provider.dart [183:223]
Future<void> _initialize() async {
await _metadataMemoizer.runOnce(() async {
var hasSoundNullSafety = true;
var hasUnsoundNullSafety = true;
// The merged metadata resides next to the entrypoint.
// Assume that <name>.bootstrap.js has <name>.ddc_merged_metadata
if (entrypoint.endsWith('.bootstrap.js')) {
_logger.info('Loading debug metadata...');
var serverPath =
entrypoint.replaceAll('.bootstrap.js', '.ddc_merged_metadata');
var merged = await _assetReader.metadataContents(serverPath);
if (merged != null) {
_addSdkMetadata();
for (var contents in merged.split('\n')) {
try {
if (contents == null ||
contents.isEmpty ||
contents.startsWith('// intentionally empty:')) continue;
var moduleJson = json.decode(contents);
var metadata =
ModuleMetadata.fromJson(moduleJson as Map<String, dynamic>);
_addMetadata(metadata);
hasUnsoundNullSafety &= !metadata.soundNullSafety;
hasSoundNullSafety &= metadata.soundNullSafety;
_logger
.fine('Loaded debug metadata for module: ${metadata.name}');
} catch (e) {
_logger.warning('Failed to read metadata: $e');
rethrow;
}
}
if (!hasSoundNullSafety && !hasUnsoundNullSafety) {
throw Exception('Metadata contains modules with mixed null safety');
}
_soundNullSafety = hasSoundNullSafety;
}
_logger.info('Loaded debug metadata '
'(${_soundNullSafety ? "" : "no "}sound null safety)');
}
});
}