Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(296)

Side by Side Diff: pkg/kernel/lib/class_hierarchy.dart

Issue 3003913002: Expose getInterfaceMembers method through ClassHierarchy. (Closed)
Patch Set: Address code review comments Created 3 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | pkg/kernel/lib/src/incremental_class_hierarchy.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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 }
OLDNEW
« no previous file with comments | « no previous file | pkg/kernel/lib/src/incremental_class_hierarchy.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698