| OLD | NEW |
| (Empty) | |
| 1 import 'package:angular/core/parser/parser_library.dart'; |
| 2 import 'package:angular/tools/reserved_dart_keywords.dart'; |
| 3 |
| 4 class _AST implements ParserAST { |
| 5 bool get assignable => true; |
| 6 } |
| 7 |
| 8 class DartGetterSetterGen implements ParserBackend { |
| 9 Map<String, bool> identifiers = {}; |
| 10 |
| 11 profiled(value, perf, text) => new _AST(); |
| 12 |
| 13 binaryFn(left, String fn, right) => new _AST(); |
| 14 unaryFn(String fn, right) => new _AST(); |
| 15 ternaryFn(Expression cond, Expression _true, Expression _false) => new _AST(); |
| 16 assignment(left, right, evalError) => new _AST(); |
| 17 multipleStatements(List statements) => new _AST(); |
| 18 arrayDeclaration(List elementFns) => new _AST(); |
| 19 objectIndex(obj, indexFn, evalError) => new _AST(); |
| 20 object(List keyValues) => new _AST(); |
| 21 fromOperator(String op) => new _AST(); |
| 22 value(v) => new _AST(); |
| 23 zero() => new _AST(); |
| 24 functionCall(fn, fnName, List argsFn, evalError) => new _AST(); |
| 25 filter(String filterName, |
| 26 Expression leftHandSide, |
| 27 List<Expression> parameters, |
| 28 Function evalError) => new _AST(); |
| 29 |
| 30 setter(String path) => throw new UnimplementedError(); |
| 31 getter(String path) => throw new UnimplementedError(); |
| 32 |
| 33 |
| 34 fieldAccess(object, String field) { |
| 35 identifiers[field] = true; |
| 36 return new _AST(); |
| 37 } |
| 38 |
| 39 getterSetter(String key) { |
| 40 key.split('.').forEach((i) => identifiers[i] = true); |
| 41 return new _AST(); |
| 42 } |
| 43 } |
| 44 |
| 45 class ParserGetterSetter { |
| 46 |
| 47 DynamicParser parser; |
| 48 DartGetterSetterGen backend; |
| 49 |
| 50 ParserGetterSetter(this.parser, this.backend); |
| 51 |
| 52 generateParser(List<String> exprs) { |
| 53 exprs.forEach((expr) { |
| 54 try { |
| 55 parser(expr); |
| 56 } catch (e) { } |
| 57 }); |
| 58 |
| 59 print(generateCode(backend.identifiers.keys.toList())); |
| 60 } |
| 61 |
| 62 generateCode(Iterable<String> keys) { |
| 63 keys = keys.where((key) => !isReserved(key)); |
| 64 return ''' |
| 65 class StaticGetterSetter extends GetterSetter { |
| 66 Map<String, Function> _getters = ${generateGetterMap(keys)}; |
| 67 Map<String, Function> _setters = ${generateSetterMap(keys)}; |
| 68 |
| 69 Function getter(String key) { |
| 70 return _getters.containsKey(key) ? _getters[key] : super.getter(key); |
| 71 } |
| 72 |
| 73 Function setter(String key) { |
| 74 return _setters.containsKey(key) ? _setters[key] : super.setter(key); |
| 75 } |
| 76 |
| 77 } |
| 78 '''; |
| 79 } |
| 80 |
| 81 generateGetterMap(Iterable<String> keys) { |
| 82 var lines = keys.map((key) => 'r"${key}": (s) => s.$key'); |
| 83 return '{\n ${lines.join(",\n ")}\n }'; |
| 84 } |
| 85 |
| 86 generateSetterMap(Iterable<String> keys) { |
| 87 var lines = keys.map((key) => 'r"${key}": (s, v) => s.$key = v'); |
| 88 return '{\n ${lines.join(",\n ")}\n }'; |
| 89 } |
| 90 } |
| OLD | NEW |