Convert some ShadowExpressions into inference judgments

As a first step toward a new API, convert ThisExpression, Throw,
TypeLiteral, VariableAssignment, VariableGet, LoadLibrary, and
CheckLibraryIsLoaded.

Change-Id: I787d354ad6d8282a94504185390fab07c683d74d
Reviewed-on: https://dart-review.googlesource.com/60921
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Kevin Millikin <kmillikin@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 bc647fb..7947d50 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -1464,8 +1464,9 @@
         return new ReadOnlyAccessGenerator<Expression, Statement, Arguments>(
             this,
             token,
-            toExpression(new ShadowVariableGet(declaration.target, fact, scope)
-              ..fileOffset = charOffset),
+            toExpression(
+                new VariableGetJudgment(declaration.target, fact, scope)
+                  ..fileOffset = charOffset),
             name);
       } else {
         return new VariableUseGenerator<Expression, Statement, Arguments>(
@@ -3284,7 +3285,7 @@
           typePromoter.getFactForAccess(variable, functionNestingLevel);
       TypePromotionScope scope = typePromoter.currentScope;
       syntheticAssignment = toKernelExpression(lvalue.buildAssignment(
-          toExpression(new ShadowVariableGet(variable, fact, scope)
+          toExpression(new VariableGetJudgment(variable, fact, scope)
             ..fileOffset = inKeyword.offset),
           voidContext: true));
       kernelBody = combineStatements(
diff --git a/pkg/front_end/lib/src/fasta/kernel/fangorn.dart b/pkg/front_end/lib/src/fasta/kernel/fangorn.dart
index 8aadbcd..cb6ad46 100644
--- a/pkg/front_end/lib/src/fasta/kernel/fangorn.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/fangorn.dart
@@ -74,7 +74,7 @@
         ShadowBlock,
         BoolJudgment,
         ShadowBreakStatement,
-        ShadowCheckLibraryIsLoaded,
+        CheckLibraryIsLoadedJudgment,
         ShadowConditionalExpression,
         ShadowDoStatement,
         ShadowDoubleLiteral,
@@ -86,7 +86,7 @@
         ShadowIsNotExpression,
         ShadowLabeledStatement,
         ShadowListLiteral,
-        ShadowLoadLibrary,
+        LoadLibraryJudgment,
         ShadowLogicalExpression,
         ShadowMapLiteral,
         ShadowNot,
@@ -97,11 +97,11 @@
         ShadowStringLiteral,
         ShadowSymbolLiteral,
         ShadowSyntheticExpression,
-        ShadowThisExpression,
-        ShadowThrow,
+        ThisJudgment,
+        ThrowJudgment,
         ShadowTryCatch,
         ShadowTryFinally,
-        ShadowTypeLiteral,
+        TypeLiteralJudgment,
         ShadowWhileStatement,
         ShadowYieldStatement;
 
@@ -223,8 +223,8 @@
   }
 
   @override
-  ShadowTypeLiteral literalType(DartType type, Token token) {
-    return new ShadowTypeLiteral(type)..fileOffset = offsetForToken(token);
+  TypeLiteralJudgment literalType(DartType type, Token token) {
+    return new TypeLiteralJudgment(type)..fileOffset = offsetForToken(token);
   }
 
   @override
@@ -248,12 +248,12 @@
 
   @override
   Expression loadLibrary(LibraryDependency dependency) {
-    return new ShadowLoadLibrary(dependency);
+    return new LoadLibraryJudgment(dependency);
   }
 
   @override
   Expression checkLibraryIsLoaded(LibraryDependency dependency) {
-    return new ShadowCheckLibraryIsLoaded(dependency);
+    return new CheckLibraryIsLoadedJudgment(dependency);
   }
 
   @override
@@ -476,12 +476,12 @@
 
   @override
   Expression thisExpression(Token token) {
-    return new ShadowThisExpression()..fileOffset = offsetForToken(token);
+    return new ThisJudgment()..fileOffset = offsetForToken(token);
   }
 
   @override
   Expression throwExpression(Token throwKeyword, Expression expression) {
-    return new ShadowThrow(expression)
+    return new ThrowJudgment(expression)
       ..fileOffset = offsetForToken(throwKeyword);
   }
 
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 8c3a5b6..c6c588d 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
@@ -102,7 +102,7 @@
         ShadowSuperPropertyGet,
         ShadowSwitchStatement,
         ShadowSyntheticExpression,
-        ShadowVariableAssignment,
+        VariableAssignmentJudgment,
         ShadowVariableDeclaration,
-        ShadowVariableGet,
+        VariableGetJudgment,
         ShadowYieldStatement;
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 de2683d..e84ef87 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
@@ -84,9 +84,9 @@
         ShadowStaticAssignment,
         ShadowSuperMethodInvocation,
         ShadowSuperPropertyGet,
-        ShadowVariableAssignment,
+        VariableAssignmentJudgment,
         ShadowVariableDeclaration,
-        ShadowVariableGet,
+        VariableGetJudgment,
         StaticSet,
         SuperMethodInvocation,
         SuperPropertySet,
@@ -278,7 +278,7 @@
     var fact = helper.typePromoter
         .getFactForAccess(variable, helper.functionNestingLevel);
     var scope = helper.typePromoter.currentScope;
-    var read = new ShadowVariableGet(variable, fact, scope)
+    var read = new VariableGetJudgment(variable, fact, scope)
       ..fileOffset = offsetForToken(token);
     complexAssignment?.read = read;
     return read;
@@ -305,7 +305,7 @@
 
   @override
   ShadowComplexAssignment startComplexAssignment(Expression rhs) =>
-      new ShadowVariableAssignment(rhs);
+      new VariableAssignmentJudgment(rhs);
 
   @override
   void printOn(StringSink sink) {
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 2f4b88e..1f54af7 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
@@ -2265,9 +2265,7 @@
   }
 }
 
-/// Shadow object for [ThisExpression].
-class ShadowThisExpression extends ThisExpression
-    implements ExpressionJudgment {
+class ThisJudgment extends ThisExpression implements ExpressionJudgment {
   DartType inferredType;
 
   @override
@@ -2279,19 +2277,20 @@
   }
 }
 
-/// Shadow object for [Throw].
-class ShadowThrow extends Throw implements ExpressionJudgment {
+class ThrowJudgment extends Throw implements ExpressionJudgment {
   DartType inferredType;
 
-  ShadowThrow(Expression expression) : super(expression);
+  ExpressionJudgment get judgment => expression;
+
+  ThrowJudgment(Expression expression) : super(expression);
 
   @override
   DartType infer<Expression, Statement, Initializer>(
       ShadowTypeInferrer inferrer,
       Factory<Expression, Statement, Initializer> factory,
       DartType typeContext) {
-    inferrer.inferExpression(factory, expression, const UnknownType(), false);
-    return const BottomType();
+    inferrer.inferExpression(factory, judgment, const UnknownType(), false);
+    return inferredType = const BottomType();
   }
 }
 
@@ -2459,18 +2458,17 @@
   }
 }
 
-/// Shadow object for [TypeLiteral].
-class ShadowTypeLiteral extends TypeLiteral implements ExpressionJudgment {
+class TypeLiteralJudgment extends TypeLiteral implements ExpressionJudgment {
   DartType inferredType;
 
-  ShadowTypeLiteral(DartType type) : super(type);
+  TypeLiteralJudgment(DartType type) : super(type);
 
   @override
   DartType infer<Expression, Statement, Initializer>(
       ShadowTypeInferrer inferrer,
       Factory<Expression, Statement, Initializer> factory,
       DartType typeContext) {
-    return inferrer.coreTypes.typeClass.rawType;
+    return inferredType = inferrer.coreTypes.typeClass.rawType;
   }
 }
 
@@ -2543,9 +2541,8 @@
   }
 }
 
-/// Concrete shadow object representing an assignment to a local variable.
-class ShadowVariableAssignment extends ShadowComplexAssignment {
-  ShadowVariableAssignment(Expression rhs) : super(rhs);
+class VariableAssignmentJudgment extends ShadowComplexAssignment {
+  VariableAssignmentJudgment(Expression rhs) : super(rhs);
 
   @override
   DartType _getWriteType(ShadowTypeInferrer inferrer) {
@@ -2573,7 +2570,7 @@
     }
     var inferredResult = _inferRhs(inferrer, factory, readType, writeContext);
     _replaceWithDesugared();
-    return inferredResult.type;
+    return inferredType = inferredResult.type;
   }
 }
 
@@ -2687,14 +2684,14 @@
 }
 
 /// Concrete shadow object representing a read from a variable in kernel form.
