| Index: pkg/dev_compiler/tool/input_sdk/lib/io/link.dart | 
| diff --git a/pkg/dev_compiler/tool/input_sdk/lib/io/link.dart b/pkg/dev_compiler/tool/input_sdk/lib/io/link.dart | 
| deleted file mode 100644 | 
| index 25be38c102566f66bb430728647ab8e8ff224485..0000000000000000000000000000000000000000 | 
| --- a/pkg/dev_compiler/tool/input_sdk/lib/io/link.dart | 
| +++ /dev/null | 
| @@ -1,305 +0,0 @@ | 
| -// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file | 
| -// for details. All rights reserved. Use of this source code is governed by a | 
| -// BSD-style license that can be found in the LICENSE file. | 
| - | 
| -part of dart.io; | 
| - | 
| -/** | 
| - * [Link] objects are references to filesystem links. | 
| - * | 
| - */ | 
| -abstract class Link implements FileSystemEntity { | 
| -  /** | 
| -   * Creates a Link object. | 
| -   */ | 
| -  factory Link(String path) => new _Link(path); | 
| - | 
| -  /** | 
| -   * Creates a [Link] object. | 
| -   * | 
| -   * If [path] is a relative path, it will be interpreted relative to the | 
| -   * current working directory (see [Directory.current]), when used. | 
| -   * | 
| -   * If [path] is an absolute path, it will be immune to changes to the | 
| -   * current working directory. | 
| -   */ | 
| -  factory Link.fromUri(Uri uri) => new Link(uri.toFilePath()); | 
| - | 
| -  /** | 
| -   * Creates a symbolic link. Returns a [:Future<Link>:] that completes with | 
| -   * the link when it has been created. If the link exists, | 
| -   * the future will complete with an error. | 
| -   * | 
| -   * If [recursive] is false, the default, the link is created | 
| -   * only if all directories in its path exist. | 
| -   * If [recursive] is true, all non-existing path | 
| -   * components are created. The directories in the path of [target] are | 
| -   * not affected, unless they are also in [path]. | 
| -   * | 
| -   * On the Windows platform, this will only work with directories, and the | 
| -   * target directory must exist. The link will be created as a Junction. | 
| -   * Only absolute links will be created, and relative paths to the target | 
| -   * will be converted to absolute paths by joining them with the path of the | 
| -   * directory the link is contained in. | 
| -   * | 
| -   * On other platforms, the posix symlink() call is used to make a symbolic | 
| -   * link containing the string [target].  If [target] is a relative path, | 
| -   * it will be interpreted relative to the directory containing the link. | 
| -   */ | 
| -  Future<Link> create(String target, {bool recursive: false}); | 
| - | 
| -  /** | 
| -   * Synchronously create the link. Calling [createSync] on an existing link | 
| -   * will throw an exception. | 
| -   * | 
| -   * If [recursive] is false, the default, the link is created only if all | 
| -   * directories in its path exist. If [recursive] is true, all | 
| -   * non-existing path components are created. The directories in | 
| -   * the path of [target] are not affected, unless they are also in [path]. | 
| -   * | 
| -   * On the Windows platform, this will only work with directories, and the | 
| -   * target directory must exist. The link will be created as a Junction. | 
| -   * Only absolute links will be created, and relative paths to the target | 
| -   * will be converted to absolute paths. | 
| -   * | 
| -   * On other platforms, the posix symlink() call is used to make a symbolic | 
| -   * link containing the string [target].  If [target] is a relative path, | 
| -   * it will be interpreted relative to the directory containing the link. | 
| -   */ | 
| -  void createSync(String target, {bool recursive: false}); | 
| - | 
| -  /** | 
| -   * Synchronously updates the link. Calling [updateSync] on a non-existing link | 
| -   * will throw an exception. | 
| -   * | 
| -   * On the Windows platform, this will only work with directories, and the | 
| -   * target directory must exist. | 
| -   */ | 
| -  void updateSync(String target); | 
| - | 
| -  /** | 
| -   * Updates the link. Returns a [:Future<Link>:] that completes with the | 
| -   * link when it has been updated.  Calling [update] on a non-existing link | 
| -   * will complete its returned future with an exception. | 
| -   * | 
| -   * On the Windows platform, this will only work with directories, and the | 
| -   * target directory must exist. | 
| -   */ | 
| -  Future<Link> update(String target); | 
| - | 
| -  Future<String> resolveSymbolicLinks(); | 
| - | 
| -  String resolveSymbolicLinksSync(); | 
| - | 
| -  /** | 
| -   * Renames this link. Returns a `Future<Link>` that completes | 
| -   * with a [Link] instance for the renamed link. | 
| -   * | 
| -   * If [newPath] identifies an existing link, that link is | 
| -   * replaced. If [newPath] identifies an existing file or directory, | 
| -   * the operation fails and the future completes with an exception. | 
| -   */ | 
| -  Future<Link> rename(String newPath); | 
| - | 
| -   /** | 
| -   * Synchronously renames this link. Returns a [Link] | 
| -   * instance for the renamed link. | 
| -   * | 
| -   * If [newPath] identifies an existing link, that link is | 
| -   * replaced. If [newPath] identifies an existing file or directory | 
| -   * the operation fails and an exception is thrown. | 
| -   */ | 
| -  Link renameSync(String newPath); | 
| - | 
| -  /** | 
| -   * Returns a [Link] instance whose path is the absolute path to [this]. | 
| -   * | 
| -   * The absolute path is computed by prefixing | 
| -   * a relative path with the current working directory, and returning | 
| -   * an absolute path unchanged. | 
| -   */ | 
| -  Link get absolute; | 
| - | 
| -  /** | 
| -   * Gets the target of the link. Returns a future that completes with | 
| -   * the path to the target. | 
| -   * | 
| -   * If the returned target is a relative path, it is relative to the | 
| -   * directory containing the link. | 
| -   * | 
| -   * If the link does not exist, or is not a link, the future completes with | 
| -   * a FileSystemException. | 
| -   */ | 
| -  Future<String> target(); | 
| - | 
| -  /** | 
| -   * Synchronously gets the target of the link. Returns the path to the target. | 
| -   * | 
| -   * If the returned target is a relative path, it is relative to the | 
| -   * directory containing the link. | 
| -   * | 
| -   * If the link does not exist, or is not a link, throws a FileSystemException. | 
| -   */ | 
| -  String targetSync(); | 
| -} | 
| - | 
| - | 
| -class _Link extends FileSystemEntity implements Link { | 
| -  final String path; | 
| - | 
| -  _Link(this.path) { | 
| -    if (path is! String) { | 
| -      throw new ArgumentError('${Error.safeToString(path)} ' | 
| -                              'is not a String'); | 
| -    } | 
| -  } | 
| - | 
| -  String toString() => "Link: '$path'"; | 
| - | 
| -  Future<bool> exists() => FileSystemEntity.isLink(path); | 
| - | 
| -  bool existsSync() => FileSystemEntity.isLinkSync(path); | 
| - | 
| -  Link get absolute => new Link(_absolutePath); | 
| - | 
| -  Future<FileStat> stat() => FileStat.stat(path); | 
| - | 
| -  FileStat statSync() => FileStat.statSync(path); | 
| - | 
| -  Future<Link> create(String target, {bool recursive: false}) { | 
| -    if (Platform.isWindows) { | 
| -      target = _makeWindowsLinkTarget(target); | 
| -    } | 
| -    var result = recursive ? parent.create(recursive: true) | 
| -                           : new Future.value(null); | 
| -    return result | 
| -      .then((_) => _IOService._dispatch(_FILE_CREATE_LINK, [path, target])) | 
| -      .then((response) { | 
| -        if (_isErrorResponse(response)) { | 
| -          throw _exceptionFromResponse( | 
| -              response, "Cannot create link to target '$target'", path); | 
| -        } | 
| -        return this; | 
| -      }); | 
| -  } | 
| - | 
| -  void createSync(String target, {bool recursive: false}) { | 
| -    if (recursive) { | 
| -      parent.createSync(recursive: true); | 
| -    } | 
| -    if (Platform.isWindows) { | 
| -      target = _makeWindowsLinkTarget(target); | 
| -    } | 
| -    var result = _File._createLink(path, target); | 
| -    throwIfError(result, "Cannot create link", path); | 
| -  } | 
| - | 
| -  // Put target into the form "\??\C:\my\target\dir". | 
| -  String _makeWindowsLinkTarget(String target) { | 
| -    Uri base = new Uri.file('${Directory.current.path}\\'); | 
| -    Uri link = new Uri.file(path); | 
| -    Uri destination = new Uri.file(target); | 
| -    String result = base.resolveUri(link).resolveUri(destination).toFilePath(); | 
| -    if (result.length > 3 && result[1] == ':' && result[2] == '\\') { | 
| -      return '\\??\\$result'; | 
| -    } else { | 
| -      throw new FileSystemException( | 
| -          'Target $result of Link.create on Windows cannot be converted' + | 
| -          ' to start with a drive letter.  Unexpected error.'); | 
| -    } | 
| -  } | 
| - | 
| -  void updateSync(String target) { | 
| -    // TODO(12414): Replace with atomic update, where supported by platform. | 
| -    // Atomically changing a link can be done by creating the new link, with | 
| -    // a different name, and using the rename() posix call to move it to | 
| -    // the old name atomically. | 
| -    deleteSync(); | 
| -    createSync(target); | 
| -  } | 
| - | 
| -  Future<Link> update(String target) { | 
| -    // TODO(12414): Replace with atomic update, where supported by platform. | 
| -    // Atomically changing a link can be done by creating the new link, with | 
| -    // a different name, and using the rename() posix call to move it to | 
| -    // the old name atomically. | 
| -    return delete().then((_) => create(target)); | 
| -  } | 
| - | 
| -  Future<Link> _delete({bool recursive: false}) { | 
| -    if (recursive) { | 
| -      return new Directory(path).delete(recursive: true).then((_) => this); | 
| -    } | 
| -    return _IOService._dispatch(_FILE_DELETE_LINK, [path]).then((response) { | 
| -      if (_isErrorResponse(response)) { | 
| -        throw _exceptionFromResponse(response, "Cannot delete link", path); | 
| -      } | 
| -      return this; | 
| -    }); | 
| -  } | 
| - | 
| -  void _deleteSync({bool recursive: false}) { | 
| -    if (recursive) { | 
| -      return new Directory(path).deleteSync(recursive: true); | 
| -    } | 
| -    var result = _File._deleteLinkNative(path); | 
| -    throwIfError(result, "Cannot delete link", path); | 
| -  } | 
| - | 
| -  Future<Link> rename(String newPath) { | 
| -    return _IOService._dispatch(_FILE_RENAME_LINK, [path, newPath]) | 
| -        .then((response) { | 
| -          if (_isErrorResponse(response)) { | 
| -            throw _exceptionFromResponse( | 
| -                response, "Cannot rename link to '$newPath'", path); | 
| -          } | 
| -          return new Link(newPath); | 
| -        }); | 
| -  } | 
| - | 
| -  Link renameSync(String newPath) { | 
| -    var result = _File._renameLink(path, newPath); | 
| -    throwIfError(result, "Cannot rename link '$path' to '$newPath'"); | 
| -    return new Link(newPath); | 
| -  } | 
| - | 
| -  Future<String> target() { | 
| -    return _IOService._dispatch(_FILE_LINK_TARGET, [path]).then((response) { | 
| -      if (_isErrorResponse(response)) { | 
| -        throw _exceptionFromResponse( | 
| -            response, "Cannot get target of link", path); | 
| -      } | 
| -      return response; | 
| -    }); | 
| -  } | 
| - | 
| -  String targetSync() { | 
| -    var result = _File._linkTarget(path); | 
| -    throwIfError(result, "Cannot read link", path); | 
| -    return result; | 
| -  } | 
| - | 
| -  static throwIfError(Object result, String msg, [String path = ""]) { | 
| -    if (result is OSError) { | 
| -      throw new FileSystemException(msg, path, result); | 
| -    } | 
| -  } | 
| - | 
| -  bool _isErrorResponse(response) { | 
| -    return response is List && response[0] != _SUCCESS_RESPONSE; | 
| -  } | 
| - | 
| -  _exceptionFromResponse(response, String message, String path) { | 
| -    assert(_isErrorResponse(response)); | 
| -    switch (response[_ERROR_RESPONSE_ERROR_TYPE]) { | 
| -      case _ILLEGAL_ARGUMENT_RESPONSE: | 
| -        return new ArgumentError(); | 
| -      case _OSERROR_RESPONSE: | 
| -        var err = new OSError(response[_OSERROR_RESPONSE_MESSAGE], | 
| -                              response[_OSERROR_RESPONSE_ERROR_CODE]); | 
| -        return new FileSystemException(message, path, err); | 
| -      default: | 
| -        return new Exception("Unknown error"); | 
| -    } | 
| -  } | 
| -} | 
|  |