Index: lib/src/codegen/js_codegen.dart |
diff --git a/lib/src/codegen/js_codegen.dart b/lib/src/codegen/js_codegen.dart |
index 3dfbe257d4fe0d3be49cc5232386e3f67b5a27e5..76b0832f9e5296ec76d8147f74d95d54a05cee3e 100644 |
--- a/lib/src/codegen/js_codegen.dart |
+++ b/lib/src/codegen/js_codegen.dart |
@@ -13,7 +13,6 @@ import 'package:analyzer/src/generated/element.dart'; |
import 'package:analyzer/src/generated/resolver.dart' show TypeProvider; |
import 'package:analyzer/src/generated/scanner.dart' |
show StringToken, Token, TokenType; |
-import 'package:path/path.dart' as path; |
import 'package:dev_compiler/src/codegen/ast_builder.dart' show AstBuilder; |
import 'package:dev_compiler/src/codegen/reify_coercions.dart' |
@@ -23,7 +22,7 @@ import 'package:dev_compiler/src/codegen/reify_coercions.dart' |
import 'package:dev_compiler/src/js/js_ast.dart' as JS; |
import 'package:dev_compiler/src/js/js_ast.dart' show js; |
-import 'package:dev_compiler/devc.dart' show AbstractCompiler; |
+import 'package:dev_compiler/src/compiler.dart' show AbstractCompiler; |
import 'package:dev_compiler/src/checker/rules.dart'; |
import 'package:dev_compiler/src/info.dart'; |
import 'package:dev_compiler/src/options.dart' show CodegenOptions; |
@@ -53,10 +52,7 @@ class JSCodegenVisitor extends GeneralizingAstVisitor { |
final AbstractCompiler compiler; |
final CodegenOptions options; |
final TypeRules rules; |
- final LibraryInfo libraryInfo; |
- |
- /// Entry point uri |
- final Uri root; |
+ final LibraryElement currentLibrary; |
/// The global extension type table. |
final HashSet<ClassElement> _extensionTypes; |
@@ -98,12 +94,11 @@ class JSCodegenVisitor extends GeneralizingAstVisitor { |
Map<String, DartType> _objectMembers; |
- JSCodegenVisitor(AbstractCompiler compiler, this.libraryInfo, |
+ JSCodegenVisitor(AbstractCompiler compiler, this.currentLibrary, |
this._extensionTypes, this._fieldsNeedingStorage) |
: compiler = compiler, |
options = compiler.options.codegenOptions, |
- rules = compiler.rules, |
- root = compiler.entryPointUri { |
+ rules = compiler.rules { |
_loader = new ModuleItemLoadOrder(_emitModuleItem); |
var context = compiler.context; |
@@ -114,7 +109,6 @@ class JSCodegenVisitor extends GeneralizingAstVisitor { |
_objectMembers = getObjectMemberMap(types); |
} |
- LibraryElement get currentLibrary => libraryInfo.library; |
TypeProvider get types => rules.provider; |
JS.Program emitLibrary(LibraryUnit library) { |
@@ -178,7 +172,7 @@ class JSCodegenVisitor extends GeneralizingAstVisitor { |
_moduleItems.add(js.statement('#.# = #;', [_exportsVar, name, name])); |
} |
- var jsPath = js.string(jsOutputBase(currentLibrary, root), "'"); |
+ var jsPath = compiler.getModuleName(currentLibrary.source.uri); |
// TODO(jmesserly): it would be great to run the renamer on the body, |
// then figure out if we really need each of these parameters. |
@@ -187,7 +181,7 @@ class JSCodegenVisitor extends GeneralizingAstVisitor { |
var processImport = (LibraryElement library, JS.TemporaryId temp, |
List list) { |
params.add(temp); |
- list.add(js.string(jsOutputBase(library, root), "'")); |
+ list.add(js.string(compiler.getModuleName(library.source.uri), "'")); |
}; |
var imports = [js.string('dart_runtime/dart')]; |
@@ -215,7 +209,7 @@ class JSCodegenVisitor extends GeneralizingAstVisitor { |
var program = [ |
js.statement("dart_library.library(#, #, #, #, #)", [ |
- jsPath, |
+ js.string(jsPath, "'"), |
jsDefaultValue != null ? jsDefaultValue : new JS.LiteralNull(), |
js.commentExpression( |
"Imports", new JS.ArrayInitializer(imports, multiline: true)), |
@@ -2807,12 +2801,14 @@ class JSGenerator extends CodeGenerator { |
_addExtensionType(t.superclass); |
} |
- String generateLibrary(LibraryUnit unit, LibraryInfo info) { |
+ String generateLibrary(LibraryUnit unit) { |
+ var library = unit.library.element.library; |
var fields = findFieldsNeedingStorage(unit); |
- var codegen = new JSCodegenVisitor(compiler, info, _extensionTypes, fields); |
+ var codegen = |
+ new JSCodegenVisitor(compiler, library, _extensionTypes, fields); |
var module = codegen.emitLibrary(unit); |
- var dir = path.join(outDir, jsOutputPath(info.library, root)); |
- return writeJsLibrary(module, dir, emitSourceMaps: options.emitSourceMaps); |
+ var out = compiler.getOutputPath(library.source.uri); |
+ return writeJsLibrary(module, out, emitSourceMaps: options.emitSourceMaps); |
} |
} |
@@ -2827,28 +2823,6 @@ String jsLibraryName(LibraryElement library) => canonicalLibraryName(library); |
// TODO(jmesserly): avoid the round tripping through quoted form. |
JS.LiteralString _propertyName(String name) => js.string(name, "'"); |
-/// Path to file that will be generated for [info]. In case it's url is a |
-/// `file:` url, we use [root] to determine the relative path from the entry |
-/// point file. |
-String jsOutputPath(LibraryElement library, Uri root) { |
- return '${jsOutputBase(library, root)}.js'; |
-} |
- |
-String jsOutputBase(LibraryElement library, Uri root) { |
- var uri = library.source.uri; |
- var filepath = path.withoutExtension(uri.path); |
- if (uri.scheme == 'dart') { |
- filepath = 'dart/$filepath'; |
- } else if (uri.scheme == 'file') { |
- filepath = path.relative(filepath, from: path.dirname(root.path)); |
- } else { |
- assert(uri.scheme == 'package'); |
- // filepath is good here, we want the output to start with a directory |
- // matching the package name. |
- } |
- return filepath; |
-} |
- |
// TODO(jmesserly): validate the library. See issue #135. |
bool _isJsNameAnnotation(DartObjectImpl value) => value.type.name == 'JsName'; |