fix(dart/transform): Omit bootstrap.dart in ng_deps

Special-case to avoid copying the bootstrap{,_static}.dart
import when creating `.ng_deps.dart` files.

Closes #5315

Closes #5348
This commit is contained in:
Tim Blasi 2015-11-18 12:40:06 -08:00 committed by Timothy Blasi
parent 3c43a8c549
commit 0db02523d3
5 changed files with 32 additions and 18 deletions

View File

@ -1,7 +1,9 @@
library angular2.transform.common.code.import_export_code;
import 'package:analyzer/analyzer.dart';
import 'package:angular2/src/transform/common/mirror_matcher.dart';
import 'package:angular2/src/transform/common/names.dart';
import 'package:angular2/src/transform/common/model/import_export_model.pb.dart';
const _mirrorMatcher = const MirrorMatcher();
@ -12,21 +14,17 @@ class ImportVisitor extends SimpleAstVisitor<ImportModel> {
ImportModel visitImportDirective(ImportDirective node) {
if (node.isSynthetic) return null;
/// We skip this, as it transitively imports 'dart:mirrors'
// This transitively imports 'dart:mirrors'.
if (_mirrorMatcher.hasReflectionCapabilitiesUri(node)) return null;
String uri = stringLiteralToString(node.uri);
// The bootstrap code also transitively imports 'dart:mirrors'
if (_mirrorMatcher.hasBootstrapUri(node)) {
uri = BOOTSTRAP_STATIC_URI;
}
var model = new ImportModel()
..uri = uri
final model = new ImportModel()
..uri = stringLiteralToString(node.uri)
..isDeferred = node.deferredKeyword != null;
if (node.prefix != null) {
model.prefix = node.prefix.name;
}
_populateCombinators(node, model);
_updateIfBootstrap(node, model);
return model;
}
}
@ -37,20 +35,35 @@ class ExportVisitor extends SimpleAstVisitor<ExportModel> {
ExportModel visitExportDirective(ExportDirective node) {
if (node.isSynthetic) return null;
/// We skip this, as it transitively imports 'dart:mirrors'
// This transitively imports 'dart:mirrors'.
if (_mirrorMatcher.hasReflectionCapabilitiesUri(node)) return null;
String uri = stringLiteralToString(node.uri);
// The bootstrap code also transitively imports 'dart:mirrors'
if (_mirrorMatcher.hasBootstrapUri(node)) {
uri = BOOTSTRAP_STATIC_URI;
}
var model = new ExportModel()..uri = uri;
var model = new ExportModel()..uri = stringLiteralToString(node.uri);
_populateCombinators(node, model);
_updateIfBootstrap(node, model);
return model;
}
}
/// Ensures that the bootstrap import is not retained in .ng_deps.
///
/// If `model` has a combinator referencing `BOOTSTRAP_NAME`, rewrite it to
/// `BOOTSTRAP_STATIC_NAME`.
/// `model` should be an [ImportModel] or an [ExportModel].
void _updateIfBootstrap(NamespaceDirective node, dynamic model) {
if (_mirrorMatcher.hasBootstrapUri(node)) {
model.uri = BOOTSTRAP_STATIC_URI;
[model.showCombinators, model.hideCombinators]
.forEach((List<String> cList) {
for (var i = 0; i < cList.length; ++i) {
if (cList[i] == BOOTSTRAP_NAME) {
cList[i] = BOOTSTRAP_STATIC_NAME;
}
}
});
}
}
/// Parses `combinators` in `node` and adds them to `model`, which should be
/// either an [ImportModel] or an [ExportModel].
void _populateCombinators(NamespaceDirective node, dynamic model) {

View File

@ -1,6 +1,7 @@
library angular2.transform.common.names;
const BOOTSTRAP_NAME = 'bootstrap';
const BOOTSTRAP_STATIC_NAME = 'bootstrapStatic';
const SETUP_METHOD_NAME = 'initReflector';
const REFLECTOR_VAR_NAME = 'reflector';
const TRANSFORM_DYNAMIC_MODE = 'transform_dynamic';

View File

@ -140,7 +140,7 @@ class _RewriterVisitor extends Object with RecursiveAstVisitor<Object> {
_setupAdded ? '' : ', () { ${_getStaticReflectorInitBlock()} }';
// rewrite `bootstrap(...)` to `bootstrapStatic(...)`
buf.write('bootstrapStatic(${args[0]}');
buf.write('$BOOTSTRAP_STATIC_NAME(${args[0]}');
if (numArgs == 1) {
// bootstrap args are positional, so before we pass reflectorInit code
// we need to pass `null` for DI bindings.

View File

@ -2,7 +2,7 @@ library web_foo.ng_deps.dart;
import 'index.dart';
import 'package:angular2/src/core/reflection/reflection.dart' as _ngRef;
import 'package:angular2/bootstrap_static.dart';
import 'package:angular2/bootstrap_static.dart' show bootstrapStatic;
import 'package:angular2/src/core/reflection/reflection.dart';
import 'bar.dart';
import 'bar.ng_deps.dart' as i0;

View File

@ -1,6 +1,6 @@
library web_foo;
import 'package:angular2/bootstrap.dart';
import 'package:angular2/bootstrap.dart' show bootstrap;
import 'package:angular2/src/core/reflection/reflection.dart';
import 'package:angular2/src/core/reflection/reflection_capabilities.dart';
import 'bar.dart';