| Index: pkg/analysis_server/lib/src/services/completion/arglist_contributor.dart
|
| diff --git a/pkg/analysis_server/lib/src/services/completion/arglist_contributor.dart b/pkg/analysis_server/lib/src/services/completion/arglist_contributor.dart
|
| index 56a6d73c73a8745a07300acddc5c1a5e0fb52f62..3d8261aac6af088d03bcba6f2a96ea8e37f653fe 100644
|
| --- a/pkg/analysis_server/lib/src/services/completion/arglist_contributor.dart
|
| +++ b/pkg/analysis_server/lib/src/services/completion/arglist_contributor.dart
|
| @@ -136,6 +136,24 @@ class _ArgListAstVisitor extends GeneralizingAstVisitor<_ArgSuggestionBuilder> {
|
| }
|
| }
|
| }
|
| + if (parent is InstanceCreationExpression) {
|
| + ConstructorName constructorName = parent.constructorName;
|
| + if (constructorName != null) {
|
| + String name = constructorName.toSource();
|
| + if (name.length > 0) {
|
| + /*
|
| + * If a local declaration is found, then return null
|
| + * indicating that suggestions were added
|
| + * and no further action is necessary
|
| + */
|
| + if (new _LocalArgSuggestionBuilder(request, request.offset, name)
|
| + .visit(node)) {
|
| + return null;
|
| + }
|
| + return new _ArgSuggestionBuilder(request, name);
|
| + }
|
| + }
|
| + }
|
| }
|
| return null;
|
| }
|
| @@ -169,6 +187,15 @@ class _ArgSuggestionBuilder {
|
| }
|
| }
|
| }
|
| + if (parent is InstanceCreationExpression) {
|
| + ConstructorName constructorName = parent.constructorName;
|
| + if (constructorName != null) {
|
| + ConstructorElement element = constructorName.staticElement;
|
| + if (element is ExecutableElement) {
|
| + _addSuggestions(element.parameters);
|
| + }
|
| + }
|
| + }
|
| return new Future.value(false);
|
| }
|
|
|
| @@ -211,13 +238,15 @@ class _ArgSuggestionBuilder {
|
| }
|
| Iterable<ParameterElement> requiredParam = parameters.where(
|
| (ParameterElement p) => p.parameterKind == ParameterKind.REQUIRED);
|
| - if (requiredParam.length > 0 && _isEmptyArgList(request)) {
|
| + int requiredCount = requiredParam.length;
|
| + if (requiredCount > 0 && _isEmptyArgList(request)) {
|
| _addArgListSuggestion(requiredParam);
|
| return;
|
| }
|
| - if (_isAppendingToArgList(request) &&
|
| - _argCount(request) > requiredParam.length) {
|
| - _addDefaultParamSuggestions(parameters);
|
| + if (_isAppendingToArgList(request)) {
|
| + if (requiredCount == 0 || requiredCount < _argCount(request)) {
|
| + _addDefaultParamSuggestions(parameters);
|
| + }
|
| }
|
| }
|
|
|
| @@ -243,7 +272,26 @@ class _LocalArgSuggestionBuilder extends LocalDeclarationVisitor {
|
| : super(offset);
|
|
|
| @override
|
| - void declaredClass(ClassDeclaration declaration) {}
|
| + void declaredClass(ClassDeclaration declaration) {
|
| + String className = null;
|
| + if (declaration.name != null) {
|
| + className = declaration.name.name;
|
| + }
|
| + if (className != null && className.length > 0) {
|
| + for (ClassMember member in declaration.members) {
|
| + if (member is ConstructorDeclaration) {
|
| + String selector = className;
|
| + if (member.name != null) {
|
| + selector = '$selector.${member.name.name}';
|
| + }
|
| + if (selector == name) {
|
| + _addSuggestions(member.parameters);
|
| + finished();
|
| + }
|
| + }
|
| + }
|
| + }
|
| + }
|
|
|
| @override
|
| void declaredClassTypeAlias(ClassTypeAlias declaration) {}
|
| @@ -330,13 +378,15 @@ class _LocalArgSuggestionBuilder extends LocalDeclarationVisitor {
|
| }
|
| Iterable<FormalParameter> requiredParam = parameters.parameters
|
| .where((FormalParameter p) => p.kind == ParameterKind.REQUIRED);
|
| - if (requiredParam.length > 0 && _isEmptyArgList(request)) {
|
| + int requiredCount = requiredParam.length;
|
| + if (requiredCount > 0 && _isEmptyArgList(request)) {
|
| _addArgListSuggestion(requiredParam);
|
| return;
|
| }
|
| - if (_isAppendingToArgList(request) &&
|
| - _argCount(request) > requiredParam.length) {
|
| - _addDefaultParamSuggestions(parameters);
|
| + if (_isAppendingToArgList(request)) {
|
| + if (requiredCount == 0 || requiredCount < _argCount(request)) {
|
| + _addDefaultParamSuggestions(parameters);
|
| + }
|
| }
|
| }
|
|
|
|
|