Add reset method to reset incremental compiler. (#4187)
* Add reset method to reset incremental compiler.
This is needed to support Flutter app restart request.
* Indent constructor calls
diff --git a/frontend_server/lib/server.dart b/frontend_server/lib/server.dart
index 2e0d27c..e301757 100644
--- a/frontend_server/lib/server.dart
+++ b/frontend_server/lib/server.dart
@@ -82,6 +82,10 @@
/// This let's compiler know that source file identifed by `uri` was changed.
void invalidate(Uri uri);
+
+ /// Resets incremental compiler accept/reject status so that next time
+ /// recompile is requested, complete kernel file is produced.
+ void resetIncrementalCompiler();
}
/// Class that for test mocking purposes encapsulates creation of [BinaryPrinter].
@@ -191,6 +195,11 @@
_generator.invalidate(uri);
}
+ @override
+ void resetIncrementalCompiler() {
+ _generator.reset();
+ }
+
Uri _ensureFolderPath(String path) {
// This is a URI, not a file path, so the forward slash is correct even
// on Windows.
@@ -257,6 +266,8 @@
compiler.acceptLastDelta();
else if (string == 'reject')
compiler.rejectLastDelta();
+ else if (string == 'reset')
+ compiler.resetIncrementalCompiler();
else if (string == 'quit')
exit(0);
break;
diff --git a/frontend_server/test/server_test.dart b/frontend_server/test/server_test.dart
index 40b1882..078fdd7 100644
--- a/frontend_server/test/server_test.dart
+++ b/frontend_server/test/server_test.dart
@@ -59,7 +59,7 @@
test('compile one file', () async {
final StreamController<List<int>> inputStreamController =
- new StreamController<List<int>>();
+ new StreamController<List<int>>();
final ReceivePort compileCalled = new ReceivePort();
when(compiler.compile(any, any, generator: any)).thenAnswer(
(Invocation invocation) {
@@ -80,7 +80,7 @@
test('compile few files', () async {
final StreamController<List<int>> streamController =
- new StreamController<List<int>>();
+ new StreamController<List<int>>();
final ReceivePort compileCalled = new ReceivePort();
int counter = 1;
when(compiler.compile(any, any, generator: any)).thenAnswer(
@@ -154,7 +154,7 @@
test('reject', () async {
final StreamController<List<int>> inputStreamController =
- new StreamController<List<int>>();
+ new StreamController<List<int>>();
final ReceivePort rejectCalled = new ReceivePort();
when(compiler.rejectLastDelta()).thenAnswer((Invocation invocation) {
rejectCalled.sendPort.send(true);
@@ -168,9 +168,25 @@
inputStreamController.close();
});
+ test('reset', () async {
+ final StreamController<List<int>> inputStreamController =
+ new StreamController<List<int>>();
+ final ReceivePort resetCalled = new ReceivePort();
+ when(compiler.resetIncrementalCompiler()).thenAnswer((Invocation invocation) {
+ resetCalled.sendPort.send(true);
+ });
+ final int exitcode = await starter(args, compiler: compiler,
+ input: inputStreamController.stream,
+ );
+ expect(exitcode, equals(0));
+ inputStreamController.add('reset\n'.codeUnits);
+ await resetCalled.first;
+ inputStreamController.close();
+ });
+
test('compile then recompile', () async {
final StreamController<List<int>> streamController =
- new StreamController<List<int>>();
+ new StreamController<List<int>>();
final ReceivePort recompileCalled = new ReceivePort();
when(compiler.recompileDelta()).thenAnswer((Invocation invocation) {