add class type alias suggestions

BUG=
R=scheglov@google.com

Review URL: https://codereview.chromium.org//689433003

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@41388 260f80e4-7a28-3924-810f-c04153c831b5
diff --git a/pkg/analysis_server/lib/src/services/completion/local_computer.dart b/pkg/analysis_server/lib/src/services/completion/local_computer.dart
index e2e81af..8e0ba88 100644
--- a/pkg/analysis_server/lib/src/services/completion/local_computer.dart
+++ b/pkg/analysis_server/lib/src/services/completion/local_computer.dart
@@ -133,11 +133,20 @@
       } else if (declaration is TopLevelVariableDeclaration) {
         _addTopLevelVarSuggestions(declaration.variables);
       } else if (declaration is ClassTypeAlias) {
-        _addSuggestion(
+        CompletionSuggestion suggestion = _addSuggestion(
             declaration.name,
             CompletionSuggestionKind.CLASS_ALIAS,
             null,
             null);
+        if (suggestion != null) {
+          suggestion.element = _createElement(
+              protocol.ElementKind.CLASS_TYPE_ALIAS,
+              declaration.name,
+              null,
+              NO_RETURN_TYPE,
+              true,
+              _isDeprecated(declaration.metadata));
+        }
       } else if (declaration is FunctionTypeAlias) {
         CompletionSuggestion suggestion = _addSuggestion(
             declaration.name,
diff --git a/pkg/analysis_server/test/services/completion/completion_test_util.dart b/pkg/analysis_server/test/services/completion/completion_test_util.dart
index 5514709..54929ec 100644
--- a/pkg/analysis_server/test/services/completion/completion_test_util.dart
+++ b/pkg/analysis_server/test/services/completion/completion_test_util.dart
@@ -112,6 +112,19 @@
     return cs;
   }
 
+  CompletionSuggestion assertSuggestClassTypeAlias(String name,
+      [CompletionRelevance relevance = CompletionRelevance.DEFAULT]) {
+    CompletionSuggestion cs =
+        assertSuggest(CompletionSuggestionKind.CLASS_ALIAS, name, relevance);
+    protocol.Element element = cs.element;
+    expect(element, isNotNull);
+    expect(element.kind, equals(protocol.ElementKind.CLASS_TYPE_ALIAS));
+    expect(element.name, equals(name));
+    expect(element.parameters, isNull);
+    expect(element.returnType, isNull);
+    return cs;
+  }
+
   CompletionSuggestion assertSuggestFunction(String name, String returnType,
       bool isDeprecated, [CompletionRelevance relevance =
       CompletionRelevance.DEFAULT]) {
@@ -553,6 +566,15 @@
     }
   }
 
+  CompletionSuggestion assertSuggestLocalClassTypeAlias(String name,
+      [CompletionRelevance relevance = CompletionRelevance.DEFAULT]) {
+    if (computer is LocalComputer) {
+      return assertSuggestClassTypeAlias(name, relevance);
+    } else {
+      return assertNotSuggested(name);
+    }
+  }
+
   CompletionSuggestion assertSuggestLocalFunction(String name,
       String returnType, [bool isDeprecated = false, CompletionRelevance relevance =
       CompletionRelevance.DEFAULT]) {
@@ -982,6 +1004,7 @@
       var T1;
       PB F1() => new PB();
       typedef PB2 F2(int blat);
+      class Clz = Object with Object;
       class PB { }''');
     addSource('/testCD.dart', '''
       class C { }
@@ -997,6 +1020,7 @@
       assertSuggestImportedClass('PB');
       assertSuggestImportedTopLevelVar('T1', null);
       assertSuggestImportedFunction('F1', 'PB');
+      assertSuggestImportedClass('Clz');
       assertSuggestImportedFunctionTypeAlias('F2', null);
       assertNotSuggested('C');
       assertNotSuggested('D');
@@ -1056,6 +1080,7 @@
     addTestSource('''
       import "/testA.dart";
       typedef int F2(int blat);
+      class Clz = Object with Object;
       class C {foo(){O^} void bar() {}}''');
     computeFast();
     return computeFull(true).then((_) {
@@ -1065,6 +1090,7 @@
       assertSuggestLocalMethod('foo', 'C', null);
       assertSuggestLocalMethod('bar', 'C', 'void');
       assertSuggestLocalFunctionTypeAlias('F2', 'int');
+      assertSuggestLocalClassTypeAlias('Clz');
       assertSuggestLocalClass('C');
       assertNotSuggested('x');
       assertNotSuggested('_B');