Guard against an NPE in completion code (issue 36788)

Change-Id: I05fc48ac7ad495820c5e3f7efdb6db2096108e54
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/107306
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/local_reference_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/local_reference_contributor.dart
index 0588482..c24de75 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/local_reference_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/local_reference_contributor.dart
@@ -234,7 +234,7 @@
       _addLocalSuggestion_includeTypeNameSuggestions(
           declaration.documentationComment,
           declaration.name,
-          declaration.functionType.returnType,
+          declaration.functionType?.returnType,
           protocol.ElementKind.FUNCTION_TYPE_ALIAS,
           isAbstract: true,
           isDeprecated: isDeprecated(declaration));
diff --git a/pkg/analysis_server/test/services/completion/dart/local_reference_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/local_reference_contributor_test.dart
index 4fbe052..b726924 100644
--- a/pkg/analysis_server/test/services/completion/dart/local_reference_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/local_reference_contributor_test.dart
@@ -2921,6 +2921,17 @@
     assertSuggestFunctionTypeAlias('F', 'void');
   }
 
+  test_functionTypeAlias_genericTypeAlias_incomplete() async {
+    addTestSource(r'''
+typedef F = int;
+main() {
+  ^
+}
+''');
+    await computeSuggestions();
+    assertSuggestFunctionTypeAlias('F', 'dynamic');
+  }
+
   test_functionTypeAlias_old() async {
     addTestSource(r'''
 typedef void F();
diff --git a/pkg/analyzer_plugin/lib/src/utilities/visitors/local_declaration_visitor.dart b/pkg/analyzer_plugin/lib/src/utilities/visitors/local_declaration_visitor.dart
index 99bb973..87c832c 100644
--- a/pkg/analyzer_plugin/lib/src/utilities/visitors/local_declaration_visitor.dart
+++ b/pkg/analyzer_plugin/lib/src/utilities/visitors/local_declaration_visitor.dart
@@ -131,7 +131,7 @@
         _visitTypeParameters(declaration, declaration.typeParameters);
         _visitTypeParameters(
           declaration.functionType,
-          declaration.functionType.typeParameters,
+          declaration.functionType?.typeParameters,
         );
       } else if (declaration is MixinDeclaration) {
         declaredMixin(declaration);