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

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

Issue 329403007: Warn about accessing private properties, but don't choke on it. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 6 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
11 import 'package:html5lib/dom.dart' show Document, Element, Text; 11 import 'package:html5lib/dom.dart' show Document, Element, Text;
12 import 'package:html5lib/dom_parsing.dart'; 12 import 'package:html5lib/dom_parsing.dart';
13 import 'package:html5lib/parser.dart' show parseFragment; 13 import 'package:html5lib/parser.dart' show parseFragment;
14 import 'package:analyzer/src/generated/ast.dart'; 14 import 'package:analyzer/src/generated/ast.dart';
15 import 'package:analyzer/src/generated/element.dart' hide Element; 15 import 'package:analyzer/src/generated/element.dart' hide Element;
16 import 'package:analyzer/src/generated/element.dart' as analyzer show Element; 16 import 'package:analyzer/src/generated/element.dart' as analyzer show Element;
17 import 'package:barback/barback.dart'; 17 import 'package:barback/barback.dart';
18 import 'package:path/path.dart' as path; 18 import 'package:path/path.dart' as path;
19 import 'package:source_maps/span.dart' show SourceFile; 19 import 'package:source_maps/span.dart' show SourceFile, Span;
20 import 'package:smoke/codegen/generator.dart'; 20 import 'package:smoke/codegen/generator.dart';
21 import 'package:smoke/codegen/recorder.dart'; 21 import 'package:smoke/codegen/recorder.dart';
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
(...skipping 453 matching lines...) Expand 10 before | Expand all | Expand 10 after
483 /// will be needed to evaluate them at runtime. 483 /// will be needed to evaluate them at runtime.
484 /// * extracts all attributes declared in the `attribute` attributes of 484 /// * extracts all attributes declared in the `attribute` attributes of
485 /// polymer elements. 485 /// polymer elements.
486 class _HtmlExtractor extends TreeVisitor { 486 class _HtmlExtractor extends TreeVisitor {
487 final Map<String, List<String>> publishedAttributes; 487 final Map<String, List<String>> publishedAttributes;
488 final SmokeCodeGenerator generator; 488 final SmokeCodeGenerator generator;
489 final _SubExpressionVisitor visitor; 489 final _SubExpressionVisitor visitor;
490 final TransformLogger logger; 490 final TransformLogger logger;
491 bool _inTemplate = false; 491 bool _inTemplate = false;
492 492
493 _HtmlExtractor(this.logger, SmokeCodeGenerator generator, 493 _HtmlExtractor(TransformLogger logger, SmokeCodeGenerator generator,
494 this.publishedAttributes) 494 this.publishedAttributes)
495 : generator = generator, 495 : logger = logger, generator = generator,
496 visitor = new _SubExpressionVisitor(generator); 496 visitor = new _SubExpressionVisitor(generator, logger);
497 497
498 void visitElement(Element node) { 498 void visitElement(Element node) {
499 if (_inTemplate) _processNormalElement(node); 499 if (_inTemplate) _processNormalElement(node);
500 if (node.localName == 'polymer-element') { 500 if (node.localName == 'polymer-element') {
501 _processPolymerElement(node); 501 _processPolymerElement(node);
502 _processNormalElement(node); 502 _processNormalElement(node);
503 } 503 }
504 504
505 if (node.localName == 'template') { 505 if (node.localName == 'template') {
506 var last = _inTemplate; 506 var last = _inTemplate;
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
551 tag == 'select' && (name == 'selectedindex' || name == 'value') || 551 tag == 'select' && (name == 'selectedindex' || name == 'value') ||
552 tag == 'textarea' && name == 'value'); 552 tag == 'textarea' && name == 'value');
553 } 553 }
554 for (var exp in bindings.expressions) { 554 for (var exp in bindings.expressions) {
555 _addExpression(exp, isEvent, isTwoWay, node.sourceSpan); 555 _addExpression(exp, isEvent, isTwoWay, node.sourceSpan);
556 } 556 }
557 }); 557 });
558 } 558 }
559 559
560 void _addExpression(String stringExpression, bool inEvent, bool isTwoWay, 560 void _addExpression(String stringExpression, bool inEvent, bool isTwoWay,
561 span) { 561 Span span) {
562 562
563 if (inEvent) { 563 if (inEvent) {
564 if (stringExpression.startsWith('@')) { 564 if (stringExpression.startsWith('@')) {
565 logger.warning('event bindings with @ are no longer supported', 565 logger.warning('event bindings with @ are no longer supported',
566 span: span); 566 span: span);
567 return; 567 return;
568 } 568 }
569 569
570 if (stringExpression == '') return; 570 if (stringExpression == '') return;
571 if (stringExpression.startsWith('_')) {
572 logger.warning('private symbols cannot be used in event handlers',
573 span: span);
574 return;
575 }
571 generator.addGetter(stringExpression); 576 generator.addGetter(stringExpression);
572 generator.addSymbol(stringExpression); 577 generator.addSymbol(stringExpression);
573 } 578 }
574 visitor.run(pe.parse(stringExpression), isTwoWay); 579 visitor.run(pe.parse(stringExpression), isTwoWay, span);
575 } 580 }
576 } 581 }
577 582
578 /// A polymer-expression visitor that records every getter and setter that will 583 /// A polymer-expression visitor that records every getter and setter that will
579 /// be needed to evaluate a single expression at runtime. 584 /// be needed to evaluate a single expression at runtime.
580 class _SubExpressionVisitor extends pe.RecursiveVisitor { 585 class _SubExpressionVisitor extends pe.RecursiveVisitor {
581 final SmokeCodeGenerator generator; 586 final SmokeCodeGenerator generator;
587 final TransformLogger logger;
582 bool _includeSetter; 588 bool _includeSetter;
589 Span _currentSpan;
583 590
584 _SubExpressionVisitor(this.generator); 591 _SubExpressionVisitor(this.generator, this.logger);
585 592
586 /// Visit [exp], and record getters and setters that are needed in order to 593 /// Visit [exp], and record getters and setters that are needed in order to
587 /// evaluate it at runtime. [includeSetter] is only true if this expression 594 /// evaluate it at runtime. [includeSetter] is only true if this expression
588 /// occured in a context where it could be updated, for example in two-way 595 /// occured in a context where it could be updated, for example in two-way
589 /// bindings such as `<input value={{exp}}>`. 596 /// bindings such as `<input value={{exp}}>`.
590 void run(pe.Expression exp, bool includeSetter) { 597 void run(pe.Expression exp, bool includeSetter, span) {
598 _currentSpan = span;
591 _includeSetter = includeSetter; 599 _includeSetter = includeSetter;
592 visit(exp); 600 visit(exp);
593 } 601 }
594 602
595 /// Adds a getter and symbol for [name], and optionally a setter. 603 /// Adds a getter and symbol for [name], and optionally a setter.
596 _add(String name) { 604 _add(String name) {
605 if (name.startsWith('_')) {
606 logger.warning('private symbols are not supported', span: _currentSpan);
607 return;
608 }
597 generator.addGetter(name); 609 generator.addGetter(name);
Siggi Cherem (dart-lang) 2014/06/24 00:58:13 these APIs will cause a later failure if they are
598 generator.addSymbol(name); 610 generator.addSymbol(name);
599 if (_includeSetter) generator.addSetter(name); 611 if (_includeSetter) generator.addSetter(name);
600 } 612 }
601 613
602 void preVisitExpression(e) { 614 void preVisitExpression(e) {
603 // For two-way bindings the outermost expression may be updated, so we need 615 // For two-way bindings the outermost expression may be updated, so we need
604 // both the getter and the setter, but we only need the getter for 616 // both the getter and the setter, but we only need the getter for
605 // subexpressions. We exclude setters as soon as we go deeper in the tree, 617 // subexpressions. We exclude setters as soon as we go deeper in the tree,
606 // except when we see a filter (that can potentially be a two-way 618 // except when we see a filter (that can potentially be a two-way
607 // transformer). 619 // transformer).
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
770 for (var c in combinators) { 782 for (var c in combinators) {
771 if (c is ShowElementCombinator) { 783 if (c is ShowElementCombinator) {
772 var show = c.shownNames.toSet(); 784 var show = c.shownNames.toSet();
773 elements.retainWhere((e) => show.contains(e.displayName)); 785 elements.retainWhere((e) => show.contains(e.displayName));
774 } else if (c is HideElementCombinator) { 786 } else if (c is HideElementCombinator) {
775 var hide = c.hiddenNames.toSet(); 787 var hide = c.hiddenNames.toSet();
776 elements.removeWhere((e) => hide.contains(e.displayName)); 788 elements.removeWhere((e) => hide.contains(e.displayName));
777 } 789 }
778 } 790 }
779 } 791 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698