| Index: pkg/analysis_server/lib/src/services/completion/dart/optype.dart
|
| diff --git a/pkg/analysis_server/lib/src/services/completion/dart/optype.dart b/pkg/analysis_server/lib/src/services/completion/dart/optype.dart
|
| index 975e9107a6a3b1b10071758beb25929651fd09de..08cc0ba4a2ab865ee6eb4032457791c3eaa8ea64 100644
|
| --- a/pkg/analysis_server/lib/src/services/completion/dart/optype.dart
|
| +++ b/pkg/analysis_server/lib/src/services/completion/dart/optype.dart
|
| @@ -14,6 +14,7 @@ import 'package:analyzer/dart/ast/visitor.dart';
|
| import 'package:analyzer/dart/element/element.dart';
|
| import 'package:analyzer/dart/element/type.dart';
|
| import 'package:analyzer/src/dart/ast/token.dart';
|
| +import 'package:analyzer/src/dart/element/element.dart';
|
| import 'package:analyzer/src/generated/utilities_dart.dart';
|
|
|
| typedef int SuggestionsFilter(DartType dartType, int relevance);
|
| @@ -730,6 +731,25 @@ class _OpTypeAstVisitor extends GeneralizingAstVisitor {
|
| }
|
| };
|
| optype.includeTypeNameSuggestions = true;
|
| +
|
| + // Check for named parameters in constructor calls.
|
| + AstNode grandparent = node.parent.parent;
|
| + if (grandparent is ConstructorReferenceNode) {
|
| + ConstructorElement element =
|
| + (grandparent as ConstructorReferenceNode).staticElement;
|
| + List<ParameterElement> parameters = element.parameters;
|
| + ParameterElement parameterElement = parameters.firstWhere((e) {
|
| + if (e is DefaultFieldFormalParameterElementImpl) {
|
| + return e.field.name == node.name.label.name;
|
| + }
|
| + return e.parameterKind == ParameterKind.NAMED &&
|
| + e.name == node.name.label.name;
|
| + }, orElse: () => null);
|
| + // Suggest tear-offs.
|
| + if (parameterElement?.type is FunctionType) {
|
| + optype.includeVoidReturnSuggestions = true;
|
| + }
|
| + }
|
| }
|
| }
|
|
|
|
|