Skip to content

Commit f483a1a

Browse files
committed
correct some mixin edge cases
1 parent 2e815c0 commit f483a1a

File tree

3 files changed

+16
-3
lines changed

3 files changed

+16
-3
lines changed

lib/src/model/accessor.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -228,11 +228,11 @@ class ContainerAccessor extends Accessor with ContainerMember, Inheritable {
228228
isGetter ? t.getGetter(element.name) : t.getSetter(element.name);
229229
if (accessor != null) {
230230
accessor = accessor.declaration;
231-
Class parentClass =
231+
InheritingContainer parentContainer =
232232
ModelElement.fromElement(t.element, packageGraph);
233233
var possibleFields = <Field>[];
234-
possibleFields.addAll(parentClass.instanceFields);
235-
possibleFields.addAll(parentClass.staticFields);
234+
possibleFields.addAll(parentContainer.instanceFields);
235+
possibleFields.addAll(parentContainer.staticFields);
236236
var fieldName = accessor.name.replaceFirst('=', '');
237237
var foundField = possibleFields.firstWhere(
238238
(f) => f.element.name == fieldName,

lib/src/model/inheritable.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,9 @@ mixin Inheritable on ContainerMember {
117117
var object = packageGraph.specialClasses[SpecialClass.object];
118118
if (!inheritance.contains(definingEnclosingContainer) &&
119119
definingEnclosingContainer != null) {
120+
if (definingEnclosingContainer != object) {
121+
print('wtf');
122+
}
120123
assert(definingEnclosingContainer == object);
121124
}
122125
// Unless the code explicitly extends dart-core's Object, we won't get

lib/src/model/mixin.dart

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,16 @@ class Mixin extends InheritingContainer with TypeImplementing {
5757
_inheritanceChain.addAll(superclassConstraints.expand(
5858
(ParameterizedElementType i) =>
5959
(i.modelElement as InheritingContainer).inheritanceChain));
60+
61+
for (var c
62+
in superChain.map((e) => (e.modelElement as InheritingContainer))) {
63+
_inheritanceChain.addAll(c.inheritanceChain);
64+
}
65+
66+
/// Interfaces need to come last, because classes in the superChain might
67+
/// implement them even when they aren't mentioned.
68+
_inheritanceChain.addAll(interfaces.expand(
69+
(e) => (e.modelElement as InheritingContainer).inheritanceChain));
6070
}
6171
return _inheritanceChain.toList(growable: false);
6272
}

0 commit comments

Comments
 (0)