Convert ShadowDeferredCheck to DeferredCheckJudgment

Change-Id: I411e29c6b3f1d1d88942cfb6775d4b88908bb6a5
Reviewed-on: https://dart-review.googlesource.com/61820
Commit-Queue: Paul Berry <paulberry@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index ef98a6a..6810e39 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -4188,7 +4188,7 @@
     Object check = new VariableDeclaration.forValue(
         forest.checkLibraryIsLoaded(prefix.dependency))
       ..fileOffset = charOffset;
-    return new ShadowDeferredCheck(check, expression);
+    return new DeferredCheckJudgment(check, expression);
   }
 
   /// TODO(ahe): This method is temporarily implemented by subclasses. Once type
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 d7380a4..437f507 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
@@ -72,7 +72,7 @@
         ComplexAssignmentJudgment,
         ShadowConstructorInvocation,
         ContinueSwitchJudgment,
-        ShadowDeferredCheck,
+        DeferredCheckJudgment,
         ExpressionStatementJudgment,
         ShadowFactoryConstructorInvocation,
         ShadowFieldInitializer,
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 bb09b00..2b7c54a 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
@@ -825,12 +825,14 @@
 }
 
 /// Shadow object representing a deferred check in kernel form.
-class ShadowDeferredCheck extends Let implements ExpressionJudgment {
+class DeferredCheckJudgment extends Let implements ExpressionJudgment {
   DartType inferredType;
 
-  ShadowDeferredCheck(VariableDeclaration variable, Expression body)
+  DeferredCheckJudgment(VariableDeclaration variable, Expression body)
       : super(variable, body);
 
+  ExpressionJudgment get judgment => body;
+
   @override
   DartType infer<Expression, Statement, Initializer, Type>(
       ShadowTypeInferrer inferrer,
@@ -838,8 +840,9 @@
       DartType typeContext) {
     // Since the variable is not used in the body we don't need to type infer
     // it.  We can just type infer the body.
-    var inferredType =
-        inferrer.inferExpression(factory, body, typeContext, true);
+    var judgment = this.judgment;
+    inferrer.inferExpression(factory, judgment, typeContext, true);
+    inferredType = judgment.inferredType;
     inferrer.listener.deferredCheck(this, fileOffset, inferredType);
     return inferredType;
   }