Store unresolved assignments as UnresolvedVariableAssignmentJudgment.

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

Change-Id: I4738ba450b1f7e7cab794bdc34a88996d1d827b3
Reviewed-on: https://dart-review.googlesource.com/63360
Reviewed-by: Paul Berry <paulberry@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analysis_server/test/integration/analysis/highlights_test.dart b/pkg/analysis_server/test/integration/analysis/highlights_test.dart
index e143a15..5fb8afa 100644
--- a/pkg/analysis_server/test/integration/analysis/highlights_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/highlights_test.dart
@@ -150,8 +150,4 @@
 class AnalysisHighlightsTest_UseCFE extends AnalysisHighlightsTest {
   @override
   bool get useCFE => true;
-
-  @override
-  @failingTest
-  test_highlights() => super.test_highlights();
 }
diff --git a/pkg/analyzer/test/generated/static_type_warning_code_kernel_test.dart b/pkg/analyzer/test/generated/static_type_warning_code_kernel_test.dart
index 284006e..7756923 100644
--- a/pkg/analyzer/test/generated/static_type_warning_code_kernel_test.dart
+++ b/pkg/analyzer/test/generated/static_type_warning_code_kernel_test.dart
@@ -840,13 +840,6 @@
 
   @override
   @failingTest
-  test_undefinedSetter_static() async {
-    // Bad state: No reference information for A at 17
-    await super.test_undefinedSetter_static();
-  }
-
-  @override
-  @failingTest
   test_undefinedSuperMethod() async {
     // Expected 1 errors of type StaticTypeWarningCode.UNDEFINED_SUPER_METHOD, found 0
     await super.test_undefinedSuperMethod();
diff --git a/pkg/analyzer/test/generated/static_warning_code_kernel_test.dart b/pkg/analyzer/test/generated/static_warning_code_kernel_test.dart
index 019a9b5..ca77b73 100644
--- a/pkg/analyzer/test/generated/static_warning_code_kernel_test.dart
+++ b/pkg/analyzer/test/generated/static_warning_code_kernel_test.dart
@@ -1876,13 +1876,6 @@
     return super.test_undefinedStaticMethodOrGetter_method_inSuperclass();
   }
 
-  @override
-  @failingTest
-  @potentialAnalyzerProblem
-  test_undefinedStaticMethodOrGetter_setter_inSuperclass() async {
-    return super.test_undefinedStaticMethodOrGetter_setter_inSuperclass();
-  }
-
   @failingTest
   @override
   test_useOfVoidResult_assignmentExpression_function() async {
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 e1153f2..bb86b9c 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
@@ -47,20 +47,6 @@
   @override
   @failingTest
   @potentialAnalyzerProblem
-  test_unresolved_assignment_left_identifier_compound() async {
-    await super.test_unresolved_assignment_left_identifier_compound();
-  }
-
-  @override
-  @failingTest
-  @potentialAnalyzerProblem
-  test_unresolved_assignment_left_identifier_simple() async {
-    await super.test_unresolved_assignment_left_identifier_simple();
-  }
-
-  @override
-  @failingTest
-  @potentialAnalyzerProblem
   test_unresolved_assignment_left_indexed1_simple() async {
     await super.test_unresolved_assignment_left_indexed1_simple();
   }
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_ast_api.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_ast_api.dart
index 80de917..cd6ab94 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_ast_api.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_ast_api.dart
@@ -86,6 +86,7 @@
         IfJudgment,
         IllegalAssignmentJudgment,
         IndexAssignmentJudgment,
+        InvalidVariableWriteJudgment,
         ShadowInvalidInitializer,
         LabeledStatementJudgment,
         LogicalJudgment,
@@ -107,6 +108,7 @@
         SwitchStatementJudgment,
         SyntheticExpressionJudgment,
         UnresolvedVariableGetJudgment,
+        UnresolvedVariableAssignmentJudgment,
         VariableAssignmentJudgment,
         VariableDeclarationJudgment,
         VariableGetJudgment,
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator.dart
index ed5cd01..4e5426b 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator.dart
@@ -77,6 +77,7 @@
         ComplexAssignmentJudgment,
         IllegalAssignmentJudgment,
         IndexAssignmentJudgment,
+        InvalidVariableWriteJudgment,
         MethodInvocationJudgment,
         NullAwarePropertyGetJudgment,
         PropertyAssignmentJudgment,
@@ -95,6 +96,7 @@
         TreeNode,
         TypeParameter,
         UnresolvedVariableGetJudgment,
+        UnresolvedVariableAssignmentJudgment,
         VariableDeclaration,
         VariableGet,
         VariableSet;
@@ -108,8 +110,6 @@
         PrefixBuilder,
         TypeDeclarationBuilder;
 
-import 'kernel_shadow_ast.dart' show InvalidVariableWriteJudgment;
-
 part 'kernel_expression_generator_impl.dart';
 
 abstract class KernelExpressionGenerator implements ExpressionGenerator {
@@ -1397,6 +1397,20 @@
       : super(helper, token);
 
   @override
+  Expression buildAssignment(Expression value, {bool voidContext: false}) {
+    return _buildUnresolvedVariableAssignment(false, value);
+  }
+
+  @override
+  Expression buildCompoundAssignment(Name binaryOperator, Expression value,
+      {int offset: TreeNode.noOffset,
+      bool voidContext: false,
+      Procedure interfaceTarget,
+      bool isPreIncDec: false}) {
+    return _buildUnresolvedVariableAssignment(true, value);
+  }
+
+  @override
   Expression buildSimpleRead() {
     Expression error = buildError(forest.argumentsEmpty(token), isGetter: true);
     return new UnresolvedVariableGetJudgment(error)
@@ -1408,6 +1422,15 @@
     sink.write(", name: ");
     sink.write(name.name);
   }
+
+  UnresolvedVariableAssignmentJudgment _buildUnresolvedVariableAssignment(
+      bool isCompound, Expression value) {
+    return new UnresolvedVariableAssignmentJudgment(
+      buildError(forest.arguments(<Expression>[value], token), isSetter: true),
+      isCompound,
+      value,
+    )..fileOffset = token.charOffset;
+  }
 }
 
 class KernelUnlinkedGenerator extends KernelGenerator with UnlinkedGenerator {
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 62b8962..563d0e48 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
@@ -3549,6 +3549,29 @@
       variable._isLocalFunction;
 }
 
+/// Synthetic judgment class representing an attempt to assign to an unresolved
+/// variable.
+class UnresolvedVariableAssignmentJudgment extends SyntheticExpressionJudgment {
+  final bool isCompound;
+  final ExpressionJudgment rhs;
+
+  UnresolvedVariableAssignmentJudgment(
+      kernel.Expression desugared, this.isCompound, this.rhs)
+      : super(desugared);
+
+  @override
+  Expression infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      DartType typeContext) {
+    inferrer.inferExpression(factory, rhs, const UnknownType(), true);
+    inferredType = isCompound ? const DynamicType() : rhs.inferredType;
+    inferrer.listener.variableAssign(
+        this, fileOffset, const DynamicType(), null, null, inferredType);
+    return super.infer(inferrer, factory, typeContext);
+  }
+}
+
 /// Synthetic judgment class representing an attempt to read an unresolved
 /// variable.
 class UnresolvedVariableGetJudgment extends SyntheticExpressionJudgment {