-class ShadowVariableGet extends VariableGet implements ExpressionJudgment {
+class VariableGetJudgment extends VariableGet implements ExpressionJudgment {
   DartType inferredType;
 
   final TypePromotionFact _fact;
 
   final TypePromotionScope _scope;
 
-  ShadowVariableGet(VariableDeclaration variable, this._fact, this._scope)
+  VariableGetJudgment(VariableDeclaration variable, this._fact, this._scope)
       : super(variable);
 
   @override
@@ -2717,7 +2714,7 @@
     if (variable._isLocalFunction) {
       type = inferrer.instantiateTearOff(type, typeContext, this);
     }
-    return type;
+    return inferredType = type;
   }
 }
 
@@ -2769,33 +2766,33 @@
 }
 
 /// Concrete shadow object representing a deferred load library call.
-class ShadowLoadLibrary extends LoadLibrary implements ExpressionJudgment {
+class LoadLibraryJudgment extends LoadLibrary implements ExpressionJudgment {
   DartType inferredType;
 
-  ShadowLoadLibrary(LibraryDependency import) : super(import);
+  LoadLibraryJudgment(LibraryDependency import) : super(import);
 
   @override
   DartType infer<Expression, Statement, Initializer>(
       ShadowTypeInferrer inferrer,
       Factory<Expression, Statement, Initializer> factory,
       DartType typeContext) {
-    return super.getStaticType(inferrer.typeSchemaEnvironment);
+    return inferredType = super.getStaticType(inferrer.typeSchemaEnvironment);
   }
 }
 
 /// Concrete shadow object representing a deferred library-is-loaded check.
-class ShadowCheckLibraryIsLoaded extends CheckLibraryIsLoaded
+class CheckLibraryIsLoadedJudgment extends CheckLibraryIsLoaded
     implements ExpressionJudgment {
   DartType inferredType;
 
-  ShadowCheckLibraryIsLoaded(LibraryDependency import) : super(import);
+  CheckLibraryIsLoadedJudgment(LibraryDependency import) : super(import);
 
   @override
   DartType infer<Expression, Statement, Initializer>(
       ShadowTypeInferrer inferrer,
       Factory<Expression, Statement, Initializer> factory,
       DartType typeContext) {
-    return super.getStaticType(inferrer.typeSchemaEnvironment);
+    return inferredType = super.getStaticType(inferrer.typeSchemaEnvironment);
   }
 }