anchor.diff:            assetPathsToEvict.add(archivePath);
         }
       });
  -    if (previewDart2) {
  -      // We run generator even if [dirtyEntries] was empty because we want
  -      // to keep logic of accepting/rejecting generator's output simple:
  -      // we must accept/reject generator's output after every [update] call.
  -      // Incremental run with no changes is supposed to be fast (considering
  -      // that it is initiated by user key press).
  -      final List<String> invalidatedFiles = <String>[];
  -      final Set<Uri> filesUris = new Set<Uri>();
  -      for (Uri uri in dirtyEntries.keys.toList()) {
  -        if (!uri.path.startsWith(assetBuildDirPrefix)) {
  -          final DevFSContent content = dirtyEntries[uri];
  -          if (content is DevFSFileContent) {
  -            filesUris.add(uri);
  -            invalidatedFiles.add(content.file.uri.toString());
  -            numBytes -= content.size;
  -          }
  +    // We run generator even if [dirtyEntries] was empty because we want to
  +    // keep logic of accepting/rejecting generator's output simple: we must
  +    // accept/reject generator's output after every [update] call.  Incremental
  +    // run with no changes is supposed to be fast (considering that it is
  +    // initiated by user key press).
  +    final List<String> invalidatedFiles = <String>[];
  +    final Set<Uri> filesUris = new Set<Uri>();
  +    for (Uri uri in dirtyEntries.keys.toList()) {
  +      if (!uri.path.startsWith(assetBuildDirPrefix)) {
  +        final DevFSContent content = dirtyEntries[uri];
  +        if (content is DevFSFileContent) {
  +          filesUris.add(uri);
  +          invalidatedFiles.add(content.file.uri.toString());
  +          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.
  -      filesUris.forEach(dirtyEntries.remove);
  -      printTrace('Compiling dart to kernel with ${invalidatedFiles.length} updated files');
  -      if (fullRestart) {
  -        generator.reset();
  -      }
  -      final CompilerOutput compilerOutput =
  -          await generator.recompile(mainPath, invalidatedFiles,
  -              outputPath:  dillOutputPath ?? fs.path.join(getBuildDirectory(), 'app.dill'),
  -              packagesFilePath : _packagesFilePath);
  -      final String compiledBinary = compilerOutput?.outputFilename;
  -      if (compiledBinary != null && compiledBinary.isNotEmpty) {
  -        final Uri entryUri = fs.path.toUri(projectRootPath != null ?
  -            fs.path.relative(pathToReload, from: projectRootPath):
  -            pathToReload);
  -        if (!dirtyEntries.containsKey(entryUri)) {
  -          final DevFSFileContent content = new DevFSFileContent(fs.file(compiledBinary));
  -          dirtyEntries[entryUri] = content;
  -          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.
  +    filesUris.forEach(dirtyEntries.remove);
  +    printTrace('Compiling dart to kernel with ${invalidatedFiles.length} updated files');
  +    if (fullRestart) {
  +      generator.reset();
  +    }
  +    final CompilerOutput compilerOutput = await generator.recompile(
  +      mainPath,
  +      invalidatedFiles,
  +      outputPath:  dillOutputPath ?? fs.path.join(getBuildDirectory(), 'app.dill'),
  +      packagesFilePath : _packagesFilePath,
  +    );
  +    final String compiledBinary = compilerOutput?.outputFilename;
  +    if (compiledBinary != null && compiledBinary.isNotEmpty) {
  +      final Uri entryUri = fs.path.toUri(projectRootPath != null
  +        ? fs.path.relative(pathToReload, from: projectRootPath)
  +        : pathToReload,
  +      );
  +      if (!dirtyEntries.containsKey(entryUri)) {
  +        final DevFSFileContent content = new DevFSFileContent(fs.file(compiledBinary));
  +        dirtyEntries[entryUri] = content;
  +        numBytes += content.size;
         }
       }
       if (dirtyEntries.isNotEmpty) {
  
positive.code:         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.
  
negative.code:     );
    }
  
    Future<Null> _scanPackages(Set<String> fileFilter) async {
      StringBuffer sb;
      final PackageMap packageMap = new PackageMap(_packagesFilePath);
  
  