Join paths before converting to URI (#1879)

Fixes #1878 

Rename executableIds since they are paths now
diff --git a/lib/src/command/deps.dart b/lib/src/command/deps.dart
index 7e3afac..99a6de5 100644
--- a/lib/src/command/deps.dart
+++ b/lib/src/command/deps.dart
@@ -275,7 +275,7 @@
   /// Lists all Dart files in the `bin` directory of the [package].
   ///
   /// Returns file names without extensions.
-  List<String> _getExecutablesFor(Package package) => package.executableIds
+  List<String> _getExecutablesFor(Package package) => package.executablePaths
       .where((e) => _isDartExecutable(p.absolute(package.dir, e)))
       .map((e) => p.basenameWithoutExtension(e));
 
diff --git a/lib/src/entrypoint.dart b/lib/src/entrypoint.dart
index a05550c..b44cc06 100644
--- a/lib/src/entrypoint.dart
+++ b/lib/src/entrypoint.dart
@@ -286,12 +286,10 @@
       var dir = p.join(_snapshotPath, package);
       cleanDir(dir);
       return waitAndPrintErrors(executables[package].map((path) {
-        var url = p.toUri(packageGraph.packages[package].dir);
-        url = url.replace(path: p.url.join(url.path, path));
-        return dart.snapshot(
-            url, p.join(dir, p.url.basename(path) + '.snapshot'),
+        var url = p.toUri(p.join(packageGraph.packages[package].dir, path));
+        return dart.snapshot(url, p.join(dir, p.basename(path) + '.snapshot'),
             packagesFile: p.toUri(packagesFile),
-            name: '$package:${p.url.basenameWithoutExtension(path)}');
+            name: '$package:${p.basenameWithoutExtension(path)}');
       }));
     }));
   }
@@ -343,7 +341,7 @@
     if (!dirExists(binDir)) return [];
     if (packageGraph.isPackageMutable(packageName)) return [];
 
-    var executables = package.executableIds;
+    var executables = package.executablePaths;
 
     // If any executables don't exist, recompile all executables.
     //
@@ -353,7 +351,7 @@
     // some executables do exist and some do not, the directory is corrupted and
     // it's good to start from scratch anyway.
     var executablesExist = executables.every((executable) => fileExists(p.join(
-        _snapshotPath, packageName, "${p.url.basename(executable)}.snapshot")));
+        _snapshotPath, packageName, "${p.basename(executable)}.snapshot")));
     if (!executablesExist) return executables;
 
     // Otherwise, we don't need to recompile.
diff --git a/lib/src/global_packages.dart b/lib/src/global_packages.dart
index 173756d..84cb087 100644
--- a/lib/src/global_packages.dart
+++ b/lib/src/global_packages.dart
@@ -230,10 +230,9 @@
       // possible. This is faster and produces better error messages.
       var package = entrypoint.packageGraph.packages[packageName];
       var precompiled = {};
-      await waitAndPrintErrors(package.executableIds.map((path) async {
-        var url = p.toUri(package.dir);
-        url = url.replace(path: p.url.join(url.path, path));
-        var basename = p.url.basename(path);
+      await waitAndPrintErrors(package.executablePaths.map((path) async {
+        var url = p.toUri(p.join(package.dir, path));
+        var basename = p.basename(path);
         var snapshotPath = p.join(binDir, '$basename.snapshot');
         await dart.snapshot(url, snapshotPath,
             packagesFile: p.toUri(_getPackagesFilePath(package.name)),
diff --git a/lib/src/package.dart b/lib/src/package.dart
index 254028d..66706f7 100644
--- a/lib/src/package.dart
+++ b/lib/src/package.dart
@@ -69,7 +69,7 @@
 
   /// Returns a list of asset ids for all Dart executables in this package's bin
   /// directory.
-  List<String> get executableIds {
+  List<String> get executablePaths {
     return ordered(listFiles(beneath: "bin", recursive: false))
         .where((executable) => p.extension(executable) == '.dart')
         .map((executable) => p.relative(executable, from: dir))