Skip to content

Commit 02b8138

Browse files
committed
Review comments
1 parent 5b24ba8 commit 02b8138

File tree

3 files changed

+12
-9
lines changed

3 files changed

+12
-9
lines changed

lib/src/model/class.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -432,12 +432,12 @@ class Class extends Container
432432
_allFields.add(field);
433433
}
434434

435-
List<Method> _declaredMethods;
435+
Iterable<Method> _declaredMethods;
436436
@override
437437
Iterable<Method> get declaredMethods =>
438438
_declaredMethods ??= element.methods.map((e) {
439439
return ModelElement.from(e, library, packageGraph) as Method;
440-
}).toList(growable: false);
440+
});
441441

442442
List<TypeParameter> _typeParameters;
443443
// a stronger hash?

lib/src/model/container.dart

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@ abstract class Container extends ModelElement {
4848
/// All methods, including operators and statics, declared as part of this
4949
/// [Container]. [declaredMethods] must be the union of [instanceMethods],
5050
/// [staticMethods], and [instanceOperators].
51-
///
5251
Iterable<Method> get declaredMethods;
5352

5453
Iterable<Method> get instanceMethods => declaredMethods
@@ -138,11 +137,11 @@ abstract class Container extends ModelElement {
138137
Map<String, List<ModelElement>> _membersByName;
139138

140139
/// Given a ModelElement that is a member of some other class, return
141-
/// a member of this class that has the same name and return type.
140+
/// the member of this class that has the same name and runtime type.
142141
///
143142
/// This enables object substitution for canonicalization, such as Interceptor
144143
/// for Object.
145-
ModelElement memberByExample(ModelElement example) {
144+
T memberByExample<T extends ModelElement>(T example) {
146145
if (_membersByName == null) {
147146
_membersByName = {};
148147
for (var me in allModelElements) {
@@ -153,11 +152,14 @@ abstract class Container extends ModelElement {
153152
}
154153
}
155154
ModelElement member;
155+
// [T] is insufficiently specific to disambiguate between different
156+
// subtypes of [Inheritable] or other mixins/implementations of
157+
// [ModelElement] via [Iterable.whereType].
156158
var possibleMembers = _membersByName[example.name]
157159
.where((e) => e.runtimeType == example.runtimeType);
158-
if (example.runtimeType == Accessor) {
159-
possibleMembers = possibleMembers.where(
160-
(e) => (example as Accessor).isGetter == (e as Accessor).isGetter);
160+
if (example is Accessor) {
161+
possibleMembers = possibleMembers
162+
.where((e) => example.isGetter == (e as Accessor).isGetter);
161163
}
162164
member = possibleMembers.first;
163165
assert(possibleMembers.length == 1);

lib/src/model/inheritable.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,8 @@ mixin Inheritable on ContainerMember {
7575
c != definingEnclosingContainer) ||
7676
(packageGraph.inheritThrough.contains(c) &&
7777
c == definingEnclosingContainer)) {
78-
return (previousNonSkippable.memberByExample(this) as Inheritable)
78+
return previousNonSkippable
79+
.memberByExample(this)
7980
.canonicalEnclosingContainer;
8081
}
8182
Class canonicalC =

0 commit comments

Comments
 (0)