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

Unified Diff: pkg/analysis_server/lib/src/search/type_hierarchy.dart

Issue 479683005: Make more use of generated code in analysis server. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 4 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/analysis_server/lib/src/search/type_hierarchy.dart
diff --git a/pkg/analysis_server/lib/src/search/type_hierarchy.dart b/pkg/analysis_server/lib/src/search/type_hierarchy.dart
index 580bf98e3a05728e2e660c1303b2457fcd4dfd9c..a5bf5e20b49de96513429ef413819ebff0ef14b6 100644
--- a/pkg/analysis_server/lib/src/search/type_hierarchy.dart
+++ b/pkg/analysis_server/lib/src/search/type_hierarchy.dart
@@ -8,9 +8,8 @@ import 'dart:async';
import 'dart:collection';
import 'package:analysis_server/src/computer/element.dart' show
- engineElementToJson;
-import 'package:analysis_server/src/constants.dart';
-import 'package:analysis_server/src/services/json.dart';
+ elementFromEngine;
+import 'package:analysis_server/src/protocol2.dart' show TypeHierarchyItem;
import 'package:analysis_server/src/services/search/hierarchy.dart';
import 'package:analysis_server/src/services/search/search_engine.dart';
import 'package:analyzer/src/generated/element.dart';
@@ -25,6 +24,7 @@ class TypeHierarchyComputer {
String _pivotName;
final List<TypeHierarchyItem> _items = <TypeHierarchyItem>[];
+ final List<ClassElement> _itemClassElements = <ClassElement>[];
final Map<Element, TypeHierarchyItem> _elementItemMap =
new HashMap<Element, TypeHierarchyItem>();
@@ -43,17 +43,17 @@ class TypeHierarchyComputer {
if (element is ClassElement) {
InterfaceType type = element.type;
_createSuperItem(type);
- return _createSubclasses(_items[0], type).then((_) {
+ return _createSubclasses(_items[0], 0, type).then((_) {
return new Future.value(_items);
});
}
return new Future.value(null);
}
- Future _createSubclasses(TypeHierarchyItem item, InterfaceType type) {
+ Future _createSubclasses(TypeHierarchyItem item, int itemId, InterfaceType type) {
var future = getDirectSubClasses(_searchEngine, type.element);
return future.then((Set<ClassElement> subElements) {
- List<TypeHierarchyItem> subItems = <TypeHierarchyItem>[];
+ List<int> subItemIds = <int>[];
for (ClassElement subElement in subElements) {
// check for recursion
TypeHierarchyItem subItem = _elementItemMap[subElement];
@@ -65,24 +65,28 @@ class TypeHierarchyComputer {
// create a subclass item
ExecutableElement subMemberElement = _findMemberElement(subElement);
subItem = new TypeHierarchyItem(
- _items.length,
- subElement,
- subMemberElement,
- null,
- item.id,
+ elementFromEngine(subElement),
<int>[],
- <int>[]);
+ <int>[],
+ <int>[],
+ memberElement: subMemberElement != null ?
+ elementFromEngine(subMemberElement) : null,
+ superclass: itemId);
+ int subItemId = _items.length;
// remember
_elementItemMap[subElement] = subItem;
_items.add(subItem);
+ _itemClassElements.add(subElement);
// add to hierarchy
- item.subclasses.add(subItem.id);
- subItems.add(subItem);
+ item.subclasses.add(subItemId);
+ subItemIds.add(subItemId);
}
// compute subclasses of subclasses
- return Future.forEach(subItems, (TypeHierarchyItem subItem) {
- InterfaceType subType = subItem.classElement.type;
- return _createSubclasses(subItem, subType);
+ return Future.forEach(subItemIds, (int subItemId) {
+ TypeHierarchyItem subItem = _items[subItemId];
+ ClassElement subItemElement = _itemClassElements[subItemId];
+ InterfaceType subType = subItemElement.type;
+ return _createSubclasses(subItem, subItemId, subType);
});
});
}
@@ -94,6 +98,7 @@ class TypeHierarchyComputer {
return _items.indexOf(item);
}
// create an empty item now
+ int itemId;
{
String displayName = null;
if (type.typeArguments.isNotEmpty) {
@@ -102,15 +107,17 @@ class TypeHierarchyComputer {
ClassElement classElement = type.element;
ExecutableElement memberElement = _findMemberElement(classElement);
item = new TypeHierarchyItem(
- _items.length,
- classElement,
- memberElement,
- displayName,
- null,
+ elementFromEngine(classElement),
+ <int>[],
+ <int>[],
<int>[],
- <int>[]);
+ displayName: displayName,
+ memberElement: memberElement != null ?
+ elementFromEngine(memberElement) : null);
_elementItemMap[classElement] = item;
+ itemId = _items.length;
_items.add(item);
+ _itemClassElements.add(classElement);
}
// superclass
{
@@ -130,7 +137,7 @@ class TypeHierarchyComputer {
item.interfaces.add(id);
});
// done
- return item.id;
+ return itemId;
}
ExecutableElement _findMemberElement(ClassElement classElement) {
@@ -146,36 +153,3 @@ class TypeHierarchyComputer {
return null;
}
}
-
-
-class TypeHierarchyItem implements HasToJson {
- final int id;
- final ClassElement classElement;
- final Element memberElement;
- final String displayName;
- int superclass;
- final List<int> mixins;
- final List<int> interfaces;
- final List<int> subclasses = <int>[];
-
- TypeHierarchyItem(this.id, this.classElement, this.memberElement,
- this.displayName, this.superclass, this.mixins, this.interfaces);
-
- Map<String, Object> toJson() {
- Map<String, Object> json = {};
- json[CLASS_ELEMENT] = engineElementToJson(classElement);
- if (memberElement != null) {
- json[MEMBER_ELEMENT] = engineElementToJson(memberElement);
- }
- if (displayName != null) {
- json[DISPLAY_NAME] = displayName;
- }
- if (superclass != null) {
- json[SUPERCLASS] = objectToJson(superclass);
- }
- json[INTERFACES] = objectToJson(interfaces);
- json[MIXINS] = objectToJson(mixins);
- json[SUBCLASSES] = objectToJson(subclasses);
- return json;
- }
-}

Powered by Google App Engine
This is Rietveld 408576698