| 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 // TODO(jmesserly): this was ported from package:dev_compiler, and needs to be | 5 // TODO(jmesserly): this was ported from package:dev_compiler, and needs to be |
| 6 // refactored to fit into analyzer. | 6 // refactored to fit into analyzer. |
| 7 library analyzer.src.task.strong.checker; | 7 library analyzer.src.task.strong.checker; |
| 8 | 8 |
| 9 import 'package:analyzer/analyzer.dart'; | 9 import 'package:analyzer/analyzer.dart'; |
| 10 import 'package:analyzer/dart/ast/ast.dart'; | 10 import 'package:analyzer/dart/ast/ast.dart'; |
| (...skipping 1386 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1397 element.enclosingElement.name, | 1397 element.enclosingElement.name, |
| 1398 element.name, | 1398 element.name, |
| 1399 subType, | 1399 subType, |
| 1400 type, | 1400 type, |
| 1401 baseType | 1401 baseType |
| 1402 ]); | 1402 ]); |
| 1403 } | 1403 } |
| 1404 } | 1404 } |
| 1405 FunctionType concreteSubType = subType; | 1405 FunctionType concreteSubType = subType; |
| 1406 FunctionType concreteBaseType = baseType; | 1406 FunctionType concreteBaseType = baseType; |
| 1407 if (element is MethodElement) { | 1407 if (concreteSubType.typeFormals.isNotEmpty) { |
| 1408 if (concreteSubType.typeFormals.isNotEmpty) { | 1408 if (concreteBaseType.typeFormals.isEmpty) { |
| 1409 if (concreteBaseType.typeFormals.isEmpty) { | 1409 concreteSubType = rules.instantiateToBounds(concreteSubType); |
| 1410 concreteSubType = rules.instantiateToBounds(concreteSubType); | |
| 1411 } | |
| 1412 } | 1410 } |
| 1413 concreteSubType = | |
| 1414 rules.typeToConcreteType(_typeProvider, concreteSubType); | |
| 1415 concreteBaseType = | |
| 1416 rules.typeToConcreteType(_typeProvider, concreteBaseType); | |
| 1417 } | 1411 } |
| 1412 concreteSubType = |
| 1413 rules.typeToConcreteType(_typeProvider, concreteSubType); |
| 1414 concreteBaseType = |
| 1415 rules.typeToConcreteType(_typeProvider, concreteBaseType); |
| 1416 |
| 1418 if (!rules.isSubtypeOf(concreteSubType, concreteBaseType)) { | 1417 if (!rules.isSubtypeOf(concreteSubType, concreteBaseType)) { |
| 1419 // See whether non-subtype cases fit one of our common patterns: | 1418 // See whether non-subtype cases fit one of our common patterns: |
| 1420 // | 1419 // |
| 1421 // Common pattern 1: Inferable return type (on getters and methods) | 1420 // Common pattern 1: Inferable return type (on getters and methods) |
| 1422 // class A { | 1421 // class A { |
| 1423 // int get foo => ...; | 1422 // int get foo => ...; |
| 1424 // String toString() { ... } | 1423 // String toString() { ... } |
| 1425 // } | 1424 // } |
| 1426 // class B extends A { | 1425 // class B extends A { |
| 1427 // get foo => e; // no type specified. | 1426 // get foo => e; // no type specified. |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1476 var visited = new Set<InterfaceType>(); | 1475 var visited = new Set<InterfaceType>(); |
| 1477 do { | 1476 do { |
| 1478 visited.add(current); | 1477 visited.add(current); |
| 1479 current.mixins.reversed.forEach( | 1478 current.mixins.reversed.forEach( |
| 1480 (m) => _checkIndividualOverridesFromClass(node, m, seen, true)); | 1479 (m) => _checkIndividualOverridesFromClass(node, m, seen, true)); |
| 1481 _checkIndividualOverridesFromClass(node, current.superclass, seen, true); | 1480 _checkIndividualOverridesFromClass(node, current.superclass, seen, true); |
| 1482 current = current.superclass; | 1481 current = current.superclass; |
| 1483 } while (!current.isObject && !visited.contains(current)); | 1482 } while (!current.isObject && !visited.contains(current)); |
| 1484 } | 1483 } |
| 1485 } | 1484 } |
| OLD | NEW |