| OLD | NEW |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, 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 library dev_compiler.src.checker.rules; | 5 library dev_compiler.src.checker.rules; |
| 6 | 6 |
| 7 import 'package:analyzer/src/generated/ast.dart'; | 7 import 'package:analyzer/src/generated/ast.dart'; |
| 8 import 'package:analyzer/src/generated/element.dart'; | 8 import 'package:analyzer/src/generated/element.dart'; |
| 9 import 'package:analyzer/src/generated/resolver.dart'; | 9 import 'package:analyzer/src/generated/resolver.dart'; |
| 10 | 10 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 37 bool maybeNonNullableType(DartType t) => false; | 37 bool maybeNonNullableType(DartType t) => false; |
| 38 | 38 |
| 39 StaticInfo checkAssignment(Expression expr, DartType t, bool constContext); | 39 StaticInfo checkAssignment(Expression expr, DartType t, bool constContext); |
| 40 | 40 |
| 41 DartType getStaticType(Expression expr) => expr.staticType; | 41 DartType getStaticType(Expression expr) => expr.staticType; |
| 42 | 42 |
| 43 DartType elementType(Element e); | 43 DartType elementType(Element e); |
| 44 | 44 |
| 45 bool isDynamic(DartType t); | 45 bool isDynamic(DartType t); |
| 46 bool isDynamicTarget(Expression expr); | 46 bool isDynamicTarget(Expression expr); |
| 47 bool isDynamicGet(Expression expr); | 47 bool isDynamicGet(Expression target, SimpleIdentifier name); |
| 48 bool isDynamicCall(Expression call); | 48 bool isDynamicCall(Expression call); |
| 49 } | 49 } |
| 50 | 50 |
| 51 class DartRules extends TypeRules { | 51 class DartRules extends TypeRules { |
| 52 DartRules(TypeProvider provider) : super(provider); | 52 DartRules(TypeProvider provider) : super(provider); |
| 53 | 53 |
| 54 bool isSubTypeOf(DartType t1, DartType t2) { | 54 bool isSubTypeOf(DartType t1, DartType t2) { |
| 55 return t1.isSubtypeOf(t2); | 55 return t1.isSubtypeOf(t2); |
| 56 } | 56 } |
| 57 | 57 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 68 return null; | 68 return null; |
| 69 } | 69 } |
| 70 | 70 |
| 71 DartType elementType(Element e) { | 71 DartType elementType(Element e) { |
| 72 return (e as dynamic).type; | 72 return (e as dynamic).type; |
| 73 } | 73 } |
| 74 | 74 |
| 75 /// By default, all invocations are dynamic in Dart. | 75 /// By default, all invocations are dynamic in Dart. |
| 76 bool isDynamic(DartType t) => true; | 76 bool isDynamic(DartType t) => true; |
| 77 bool isDynamicTarget(Expression expr) => true; | 77 bool isDynamicTarget(Expression expr) => true; |
| 78 bool isDynamicGet(Expression expr) => true; | 78 bool isDynamicGet(Expression target, SimpleIdentifier name) => true; |
| 79 bool isDynamicCall(Expression call) => true; | 79 bool isDynamicCall(Expression call) => true; |
| 80 } | 80 } |
| 81 | 81 |
| 82 class RestrictedRules extends TypeRules { | 82 class RestrictedRules extends TypeRules { |
| 83 final CheckerReporter _reporter; | 83 final CheckerReporter _reporter; |
| 84 final RulesOptions options; | 84 final RulesOptions options; |
| 85 final List<DartType> _nonnullableTypes; | 85 final List<DartType> _nonnullableTypes; |
| 86 DownwardsInference inferrer; | 86 DownwardsInference inferrer; |
| 87 | 87 |
| 88 DartType _typeFromName(String name) { | 88 DartType _typeFromName(String name) { |
| (...skipping 434 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 523 } | 523 } |
| 524 | 524 |
| 525 bool isDynamic(DartType t) => options.ignoreTypes || t.isDynamic; | 525 bool isDynamic(DartType t) => options.ignoreTypes || t.isDynamic; |
| 526 | 526 |
| 527 /// Returns `true` if the target expression is dynamic. | 527 /// Returns `true` if the target expression is dynamic. |
| 528 bool isDynamicTarget(Expression expr) => | 528 bool isDynamicTarget(Expression expr) => |
| 529 options.ignoreTypes || getStaticType(expr).isDynamic; | 529 options.ignoreTypes || getStaticType(expr).isDynamic; |
| 530 | 530 |
| 531 /// Returns `true` if the expression is a dynamic property access or prefixed | 531 /// Returns `true` if the expression is a dynamic property access or prefixed |
| 532 /// identifier. | 532 /// identifier. |
| 533 bool isDynamicGet(Expression expr) { | 533 bool isDynamicGet(Expression target, SimpleIdentifier name) { |
| 534 if (options.ignoreTypes) return true; | 534 if (options.ignoreTypes) return true; |
| 535 var t = getStaticType(expr); | 535 if (!name.staticType.isDynamic) return false; |
| 536 var t = getStaticType(target); |
| 536 // TODO(jmesserly): we should not allow all property gets on `Function` | 537 // TODO(jmesserly): we should not allow all property gets on `Function` |
| 537 return t.isDynamic || t.isDartCoreFunction; | 538 return t.isDynamic || t.isDartCoreFunction; |
| 538 } | 539 } |
| 539 | 540 |
| 540 /// Returns `true` if the expression is a dynamic function call or method | 541 /// Returns `true` if the expression is a dynamic function call or method |
| 541 /// invocation. | 542 /// invocation. |
| 542 bool isDynamicCall(Expression call) { | 543 bool isDynamicCall(Expression call) { |
| 543 if (options.ignoreTypes) return true; | 544 if (options.ignoreTypes) return true; |
| 544 var t = getStaticType(call); | 545 var t = getStaticType(call); |
| 545 // TODO(jmesserly): fix handling of types with `call` methods. These are not | 546 // TODO(jmesserly): fix handling of types with `call` methods. These are not |
| (...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 828 var entries = e.entries; | 829 var entries = e.entries; |
| 829 bool inferEntry(MapLiteralEntry entry) { | 830 bool inferEntry(MapLiteralEntry entry) { |
| 830 return _inferExpression(entry.key, kType, errors) && | 831 return _inferExpression(entry.key, kType, errors) && |
| 831 _inferExpression(entry.value, vType, errors); | 832 _inferExpression(entry.value, vType, errors); |
| 832 } | 833 } |
| 833 var b = entries.every(inferEntry); | 834 var b = entries.every(inferEntry); |
| 834 if (b) annotateMapLiteral(e, targs); | 835 if (b) annotateMapLiteral(e, targs); |
| 835 return b; | 836 return b; |
| 836 } | 837 } |
| 837 } | 838 } |
| OLD | NEW |