Disable type inference: Don't generate shadow wrappers

Change-Id: Ibab49c3614f5e54fe15bdcb135f25db7070d84ca
Reviewed-on: https://dart-review.googlesource.com/c/86342
Reviewed-by: Dmitry Stefantsov <dmitryas@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 25bcd5d..cd91c692 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -274,6 +274,7 @@
 
   bool get legacyMode => library.loader.target.legacyMode;
 
+  @override
   bool get disableTypeInference => library.disableTypeInference;
 
   bool get inConstructor {
@@ -4859,12 +4860,14 @@
 
   @override
   Expression wrapSyntheticExpression(Expression desugared, int charOffset) {
+    if (disableTypeInference) return desugared;
     return shadow.SyntheticWrapper.wrapSyntheticExpression(desugared)
       ..fileOffset = charOffset;
   }
 
   @override
   Expression desugarSyntheticExpression(Expression node) {
+    if (disableTypeInference) return node;
     shadow.SyntheticExpressionJudgment shadowNode = node;
     return shadowNode.desugared;
   }
@@ -4872,6 +4875,7 @@
   @override
   Expression wrapInvalidConstructorInvocation(Expression desugared,
       Member constructor, Arguments arguments, int charOffset) {
+    if (disableTypeInference) return desugared;
     return shadow.SyntheticWrapper.wrapInvalidConstructorInvocation(
         desugared, constructor, arguments)
       ..fileOffset = charOffset;
@@ -4880,6 +4884,7 @@
   @override
   Expression wrapInvalidWrite(
       Expression desugared, Expression expression, int charOffset) {
+    if (disableTypeInference) return desugared;
     return shadow.SyntheticWrapper.wrapInvalidWrite(desugared, expression)
       ..fileOffset = charOffset;
   }
@@ -4887,6 +4892,7 @@
   @override
   Expression wrapUnresolvedTargetInvocation(
       Expression desugared, Arguments arguments, int charOffset) {
+    if (disableTypeInference) return desugared;
     return shadow.SyntheticWrapper.wrapUnresolvedTargetInvocation(
         desugared, arguments)
       ..fileOffset = charOffset;
@@ -4895,6 +4901,7 @@
   @override
   Expression wrapUnresolvedVariableAssignment(
       Expression desugared, bool isCompound, Expression rhs, int charOffset) {
+    if (disableTypeInference) return desugared;
     return shadow.SyntheticWrapper.wrapUnresolvedVariableAssignment(
         desugared, isCompound, rhs)
       ..fileOffset = charOffset;
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 584d978..8f0c1cd 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
@@ -57,6 +57,8 @@
 
   Forest get forest;
 
+  bool get disableTypeInference;
+
   Constructor lookupConstructor(Name name, {bool isSuper});
 
   Expression toValue(node);
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 56965d6..dd185fb 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
@@ -284,7 +284,7 @@
 
   Expression _finish(
       Expression body, ComplexAssignmentJudgment complexAssignment) {
-    if (complexAssignment != null) {
+    if (!helper.disableTypeInference && complexAssignment != null) {
       complexAssignment.desugared = body;
       return complexAssignment;
     } else {
@@ -578,6 +578,7 @@
       ..fileOffset = offset;
     if (complexAssignment != null) {
       body = makeLet(receiver, nullAwareGuard);
+      if (helper.disableTypeInference) return body;
       shadow.PropertyAssignmentJudgment kernelPropertyAssign =
           complexAssignment;
       kernelPropertyAssign.nullAwareGuard = nullAwareGuard;