Chromium Code Reviews| Index: runtime/bin/vmservice/client/lib/src/service/object.dart |
| diff --git a/runtime/bin/vmservice/client/lib/src/service/object.dart b/runtime/bin/vmservice/client/lib/src/service/object.dart |
| index 6ab70cef7f799bb4dc0e9edf1cc50c896f45bb9f..127b517b5a17db7267d9118fa230e81626eb9fd3 100644 |
| --- a/runtime/bin/vmservice/client/lib/src/service/object.dart |
| +++ b/runtime/bin/vmservice/client/lib/src/service/object.dart |
| @@ -7,6 +7,21 @@ part of service; |
| /// A [ServiceObject] is an object known to the VM service and is tied |
| /// to an owning [Isolate]. |
| abstract class ServiceObject extends Observable { |
| + static int LexicalSortName(ServiceObject o1, ServiceObject o2) { |
| + return o1.name.compareTo(o2.name); |
| + } |
| + |
| + List unifyByName(List list) { |
| + list.sort(LexicalSortName); |
| + return list.fold([], (newList, e) { |
| + if (!newList.isEmpty && newList.last.name == e.name){ |
| + return newList; |
| + } |
| + newList.add(e); |
| + return newList; |
| + }); |
| + } |
| + |
| /// The owner of this [ServiceObject]. This can be an [Isolate], a |
| /// [VM], or null. |
| @reflectable ServiceObjectOwner get owner => _owner; |
| @@ -783,10 +798,8 @@ class Isolate extends ServiceObjectOwner with Coverage { |
| error = map['error']; |
| libraries.clear(); |
| - for (var lib in map['libraries']) { |
| - libraries.add(lib); |
| - } |
| - libraries.sort((a,b) => a.name.compareTo(b.name)); |
| + libraries.addAll(map['libraries']); |
| + libraries.sort(ServiceObject.LexicalSortName); |
| } |
| Future<TagProfile> updateTagProfile() { |
| @@ -994,15 +1007,18 @@ class Library extends ServiceObject with Coverage { |
| _loaded = true; |
| _upgradeCollection(map, isolate); |
| imports.clear(); |
| - imports.addAll(map['imports']); |
| + imports.addAll(unifyByName(map['imports'])); |
|
Cutch
2014/06/30 23:26:44
Why are there duplicate names?
Michael Lippautz (Google)
2014/06/30 23:42:10
The vm may return duplicates for libraries that al
|
| scripts.clear(); |
| - scripts.addAll(map['scripts']); |
| + scripts.addAll(unifyByName(map['scripts'])); |
| classes.clear(); |
| classes.addAll(map['classes']); |
| + classes.sort(ServiceObject.LexicalSortName); |
| variables.clear(); |
| variables.addAll(map['variables']); |
| + variables.sort(ServiceObject.LexicalSortName); |
| functions.clear(); |
| functions.addAll(map['functions']); |
| + functions.sort(ServiceObject.LexicalSortName); |
| } |
| } |
| @@ -1110,12 +1126,15 @@ class Class extends ServiceObject with Coverage { |
| subClasses.clear(); |
| subClasses.addAll(map['subclasses']); |
| + subClasses.sort(ServiceObject.LexicalSortName); |
| fields.clear(); |
| fields.addAll(map['fields']); |
| + fields.sort(ServiceObject.LexicalSortName); |
| functions.clear(); |
| functions.addAll(map['functions']); |
| + functions.sort(ServiceObject.LexicalSortName); |
| superClass = map['super']; |
| if (superClass != null) { |