Fix for the case when a class appears twice in a type hierarchy.

R=brianwilkerson@google.com
BUG=

Review URL: https://codereview.chromium.org/1406403009 .
diff --git a/pkg/analysis_server/lib/src/search/type_hierarchy.dart b/pkg/analysis_server/lib/src/search/type_hierarchy.dart
index 695693c..0a666f3 100644
--- a/pkg/analysis_server/lib/src/search/type_hierarchy.dart
+++ b/pkg/analysis_server/lib/src/search/type_hierarchy.dart
@@ -85,7 +85,7 @@
         TypeHierarchyItem subItem = _elementItemMap[subElement];
         if (subItem != null) {
           int id = _items.indexOf(subItem);
-          subItem.subclasses.add(id);
+          item.subclasses.add(id);
           continue;
         }
         // create a subclass item
diff --git a/pkg/analysis_server/test/search/type_hierarchy_test.dart b/pkg/analysis_server/test/search/type_hierarchy_test.dart
index 037d7bb..1d6ddf9a 100644
--- a/pkg/analysis_server/test/search/type_hierarchy_test.dart
+++ b/pkg/analysis_server/test/search/type_hierarchy_test.dart
@@ -75,7 +75,7 @@
         'superclass': 1,
         'interfaces': [],
         'mixins': [],
-        'subclasses': []
+        'subclasses': [1]
       },
       {
         'classElement': {
@@ -87,7 +87,7 @@
         'superclass': 0,
         'interfaces': [],
         'mixins': [],
-        'subclasses': [1]
+        'subclasses': []
       }
     ]);
   }
@@ -107,6 +107,66 @@
     expect(itemA.displayName, 'A<int>');
   }
 
+  test_class_double_subclass() async {
+    addTestFile('''
+class AAA {} // A
+
+class BBB extends AAA {}
+
+class CCC extends BBB implements AAA {}
+''');
+    List<TypeHierarchyItem> items = await _getTypeHierarchy('AAA {} // A');
+    expect(_toJson(items), [
+      {
+        'classElement': {
+          'kind': 'CLASS',
+          'name': 'AAA',
+          'location': anything,
+          'flags': 0
+        },
+        'superclass': 1,
+        'interfaces': [],
+        'mixins': [],
+        'subclasses': [2, 3]
+      },
+      {
+        'classElement': {
+          'kind': 'CLASS',
+          'name': 'Object',
+          'location': anything,
+          'flags': 0
+        },
+        'interfaces': [],
+        'mixins': [],
+        'subclasses': []
+      },
+      {
+        'classElement': {
+          'kind': 'CLASS',
+          'name': 'CCC',
+          'location': anything,
+          'flags': 0
+        },
+        'superclass': 0,
+        'interfaces': [],
+        'mixins': [],
+        'subclasses': []
+      },
+      {
+        'classElement': {
+          'kind': 'CLASS',
+          'name': 'BBB',
+          'location': anything,
+          'flags': 0
+        },
+        'superclass': 0,
+        'interfaces': [],
+        'mixins': [],
+        'subclasses': [2]
+      }
+    ]);
+  }
+
   test_class_extends_fileAndPackageUris() async {
     // prepare packages
     String pkgFile = '/packages/pkgA/libA.dart';