Skip to content

Commit 93afeec

Browse files
author
Anna Gringauze
authored
Fix crash on missing libraries.json (#1472)
* Fix crash on missing libraries.json * Addressed CR comments
1 parent 40f8265 commit 93afeec

File tree

3 files changed

+62
-2
lines changed

3 files changed

+62
-2
lines changed

dwds/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
- Show an alert in the Dart Debug Extension for a multi-app scenario.
88
- Fix a bug where `dartEmitDebugEvents` was set as a `String` instead of `bool`
99
in the injected client.
10+
- Emit a warning instead of crashing on missing `libraries.json`.
1011

1112
**Breaking changes:**
1213

dwds/lib/src/utilities/dart_uri.dart

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,7 @@ class DartUri {
160160

161161
librariesPath ??=
162162
p.toUri(p.join(_sdkDir.toFilePath(), 'lib', 'libraries.json'));
163+
163164
var packagesUri = p.toUri(p.join(currentDirectory, '.packages'));
164165

165166
clear();
@@ -169,6 +170,8 @@ class DartUri {
169170

170171
/// Clear the uri resolution tables.
171172
static void clear() {
173+
_librariesSpec = null;
174+
_packageConfig = null;
172175
_resolvedUriToUri.clear();
173176
_uriToResolvedUri.clear();
174177
}
@@ -198,8 +201,10 @@ class DartUri {
198201
var json = File.fromUri(uri).readAsStringSync();
199202
_librariesSpec =
200203
LibrariesSpecification.parse(uri, json).specificationFor('dartdevc');
201-
} on LibrariesSpecificationException catch (e, s) {
202-
_logger.warning('Cannot read libraries spec: $uri', e, s);
204+
} on LibrariesSpecificationException catch (e) {
205+
_logger.warning('Cannot parse libraries spec: $uri', e);
206+
} on FileSystemException catch (e) {
207+
_logger.warning('Cannot read libraries spec: $uri', e);
203208
}
204209
}
205210

dwds/test/dart_uri_test.dart

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import 'package:path/path.dart' as p;
1313
import 'package:test/test.dart';
1414

1515
import 'fixtures/fakes.dart';
16+
import 'fixtures/logging.dart';
1617

1718
class TestStrategy extends FakeStrategy {
1819
@override
@@ -109,5 +110,58 @@ void main() {
109110
expect(unresolved, 'dart:io');
110111
});
111112
});
113+
114+
group('initialized with other SDK directory with no libraries spec', () {
115+
Directory outputDir;
116+
var logs = <String>[];
117+
118+
void logWriter(level, message,
119+
{String error, String loggerName, String stackTrace}) {
120+
var errorMessage = error == null ? '' : ':\n$error';
121+
var stackMessage = stackTrace == null ? '' : ':\n$stackTrace';
122+
logs.add('[$level] $loggerName: $message'
123+
'$errorMessage'
124+
'$stackMessage');
125+
}
126+
127+
setUpAll(() async {
128+
configureLogWriter(customLogWriter: logWriter);
129+
var systemTempDir = Directory.systemTemp;
130+
outputDir = systemTempDir.createTempSync('foo bar');
131+
132+
var fakeSdkDir = outputDir.path;
133+
var fakeLibrariesDir = p.join(fakeSdkDir, 'lib');
134+
var fakeLibrariesPath = p.join(fakeLibrariesDir, 'libraries.json');
135+
136+
await DartUri.initialize(
137+
sdkDir: Uri.file(fakeSdkDir),
138+
librariesPath: Uri.file(fakeLibrariesPath));
139+
await DartUri.recordAbsoluteUris(['dart:io', 'dart:html']);
140+
141+
expect(
142+
logs,
143+
containsAll([
144+
contains('[WARNING] DartUri: Cannot read libraries spec:'),
145+
contains('[WARNING] DartUri: Unresolved uri: dart:io'),
146+
contains('[WARNING] DartUri: Unresolved uri: dart:html'),
147+
]));
148+
});
149+
150+
tearDownAll(() async {
151+
DartUri.clear();
152+
await outputDir?.delete(recursive: true);
153+
});
154+
155+
test('cannot resolve uris', () {
156+
var resolved = DartUri.toResolvedUri('dart:io');
157+
expect(resolved, null);
158+
});
159+
160+
test('cannot unresolve uris', () {
161+
var unresolved =
162+
DartUri.toPackageUri('org-dartlang-sdk:///sdk/lib/io/io.dart');
163+
expect(unresolved, null);
164+
});
165+
});
112166
});
113167
}

0 commit comments

Comments
 (0)