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