Wrap various synthetic kernel nodes

Change-Id: I51172dee3fc6f19166bab22f5aabf83a13864e31
Reviewed-on: https://dart-review.googlesource.com/c/85742
Commit-Queue: Dmitry Stefantsov <dmitryas@google.com>
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
Auto-Submit: Peter von der Ahé <ahe@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 c1b7e65..41d8df8 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -96,7 +96,13 @@
 
 import 'forest.dart' show Forest;
 
-import 'kernel_shadow_ast.dart' as shadow show SyntheticExpressionJudgment;
+import 'kernel_shadow_ast.dart' as shadow
+    show
+        InvalidConstructorInvocationJudgment,
+        InvalidWriteJudgment,
+        SyntheticExpressionJudgment,
+        UnresolvedTargetInvocationJudgment,
+        UnresolvedVariableAssignmentJudgment;
 
 import 'redirecting_factory_body.dart'
     show
@@ -3076,11 +3082,12 @@
           isConst || constantContext != ConstantContext.none && target.isConst;
       if ((isConst || constantContext == ConstantContext.inferred) &&
           !target.isConst) {
-        return new InvalidConstructorInvocationJudgment(
+        return wrapInvalidConstructorInvocation(
             desugarSyntheticExpression(buildProblem(
                 fasta.messageNonConstConstructor, charOffset, charLength)),
             target,
-            arguments);
+            arguments,
+            charOffset);
       }
       ConstructorInvocation node = new ConstructorInvocation(
           target, forest.castArguments(arguments),
@@ -3095,11 +3102,12 @@
             constantContext != ConstantContext.none && procedure.isConst;
         if ((isConst || constantContext == ConstantContext.inferred) &&
             !procedure.isConst) {
-          return new InvalidConstructorInvocationJudgment(
+          return wrapInvalidConstructorInvocation(
               desugarSyntheticExpression(buildProblem(
                   fasta.messageNonConstFactory, charOffset, charLength)),
               target,
-              arguments);
+              arguments,
+              charOffset);
         }
         StaticInvocation node = FactoryConstructorInvocationJudgment(
             target, forest.castArguments(arguments),
@@ -3339,7 +3347,7 @@
         message = b.message.withLocation(uri, charOffset, noLength);
       } else if (b.isConstructor) {
         if (type.isAbstract) {
-          return new InvalidConstructorInvocationJudgment(
+          return wrapInvalidConstructorInvocation(
               evaluateArgumentsBefore(
                   arguments,
                   buildAbstractClassInstantiationError(
@@ -3348,8 +3356,8 @@
                       type.name,
                       nameToken.charOffset)),
               target,
-              arguments)
-            ..fileOffset = charOffset;
+              arguments,
+              charOffset);
         }
       }
       if (target is Constructor ||
@@ -3395,15 +3403,15 @@
     }
     errorName ??= name;
 
-    return new UnresolvedTargetInvocationJudgment(
+    return wrapUnresolvedTargetInvocation(
         throwNoSuchMethodError(
             forest.literalNull(null)..fileOffset = charOffset,
             errorName,
             arguments,
             nameLastToken.charOffset,
             message: message),
-        arguments)
-      ..fileOffset = arguments.fileOffset;
+        arguments,
+        arguments.fileOffset);
   }
 
   @override
@@ -4764,6 +4772,36 @@
     shadow.SyntheticExpressionJudgment shadowNode = node;
     return shadowNode.desugared;
   }
+
+  @override
+  Expression wrapInvalidConstructorInvocation(Expression desugared,
+      Member constructor, Arguments arguments, int charOffset) {
+    return new shadow.InvalidConstructorInvocationJudgment(
+        desugared, constructor, arguments)
+      ..fileOffset = charOffset;
+  }
+
+  @override
+  Expression wrapInvalidWrite(
+      Expression desugared, Expression expression, int charOffset) {
+    return new shadow.InvalidWriteJudgment(desugared, expression)
+      ..fileOffset = charOffset;
+  }
+
+  @override
+  Expression wrapUnresolvedTargetInvocation(
+      Expression desugared, Arguments arguments, int charOffset) {
+    return new shadow.UnresolvedTargetInvocationJudgment(desugared, arguments)
+      ..fileOffset = charOffset;
+  }
+
+  @override
+  Expression wrapUnresolvedVariableAssignment(
+      Expression desugared, bool isCompound, Expression rhs, int charOffset) {
+    return new shadow.UnresolvedVariableAssignmentJudgment(
+        desugared, isCompound, rhs)
+      ..fileOffset = charOffset;
+  }
 }
 
 class Operator {
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 24b47b4..2a65568 100644
--- a/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
@@ -67,11 +67,9 @@
         DynamicType,
         Expression,
         Initializer,
-        InvalidConstructorInvocationJudgment,
         Member,
         Name,
         Procedure,
-        UnresolvedTargetInvocationJudgment,
         VariableDeclaration;
 
 import 'kernel_builder.dart'
@@ -238,7 +236,7 @@
       forest.argumentsSetTypeArguments(
           arguments, helper.buildDartTypeArguments(typeArguments));
     }
