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);