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

Side by Side Diff: pkg/polymer/lib/src/build/script_compactor.dart

Issue 427623002: Polymer transformer logs now show on the frontend for pub serve. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: dont wrap the logger in release mode Created 6 years, 4 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 /// Transfomer that combines multiple dart script tags into a single one. 5 /// Transfomer that combines multiple dart script tags into a single one.
6 library polymer.src.build.script_compactor; 6 library polymer.src.build.script_compactor;
7 7
8 import 'dart:async'; 8 import 'dart:async';
9 import 'dart:convert'; 9 import 'dart:convert';
10 10
(...skipping 11 matching lines...) Expand all
22 import 'package:code_transformers/resolver.dart'; 22 import 'package:code_transformers/resolver.dart';
23 import 'package:code_transformers/src/dart_sdk.dart'; 23 import 'package:code_transformers/src/dart_sdk.dart';
24 import 'package:template_binding/src/mustache_tokens.dart' show MustacheTokens; 24 import 'package:template_binding/src/mustache_tokens.dart' show MustacheTokens;
25 25
26 import 'package:polymer_expressions/expression.dart' as pe; 26 import 'package:polymer_expressions/expression.dart' as pe;
27 import 'package:polymer_expressions/parser.dart' as pe; 27 import 'package:polymer_expressions/parser.dart' as pe;
28 import 'package:polymer_expressions/visitor.dart' as pe; 28 import 'package:polymer_expressions/visitor.dart' as pe;
29 29
30 import 'import_inliner.dart' show ImportInliner; // just for docs. 30 import 'import_inliner.dart' show ImportInliner; // just for docs.
31 import 'common.dart'; 31 import 'common.dart';
32 import 'wrapped_logger.dart';
32 33
33 /// Combines Dart script tags into a single script tag, and creates a new Dart 34 /// Combines Dart script tags into a single script tag, and creates a new Dart
34 /// file that calls the main function of each of the original script tags. 35 /// file that calls the main function of each of the original script tags.
35 /// 36 ///
36 /// This transformer assumes that all script tags point to external files. To 37 /// This transformer assumes that all script tags point to external files. To
37 /// support script tags with inlined code, use this transformer after running 38 /// support script tags with inlined code, use this transformer after running
38 /// [ImportInliner] on an earlier phase. 39 /// [ImportInliner] on an earlier phase.
39 /// 40 ///
40 /// Internally, this transformer will convert each script tag into an import 41 /// Internally, this transformer will convert each script tag into an import
41 /// statement to a library, and then uses `initPolymer` (see polymer.dart) to 42 /// statement to a library, and then uses `initPolymer` (see polymer.dart) to
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
135 _ResolvedTypes types; 136 _ResolvedTypes types;
136 137
137 /// The resolver instance associated with a single run of this transformer. 138 /// The resolver instance associated with a single run of this transformer.
138 Resolver resolver; 139 Resolver resolver;
139 140
140 /// Code generator used to create the static initialization for smoke. 141 /// Code generator used to create the static initialization for smoke.
141 final generator = new SmokeCodeGenerator(); 142 final generator = new SmokeCodeGenerator();
142 143
143 _SubExpressionVisitor expressionVisitor; 144 _SubExpressionVisitor expressionVisitor;
144 145
145 _ScriptCompactor(Transform transform, this.options, this.resolvers) 146 _ScriptCompactor(Transform transform, options, this.resolvers)
146 : transform = transform, 147 : transform = transform,
147 logger = transform.logger, 148 options = options,
149 logger = options.releaseMode ? transform.logger :
150 new WrappedLogger(transform, convertErrorsToWarnings: true),
148 docId = transform.primaryInput.id, 151 docId = transform.primaryInput.id,
149 bootstrapId = transform.primaryInput.id.addExtension('_bootstrap.dart'); 152 bootstrapId = transform.primaryInput.id.addExtension('_bootstrap.dart');
150 153
151 Future apply() => 154 Future apply() =>
152 _loadDocument() 155 _loadDocument()
153 .then(_loadEntryLibraries) 156 .then(_loadEntryLibraries)
154 .then(_processHtml) 157 .then(_processHtml)
155 .then(_emitNewEntrypoint); 158 .then(_emitNewEntrypoint)
159 .then((_) {
160 // Write out the logs collected by our [WrappedLogger].
161 if (options.injectBuildLogsInOutput && logger is WrappedLogger) {
162 return logger.writeOutput();
163 }
164 });
156 165
157 /// Loads the primary input as an html document. 166 /// Loads the primary input as an html document.
158 Future _loadDocument() => 167 Future _loadDocument() =>
159 readPrimaryAsHtml(transform).then((doc) { document = doc; }); 168 readPrimaryAsHtml(transform).then((doc) { document = doc; });
160 169
161 /// Populates [entryLibraries] as a list containing the asset ids of each 170 /// Populates [entryLibraries] as a list containing the asset ids of each
162 /// library loaded on a script tag. The actual work of computing this is done 171 /// library loaded on a script tag. The actual work of computing this is done
163 /// in an earlier phase and emited in the `entrypoint._data` asset. 172 /// in an earlier phase and emited in the `entrypoint._data` asset.
164 Future _loadEntryLibraries(_) => 173 Future _loadEntryLibraries(_) =>
165 transform.readInputAsString(docId.addExtension('._data')).then((data) { 174 transform.readInputAsString(docId.addExtension('._data')).then((data) {
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after
420 /// Writes the final output for the bootstrap Dart file and entrypoint HTML 429 /// Writes the final output for the bootstrap Dart file and entrypoint HTML
421 /// file. 430 /// file.
422 void _emitFiles(_) { 431 void _emitFiles(_) {
423 StringBuffer code = new StringBuffer()..writeln(MAIN_HEADER); 432 StringBuffer code = new StringBuffer()..writeln(MAIN_HEADER);
424 Map<AssetId, String> prefixes = {}; 433 Map<AssetId, String> prefixes = {};
425 int i = 0; 434 int i = 0;
426 for (var id in entryLibraries) { 435 for (var id in entryLibraries) {
427 var url = assetUrlFor(id, bootstrapId, logger); 436 var url = assetUrlFor(id, bootstrapId, logger);
428 if (url == null) continue; 437 if (url == null) continue;
429 code.writeln("import '$url' as i$i;"); 438 code.writeln("import '$url' as i$i;");
439 if (options.injectBuildLogsInOutput) {
440 code.writeln("import 'package:polymer/src/build/log_injector.dart';");
441 }
430 prefixes[id] = 'i$i'; 442 prefixes[id] = 'i$i';
431 i++; 443 i++;
432 } 444 }
433 445
434 // Include smoke initialization. 446 // Include smoke initialization.
435 generator.writeImports(code); 447 generator.writeImports(code);
436 generator.writeTopLevelDeclarations(code); 448 generator.writeTopLevelDeclarations(code);
437 code.writeln('\nvoid main() {'); 449 code.writeln('\nvoid main() {');
438 code.write(' useGeneratedCode('); 450 code.write(' useGeneratedCode(');
439 generator.writeStaticConfiguration(code); 451 generator.writeStaticConfiguration(code);
440 code.writeln(');'); 452 code.writeln(');');
453
454 if (options.injectBuildLogsInOutput) {
455 code.writeln(' new LogInjector().injectLogsFromUrl();');
456 }
457
441 if (experimentalBootstrap) { 458 if (experimentalBootstrap) {
442 code.write(' startPolymer(['); 459 code.write(' startPolymer([');
443 } else { 460 } else {
444 code.write(' configureForDeployment(['); 461 code.write(' configureForDeployment([');
445 } 462 }
446 463
447 // Include initializers to switch from mirrors_loader to static_loader. 464 // Include initializers to switch from mirrors_loader to static_loader.
448 if (!initializers.isEmpty) { 465 if (!initializers.isEmpty) {
449 code.writeln(); 466 code.writeln();
450 for (var init in initializers) { 467 for (var init in initializers) {
451 var initCode = init.asCode(prefixes[init.assetId]); 468 var initCode = init.asCode(prefixes[init.assetId]);
452 code.write(" $initCode,\n"); 469 code.write(" $initCode,\n");
453 } 470 }
454 code.writeln(' ]);'); 471 code.writeln(' ]);');
455 } else { 472 } else {
456 if (experimentalBootstrap) logger.warning(NO_INITIALIZERS_ERROR); 473 if (experimentalBootstrap) logger.warning(NO_INITIALIZERS_ERROR);
457 code.writeln(']);'); 474 code.writeln(']);');
458 } 475 }
459 if (!experimentalBootstrap) { 476 if (!experimentalBootstrap) {
460 code.writeln(' i${entryLibraries.length - 1}.main();'); 477 code.writeln(' i${entryLibraries.length - 1}.main();');
461 } 478 }
479
480 // End of main().
462 code.writeln('}'); 481 code.writeln('}');
463 transform.addOutput(new Asset.fromString(bootstrapId, code.toString())); 482 transform.addOutput(new Asset.fromString(bootstrapId, code.toString()));
464 483
465 484
466 // Emit the bootstrap .dart file 485 // Emit the bootstrap .dart file
467 var srcUrl = path.url.basename(bootstrapId.path); 486 var srcUrl = path.url.basename(bootstrapId.path);
468 document.body.nodes.add(parseFragment( 487 document.body.nodes.add(parseFragment(
469 '<script type="application/dart" src="$srcUrl"></script>')); 488 '<script type="application/dart" src="$srcUrl"></script>'));
489
490 // Add the styles for the logger widget.
491 if (options.injectBuildLogsInOutput) {
492 document.head.append(parseFragment(
493 '<link rel="stylesheet" type="text/css"'
494 'href="packages/polymer/src/build/log_injector.css">'));
495 }
496
470 transform.addOutput(new Asset.fromString(docId, document.outerHtml)); 497 transform.addOutput(new Asset.fromString(docId, document.outerHtml));
471 } 498 }
472 499
473 _spanForNode(analyzer.Element context, AstNode node) { 500 _spanForNode(analyzer.Element context, AstNode node) {
474 var file = resolver.getSourceFile(context); 501 var file = resolver.getSourceFile(context);
475 return file.span(node.offset, node.end); 502 return file.span(node.offset, node.end);
476 } 503 }
477 } 504 }
478 505
479 abstract class _Initializer { 506 abstract class _Initializer {
(...skipping 343 matching lines...) Expand 10 before | Expand all | Expand 10 after
823 for (var c in combinators) { 850 for (var c in combinators) {
824 if (c is ShowElementCombinator) { 851 if (c is ShowElementCombinator) {
825 var show = c.shownNames.toSet(); 852 var show = c.shownNames.toSet();
826 elements.retainWhere((e) => show.contains(e.displayName)); 853 elements.retainWhere((e) => show.contains(e.displayName));
827 } else if (c is HideElementCombinator) { 854 } else if (c is HideElementCombinator) {
828 var hide = c.hiddenNames.toSet(); 855 var hide = c.hiddenNames.toSet();
829 elements.removeWhere((e) => hide.contains(e.displayName)); 856 elements.removeWhere((e) => hide.contains(e.displayName));
830 } 857 }
831 } 858 }
832 } 859 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698