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