anchor.diff:  }
   
   /**
  + * Return a (semi-)canonicalized version of [path] for the purpose of analysis.
  + *
  + * Using the built-in path's [canonicalize] results in fully lowercase paths on
  + * Windows displayed to the user so this method uses [normalize] and then just
  + * uppercases the drive letter on Windows to resolve the most common issues.
  + */
  +String _canonicalize(String path) {
  +  path = normalize(path);
  +  // Ideally we'd call path's [canonicalize] here to ensure that on
  +  // case-insensitive file systems that different casing paths resolved to the
  +  // same thing; however these paths are used both as both as part of the
  +  // identity and also to display to users in error messages so for now we only
  +  // canonicalize the drive letter to resolve the most common issues.
  +  // https://github.com/dart-lang/sdk/issues/32095
  +  if (io.Platform.isWindows && isAbsolute(path)) {
  +    path = path.substring(0, 1).toUpperCase() + path.substring(1);
  +  }
  +  return path;
  +}
  +
  +/**
   * The name of the directory containing plugin specific subfolders used to
   * store data across sessions.
   */
  
positive.code: 
    @override
    String canonicalizePath(String relPath) {
      return normalize(join(path, relPath));
    }
  
    @override
  
negative.code: 
    @override
    File getFile(String path) {
      path = _canonicalize(path);
      return new _PhysicalFile(new io.File(path));
    }
  
    @override
    Folder getFolder(String path) {
      path = _canonicalize(path);
      return new _PhysicalFolder(new io.Directory(path));
    }
  
  