Unverified Commit 2ab4ed74 authored by Chris Bracken's avatar Chris Bracken Committed by GitHub

Eliminate Dart 1 support from DevFS (#21404)

Dart 1 is no longer supported in Flutter. Hot reload now always occurs
via kernel file updates (plus any asset bundle changes).
parent 2ef7cd64
...@@ -426,10 +426,9 @@ class DevFS { ...@@ -426,10 +426,9 @@ class DevFS {
await _scanDirectory(rootDirectory, await _scanDirectory(rootDirectory,
recursive: true, recursive: true,
fileFilter: fileFilter); fileFilter: fileFilter);
final bool previewDart2 = generator != null;
if (fs.isFileSync(_packagesFilePath)) { if (fs.isFileSync(_packagesFilePath)) {
printTrace('Scanning package files'); printTrace('Scanning package files');
await _scanPackages(fileFilter, previewDart2); await _scanPackages(fileFilter);
} }
if (bundle != null) { if (bundle != null) {
printTrace('Scanning asset files'); printTrace('Scanning asset files');
...@@ -480,45 +479,46 @@ class DevFS { ...@@ -480,45 +479,46 @@ class DevFS {
assetPathsToEvict.add(archivePath); assetPathsToEvict.add(archivePath);
} }
}); });
if (previewDart2) { // We run generator even if [dirtyEntries] was empty because we want to
// We run generator even if [dirtyEntries] was empty because we want // keep logic of accepting/rejecting generator's output simple: we must
// to keep logic of accepting/rejecting generator's output simple: // accept/reject generator's output after every [update] call. Incremental
// we must accept/reject generator's output after every [update] call. // run with no changes is supposed to be fast (considering that it is
// Incremental run with no changes is supposed to be fast (considering // initiated by user key press).
// that it is initiated by user key press). final List<String> invalidatedFiles = <String>[];
final List<String> invalidatedFiles = <String>[]; final Set<Uri> filesUris = new Set<Uri>();
final Set<Uri> filesUris = new Set<Uri>(); for (Uri uri in dirtyEntries.keys.toList()) {
for (Uri uri in dirtyEntries.keys.toList()) { if (!uri.path.startsWith(assetBuildDirPrefix)) {
if (!uri.path.startsWith(assetBuildDirPrefix)) { final DevFSContent content = dirtyEntries[uri];
final DevFSContent content = dirtyEntries[uri]; if (content is DevFSFileContent) {
if (content is DevFSFileContent) { filesUris.add(uri);
filesUris.add(uri); invalidatedFiles.add(content.file.uri.toString());
invalidatedFiles.add(content.file.uri.toString()); numBytes -= content.size;
numBytes -= content.size;
}
} }
} }
// No need to send source files because all compilation is done on the }
// host and result of compilation is single kernel file. // No need to send source files because all compilation is done on the
filesUris.forEach(dirtyEntries.remove); // host and result of compilation is single kernel file.
printTrace('Compiling dart to kernel with ${invalidatedFiles.length} updated files'); filesUris.forEach(dirtyEntries.remove);
if (fullRestart) { printTrace('Compiling dart to kernel with ${invalidatedFiles.length} updated files');
generator.reset(); if (fullRestart) {
} generator.reset();
final CompilerOutput compilerOutput = }
await generator.recompile(mainPath, invalidatedFiles, final CompilerOutput compilerOutput = await generator.recompile(
outputPath: dillOutputPath ?? fs.path.join(getBuildDirectory(), 'app.dill'), mainPath,
packagesFilePath : _packagesFilePath); invalidatedFiles,
final String compiledBinary = compilerOutput?.outputFilename; outputPath: dillOutputPath ?? fs.path.join(getBuildDirectory(), 'app.dill'),
if (compiledBinary != null && compiledBinary.isNotEmpty) { packagesFilePath : _packagesFilePath,
final Uri entryUri = fs.path.toUri(projectRootPath != null ? );
fs.path.relative(pathToReload, from: projectRootPath): final String compiledBinary = compilerOutput?.outputFilename;
pathToReload); if (compiledBinary != null && compiledBinary.isNotEmpty) {
if (!dirtyEntries.containsKey(entryUri)) { final Uri entryUri = fs.path.toUri(projectRootPath != null
final DevFSFileContent content = new DevFSFileContent(fs.file(compiledBinary)); ? fs.path.relative(pathToReload, from: projectRootPath)
dirtyEntries[entryUri] = content; : pathToReload,
numBytes += content.size; );
} if (!dirtyEntries.containsKey(entryUri)) {
final DevFSFileContent content = new DevFSFileContent(fs.file(compiledBinary));
dirtyEntries[entryUri] = content;
numBytes += content.size;
} }
} }
if (dirtyEntries.isNotEmpty) { if (dirtyEntries.isNotEmpty) {
...@@ -697,7 +697,7 @@ class DevFS { ...@@ -697,7 +697,7 @@ class DevFS {
); );
} }
Future<Null> _scanPackages(Set<String> fileFilter, bool previewDart2) async { Future<Null> _scanPackages(Set<String> fileFilter) async {
StringBuffer sb; StringBuffer sb;
final PackageMap packageMap = new PackageMap(_packagesFilePath); final PackageMap packageMap = new PackageMap(_packagesFilePath);
...@@ -730,22 +730,6 @@ class DevFS { ...@@ -730,22 +730,6 @@ class DevFS {
sb.writeln('$packageName:$directoryUriOnDevice'); sb.writeln('$packageName:$directoryUriOnDevice');
} }
} }
if (previewDart2) {
// When in previewDart2 mode we don't update .packages-file entry
// so actual file will get invalidated in frontend.
// We don't need to synthesize device-correct .packages file because
// it is not going to be used on the device anyway - compilation
// is done on the host.
return;
}
if (sb != null) {
final DevFSContent content = _entries[fs.path.toUri('.packages')];
if (content is DevFSStringContent && content.string == sb.toString()) {
content._exists = true;
return;
}
_entries[fs.path.toUri('.packages')] = new DevFSStringContent(sb.toString());
}
} }
} }
/// Converts a platform-specific file path to a platform-independent Uri path. /// Converts a platform-specific file path to a platform-independent Uri path.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment