Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1298)

Unified Diff: sdk/lib/_internal/pub/lib/src/barback/dart2js_transformer.dart

Issue 207423003: Support Dart core libraries in source maps. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Revise. Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: sdk/lib/_internal/pub/lib/src/barback/dart2js_transformer.dart
diff --git a/sdk/lib/_internal/pub/lib/src/barback/dart2js_transformer.dart b/sdk/lib/_internal/pub/lib/src/barback/dart2js_transformer.dart
index de74c749f30fcd89097d81de74c343cdcfc17c1b..83ad27cfffbf79b9c826ec8672857fb6eb4f19a9 100644
--- a/sdk/lib/_internal/pub/lib/src/barback/dart2js_transformer.dart
+++ b/sdk/lib/_internal/pub/lib/src/barback/dart2js_transformer.dart
@@ -185,8 +185,11 @@ class Dart2JSTransformer extends Transformer implements LazyTransformer {
/// difference is that it uses barback's logging code and, more importantly, it
/// handles missing source files more gracefully.
class _BarbackCompilerProvider implements dart.CompilerProvider {
+ Uri get libraryRoot => Uri.parse("${path.toUri(_libraryRootPath)}/");
+
final BuildEnvironment _environment;
final Transform _transform;
+ String _libraryRootPath;
/// The map of previously loaded files.
///
@@ -222,7 +225,30 @@ class _BarbackCompilerProvider implements dart.CompilerProvider {
compiler.Diagnostic.VERBOSE_INFO.ordinal;
_BarbackCompilerProvider(this._environment, this._transform,
- {this.generateSourceMaps: true});
+ {this.generateSourceMaps: true}) {
+ // Dart2js outputs source maps that reference the Dart SDK sources. For
+ // that to work, those sources need to be inside the build environment. We
+ // do that by placing them in a special "$sdk" pseudo-package. In order for
+ // dart2js to generate the right URLs to point to that package, we give it
+ // a library root that corresponds to where that package can be found
+ // relative to the public build directory containing that entrypoint.
+ //
+ // For example, say the package being compiled is "/dev/myapp", the
+ // entrypoint is "web/sub/foo/bar.dart", and the build directory is
+ // "web/sub". This means the SDK sources will be (conceptually) at:
+ //
+ // /dev/myapp/web/sub/packages/$sdk/lib/
+ //
+ // This implies that the asset path for a file in the SDK is:
+ //
+ // $sdk|lib/lib/...
+ //
+ // TODO(rnystrom): Fix this if $17751 is fixed.
nweiz 2014/03/24 23:17:14 "$" -> "#"
Bob Nystrom 2014/03/25 00:49:27 Done.
+ var buildDir = _environment.getBuildDirectoryContaining(
+ _transform.primaryInput.id.path);
+ _libraryRootPath = path.join(_environment.rootPackage.dir,
+ buildDir, "packages", r"$sdk");
+ }
/// A [CompilerInputProvider] for dart2js.
Future<String> provideInput(Uri resourceUri) {
@@ -329,15 +355,13 @@ class _BarbackCompilerProvider implements dart.CompilerProvider {
}
Future<String> _readResource(Uri url) {
- // See if the path is within a package. If so, use Barback so we can use
- // generated Dart assets.
-
+ // Find the corresponding asset in barback.
var id = _sourceUrlToId(url);
if (id != null) return _transform.readInputAsString(id);
- // If we get here, the path doesn't appear to be in a package, so we'll
- // skip Barback and just hit the file system. This will occur at the very
- // least for dart2js's implementations of the core libraries.
+ // If we get here, the path doesn't appear to be in any package, so we'll
+ // skip Barback and just hit the file system. This will only occur for
+ // absolute file paths in imports that don't touch a package.
var sourcePath = path.fromUri(url);
return Chain.track(new File(sourcePath).readAsString());
}

Powered by Google App Engine
This is Rietveld 408576698