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

Unified Diff: pkg/dev_compiler/lib/src/compiler/element_helpers.dart

Issue 2781443003: Fix #28120, strong mode allows field overrides (Closed)
Patch Set: add doc comments Created 3 years, 9 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/dev_compiler/lib/src/compiler/element_helpers.dart
diff --git a/pkg/dev_compiler/lib/src/compiler/element_helpers.dart b/pkg/dev_compiler/lib/src/compiler/element_helpers.dart
index 39a2e471e5182e36e642613d0ec6d3224e6c63fd..28da6a6e61ea9058e9a14959bdb0640bf18d8e4c 100644
--- a/pkg/dev_compiler/lib/src/compiler/element_helpers.dart
+++ b/pkg/dev_compiler/lib/src/compiler/element_helpers.dart
@@ -16,7 +16,12 @@ import 'package:analyzer/dart/ast/ast.dart'
MethodInvocation,
SimpleIdentifier;
import 'package:analyzer/dart/element/element.dart'
- show ClassElement, Element, ExecutableElement, FunctionElement;
+ show
+ ClassElement,
+ Element,
+ ExecutableElement,
+ FunctionElement,
+ LibraryElement;
import 'package:analyzer/dart/element/type.dart'
show DartType, InterfaceType, ParameterizedType;
import 'package:analyzer/src/dart/element/type.dart' show DynamicTypeImpl;
@@ -139,3 +144,34 @@ List<ClassElement> getSuperclasses(ClassElement cls) {
}
return result;
}
+
+List<ClassElement> getSuperclassesInSameLibrary(ClassElement cls) {
+ var result = <ClassElement>[];
+ var visited = new HashSet<ClassElement>();
+ var library = cls.library;
+ while (cls != null && visited.add(cls)) {
+ for (var mixinType in cls.mixins.reversed) {
vsm 2017/03/27 22:31:27 I think we should get nested mixins (see https://c
Jennifer Messerly 2017/03/27 23:16:27 hmmm. Those guys unfortunately break assumptions a
+ var mixin = mixinType.element;
+ if (mixin != null && mixin.library == library) result.add(mixin);
+ }
+ var superclass = cls.supertype?.element;
+ if (superclass?.library != library) break;
vsm 2017/03/27 22:31:27 Don't we need to keep going in case we've got some
Jennifer Messerly 2017/03/27 23:16:28 Let me investigate based on the use cases. I only
+
+ result.add(superclass);
+ cls = superclass;
+ }
+ return result;
+}
+
+List<ClassElement> getImmediateSuperclasses(ClassElement c) {
+ var result = <ClassElement>[];
+ for (var m in c.mixins.reversed) {
+ result.add(m.element);
+ }
+ var s = c.supertype;
+ if (s != null) result.add(s.element);
+ return result;
+}
+
+bool isSdkInternalRuntime(LibraryElement l) =>
+ l.isInSdk && l.source.uri.toString() == 'dart:_runtime';

Powered by Google App Engine
This is Rietveld 408576698