Store resolution for unresolved type instance creation.

R=brianwilkerson@google.com, paulberry@google.com

Change-Id: I91af78cc5b99924c8dab77662d6bd08786a24fd9
Reviewed-on: https://dart-review.googlesource.com/65026
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analyzer/lib/src/fasta/resolution_applier.dart b/pkg/analyzer/lib/src/fasta/resolution_applier.dart
index 99c1af3..2125919 100644
--- a/pkg/analyzer/lib/src/fasta/resolution_applier.dart
+++ b/pkg/analyzer/lib/src/fasta/resolution_applier.dart
@@ -672,6 +672,7 @@
     for (var argument in argumentList.arguments) {
       if (argument is NamedExpression) {
         argument.expression.accept(this);
+        argument.staticType = argument.expression.staticType;
       } else {
         argument.accept(this);
       }
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 eb42be1..0b26443 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
@@ -105,13 +105,6 @@
   @override
   @failingTest
   @potentialAnalyzerProblem
-  test_unresolved_instanceCreation_name_11() async {
-    await super.test_unresolved_instanceCreation_name_11();
-  }
-
-  @override
-  @failingTest
-  @potentialAnalyzerProblem
   test_unresolved_instanceCreation_name_21() async {
     await super.test_unresolved_instanceCreation_name_21();
   }
@@ -133,13 +126,6 @@
   @override
   @failingTest
   @potentialAnalyzerProblem
-  test_unresolved_instanceCreation_name_32() async {
-    await super.test_unresolved_instanceCreation_name_32();
-  }
-
-  @override
-  @failingTest
-  @potentialAnalyzerProblem
   test_unresolved_instanceCreation_name_33() async {
     await super.test_unresolved_instanceCreation_name_33();
   }
@@ -154,13 +140,6 @@
   @override
   @failingTest
   @potentialAnalyzerProblem
-  test_unresolved_methodInvocation_target_resolved() async {
-    await super.test_unresolved_methodInvocation_target_resolved();
-  }
-
-  @override
-  @failingTest
-  @potentialAnalyzerProblem
   test_unresolved_methodInvocation_target_unresolved() async {
     await super.test_unresolved_methodInvocation_target_unresolved();
   }
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 685a711..8e06650 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
@@ -125,13 +125,11 @@
 
       SimpleIdentifier nameIdentifier = named.name.label;
       expect(nameIdentifier.staticElement, isNull);
-      if (useCFE) {
-        expect(nameIdentifier.staticType, isDynamicType);
-      }
+      expect(nameIdentifier.staticType, isNull);
 
-      SimpleIdentifier arg2Node = named.expression;
-      expect(arg2Node.staticElement, same(variable.getter));
-      expect(arg2Node.staticType, variable.type);
+      SimpleIdentifier expression = named.expression;
+      expect(expression.staticElement, same(variable.getter));
+      expect(expression.staticType, variable.type);
     };
   }
 
@@ -8310,6 +8308,7 @@
       if (argument is NamedExpression) {
         SimpleIdentifier name = argument.name.label;
         expect(name.staticElement, same(actualParameter));
+        expect(name.staticType, isNull);
       }
     }
   }
diff --git a/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart b/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
index 255f585..9409dc1 100644
--- a/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
@@ -66,6 +66,7 @@
         DynamicType,
         Expression,
         Initializer,
+        InvalidConstructorInvocationJudgment,
         InvalidType,
         Member,
         Name,
@@ -792,11 +793,13 @@
   @override
   Expression invokeConstructor(List<DartType> typeArguments, String name,
       Arguments arguments, Token nameToken, Constness constness) {
+    helper.storeTypeUse(offsetForToken(token), const InvalidType());
     if (typeArguments != null) {
       assert(forest.argumentsTypeArguments(arguments).isEmpty);
       forest.argumentsSetTypeArguments(arguments, typeArguments);
     }
-    return new SyntheticExpressionJudgment(buildError(arguments));
+    var error = buildError(arguments);
+    return new InvalidConstructorInvocationJudgment(error, null, arguments);
   }
 }
 
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
index 31f9b75..143ea69 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
@@ -2857,8 +2857,8 @@
   }
 }
 
-/// Synthetic judgment class representing an attempt to invoke a constructor
-/// that cannot be invoked.
+/// Synthetic judgment class representing an attempt to invoke an unresolved
+/// constructor, or a constructor that cannot be invoked.
 class InvalidConstructorInvocationJudgment extends SyntheticExpressionJudgment {
   final Constructor constructor;
   final Arguments arguments;
@@ -2874,13 +2874,21 @@
       ShadowTypeInferrer inferrer,
       Factory<Expression, Statement, Initializer, Type> factory,
       DartType typeContext) {
-    var calleeType = constructor.function.functionType;
-    var inferenceResult = inferrer.inferInvocation(
+    FunctionType calleeType;
+    DartType returnType;
+    if (constructor != null) {
+      calleeType = constructor.function.functionType;
+      returnType = computeConstructorReturnType(constructor);
+    } else {
+      calleeType = new FunctionType([], const DynamicType());
+      returnType = const DynamicType();
+    }
+    ExpressionInferenceResult inferenceResult = inferrer.inferInvocation(
         factory,
         typeContext,
         fileOffset,
         calleeType,
-        computeConstructorReturnType(constructor),
+        returnType,
         argumentJudgments);
     this.inferredType = inferenceResult.type;
     inferrer.listener.constructorInvocation(
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
index 64ee7d5..e03c017 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
@@ -1750,6 +1750,7 @@
       // TODO(paulberry): handle this case.
     } else if (node is InvalidType) {
       // TODO(paulberry): handle this case.
+      listener.storeClassReference(offset, null, const DynamicType());
     } else {
       // TODO(paulberry): handle this case.
       return unhandled("${node.runtimeType}", "storeTypeUse", offset, uri);
diff --git a/pkg/front_end/testcases/expression/lib_nonshown_ctor.expression.yaml.expect b/pkg/front_end/testcases/expression/lib_nonshown_ctor.expression.yaml.expect
index f6b2dd6..f7f9eda 100644
--- a/pkg/front_end/testcases/expression/lib_nonshown_ctor.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/lib_nonshown_ctor.expression.yaml.expect
@@ -1,5 +1,6 @@
 Errors: {
   Method not found: 'Directory'. (@4)
+  Too many positional arguments: 0 allowed, 1 given. (@0)
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
   return throw new dart.core::NoSuchMethodError::withInvocation(null, new dart.core::_InvocationMirror::_withType(#Directory, 32, const <dart.core::Type>[], dart.core::List::unmodifiable<dynamic>(<dynamic>["test"]), dart.core::Map::unmodifiable<dart.core::Symbol, dynamic>(const <dart.core::Symbol, dynamic>{})));