anchor.diff:        if (folder.getChildAssumingFolder(_jiriRootName).exists) {
           // Found the .jiri_root file, must be a non-git workspace.
           String root = folder.path;
  -        List<String> packagesFiles =
  -            _findPackagesFile(provider, root, filePath);
  +
  +        var packagesFiles = _findPackagesFile(provider, root, filePath);
           if (packagesFiles.isEmpty) {
             return null;
           }
  -        return GnWorkspace._(provider, root, packagesFiles);
  +
  +        var packageMap = <String, List<Folder>>{};
  +        for (var packagesFile in packagesFiles) {
  +          var packages = parseDotPackagesFile(provider, packagesFile);
  +          for (var package in packages.packages) {
  +            packageMap[package.name] = [package.libFolder];
  +          }
  +        }
  +
  +        return GnWorkspace._(provider, root, packageMap);
         }
   
         // Go up a folder.
  
positive.code:     String sourceDirectory = pathContext.relative(filePath, from: root);
      Folder outDirectory = _getOutDirectory(root, provider);
      if (outDirectory == null) {
        return const <String>[];
      }
      Folder genDir = outDirectory.getChildAssumingFolder(
          pathContext.join('dartlang', 'gen', sourceDirectory));
      if (!genDir.exists) {
        return const <String>[];
      }
      return genDir
          .getChildren()
          .whereType<File>()
          .where((File file) => pathContext.extension(file.path) == '.packages')
          .map((File file) => file.path)
          .toList();
    }
  
  
negative.code:   }
  
    /**
     * Find the GN workspace that contains the given [filePath].
     *
     * Return `null` if a workspace could not be found. For a workspace to be
  