 -      consumer(message);
      }
    }
- 
+
 @@ -106,6 +133,7 @@ class StdoutHandler {
      compilerMessageReceived = false;
      compilerOutput = Completer<CompilerOutput>();

-    );
-  }, skip: !Platform.isLinux); // Coretext uses different thicknesses for decoration
-}
diff --git a/packages/flutter_tools/lib/src/codegen.dart b/packages/flutter_tools/lib/src/codegen.dart
index 7d521a4f2..60403279d 100644
--- a/packages/flutter_tools/lib/src/codegen.dart
+++ b/packages/flutter_tools/lib/src/codegen.dart
@@ -190,10 +190,10 @@ class CodeGeneratingKernelCompiler implements KernelCompiler {
         await outputFile.create();
       }
       await outputFile.writeAsBytes(await buildResult.dillFile.readAsBytes());
-      return CompilerOutput(outputFilePath, 0);
+      return CompilerOutput(outputFilePath, 0, /* sources= */ null);
     } on Exception catch (err) {
       printError('Compilation Failed: $err');
-      return const CompilerOutput(null, 1);
+      return const CompilerOutput(null, 1, /* sources= */ null);
     }
   }
 }
diff --git a/packages/flutter_tools/lib/src/compile.dart b/packages/flutter_tools/lib/src/compile.dart
index dd255f53a..4cd09eacb 100644
--- a/packages/flutter_tools/lib/src/compile.dart
+++ b/packages/flutter_tools/lib/src/compile.dart
@@ -57,12 +57,15 @@ class TargetModel {
 }
 
 class CompilerOutput {
-  const CompilerOutput(this.outputFilename, this.errorCount);
+  const CompilerOutput(this.outputFilename, this.errorCount, this.sources);
 
   final String outputFilename;
   final int errorCount;
+  final List<Uri> sources;
 }
 
+enum StdoutState { CollectDiagnostic, CollectDependencies }
+
 /// Handles stdin/stdout communication with the frontend server.

+  StdoutState state = StdoutState.CollectDiagnostic;
   Completer<CompilerOutput> compilerOutput;
+  final List<Uri> sources = <Uri>[];

   bool _suppressCompilerMessages;

   void handler(String message) {
+    printTrace('-> $message');
     const String kResultPrefix = 'result ';
     if (boundaryKey == null && message.startsWith(kResultPrefix)) {
       boundaryKey = message.substring(kResultPrefix.length);
     } else if (message.startsWith(boundaryKey)) {
-      if (message.length <= boundaryKey.length) {
-        compilerOutput.complete(null);
