Resolve invocation arguments to parameters.
R=brianwilkerson@google.com
Change-Id: I76a8ea8221e0a888253af8297fb50c423699e175
Reviewed-on: https://dart-review.googlesource.com/69000
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analysis_server/test/analysis/get_hover_test.dart b/pkg/analysis_server/test/analysis/get_hover_test.dart
index b50a7e3..ef203c77 100644
--- a/pkg/analysis_server/test/analysis/get_hover_test.dart
+++ b/pkg/analysis_server/test/analysis/get_hover_test.dart
@@ -618,9 +618,4 @@
class AnalysisHoverTest_UseCFE extends AnalysisHoverTest {
@override
bool get useCFE => true;
-
- @failingTest
- @override
- test_expression_literal_noElement() async =>
- super.test_expression_literal_noElement();
}
diff --git a/pkg/analysis_server/test/edit/refactoring_test.dart b/pkg/analysis_server/test/edit/refactoring_test.dart
index 438f6d1c..9e8555e 100644
--- a/pkg/analysis_server/test/edit/refactoring_test.dart
+++ b/pkg/analysis_server/test/edit/refactoring_test.dart
@@ -607,22 +607,8 @@
@failingTest
@override
- test_analysis_onlyOneFile() => super.test_analysis_onlyOneFile();
-
- @failingTest
- @override
test_resetOnAnalysisSetChanged_overlay() =>
super.test_resetOnAnalysisSetChanged_overlay();
-
- @failingTest
- @override
- test_resetOnAnalysisSetChanged_watch_otherFile() =>
- super.test_resetOnAnalysisSetChanged_watch_otherFile();
-
- @failingTest
- @override
- test_resetOnAnalysisSetChanged_watch_thisFile() =>
- super.test_resetOnAnalysisSetChanged_watch_thisFile();
}
@reflectiveTest
diff --git a/pkg/analysis_server/test/integration/analysis/get_hover_test.dart b/pkg/analysis_server/test/integration/analysis/get_hover_test.dart
index 8cefd64..f69ee37 100644
--- a/pkg/analysis_server/test/integration/analysis/get_hover_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/get_hover_test.dart
@@ -198,8 +198,4 @@
extends AnalysisGetHoverIntegrationTest {
@override
bool get useCFE => true;
-
- @override
- @failingTest
- test_getHover() => super.test_getHover();
}
diff --git a/pkg/analysis_server/test/services/completion/dart/common_usage_sorter_test.dart b/pkg/analysis_server/test/services/completion/dart/common_usage_sorter_test.dart
index 17e238f..9b2c734 100644
--- a/pkg/analysis_server/test/services/completion/dart/common_usage_sorter_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/common_usage_sorter_test.dart
@@ -171,8 +171,4 @@
class CommonUsageSorterTest_UseCFE extends CommonUsageSorterTest {
@override
bool get useCFE => true;
-
- @failingTest
- @override
- test_namedArgument_enum() async => super.test_namedArgument_enum();
}
diff --git a/pkg/analysis_server/test/services/completion/dart/imported_reference_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/imported_reference_contributor_test.dart
index a50aa26..654b9eaa 100644
--- a/pkg/analysis_server/test/services/completion/dart/imported_reference_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/imported_reference_contributor_test.dart
@@ -4514,10 +4514,6 @@
@failingTest
@override
- test_enum_filter() => super.test_enum_filter();
-
- @failingTest
- @override
test_ForEachStatement_body_untyped() =>
super.test_ForEachStatement_body_untyped();
diff --git a/pkg/analysis_server/test/services/completion/dart/local_constructor_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/local_constructor_contributor_test.dart
index c550fa9..f832fca 100644
--- a/pkg/analysis_server/test/services/completion/dart/local_constructor_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/local_constructor_contributor_test.dart
@@ -4248,16 +4248,6 @@
@failingTest
@override
- test_InstanceCreationExpression_invocationArgument() =>
- super.test_InstanceCreationExpression_invocationArgument();
-
- @failingTest
- @override
- test_InstanceCreationExpression_invocationArgument_named() =>
- super.test_InstanceCreationExpression_invocationArgument_named();
-
- @failingTest
- @override
test_InstanceCreationExpression_unimported() =>
super.test_InstanceCreationExpression_unimported();
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 5f7ad8d..ecf6d6a 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
@@ -4689,16 +4689,6 @@
@failingTest
@override
- test_ArgumentList_MethodInvocation_functionalArg2() =>
- super.test_ArgumentList_MethodInvocation_functionalArg2();
-
- @failingTest
- @override
- test_ArgumentList_namedParam_filter() =>
- super.test_ArgumentList_namedParam_filter();
-
- @failingTest
- @override
test_AsExpression_type() => super.test_AsExpression_type();
@failingTest
@@ -4734,10 +4724,6 @@
@failingTest
@override
- test_enum_filter() => super.test_enum_filter();
-
- @failingTest
- @override
test_ForEachStatement_body_untyped() =>
super.test_ForEachStatement_body_untyped();
diff --git a/pkg/analysis_server/test/services/correction/fix_test.dart b/pkg/analysis_server/test/services/correction/fix_test.dart
index 2f32126..865cf03 100644
--- a/pkg/analysis_server/test/services/correction/fix_test.dart
+++ b/pkg/analysis_server/test/services/correction/fix_test.dart
@@ -7709,11 +7709,6 @@
@failingTest
@override
- test_creationFunction_forFunctionType_coreFunction() =>
- super.test_creationFunction_forFunctionType_coreFunction();
-
- @failingTest
- @override
test_creationFunction_forFunctionType_dynamicArgument() =>
super.test_creationFunction_forFunctionType_dynamicArgument();
diff --git a/pkg/analysis_server/test/services/correction/name_suggestion_test.dart b/pkg/analysis_server/test/services/correction/name_suggestion_test.dart
index fb5c715..beb4fe9 100644
--- a/pkg/analysis_server/test/services/correction/name_suggestion_test.dart
+++ b/pkg/analysis_server/test/services/correction/name_suggestion_test.dart
@@ -376,21 +376,6 @@
@failingTest
@override
- test_forExpression_indexExpression_endsWithE() =>
- super.test_forExpression_indexExpression_endsWithE();
-
- @failingTest
- @override
test_forExpression_instanceCreation() =>
super.test_forExpression_instanceCreation();
-
- @failingTest
- @override
- test_forExpression_invocationArgument_optional() =>
- super.test_forExpression_invocationArgument_optional();
-
- @failingTest
- @override
- test_forExpression_invocationArgument_positional() =>
- super.test_forExpression_invocationArgument_positional();
}
diff --git a/pkg/analysis_server/test/services/refactoring/extract_local_test.dart b/pkg/analysis_server/test/services/refactoring/extract_local_test.dart
index aa90750..95714c8 100644
--- a/pkg/analysis_server/test/services/refactoring/extract_local_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/extract_local_test.dart
@@ -1352,20 +1352,6 @@
@failingTest
@override
- test_guessNames_singleExpression() =>
- super.test_guessNames_singleExpression();
-
- @failingTest
- @override
- test_occurrences_differentVariable() =>
- super.test_occurrences_differentVariable();
-
- @failingTest
- @override
test_singleExpression_hasParseError_expectedSemicolon() =>
super.test_singleExpression_hasParseError_expectedSemicolon();
-
- @failingTest
- @override
- test_stringLiteral_whole() => super.test_stringLiteral_whole();
}
diff --git a/pkg/analysis_server/test/services/refactoring/extract_method_test.dart b/pkg/analysis_server/test/services/refactoring/extract_method_test.dart
index 743d87f..eda761b 100644
--- a/pkg/analysis_server/test/services/refactoring/extract_method_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/extract_method_test.dart
@@ -2947,18 +2947,6 @@
@failingTest
@override
- test_closure_atArgumentName() => super.test_closure_atArgumentName();
-
- @failingTest
- @override
- test_closure_atParameters() => super.test_closure_atParameters();
-
- @failingTest
- @override
- test_names_singleExpression() => super.test_names_singleExpression();
-
- @failingTest
- @override
test_statements_parameters_localFunction() =>
super.test_statements_parameters_localFunction();
}
diff --git a/pkg/analysis_server/test/src/flutter/flutter_outline_computer_test.dart b/pkg/analysis_server/test/src/flutter/flutter_outline_computer_test.dart
index 01ec170..61450ac 100644
--- a/pkg/analysis_server/test/src/flutter/flutter_outline_computer_test.dart
+++ b/pkg/analysis_server/test/src/flutter/flutter_outline_computer_test.dart
@@ -704,57 +704,4 @@
class FlutterOutlineComputerTest_UseCFE extends FlutterOutlineComputerTest {
@override
bool get useCFE => true;
-
- @failingTest
- @override
- test_attribute_namedExpression() => super.test_attribute_namedExpression();
-
- @failingTest
- @override
- test_attributes_bool() => super.test_attributes_bool();
-
- @failingTest
- @override
- test_attributes_functionExpression_hasParameters_blockExpression() =>
- super.test_attributes_functionExpression_hasParameters_blockExpression();
-
- @failingTest
- @override
- test_attributes_functionExpression_hasParameters_bodyExpression() =>
- super.test_attributes_functionExpression_hasParameters_bodyExpression();
-
- @failingTest
- @override
- test_attributes_functionExpression_noParameters_blockExpression() =>
- super.test_attributes_functionExpression_noParameters_blockExpression();
-
- @failingTest
- @override
- test_attributes_functionExpression_noParameters_bodyExpression() =>
- super.test_attributes_functionExpression_noParameters_bodyExpression();
-
- @failingTest
- @override
- test_attributes_int() => super.test_attributes_int();
-
- @failingTest
- @override
- test_attributes_listLiteral() => super.test_attributes_listLiteral();
-
- @failingTest
- @override
- test_attributes_mapLiteral() => super.test_attributes_mapLiteral();
-
- @failingTest
- @override
- test_attributes_multiLine() => super.test_attributes_multiLine();
-
- @failingTest
- @override
- test_attributes_string_interpolation() =>
- super.test_attributes_string_interpolation();
-
- @failingTest
- @override
- test_attributes_string_literal() => super.test_attributes_string_literal();
}
diff --git a/pkg/analyzer/lib/src/fasta/resolution_applier.dart b/pkg/analyzer/lib/src/fasta/resolution_applier.dart
index 7784637..26afda9 100644
--- a/pkg/analyzer/lib/src/fasta/resolution_applier.dart
+++ b/pkg/analyzer/lib/src/fasta/resolution_applier.dart
@@ -99,7 +99,7 @@
}
argumentList.accept(this);
- _resolveNamedArguments(argumentList, element.parameters);
+ _resolveArgumentsToParameters(argumentList, element.parameters);
}
}
@@ -437,7 +437,7 @@
ArgumentList argumentList = node.argumentList;
argumentList.accept(this);
- _resolveNamedArguments(argumentList, constructor?.parameters);
+ _resolveArgumentsToParameters(argumentList, constructor?.parameters);
}
@override
@@ -526,10 +526,16 @@
PropertyAccessorElement accessor = elementForParameters;
elementForParameters = accessor.returnType.element;
}
+ List<ParameterElement> parameters;
if (elementForParameters is FunctionTypedElement) {
- List<ParameterElement> parameters = elementForParameters.parameters;
- _resolveNamedArguments(argumentList, parameters);
+ parameters = elementForParameters.parameters;
+ } else if (elementForParameters is ParameterElement) {
+ var type = elementForParameters.type;
+ if (type is FunctionType) {
+ parameters = type.parameters;
+ }
}
+ _resolveArgumentsToParameters(argumentList, parameters);
}
if (invokeElement is ConstructorElement) {
@@ -607,7 +613,7 @@
ArgumentList argumentList = node.argumentList;
argumentList.accept(this);
- _resolveNamedArguments(argumentList, element?.parameters);
+ _resolveArgumentsToParameters(argumentList, element?.parameters);
}
@override
@@ -653,7 +659,7 @@
ArgumentList argumentList = node.argumentList;
argumentList.accept(this);
- _resolveNamedArguments(argumentList, element?.parameters);
+ _resolveArgumentsToParameters(argumentList, element?.parameters);
}
@override
@@ -748,21 +754,44 @@
}
}
- /// Apply resolution to named arguments of the [argumentList].
- void _resolveNamedArguments(
+ /// Resolve arguments of the [argumentList] to corresponding [parameters].
+ void _resolveArgumentsToParameters(
ArgumentList argumentList, List<ParameterElement> parameters) {
if (parameters != null) {
- for (var argument in argumentList.arguments) {
+ var numberOfPositionalParameters = 0;
+ for (var parameter in parameters) {
+ if (parameter.isPositional) {
+ numberOfPositionalParameters++;
+ }
+ }
+
+ var numberOfArguments = argumentList.arguments.length;
+ if (numberOfArguments == numberOfPositionalParameters &&
+ numberOfPositionalParameters == parameters.length) {
+ argumentList.correspondingStaticParameters = parameters;
+ return;
+ }
+
+ var resolvedParameters = new List<ParameterElement>(numberOfArguments);
+ for (var i = 0; i < numberOfArguments; i++) {
+ var argument = argumentList.arguments[i];
+ ParameterElement argumentParameter;
if (argument is NamedExpression) {
SimpleIdentifier identifier = argument.name.label;
for (var parameter in parameters) {
if (parameter.name == identifier.name) {
+ argumentParameter = parameter;
identifier.staticElement = parameter;
break;
}
}
+ } else if (i < parameters.length && parameters[i].isPositional) {
+ argumentParameter = parameters[i];
}
+ resolvedParameters[i] = argumentParameter;
}
+
+ argumentList.correspondingStaticParameters = resolvedParameters;
}
}
diff --git a/pkg/analyzer/test/generated/hint_code_kernel_test.dart b/pkg/analyzer/test/generated/hint_code_kernel_test.dart
index e773bc6..4103dd6 100644
--- a/pkg/analyzer/test/generated/hint_code_kernel_test.dart
+++ b/pkg/analyzer/test/generated/hint_code_kernel_test.dart
@@ -55,12 +55,6 @@
@failingTest
@override
- test_deprecatedAnnotationUse_positional() async {
- return super.test_deprecatedAnnotationUse_positional();
- }
-
- @failingTest
- @override
test_deprecatedFunction_class() async {
return super.test_deprecatedFunction_class();
}
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_resolution_kernel_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_resolution_kernel_test.dart
index 1927342..a83d5af 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_resolution_kernel_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_resolution_kernel_test.dart
@@ -51,6 +51,12 @@
@override
@failingTest
+ test_methodInvocation_topLevelFunction_generic() async {
+ await super.test_methodInvocation_topLevelFunction_generic();
+ }
+
+ @override
+ @failingTest
test_unresolved_assignment_left_indexed1_simple() async {
await super.test_unresolved_assignment_left_indexed1_simple();
}
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
index 14378de..4b6176e 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
@@ -6710,9 +6710,9 @@
expect(invocation.staticInvokeType.toString(), fTypeString);
_assertArgumentToParameter(arguments[0], fElement.parameters[0],
- parameterMemberType: typeProvider.boolType);
+ memberType: typeProvider.boolType);
_assertArgumentToParameter(arguments[1], fElement.parameters[1],
- parameterMemberType: typeProvider.stringType);
+ memberType: typeProvider.stringType);
}
// f(1, 2.3);
@@ -6730,9 +6730,9 @@
expect(invocation.staticInvokeType.toString(), fTypeString);
_assertArgumentToParameter(arguments[0], fElement.parameters[0],
- parameterMemberType: typeProvider.intType);
+ memberType: typeProvider.intType);
_assertArgumentToParameter(arguments[1], fElement.parameters[1],
- parameterMemberType: typeProvider.doubleType);
+ memberType: typeProvider.doubleType);
}
}
@@ -10013,41 +10013,34 @@
assertType(intRef, 'int');
}
- /// Assert that the [argument] is associated with the [expectedParameter],
+ /// Assert that the [argument] is associated with the [expected],
/// if [useCFE] is `null`. If the [argument] is a [NamedExpression],
/// the name must be resolved to the parameter in both cases.
void _assertArgumentToParameter(
- Expression argument, ParameterElement expectedParameter,
- {DartType parameterMemberType}) {
- ParameterElement actualParameter = argument.staticParameterElement;
- if (useCFE) {
- expect(actualParameter, isNull);
- if (argument is NamedExpression) {
- SimpleIdentifier name = argument.name.label;
- expect(name.staticElement, same(expectedParameter));
+ Expression argument, ParameterElement expected,
+ {DartType memberType}) {
+ ParameterElement actual = argument.staticParameterElement;
+ if (memberType != null) {
+ expect(actual.type, memberType);
+ }
+
+ ParameterElement base = actual;
+ if (actual is ParameterMember) {
+ base = actual.baseElement;
+ // Unwrap ParameterMember one more time.
+ // By some reason we wrap in twice.
+ if (base is ParameterMember) {
+ ParameterMember member = base;
+ base = member.baseElement;
}
- } else {
- ParameterElement baseActualParameter;
- if (actualParameter is ParameterMember) {
- if (parameterMemberType != null) {
- expect(actualParameter.type, parameterMemberType);
- }
- baseActualParameter = actualParameter.baseElement;
- // Unwrap ParameterMember one more time.
- // By some reason we wrap in twice.
- if (baseActualParameter is ParameterMember) {
- ParameterMember member = baseActualParameter;
- baseActualParameter = member.baseElement;
- }
- } else {
- baseActualParameter = actualParameter;
- }
- expect(baseActualParameter, same(expectedParameter));
- if (argument is NamedExpression) {
- SimpleIdentifier name = argument.name.label;
- expect(name.staticElement, same(actualParameter));
- expect(name.staticType, isNull);
- }
+ }
+ ParameterElement baseActual = base;
+ expect(baseActual, same(expected));
+
+ if (argument is NamedExpression) {
+ SimpleIdentifier name = argument.name.label;
+ expect(name.staticElement, same(actual));
+ expect(name.staticType, isNull);
}
}
@@ -10258,6 +10251,9 @@
for (var function in unitElement.functions) {
function.parameters.forEach(considerParameter);
}
+ for (var function in unitElement.functionTypeAliases) {
+ function.parameters.forEach(considerParameter);
+ }
for (var class_ in unitElement.types) {
for (var constructor in class_.constructors) {
constructor.parameters.forEach(considerParameter);
@@ -10429,6 +10425,10 @@
return _node(search).getAncestor((n) => n is SimpleFormalParameter);
}
+ StringLiteral stringLiteral(String search) {
+ return _node(search).getAncestor((n) => n is StringLiteral);
+ }
+
SuperExpression super_(String search) {
return _node(search).getAncestor((n) => n is SuperExpression);
}