| OLD | NEW |
| 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, 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 library kernel.class_hierarchy; | 4 library kernel.class_hierarchy; |
| 5 | 5 |
| 6 import 'ast.dart'; | 6 import 'ast.dart'; |
| 7 import 'dart:math'; | 7 import 'dart:math'; |
| 8 import 'dart:typed_data'; | 8 import 'dart:typed_data'; |
| 9 import 'src/heap.dart'; | 9 import 'src/heap.dart'; |
| 10 import 'type_algebra.dart'; | 10 import 'type_algebra.dart'; |
| (...skipping 399 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 410 var superGetters = getInterfaceMembers(superclass); | 410 var superGetters = getInterfaceMembers(superclass); |
| 411 var superSetters = getInterfaceMembers(superclass, setters: true); | 411 var superSetters = getInterfaceMembers(superclass, setters: true); |
| 412 _reportOverrides(info.implementedGettersAndCalls, superGetters, callback); | 412 _reportOverrides(info.implementedGettersAndCalls, superGetters, callback); |
| 413 _reportOverrides(info.declaredGettersAndCalls, superGetters, callback, | 413 _reportOverrides(info.declaredGettersAndCalls, superGetters, callback, |
| 414 onlyAbstract: true); | 414 onlyAbstract: true); |
| 415 _reportOverrides(info.implementedSetters, superSetters, callback, | 415 _reportOverrides(info.implementedSetters, superSetters, callback, |
| 416 isSetter: true); | 416 isSetter: true); |
| 417 _reportOverrides(info.declaredSetters, superSetters, callback, | 417 _reportOverrides(info.declaredSetters, superSetters, callback, |
| 418 isSetter: true, onlyAbstract: true); | 418 isSetter: true, onlyAbstract: true); |
| 419 } | 419 } |
| 420 // If a class declares an abstract method M whose | 420 if (!class_.isAbstract) { |
| 421 // implementation M' is inherited from the superclass, then the inherited | 421 // If a non-abstract class declares an abstract method M whose |
| 422 // method M' overrides the declared method M. | 422 // implementation M' is inherited from the superclass, then the inherited |
| 423 // This flies in the face of conventional override logic, but is necessary | 423 // method M' overrides the declared method M. |
| 424 // because an instance of the class will contain the method M' which can | 424 // This flies in the face of conventional override logic, but is necessary |
| 425 // be invoked through the interface of M. | 425 // because an instance of the class will contain the method M' which can |
| 426 // Note that [_reportOverrides] does not report self-overrides, so in | 426 // be invoked through the interface of M. |
| 427 // most cases these calls will just scan both lists and report nothing. | 427 // Note that [_reportOverrides] does not report self-overrides, so in |
| 428 _reportOverrides(info.implementedGettersAndCalls, | 428 // most cases these calls will just scan both lists and report nothing. |
| 429 info.declaredGettersAndCalls, callback); | 429 _reportOverrides(info.implementedGettersAndCalls, |
| 430 _reportOverrides(info.implementedSetters, info.declaredSetters, callback, | 430 info.declaredGettersAndCalls, callback); |
| 431 isSetter: true); | 431 _reportOverrides(info.implementedSetters, info.declaredSetters, callback, |
| 432 isSetter: true); |
| 433 } |
| 432 } | 434 } |
| 433 | 435 |
| 434 @override | 436 @override |
| 435 void forEachCrossOverridePair(Class class_, | 437 void forEachCrossOverridePair(Class class_, |
| 436 callback(Member declaredMember, Member interfaceMember, bool isSetter), | 438 callback(Member declaredMember, Member interfaceMember, bool isSetter), |
| 437 {bool crossGettersSetters: false}) { | 439 {bool crossGettersSetters: false}) { |
| 438 _ClassInfo info = _infoFor[class_]; | 440 _ClassInfo info = _infoFor[class_]; |
| 439 for (var supertype in class_.supers) { | 441 for (var supertype in class_.supers) { |
| 440 var superclass = supertype.classNode; | 442 var superclass = supertype.classNode; |
| 441 var superGetters = getInterfaceMembers(superclass); | 443 var superGetters = getInterfaceMembers(superclass); |
| (...skipping 727 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1169 class _LubHeap extends Heap<_ClassInfo> { | 1171 class _LubHeap extends Heap<_ClassInfo> { |
| 1170 @override | 1172 @override |
| 1171 bool sortsBefore(_ClassInfo a, _ClassInfo b) => sortsBeforeStatic(a, b); | 1173 bool sortsBefore(_ClassInfo a, _ClassInfo b) => sortsBeforeStatic(a, b); |
| 1172 | 1174 |
| 1173 static bool sortsBeforeStatic(_ClassInfo a, _ClassInfo b) { | 1175 static bool sortsBeforeStatic(_ClassInfo a, _ClassInfo b) { |
| 1174 if (a.depth > b.depth) return true; | 1176 if (a.depth > b.depth) return true; |
| 1175 if (a.depth < b.depth) return false; | 1177 if (a.depth < b.depth) return false; |
| 1176 return a.topologicalIndex < b.topologicalIndex; | 1178 return a.topologicalIndex < b.topologicalIndex; |
| 1177 } | 1179 } |
| 1178 } | 1180 } |
| OLD | NEW |