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

Unified Diff: pkg/kernel/lib/src/incremental_class_hierarchy.dart

Issue 2922533002: Start implementing IncrementalClassHierarchy. (Closed)
Patch Set: Created 3 years, 7 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
« no previous file with comments | « no previous file | pkg/kernel/test/class_hierarchy_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/kernel/lib/src/incremental_class_hierarchy.dart
diff --git a/pkg/kernel/lib/src/incremental_class_hierarchy.dart b/pkg/kernel/lib/src/incremental_class_hierarchy.dart
new file mode 100644
index 0000000000000000000000000000000000000000..eb913ca252fece7fb59ac849072e41eb4f6fdcf0
--- /dev/null
+++ b/pkg/kernel/lib/src/incremental_class_hierarchy.dart
@@ -0,0 +1,125 @@
+// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+library kernel.incremental_class_hierarchy;
+
+import 'dart:math';
+
+import 'package:kernel/ast.dart';
+import 'package:kernel/class_hierarchy.dart';
+
+/// Lazy and incremental implementation of [ClassHierarchy].
+class IncrementalClassHierarchy implements ClassHierarchy {
+ /// The mapping from [Class]es to the corresponding [_ClassInfo]s.
+ /// It is filled lazily as the client requests information about classes.
+ final Map<Class, _ClassInfo> _info = {};
+
+ @override
+ Iterable<Class> get classes {
+ // TODO: implement classes
Paul Berry 2017/06/01 21:39:03 Change the TODOs in this file to "TODO(scheglov)"
scheglov 2017/06/01 21:50:35 Done.
+ return null;
Paul Berry 2017/06/01 21:39:03 I'd recommend replacing this line (and the other "
scheglov 2017/06/01 21:50:35 Done.
+ }
+
+ @override
+ Class get rootClass {
+ // TODO: implement rootClass
+ return null;
+ }
+
+ @override
+ void forEachOverridePair(Class class_,
+ callback(Member declaredMember, Member interfaceMember, bool isSetter)) {
+ // TODO: implement forEachOverridePair
+ throw new UnimplementedError();
+ }
+
+ @override
+ Supertype getClassAsInstanceOf(Class class_, Class superclass) {
+ // TODO: implement getClassAsInstanceOf
+ throw new UnimplementedError();
+ }
+
+ @override
+ int getClassDepth(Class node) {
+ var info = _getInfo(node);
+ if (info.depth < 0) {
+ int superDepth = -1;
+ if (node.supertype != null) {
+ superDepth = max(superDepth, getClassDepth(node.supertype.classNode));
+ }
+ if (node.mixedInType != null) {
+ superDepth = max(superDepth, getClassDepth(node.mixedInType.classNode));
+ }
+ for (var supertype in node.implementedTypes) {
+ superDepth = max(superDepth, getClassDepth(supertype.classNode));
+ }
+ info.depth = superDepth + 1;
+ }
+
+ return info.depth;
+ }
+
+ @override
+ InterfaceType getClassicLeastUpperBound(
+ InterfaceType type1, InterfaceType type2) {
+ // TODO: implement getClassicLeastUpperBound
+ throw new UnimplementedError();
+ }
+
+ @override
+ int getClassIndex(Class class_) {
+ // TODO: implement getClassIndex
+ throw new UnimplementedError();
+ }
+
+ @override
+ Member getDispatchTarget(Class class_, Name name, {bool setter: false}) {
+ // TODO: implement getDispatchTarget
+ throw new UnimplementedError();
+ }
+
+ @override
+ Member getInterfaceMember(Class class_, Name name, {bool setter: false}) {
+ // TODO: implement getInterfaceMember
+ throw new UnimplementedError();
+ }
+
+ @override
+ List<Class> getRankedSuperclasses(Class class_) {
+ // TODO: implement getRankedSuperclasses
+ throw new UnimplementedError();
+ }
+
+ @override
+ InterfaceType getTypeAsInstanceOf(InterfaceType type, Class superclass) {
+ // TODO: implement getTypeAsInstanceOf
+ throw new UnimplementedError();
+ }
+
+ @override
+ bool hasProperSubtypes(Class class_) {
+ // TODO: implement hasProperSubtypes
+ throw new UnimplementedError();
+ }
+
+ /// Return the [_ClassInfo] for the [node].
+ _ClassInfo _getInfo(Class node) {
+ var info = _info[node];
Paul Berry 2017/06/01 21:39:03 I think a more performant implementation of this f
scheglov 2017/06/01 21:50:35 Done.
+ if (info == null) {
+ info = new _ClassInfo(node);
+ _info[node] = info;
+ }
+ return info;
+ }
+}
+
+/// Information about a [Class].
+class _ClassInfo {
+ final Class node;
+
+ /// The number of steps in the longest inheritance path from the class
+ /// to [Object].
Paul Berry 2017/06/01 21:39:03 ", or -1 if the depth has not been computed yet."
scheglov 2017/06/01 21:50:35 Done.
+ int depth = -1;
+
+ _ClassInfo(this.node);
+}
« no previous file with comments | « no previous file | pkg/kernel/test/class_hierarchy_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698