| Index: pkg/kernel/lib/analyzer/loader.dart
|
| diff --git a/pkg/kernel/lib/analyzer/loader.dart b/pkg/kernel/lib/analyzer/loader.dart
|
| index d9dbf130209a83aa8396307babdb9012a0c8f8fc..1375cc66816ed58957adbe1ac6de0ec5e494b65b 100644
|
| --- a/pkg/kernel/lib/analyzer/loader.dart
|
| +++ b/pkg/kernel/lib/analyzer/loader.dart
|
| @@ -111,6 +111,7 @@ class DartLoader implements ReferenceLevelLoader {
|
| final bool ignoreRedirectingFactories;
|
|
|
| LibraryElement _libraryBeingLoaded = null;
|
| + ClassElement _classBeingPromotedToMixin = null;
|
|
|
| bool get strongMode => context.analysisOptions.strongMode;
|
|
|
| @@ -148,6 +149,10 @@ class DartLoader implements ReferenceLevelLoader {
|
| return _libraryBeingLoaded == element;
|
| }
|
|
|
| + bool isClassBeingPromotedToMixin(ClassElement element) {
|
| + return _classBeingPromotedToMixin == element;
|
| + }
|
| +
|
| void _buildLibraryBody(LibraryElement element, ast.Library library,
|
| List<CompilationUnit> units) {
|
| assert(_libraryBeingLoaded == null);
|
| @@ -394,12 +399,14 @@ class DartLoader implements ReferenceLevelLoader {
|
| void promoteToMixinLevel(ast.Class classNode, ClassElement element,
|
| NamedCompilationUnitMember astNode) {
|
| if (classNode.level.index >= ast.ClassLevel.Mixin.index) return;
|
| + _classBeingPromotedToMixin = element;
|
| promoteToHierarchyLevel(classNode);
|
| classNode.level = ast.ClassLevel.Mixin;
|
| // Clear out the member references that were put in the class.
|
| // The AST builder will load them all put back in the right order.
|
| classNode..fields.clear()..procedures.clear()..constructors.clear();
|
| new ClassBodyBuilder(this, classNode, element).build(astNode);
|
| + _classBeingPromotedToMixin = null;
|
|
|
| // Ensure mixed-in classes are available.
|
| for (var mixin in element.mixins) {
|
| @@ -409,7 +416,7 @@ class DartLoader implements ReferenceLevelLoader {
|
|
|
| /// Ensures that [element] eventually becomes loaded at least at mixin level.
|
| void _ensureMixinBecomesLoaded(ClassElement element) {
|
| - if (isLibraryBeingLoaded(element.library)) {
|
| + if (isClassBeingPromotedToMixin(element)) {
|
| return;
|
| }
|
| var class_ = getClassReference(element);
|
| @@ -454,7 +461,7 @@ class DartLoader implements ReferenceLevelLoader {
|
| if (parent is ClassElement) {
|
| var class_ = getClassReference(parent);
|
| node.parent = class_;
|
| - if (!isLibraryBeingLoaded(element.library)) {
|
| + if (!isClassBeingPromotedToMixin(parent)) {
|
| class_.addMember(node);
|
| }
|
| } else {
|
|
|