Convert ShadowLiteralList into LiteralListJudgment

Change-Id: Iead84138ca0a74ae15911e6d0978d52c08f40816
Reviewed-on: https://dart-review.googlesource.com/61540
Commit-Queue: Dmitry Stefantsov <dmitryas@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
diff --git a/pkg/front_end/lib/src/fasta/kernel/fangorn.dart b/pkg/front_end/lib/src/fasta/kernel/fangorn.dart
index a62fd43..1faadfa 100644
--- a/pkg/front_end/lib/src/fasta/kernel/fangorn.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/fangorn.dart
@@ -90,7 +90,7 @@
         ExpressionStatementJudgment,
         ShadowForStatement,
         IfJudgment,
-        ShadowListLiteral,
+        ListLiteralJudgment,
         ShadowLogicalExpression,
         ShadowMapLiteral,
         ShadowNot,
@@ -173,7 +173,7 @@
   }
 
   @override
-  ShadowListLiteral literalList(
+  ListLiteralJudgment literalList(
       Token constKeyword,
       bool isConst,
       Object typeArgument,
@@ -183,7 +183,7 @@
       Token rightBracket) {
     // TODO(brianwilkerson): The file offset computed below will not be correct
     // if there are type arguments but no `const` keyword.
-    return new ShadowListLiteral(expressions,
+    return new ListLiteralJudgment(expressions,
         typeArgument: typeArgument, isConst: isConst)
       ..fileOffset = offsetForToken(constKeyword ?? leftBracket);
   }
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 2b7c54a..c0a4bfcab 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
@@ -1648,13 +1648,15 @@
   }
 }
 
-/// Concrete shadow object representing a list literal in kernel form.
-class ShadowListLiteral extends ListLiteral implements ExpressionJudgment {
+/// Type inference derivation for [LiteralList].
+class ListLiteralJudgment extends ListLiteral implements ExpressionJudgment {
   DartType inferredType;
 
+  List<Expression> get judgments => expressions;
+
   final DartType _declaredTypeArgument;
 
-  ShadowListLiteral(List<Expression> expressions,
+  ListLiteralJudgment(List<Expression> expressions,
       {DartType typeArgument, bool isConst: false})
       : _declaredTypeArgument = typeArgument,
         super(expressions,
@@ -1688,13 +1690,14 @@
       inferredTypeArgument = _declaredTypeArgument ?? const DynamicType();
     }
     if (inferenceNeeded || typeChecksNeeded) {
-      for (var expression in expressions) {
-        var expressionType = inferrer.inferExpression(factory, expression,
-            inferredTypeArgument, inferenceNeeded || typeChecksNeeded);
+      for (int i = 0; i < judgments.length; ++i) {
+        ExpressionJudgment judgment = judgments[i];
+        inferrer.inferExpression(factory, judgment, inferredTypeArgument,
+            inferenceNeeded || typeChecksNeeded);
         if (inferenceNeeded) {
           formalTypes.add(listType.typeArguments[0]);
         }
-        actualTypes.add(expressionType);
+        actualTypes.add(judgment.inferredType);
       }
     }
     if (inferenceNeeded) {
@@ -1711,15 +1714,15 @@
       typeArgument = inferredTypeArgument;
     }
     if (typeChecksNeeded) {
-      for (int i = 0; i < expressions.length; i++) {
-        inferrer.ensureAssignable(typeArgument, actualTypes[i], expressions[i],
-            expressions[i].fileOffset);
+      for (int i = 0; i < judgments.length; i++) {
+        inferrer.ensureAssignable(typeArgument, actualTypes[i], judgments[i],
+            judgments[i].fileOffset);
       }
     }
     var inferredType = new InterfaceType(listClass, [inferredTypeArgument]);
     inferrer.listener.listLiteral(
         this, fileOffset, null, null, null, expressions, null, inferredType);
-    return inferredType;
+    return this.inferredType = inferredType;
   }
 }