X Tutup
Skip to content

Commit 0bb10d6

Browse files
committed
feat(transformers): makes the map of resolved identifiers configurable
Closes #7359
1 parent 59629a0 commit 0bb10d6

File tree

6 files changed

+60
-34
lines changed

6 files changed

+60
-34
lines changed

modules_dart/transform/lib/src/transform/common/options.dart

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ const FORMAT_CODE_PARAM = 'format_code';
1111
const REFLECT_PROPERTIES_AS_ATTRIBUTES = 'reflect_properties_as_attributes';
1212
const PLATFORM_DIRECTIVES = 'platform_directives';
1313
const PLATFORM_PIPES = 'platform_pipes';
14+
const RESOLVED_IDENTIFIERS = 'resolved_identifiers';
1415
const INIT_REFLECTOR_PARAM = 'init_reflector';
1516
const INLINE_VIEWS_PARAM = 'inline_views';
1617
const MIRROR_MODE_PARAM = 'mirror_mode';
@@ -54,6 +55,9 @@ class TransformerOptions {
5455
/// angular2/lib/src/common/pipes.dart#COMMON_PIPES
5556
final List<String> platformPipes;
5657

58+
/// A map of identifier/asset pairs used when resolving identifiers.
59+
final Map<String, String> resolvedIdentifiers;
60+
5761
/// Whether to format generated code.
5862
/// Code that is only modified will never be formatted because doing so may
5963
/// invalidate the source maps generated by `dart2js` and/or other tools.
@@ -98,6 +102,7 @@ class TransformerOptions {
98102
this.lazyTransformers,
99103
this.platformDirectives,
100104
this.platformPipes,
105+
this.resolvedIdentifiers,
101106
this.reflectPropertiesAsAttributes});
102107

