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

Unified Diff: lib/transformer.dart

Issue 880713002: add LibraryIdentifier (Closed) Base URL: git@github.com:dart-lang/static-init.git@master
Patch Set: code review updates Created 5 years, 11 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
« no previous file with comments | « lib/src/mirror_loader.dart ('k') | pubspec.yaml » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/transformer.dart
diff --git a/lib/transformer.dart b/lib/transformer.dart
index 392d3228a14fd429a86df1a884cce6a99f72d551..8036761a0657b039dd8eb3d02d201358fb2ec54a 100644
--- a/lib/transformer.dart
+++ b/lib/transformer.dart
@@ -242,9 +242,10 @@ class _BootstrapFileBuilder {
var initializersBuffer = new StringBuffer();
var libraryPrefixes = new Map<LibraryElement, String>();
- // Import the static_loader and original entry point.
+ // Import the static_loader, initializer, and original entry point.
importsBuffer
.writeln("import 'package:initialize/src/static_loader.dart';");
+ importsBuffer.writeln("import 'package:initialize/initialize.dart';");
libraryPrefixes[entryLib] = 'i0';
initializersBuffer.writeln(' initializers.addAll([');
@@ -300,7 +301,27 @@ $initializersBuffer
final metaPrefix = libraryPrefixes[annotationElement.library];
var elementString;
if (element is LibraryElement) {
- elementString = '#${element.name}';
+ var segments = element.source.uri.pathSegments;
+ var package = segments[0];
+ var libraryPath;
+ var packageString;
+ if (_newEntryPoint.package == package &&
+ _newEntryPoint.path.startsWith('${segments[1]}/')) {
+ // reset `package` to null, we will do a relative path in this case.
+ packageString = 'null';
+ libraryPath = path.url.relative(
+ path.url.joinAll(segments.getRange(1, segments.length)),
+ from: path.url.dirname(path.url.join(_newEntryPoint.path)));
+ } else if (segments[1] == 'lib') {
+ packageString = "'$package'";
+ libraryPath = path.url.joinAll(segments.getRange(2, segments.length));
+ } else {
+ _logger.error('Unable to import `${element.source.uri.path}` from '
+ '${_newEntryPoint.path}.');
+ }
+
+ elementString = "const LibraryIdentifier("
+ "#${element.name}, $packageString, '$libraryPath')";
} else if (element is ClassElement || element is FunctionElement) {
elementString =
'${libraryPrefixes[data.element.library]}.${element.name}';
« no previous file with comments | « lib/src/mirror_loader.dart ('k') | pubspec.yaml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698