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

Unified Diff: pkg/kernel/lib/analyzer/loader.dart

Issue 2710783004: Fix two issues with modular compilation in dartk. (Closed)
Patch Set: Merge Created 3 years, 10 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 side-by-side diff with in-line comments
Download patch
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 {
« no previous file with comments | « pkg/kernel/lib/analyzer/ast_from_analyzer.dart ('k') | tests/language/mixin_class_from_core_library_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698