103108
factory TransformerOptions(List<String> entryPoints,
@@ -111,6 +116,7 @@ class TransformerOptions {
111116
bool reflectPropertiesAsAttributes: false,
112117
List<String> platformDirectives,
113118
List<String> platformPipes,
119+
Map<String, String> resolvedIdentifiers,
114120
bool lazyTransformers: false,
115121
bool formatCode: false}) {
116122
var annotationMatcher = new AnnotationMatcher()
@@ -125,6 +131,7 @@ class TransformerOptions {
125131
reflectPropertiesAsAttributes: reflectPropertiesAsAttributes,
126132
platformDirectives: platformDirectives,
127133
platformPipes: platformPipes,
134+
resolvedIdentifiers: resolvedIdentifiers,
128135
inlineViews: inlineViews,
129136
lazyTransformers: lazyTransformers,
130137
formatCode: formatCode);

modules_dart/transform/lib/src/transform/common/options_reader.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import 'annotation_matcher.dart';
55
import 'mirror_mode.dart';
66
import 'options.dart';
77

8-
TransformerOptions parseBarbackSettings(BarbackSettings settings) {
8+
TransformerOptions parseBarbackSettings(BarbackSettings settings) {
99
var config = settings.configuration;
1010
var entryPoints = _readStringList(config, ENTRY_POINT_PARAM);
1111
var initReflector =
@@ -14,6 +14,7 @@ TransformerOptions parseBarbackSettings(BarbackSettings settings) {
1414
_readBool(config, REFLECT_PROPERTIES_AS_ATTRIBUTES, defaultValue: false);
1515
var platformDirectives = _readStringList(config, PLATFORM_DIRECTIVES);
1616
var platformPipes = _readStringList(config, PLATFORM_PIPES);
17+
var resolvedIdentifiers = config[RESOLVED_IDENTIFIERS];
1718
var formatCode = _readBool(config, FORMAT_CODE_PARAM, defaultValue: false);
1819
String mirrorModeVal =
1920
config.containsKey(MIRROR_MODE_PARAM) ? config[MIRROR_MODE_PARAM] : '';
@@ -38,6 +39,7 @@ TransformerOptions parseBarbackSettings(BarbackSettings settings) {
3839
reflectPropertiesAsAttributes: reflectPropertiesAsAttributes,
3940
platformDirectives: platformDirectives,
4041
platformPipes: platformPipes,
42+
resolvedIdentifiers: resolvedIdentifiers,
4143
inlineViews: _readBool(config, INLINE_VIEWS_PARAM, defaultValue: false),
4244
lazyTransformers:
4345
_readBool(config, LAZY_TRANSFORMERS, defaultValue: false),

modules_dart/transform/lib/src/transform/template_compiler/compile_data_creator.dart

Lines changed: 10 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,12 @@ Future<CompileDataResults> createCompileData(
2929
AssetReader reader,
3030
AssetId assetId,
3131
List<String> platformDirectives,
32-
List<String> platformPipes) async {
32+
List<String> platformPipes,
33+
Map<String, String> resolvedIdentifiers
34+
) async {
3335
return logElapsedAsync(() async {
3436
final creator = await _CompileDataCreator.create(
35-
reader, assetId, platformDirectives, platformPipes);
37+
reader, assetId, platformDirectives, platformPipes, resolvedIdentifiers);
3638
return creator != null ? creator.createCompileData() : null;
3739
}, operationName: 'createCompileData', assetId: assetId);
3840
}
@@ -53,19 +55,20 @@ class _CompileDataCreator {
5355
final NgMeta ngMeta;
5456
final List<String> platformDirectives;
5557
final List<String> platformPipes;
58+
final Map<String, String> resolvedIdentifiers;
5659

5760
_CompileDataCreator(this.reader, this.entryPoint, this.ngMeta,
58-
this.platformDirectives, this.platformPipes);
61+
this.platformDirectives, this.platformPipes, this.resolvedIdentifiers);
5962

6063
static Future<_CompileDataCreator> create(AssetReader reader, AssetId assetId,
61-
List<String> platformDirectives, List<String> platformPipes) async {
64+
List<String> platformDirectives, List<String> platformPipes, Map<String, String> resolvedIdentifiers) async {
6265
if (!(await reader.hasInput(assetId))) return null;
6366
final json = await reader.readAsString(assetId);
6467
if (json == null || json.isEmpty) return null;
6568

6669
final ngMeta = new NgMeta.fromJson(JSON.decode(json));
6770
return new _CompileDataCreator(
68-
reader, assetId, ngMeta, platformDirectives, platformPipes);
71+
reader, assetId, ngMeta, platformDirectives, platformPipes, resolvedIdentifiers);
6972
}
7073

7174
NgDepsModel get ngDeps => ngMeta.ngDeps;
@@ -215,24 +218,8 @@ class _CompileDataCreator {
215218
} else if (_isPrimitive(id.name)) {
216219
return id;
217220

218-
// TODO: move the following if statements into transformer configuration
219-
} else if (id.name == "Window") {
220-
return new CompileIdentifierMetadata(name: "Window", moduleUrl: 'dart:html');
221-
222-
} else if (id.name == "Clock") {
223-
return new CompileIdentifierMetadata(name: "Clock", moduleUrl: 'asset:quiver/time/clock.dart');
224-
225-
} else if (id.name == "Profiler") {
226-
return new CompileIdentifierMetadata(name: "Profiler", moduleUrl: 'asset:perf_api/perf_api.dart');
227-
228-
} else if (id.name == "Campaign") {
229-
return new CompileIdentifierMetadata(name: "Campaign", moduleUrl: 'unspecified');
230-
231-
} else if (id.name == "PreloadData") {
232-
return new CompileIdentifierMetadata(name: "PreloadData", moduleUrl: 'unspecified');
233-
234-
} else if (id.name == "FiberMarket") {
235-
return new CompileIdentifierMetadata(name: "FiberMarket", moduleUrl: 'unspecified');
221+
} else if (resolvedIdentifiers != null && resolvedIdentifiers.containsKey(id.name)) {
222+
return new CompileIdentifierMetadata(name: id.name, moduleUrl: resolvedIdentifiers[id.name]);
236223

237224
} else {
238225
log.warning(

modules_dart/transform/lib/src/transform/template_compiler/generator.dart

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,11 @@ Future<Outputs> processTemplates(AssetReader reader, AssetId assetId,
3838
{bool genChangeDetectionDebugInfo: false,
3939
bool reflectPropertiesAsAttributes: false,
4040
List<String> platformDirectives,
41-
List<String> platformPipes}) async {
41+
List<String> platformPipes,
42+
Map<String, String> resolvedIdentifiers
43+
}) async {
4244
var viewDefResults = await createCompileData(
43-
reader, assetId, platformDirectives, platformPipes);
45+
reader, assetId, platformDirectives, platformPipes, resolvedIdentifiers);
4446
if (viewDefResults == null) return null;
4547
final compileTypeMetadatas = viewDefResults.ngMeta.identifiers.values;
4648
if (compileTypeMetadatas.isNotEmpty) {

modules_dart/transform/lib/src/transform/template_compiler/transformer.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,9 @@ class TemplateCompiler extends Transformer implements LazyTransformer {
4747
genChangeDetectionDebugInfo: options.genChangeDetectionDebugInfo,
4848
reflectPropertiesAsAttributes: options.reflectPropertiesAsAttributes,
4949
platformDirectives: options.platformDirectives,
50-
platformPipes: options.platformPipes);
50+
platformPipes: options.platformPipes,
51+
resolvedIdentifiers: options.resolvedIdentifiers
52+
);
5153
var ngDepsCode = _emptyNgDepsContents;
5254
if (outputs != null) {
5355
if (outputs.ngDeps != null) {

modules_dart/transform/test/transform/template_compiler/all_tests.dart

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -83,12 +83,13 @@ void allTests() {
8383
});
8484

8585
Future<String> process(AssetId assetId,
86-
{List<String> platformDirectives, List<String> platformPipes}) {
86+
{List<String> platformDirectives, List<String> platformPipes, Map<String,String> resolvedIdentifiers}) {
8787
logger = new RecordingLogger();
8888
return zone.exec(
8989
() => processTemplates(reader, assetId,
9090
platformDirectives: platformDirectives,
91-
platformPipes: platformPipes),
91+
platformPipes: platformPipes,
92+
resolvedIdentifiers: resolvedIdentifiers),
9293
log: logger);
9394
}
9495

@@ -142,7 +143,7 @@ void allTests() {
142143

143144
updateReader();
144145

145-
final viewDefResults = await createCompileData(reader, fooAssetId, [], []);
146+
final viewDefResults = await createCompileData(reader, fooAssetId, [], [], {});
146147
final cmp = viewDefResults.viewDefinitions.values.first.component;
147148

148149
expect(cmp.providers.length).toEqual(1);
@@ -165,7 +166,7 @@ void allTests() {
165166

166167
updateReader();
167168

168-
final viewDefResults = await createCompileData(reader, fooAssetId, [], []);
169+
final viewDefResults = await createCompileData(reader, fooAssetId, [], [], {});
169170
final cmp = viewDefResults.viewDefinitions.values.first.component;
170171

171172
expect(cmp.providers.length).toEqual(1);
@@ -193,7 +194,7 @@ void allTests() {
193194

194195
updateReader();
195196

196-
final viewDefResults = await createCompileData(reader, fooAssetId, [], []);
197+
final viewDefResults = await createCompileData(reader, fooAssetId, [], [], {});
197198
final cmp = viewDefResults.viewDefinitions.values.first.component;
198199

199200
expect(cmp.providers.length).toEqual(1);
@@ -219,7 +220,7 @@ void allTests() {
219220

220221
updateReader();
221222

222-
final viewDefResults = await createCompileData(reader, fooAssetId, [], []);
223+
final viewDefResults = await createCompileData(reader, fooAssetId, [], [], {});
223224
final cmp = viewDefResults.viewDefinitions.values.first.component;
224225

225226
expect(cmp.providers.length).toEqual(1);
@@ -248,7 +249,7 @@ void allTests() {
248249

249250
updateReader();
250251

251-
final viewDefResults = await createCompileData(reader, fooAssetId, [], []);
252+
final viewDefResults = await createCompileData(reader, fooAssetId, [], [], {});
252253
final cmp = viewDefResults.viewDefinitions.values.first.component;
253254

254255
expect(cmp.providers.length).toEqual(1);
@@ -587,6 +588,31 @@ void allTests() {
587588
..toContain("import 'bar.dart'")
588589
..toContain(barPipeMeta.name);
589590
});
591+
592+
it('should fallback to the list of resolved identifiers.', () async {
593+
barNgMeta.identifiers['Service2'] = new CompileTypeMetadata(name: 'Service2', moduleUrl: 'moduleUrl');
594+
595+
fooComponentMeta.template = new CompileTemplateMetadata(template: "import 'bar.dart';");
596+
fooComponentMeta.providers = [new CompileProviderMetadata(token: new CompileIdentifierMetadata(name: 'Service1'), useClass:
597+
new CompileTypeMetadata(name: 'Service2'))];
598+
599+
final viewAnnotation = new AnnotationModel()..name = 'View'..isView = true;
600+
final reflectable = fooNgMeta.ngDeps.reflectables.first;
601+
reflectable.annotations.add(viewAnnotation);
602+
fooNgMeta.ngDeps.imports.add(new ImportModel()..uri = 'package:a/bar.dart');
603+
604+
updateReader();
605+
606+
final viewDefResults = await createCompileData(reader, fooAssetId, [], [], {"Service1": "someModuleUrl", "Service2": "someModuleUrl"});
607+
final cmp = viewDefResults.viewDefinitions.values.first.component;
608+
609+
expect(cmp.providers.length).toEqual(1);
610+
611+
expect(cmp.providers[0].token.name).toEqual("Service1");
612+
expect(cmp.providers[0].token.moduleUrl).toEqual("someModuleUrl");
613+
expect(cmp.providers[0].useClass.name).toEqual("Service2");
614+
expect(cmp.providers[0].useClass.moduleUrl).toEqual("moduleUrl");
615+
});
590616
}
591617

592618
String _generatedCode(Outputs outputs) {

0 commit comments

Comments
 (0)
X Tutup