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; |
+ } |
+ } |
} |
} |