Skip to content

Instantly share code, notes, and snippets.

@aam
Last active March 11, 2021 03:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save aam/cb0eed24c58d0c0f107be9a89b9e93f3 to your computer and use it in GitHub Desktop.
Save aam/cb0eed24c58d0c0f107be9a89b9e93f3 to your computer and use it in GitHub Desktop.
mock up of file contents in CompilerOutput
diff --git a/packages/flutter_tools/lib/src/compile.dart b/packages/flutter_tools/lib/src/compile.dart
index 49e224c802..ff79346b68 100644
--- a/packages/flutter_tools/lib/src/compile.dart
+++ b/packages/flutter_tools/lib/src/compile.dart
@@ -3,6 +3,7 @@
// found in the LICENSE file.
import 'dart:async';
+import 'dart:typed_data';
import 'package:meta/meta.dart';
import 'package:package_config/package_config.dart';
@@ -61,9 +62,10 @@ class TargetModel {
}
class CompilerOutput {
- const CompilerOutput(this.outputFilename, this.errorCount, this.sources);
+ const CompilerOutput(this.outputFilename, this.errorCount, this.sources, {this.fileContents});
final String outputFilename;
+ final Uint8List fileContents;
final int errorCount;
final List<Uri> sources;
}
@@ -78,6 +80,7 @@ class StdoutHandler {
reset();
}
+ final FileSystem _fileSystem;
final Logger _logger;
String boundaryKey;
@@ -87,8 +90,10 @@ class StdoutHandler {
bool _suppressCompilerMessages;
bool _expectSources;
+ bool _requestFileContents;
void handler(String message) {
const String kResultPrefix = 'result ';
if (boundaryKey == null && message.startsWith(kResultPrefix)) {
boundaryKey = message.substring(kResultPrefix.length);
@@ -106,6 +111,15 @@ class StdoutHandler {
return;
}
final int spaceDelimiter = message.lastIndexOf(' ');
+ if (_requestFileContents) {
+ compilerOutput.complete(
+ CompilerOutput(
+ message.substring(boundaryKey.length + 1, spaceDelimiter),
+ int.parse(message.substring(spaceDelimiter + 1).trim()),
+ sources,
+ fileContents: _fileSystem.file(message.substring(boundaryKey.length + 1, spaceDelimiter)).readAsBytesSync()
+ ));
+ return;
+ }
compilerOutput.complete(
CompilerOutput(
message.substring(boundaryKey.length + 1, spaceDelimiter),
@@ -136,11 +150,12 @@ class StdoutHandler {
// This is needed to get ready to process next compilation result output,
// with its own boundary key and new completer.
- void reset({ bool suppressCompilerMessages = false, bool expectSources = true }) {
+ void reset({ bool suppressCompilerMessages = false, bool expectSources = true, bool requestFileContents = true }) {
boundaryKey = null;
compilerOutput = Completer<CompilerOutput>();
_suppressCompilerMessages = suppressCompilerMessages;
_expectSources = expectSources;
+ _requestFileContents = requestFileContents;
state = StdoutState.CollectDiagnostic;
}
}
@@ -750,7 +766,7 @@ class DefaultResidentCompiler implements ResidentCompiler {
}
Future<CompilerOutput> _compileExpression(_CompileExpressionRequest request) async {
- _stdoutHandler.reset(suppressCompilerMessages: true, expectSources: false);
+ _stdoutHandler.reset(suppressCompilerMessages: true, expectSources: false, requestFileContents: true);
// 'compile-expression' should be invoked after compiler has been started,
// program was compiled.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment