| 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 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 81 /// [name]. | 81 /// [name]. |
| 82 /// | 82 /// |
| 83 /// If [setter] is `false`, only fields, methods, and getters with that name | 83 /// If [setter] is `false`, only fields, methods, and getters with that name |
| 84 /// will be found. If [setter] is `true`, only non-final fields and setters | 84 /// will be found. If [setter] is `true`, only non-final fields and setters |
| 85 /// will be found. | 85 /// will be found. |
| 86 /// | 86 /// |
| 87 /// If multiple members with that name are inherited and not overridden, the | 87 /// If multiple members with that name are inherited and not overridden, the |
| 88 /// member from the first declared supertype is returned. | 88 /// member from the first declared supertype is returned. |
| 89 Member getInterfaceMember(Class class_, Name name, {bool setter: false}); | 89 Member getInterfaceMember(Class class_, Name name, {bool setter: false}); |
| 90 | 90 |
| 91 /// Returns the list of members denoting the interface for [class_], which |
| 92 /// may include abstract members. |
| 93 /// |
| 94 /// The list may contain multiple members with a given name. This happens |
| 95 /// when members are inherited through different supertypes and not overridden |
| 96 /// in the class. |
| 97 /// |
| 98 /// Also see [getInterfaceMember]. |
| 99 List<Member> getInterfaceMembers(Class class_, {bool setters: false}); |
| 100 |
| 91 /// Invokes [callback] for every member declared in or inherited by [class_] | 101 /// Invokes [callback] for every member declared in or inherited by [class_] |
| 92 /// that overrides or implements a member in a supertype of [class_] | 102 /// that overrides or implements a member in a supertype of [class_] |
| 93 /// (or in rare cases, overrides a member declared in [class_]). | 103 /// (or in rare cases, overrides a member declared in [class_]). |
| 94 /// | 104 /// |
| 95 /// We use the term "inheritable" for members that are candidates for | 105 /// We use the term "inheritable" for members that are candidates for |
| 96 /// inheritance but may have been overridden. The "declared" members of a | 106 /// inheritance but may have been overridden. The "declared" members of a |
| 97 /// mixin application are those declared in the mixed-in type. The callback is | 107 /// mixin application are those declared in the mixed-in type. The callback is |
| 98 /// invoked in the following cases: | 108 /// invoked in the following cases: |
| 99 /// | 109 /// |
| 100 /// 1. A member declared in the class overrides a member inheritable through | 110 /// 1. A member declared in the class overrides a member inheritable through |
| (...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 378 _ClassInfo info = _infoFor[class_]; | 388 _ClassInfo info = _infoFor[class_]; |
| 379 return setters ? info.implementedSetters : info.implementedGettersAndCalls; | 389 return setters ? info.implementedSetters : info.implementedGettersAndCalls; |
| 380 } | 390 } |
| 381 | 391 |
| 382 @override | 392 @override |
| 383 Member getInterfaceMember(Class class_, Name name, {bool setter: false}) { | 393 Member getInterfaceMember(Class class_, Name name, {bool setter: false}) { |
| 384 List<Member> list = getInterfaceMembers(class_, setters: setter); | 394 List<Member> list = getInterfaceMembers(class_, setters: setter); |
| 385 return _findMemberByName(list, name); | 395 return _findMemberByName(list, name); |
| 386 } | 396 } |
| 387 | 397 |
| 388 /// Returns the list of members denoting the interface for [class_], which | 398 @override |
| 389 /// may include abstract members. | |
| 390 /// | |
| 391 /// The list may contain multiple members with a given name. This happens | |
| 392 /// when members are inherited through different supertypes and not overridden | |
| 393 /// in the class. | |
| 394 /// | |
| 395 /// Also see [getInterfaceMember]. | |
| 396 List<Member> getInterfaceMembers(Class class_, {bool setters: false}) { | 399 List<Member> getInterfaceMembers(Class class_, {bool setters: false}) { |
| 397 return _buildInterfaceMembers(class_, _infoFor[class_], setters: setters); | 400 return _buildInterfaceMembers(class_, _infoFor[class_], setters: setters); |
| 398 } | 401 } |
| 399 | 402 |
| 400 @override | 403 @override |
| 401 void forEachOverridePair(Class class_, | 404 void forEachOverridePair(Class class_, |
| 402 callback(Member declaredMember, Member interfaceMember, bool isSetter), | 405 callback(Member declaredMember, Member interfaceMember, bool isSetter), |
| 403 {bool crossGettersSetters: false}) { | 406 {bool crossGettersSetters: false}) { |
| 404 _ClassInfo info = _infoFor[class_]; | 407 _ClassInfo info = _infoFor[class_]; |
| 405 for (var supertype in class_.supers) { | 408 for (var supertype in class_.supers) { |
| (...skipping 762 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1168 class _LubHeap extends Heap<_ClassInfo> { | 1171 class _LubHeap extends Heap<_ClassInfo> { |
| 1169 @override | 1172 @override |
| 1170 bool sortsBefore(_ClassInfo a, _ClassInfo b) => sortsBeforeStatic(a, b); | 1173 bool sortsBefore(_ClassInfo a, _ClassInfo b) => sortsBeforeStatic(a, b); |
| 1171 | 1174 |
| 1172 static bool sortsBeforeStatic(_ClassInfo a, _ClassInfo b) { | 1175 static bool sortsBeforeStatic(_ClassInfo a, _ClassInfo b) { |
| 1173 if (a.depth > b.depth) return true; | 1176 if (a.depth > b.depth) return true; |
| 1174 if (a.depth < b.depth) return false; | 1177 if (a.depth < b.depth) return false; |
| 1175 return a.topologicalIndex < b.topologicalIndex; | 1178 return a.topologicalIndex < b.topologicalIndex; |
| 1176 } | 1179 } |
| 1177 } | 1180 } |
| OLD | NEW |