-    return new InvalidConstructorInvocationJudgment(
+    return helper.wrapInvalidConstructorInvocation(
         helper.throwNoSuchMethodError(
             forest.literalNull(token),
             helper.constructorNameForDiagnostics(name,
@@ -246,7 +244,8 @@
             arguments,
             nameToken.charOffset),
         null,
-        arguments);
+        arguments,
+        offsetForToken(token));
   }
 
   bool get isThisPropertyAccess => false;
@@ -769,10 +768,11 @@
       forest.argumentsSetTypeArguments(
           arguments, helper.buildDartTypeArguments(typeArguments));
     }
-    return new InvalidConstructorInvocationJudgment(
+    return helper.wrapInvalidConstructorInvocation(
         helper.desugarSyntheticExpression(buildError(arguments)),
         null,
-        arguments);
+        arguments,
+        offsetForToken(token));
   }
 }
 
@@ -790,11 +790,11 @@
 
   @override
   Expression doInvocation(int charOffset, Arguments arguments) {
-    return new UnresolvedTargetInvocationJudgment(
+    return helper.wrapUnresolvedTargetInvocation(
         helper.desugarSyntheticExpression(
             buildError(arguments, offset: charOffset)),
-        arguments)
-      ..fileOffset = arguments.fileOffset;
+        arguments,
+        arguments.fileOffset);
   }
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart b/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart
index 282afc2..584d978 100644
--- a/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart
@@ -152,4 +152,16 @@
       Declaration existing, String name, int charOffset);
 
   Expression wrapSyntheticExpression(Expression node, int charOffset);
+
+  Expression wrapInvalidConstructorInvocation(Expression desugared,
+      Member constructor, Arguments arguments, int charOffset);
+
+  Expression wrapInvalidWrite(
+      Expression desugared, Expression expression, int charOffset);
+
+  Expression wrapUnresolvedTargetInvocation(
+      Expression desugared, Arguments arguments, int charOffset);
+
+  Expression wrapUnresolvedVariableAssignment(
+      Expression desugared, bool isCompound, Expression rhs, int charOffset);
 }
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 3c4e3ae..0f54b2d 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
@@ -99,9 +99,7 @@
         IfJudgment,
         IllegalAssignmentJudgment,
         IndexAssignmentJudgment,
-        InvalidConstructorInvocationJudgment,
         InvalidSuperInitializerJudgment,
-        InvalidWriteJudgment,
         ShadowInvalidFieldInitializer,
         ShadowInvalidInitializer,
         LabeledStatementJudgment,
@@ -120,8 +118,6 @@
         SuperPropertyGetJudgment,
         SwitchCaseJudgment,
         SwitchStatementJudgment,
-        UnresolvedTargetInvocationJudgment,
-        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 fa1dd06..5952b75 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
@@ -89,7 +89,6 @@
         IllegalAssignmentJudgment,
         IndexAssignmentJudgment,
         Initializer,
-        InvalidWriteJudgment,
         Let,
         LoadLibraryTearOffJudgment,
         Member,
@@ -108,7 +107,6 @@
         SuperPropertySet,
         TreeNode,
         TypeParameter,
-        UnresolvedVariableAssignmentJudgment,
         VariableAssignmentJudgment,
         VariableDeclaration,
         VariableDeclarationJudgment,
@@ -1433,15 +1431,15 @@
     sink.write(name.name);
   }
 
-  UnresolvedVariableAssignmentJudgment _buildUnresolvedVariableAssignment(
+  Expression _buildUnresolvedVariableAssignment(
       bool isCompound, Expression value) {
-    return new UnresolvedVariableAssignmentJudgment(
+    return helper.wrapUnresolvedVariableAssignment(
         helper.desugarSyntheticExpression(buildError(
             forest.arguments(<Expression>[value], token),
             isSetter: true)),
         isCompound,
-        value)
-      ..fileOffset = token.charOffset;
+        value,
+        token.charOffset);
   }
 }
 
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator_impl.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator_impl.dart
index 9b2bf83..ae6fc90 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator_impl.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator_impl.dart
@@ -412,11 +412,12 @@
   }
 
   Expression makeInvalidWrite(Expression value) {
-    return new InvalidWriteJudgment(
+    return helper.wrapInvalidWrite(
         helper.desugarSyntheticExpression(helper.buildProblem(
             messageCannotAssignToParenthesizedExpression,
             offsetForToken(token),
             lengthForToken(token))),
-        expression);
+        expression,
+        offsetForToken(token));
   }
 }