Index: lib/src/compiler/code_generator.dart |
diff --git a/lib/src/compiler/code_generator.dart b/lib/src/compiler/code_generator.dart |
index 2c19b39ef6f2c7ac0a9af6e10978145d953ec503..f3ae615334cd509fc4ff537b6b0086fcb8a7a755 100644 |
--- a/lib/src/compiler/code_generator.dart |
+++ b/lib/src/compiler/code_generator.dart |
@@ -10,6 +10,10 @@ import 'package:analyzer/dart/ast/token.dart' show Token, TokenType; |
import 'package:analyzer/dart/element/element.dart'; |
import 'package:analyzer/dart/element/type.dart'; |
import 'package:analyzer/src/dart/ast/token.dart' show StringToken; |
+ |
+// TODO(vsm): Delete |
+import 'package:analyzer/src/context/source.dart' show SourceFactoryImpl; |
+ |
//TODO(leafp): Remove deprecated dependency |
//ignore: DEPRECATED_MEMBER_USE |
import 'package:analyzer/src/generated/element.dart' |
@@ -190,7 +194,7 @@ class CodeGenerator extends GeneralizingAstVisitor |
var libraryTemp = _isDartRuntime(library) |
? _runtimeLibVar |
- : new JS.TemporaryId(jsLibraryName(library)); |
+ : new JS.TemporaryId(jsLibraryName(context, library)); |
_libraries[library] = libraryTemp; |
items.add(new JS.ExportDeclaration( |
js.call('const # = Object.create(null)', [libraryTemp]))); |
@@ -3684,7 +3688,7 @@ class CodeGenerator extends GeneralizingAstVisitor |
// It's either one of the libraries in this module, or it's an import. |
return _libraries[library] ?? |
_imports.putIfAbsent( |
- library, () => new JS.TemporaryId(jsLibraryName(library))); |
+ library, () => new JS.TemporaryId(jsLibraryName(context, library))); |
} |
JS.Node annotate(JS.Node node, AstNode original, [Element element]) { |
@@ -3760,7 +3764,21 @@ class CodeGenerator extends GeneralizingAstVisitor |
/// Choose a canonical name from the library element. |
/// This never uses the library's name (the identifier in the `library` |
/// declaration) as it doesn't have any meaningful rules enforced. |
-String jsLibraryName(LibraryElement library) { |
+String jsLibraryName(AnalysisContext context, LibraryElement library) { |
+ var sourceFactory = context.sourceFactory as SourceFactoryImpl; |
vsm
2016/04/27 18:24:35
sourceFactory has it's own restoreAbsolute that wa
Jennifer Messerly
2016/04/27 18:30:05
Oh crazy! Is that hard coded? You could change the
Paul Berry
2016/04/27 19:19:57
Are you sure about this? Looking at the definitio
vsm
2016/04/27 20:56:08
yep, just need to set in the right order! will fi
|
+ for (var resolver in sourceFactory.resolvers) { |
+ var uri = resolver.restoreAbsolute(library.source); |
Paul Berry
2016/04/27 19:19:57
Why not just:
var uri = library.source.uri;
This
Jennifer Messerly
2016/04/27 19:24:21
ah, thanks, I wondered that too! Figured maybe I w
vsm
2016/04/27 20:56:08
that should actually work for the bazel use case.
Paul Berry
2016/04/27 21:13:49
Ah, fair point. Ok, I see why this is a use case
Jennifer Messerly
2016/04/27 21:52:51
yeah +1 to all that
@Vijay -- the DDC spot to fix
|
+ if (uri?.scheme == 'package') { |
+ // Strip the package name. |
+ // TODO(vsm): This is not unique if an escaped '/'appears in a filename. |
+ // E.g., "foo/bar.dart" and "foo$47bar.dart" would collide. |
+ var packageRelativePath = uri.pathSegments.skip(1).join('/'); |
+ return pathToJSIdentifier(packageRelativePath); |
+ } |
+ } |
+ // TODO(vsm): This is not unique, but we're not in |
+ // a package. We need a mechanism for creating a unique library |
+ // name. |
return pathToJSIdentifier(library.source.uri.pathSegments.last); |
} |