diff --git a/pkg/analyzer/lib/src/error/best_practices_verifier.dart b/pkg/analyzer/lib/src/error/best_practices_verifier.dart
index edf4483..eac31f6 100644
--- a/pkg/analyzer/lib/src/error/best_practices_verifier.dart
+++ b/pkg/analyzer/lib/src/error/best_practices_verifier.dart
@@ -798,71 +798,58 @@
   /// [HintCode.UNNECESSARY_TYPE_CHECK_TRUE], and
   /// [HintCode.UNNECESSARY_TYPE_CHECK_FALSE].
   bool _checkAllTypeChecks(IsExpression node) {
-    Expression expression = node.expression;
-    TypeAnnotation typeName = node.type;
-    var rhsType = typeName.type as TypeImpl;
-    var rhsNameStr = typeName is TypeName ? typeName.name.name : null;
-    // if x is dynamic
-    if (rhsType.isDynamic && rhsNameStr == Keyword.DYNAMIC.lexeme) {
-      if (node.notOperator == null) {
-        // the is case
-        _errorReporter.reportErrorForNode(
-            HintCode.UNNECESSARY_TYPE_CHECK_TRUE, node);
-      } else {
-        // the is not case
-        _errorReporter.reportErrorForNode(
-            HintCode.UNNECESSARY_TYPE_CHECK_FALSE, node);
-      }
-      return true;
+    var leftNode = node.expression;
+    var rightNode = node.type;
+    var rightType = rightNode.type as TypeImpl;
+
+    void report() {
+      _errorReporter.reportErrorForNode(
+        node.notOperator == null
+            ? HintCode.UNNECESSARY_TYPE_CHECK_TRUE
+            : HintCode.UNNECESSARY_TYPE_CHECK_FALSE,
+        node,
+      );
     }
+
+    // `is dynamic` or `is! dynamic`
+    if (rightType.isDynamic) {
+      var rightTypeStr = rightNode is TypeName ? rightNode.name.name : null;
+      if (rightTypeStr == Keyword.DYNAMIC.lexeme) {
+        report();
+        return true;
+      }
+      return false;
+    }
+
     // `is Null` or `is! Null`
-    if (rhsType.isDartCoreNull) {
-      if (expression is NullLiteral) {
-        if (node.notOperator == null) {
-          _errorReporter.reportErrorForNode(
-            HintCode.UNNECESSARY_TYPE_CHECK_TRUE,
-            node,
-          );
-        } else {
-          _errorReporter.reportErrorForNode(
-            HintCode.UNNECESSARY_TYPE_CHECK_FALSE,
-            node,
-          );
-        }
+    if (rightType.isDartCoreNull) {
+      if (leftNode is NullLiteral) {
+        report();
       } else {
-        if (node.notOperator == null) {
-          _errorReporter.reportErrorForNode(
-            HintCode.TYPE_CHECK_IS_NULL,
-            node,
-          );
-        } else {
-          _errorReporter.reportErrorForNode(
-            HintCode.TYPE_CHECK_IS_NOT_NULL,
-            node,
-          );
-        }
+        _errorReporter.reportErrorForNode(
+          node.notOperator == null
+              ? HintCode.TYPE_CHECK_IS_NULL
+              : HintCode.TYPE_CHECK_IS_NOT_NULL,
+          node,
+        );
       }
       return true;
     }
-    // `is Object` or `is! Object`
-    if (rhsType.isDartCoreObject) {
-      var nullability = rhsType.nullabilitySuffix;
-      if (nullability == NullabilitySuffix.star ||
-          nullability == NullabilitySuffix.question) {
-        if (node.notOperator == null) {
-          _errorReporter.reportErrorForNode(
-            HintCode.UNNECESSARY_TYPE_CHECK_TRUE,
-            node,
-          );
-        } else {
-          _errorReporter.reportErrorForNode(
-            HintCode.UNNECESSARY_TYPE_CHECK_FALSE,
-            node,
-          );
-        }
+
+    if (_isNonNullableByDefault) {
+      var leftType = leftNode.typeOrThrow;
+      if (_typeSystem.isSubtypeOf(leftType, rightType)) {
+        report();
+        return true;
+      }
+    } else {
+      // In legacy all types are subtypes of `Object`.
+      if (rightType.isDartCoreObject) {
+        report();
         return true;
       }
     }
+
     return false;
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/unnecessary_type_check_test.dart b/pkg/analyzer/test/src/diagnostics/unnecessary_type_check_test.dart
index fef92e8..ab55baf 100644
--- a/pkg/analyzer/test/src/diagnostics/unnecessary_type_check_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unnecessary_type_check_test.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/src/dart/error/hint_codes.dart';
+import 'package:analyzer/src/error/codes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -19,16 +20,87 @@
 @reflectiveTest
 class UnnecessaryTypeCheckFalseTest extends PubPackageResolutionTest
     with UnnecessaryTypeCheckFalseTestCases {
-  @override
-  test_type_not_object() async {
+  test_typeNonNullable_isNot_same() async {
+    await assertErrorsInCode(r'''
+void f(int a) {
+  a is! int;
+}
+''', [
+      error(HintCode.UNNECESSARY_TYPE_CHECK_FALSE, 18, 9),
+    ]);
+  }
+
+  test_typeNonNullable_isNot_subtype() async {
     await assertNoErrorsInCode(r'''
-void f<T>(T a) {
-  a is! Object;
+void f(num a) {
+  a is! int;
 }
 ''');
   }
 
-  test_type_not_objectQuestion() async {
+  test_typeNonNullable_isNot_supertype() async {
+    await assertErrorsInCode(r'''
+void f(int a) {
+  a is! num;
+}
+''', [
+      error(HintCode.UNNECESSARY_TYPE_CHECK_FALSE, 18, 9),
+    ]);
+  }
+
+  test_typeNullable_isNot_same() async {
+    await assertErrorsInCode(r'''
+void f(int? a) {
+  a is! int?;
+}
+''', [
+      error(HintCode.UNNECESSARY_TYPE_CHECK_FALSE, 19, 10),
+    ]);
+  }
+
+  test_typeNullable_isNot_same_nonNullable() async {
+    await assertNoErrorsInCode(r'''
+void f(int? a) {
+  a is! int;
+}
+''');
+  }
+
+  test_typeNullable_isNot_subtype() async {
+    await assertNoErrorsInCode(r'''
+void f(num? a) {
+  a is! int?;
+}
+''');
+  }
+
+  test_typeNullable_isNot_subtype_nonNullable() async {
+    await assertNoErrorsInCode(r'''
+void f(num? a) {
+  a is! int;
+}
+''');
+  }
+
+  test_typeNullable_isNot_supertype() async {
+    await assertErrorsInCode(r'''
+void f(int? a) {
+  a is! num?;
+}
+''', [
+      error(HintCode.UNNECESSARY_TYPE_CHECK_FALSE, 19, 10),
+    ]);
+  }
+
+  test_typeNullable_isNot_supertype_nonNullable() async {
+    await assertNoErrorsInCode(r'''
+void f(int? a) {
+  a is! num;
+}
+''');
+  }
+
+  test_typeParameter_isNot_objectQuestion() async {
     await assertErrorsInCode(r'''
 void f<T>(T a) {
   a is! Object?;
@@ -40,7 +112,7 @@
 }
 
 mixin UnnecessaryTypeCheckFalseTestCases on PubPackageResolutionTest {
-  test_null_not_Null() async {
+  test_null_isNot_Null() async {
     await assertErrorsInCode(r'''
 var b = null is! Null;
 ''', [
@@ -48,7 +120,7 @@
     ]);
   }
 
-  test_type_not_dynamic() async {
+  test_typeParameter_isNot_dynamic() async {
     await assertErrorsInCode(r'''
 void f<T>(T a) {
   a is! dynamic;
@@ -58,35 +130,110 @@
     ]);
   }
 
-  test_type_not_object() async {
+  test_typeParameter_isNot_object() async {
+    var expectedErrors = expectedErrorsByNullability(
+      nullable: [],
+      legacy: [
+        error(HintCode.UNNECESSARY_TYPE_CHECK_FALSE, 19, 12),
+      ],
+    );
     await assertErrorsInCode(r'''
 void f<T>(T a) {
   a is! Object;
 }
-''', [
-      error(HintCode.UNNECESSARY_TYPE_CHECK_FALSE, 19, 12),
-    ]);
+''', expectedErrors);
   }
 }
 
 @reflectiveTest
 class UnnecessaryTypeCheckFalseWithoutNullSafetyTest
     extends PubPackageResolutionTest
-    with UnnecessaryTypeCheckFalseTestCases, WithoutNullSafetyMixin {}
+    with WithoutNullSafetyMixin, UnnecessaryTypeCheckFalseTestCases {}
 
 @reflectiveTest
 class UnnecessaryTypeCheckTrueTest extends PubPackageResolutionTest
     with UnnecessaryTypeCheckTrueTestCases {
-  @override
-  test_type_is_object() async {
+  test_typeNonNullable_is_same() async {
+    await assertErrorsInCode(r'''
+void f(int a) {
+  a is int;
+}
+''', [
+      error(HintCode.UNNECESSARY_TYPE_CHECK_TRUE, 18, 8),
+    ]);
+  }
+
+  test_typeNonNullable_is_subtype() async {
     await assertNoErrorsInCode(r'''
-void f<T>(T a) {
-  a is Object;
+void f(num a) {
+  a is int;
 }
 ''');
   }
 
-  test_type_is_objectQuestion() async {
+  test_typeNonNullable_is_supertype() async {
+    await assertErrorsInCode(r'''
+void f(int a) {
+  a is num;
+}
+''', [
+      error(HintCode.UNNECESSARY_TYPE_CHECK_TRUE, 18, 8),
+    ]);
+  }
+
+  test_typeNullable_is_same() async {
+    await assertErrorsInCode(r'''
+void f(int? a) {
+  a is int?;
+}
+''', [
+      error(HintCode.UNNECESSARY_TYPE_CHECK_TRUE, 19, 9),
+    ]);
+  }
+
+  test_typeNullable_is_same_nonNullable() async {
+    await assertNoErrorsInCode(r'''
+void f(int? a) {
+  a is int;
+}
+''');
+  }
+
+  test_typeNullable_is_subtype() async {
+    await assertNoErrorsInCode(r'''
+void f(num? a) {
+  a is int?;
+}
+''');
+  }
+
+  test_typeNullable_is_subtype_nonNullable() async {
+    await assertNoErrorsInCode(r'''
+void f(num? a) {
+  a is int;
+}
+''');
+  }
+
+  test_typeNullable_is_supertype() async {
+    await assertErrorsInCode(r'''
+void f(int? a) {
+  a is num?;
+}
+''', [
+      error(HintCode.UNNECESSARY_TYPE_CHECK_TRUE, 19, 9),
+    ]);
+  }
+
+  test_typeNullable_is_supertype_nonNullable() async {
+    await assertNoErrorsInCode(r'''
+void f(int? a) {
+  a is num;
+}
+''');
+  }
+
+  test_typeParameter_is_objectQuestion() async {
     await assertErrorsInCode(r'''
 void f<T>(T a) {
   a is Object?;
@@ -108,6 +255,26 @@
 
   test_type_is_dynamic() async {
     await assertErrorsInCode(r'''
+void f(int a) {
+  a is dynamic;
+}
+''', [
+      error(HintCode.UNNECESSARY_TYPE_CHECK_TRUE, 18, 12),
+    ]);
+  }
+
+  test_type_is_unresolved() async {
+    await assertErrorsInCode(r'''
+void f(int a) {
+  a is Unresolved;
+}
+''', [
+      error(CompileTimeErrorCode.TYPE_TEST_WITH_UNDEFINED_NAME, 23, 10),
+    ]);
+  }
+
+  test_typeParameter_is_dynamic() async {
+    await assertErrorsInCode(r'''
 void f<T>(T a) {
   a is dynamic;
 }
@@ -116,18 +283,22 @@
     ]);
   }
 
-  test_type_is_object() async {
+  test_typeParameter_is_object() async {
+    var expectedErrors = expectedErrorsByNullability(
+      nullable: [],
+      legacy: [
+        error(HintCode.UNNECESSARY_TYPE_CHECK_TRUE, 19, 11),
+      ],
+    );
     await assertErrorsInCode(r'''
 void f<T>(T a) {
   a is Object;
 }
-''', [
-      error(HintCode.UNNECESSARY_TYPE_CHECK_TRUE, 19, 11),
-    ]);
+''', expectedErrors);
   }
 }
 
 @reflectiveTest
 class UnnecessaryTypeCheckTrueWithoutNullSafetyTest
     extends PubPackageResolutionTest
-    with UnnecessaryTypeCheckTrueTestCases, WithoutNullSafetyMixin {}
+    with WithoutNullSafetyMixin, UnnecessaryTypeCheckTrueTestCases {}
diff --git a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
index 3f1b27e..a5faee7 100644
--- a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
@@ -1381,11 +1381,6 @@
     reportNonNullableInNullAwareWarningIfNeeded(
         lhsResult.inferredType, "??", node.left.fileOffset);
 
-    Member equalsMember = inferrer
-        .findInterfaceMember(
-            lhsResult.inferredType, equalsName, node.fileOffset)
-        .member!;
-
     // This ends any shorting in `node.left`.
     Expression left = lhsResult.expression;
 
@@ -1420,9 +1415,7 @@
       VariableDeclaration variable =
           createVariable(left, lhsResult.inferredType);
       Expression equalsNull = inferrer.createEqualsNull(
-          lhsResult.expression.fileOffset,
-          createVariableGet(variable),
-          equalsMember);
+          lhsResult.expression.fileOffset, createVariableGet(variable));
       VariableGet variableGet = createVariableGet(variable);
       if (inferrer.library.isNonNullableByDefault &&
           !identical(nonNullableLhsType, originalLhsType)) {
@@ -3130,10 +3123,6 @@
         receiverType, node.propertyName, writeTarget, rhs,
         forEffect: node.forEffect, valueType: writeType);
 
-    Member equalsMember = inferrer
-        .findInterfaceMember(readType, equalsName, node.fileOffset)
-        .member!;
-
     DartType nonNullableReadType = readType.toNonNull();
     DartType inferredType = inferrer.typeSchemaEnvironment
         .getStandardUpperBound(
@@ -3145,8 +3134,7 @@
       //
       //     let v1 = o in v1.a == null ? v1.a = b : null
       //
-      Expression equalsNull =
-          inferrer.createEqualsNull(node.fileOffset, read, equalsMember);
+      Expression equalsNull = inferrer.createEqualsNull(node.fileOffset, read);
       ConditionalExpression conditional = new ConditionalExpression(equalsNull,
           write, new NullLiteral()..fileOffset = node.fileOffset, inferredType)
         ..fileOffset = node.fileOffset;
@@ -3160,7 +3148,7 @@
       //
       VariableDeclaration readVariable = createVariable(read, readType);
       Expression equalsNull = inferrer.createEqualsNull(
-          node.fileOffset, createVariableGet(readVariable), equalsMember);
+          node.fileOffset, createVariableGet(readVariable));
       VariableGet variableGet = createVariableGet(readVariable);
       if (inferrer.library.isNonNullableByDefault &&
           !identical(nonNullableReadType, readType)) {
@@ -3194,10 +3182,6 @@
         .inferExpression(node.write, typeContext, true, isVoidAllowed: true);
     inferrer.flowAnalysis.ifNullExpression_end();
 
-    Member equalsMember = inferrer
-        .findInterfaceMember(readType, equalsName, node.fileOffset)
-        .member!;
-
     DartType originalReadType = readType;
     DartType nonNullableReadType = originalReadType.toNonNull();
     DartType inferredType = inferrer.typeSchemaEnvironment
@@ -3210,8 +3194,7 @@
       //
       //     a == null ? a = b : null
       //
-      Expression equalsNull =
-          inferrer.createEqualsNull(node.fileOffset, read, equalsMember);
+      Expression equalsNull = inferrer.createEqualsNull(node.fileOffset, read);
       replacement = new ConditionalExpression(
           equalsNull,
           writeResult.expression,
@@ -3225,7 +3208,7 @@
       //
       VariableDeclaration readVariable = createVariable(read, readType);
       Expression equalsNull = inferrer.createEqualsNull(
-          node.fileOffset, createVariableGet(readVariable), equalsMember);
+          node.fileOffset, createVariableGet(readVariable));
       VariableGet variableGet = createVariableGet(readVariable);
       if (inferrer.library.isNonNullableByDefault &&
           !identical(nonNullableReadType, originalReadType)) {
@@ -3568,10 +3551,6 @@
     DartType readType = readResult.inferredType;
     inferrer.flowAnalysis.ifNullExpression_rightBegin(read, readType);
 
-    Member equalsMember = inferrer
-        .findInterfaceMember(readType, equalsName, node.testOffset)
-        .member!;
-
     writeIndex = inferrer.ensureAssignable(
         writeIndexType, indexResult.inferredType, writeIndex,
         whyNotPromoted: whyNotPromotedIndex);
@@ -3623,8 +3602,7 @@
       //     let indexVariable = a in
       //         o[indexVariable] == null ? o.[]=(indexVariable, b) : null
       //
-      Expression equalsNull =
-          inferrer.createEqualsNull(node.testOffset, read, equalsMember);
+      Expression equalsNull = inferrer.createEqualsNull(node.testOffset, read);
       ConditionalExpression conditional = new ConditionalExpression(equalsNull,
           write, new NullLiteral()..fileOffset = node.testOffset, inferredType)
         ..fileOffset = node.testOffset;
@@ -3656,7 +3634,7 @@
       //
       VariableDeclaration readVariable = createVariable(read, readType);
       Expression equalsNull = inferrer.createEqualsNull(
-          node.testOffset, createVariableGet(readVariable), equalsMember);
+          node.testOffset, createVariableGet(readVariable));
       VariableDeclaration writeVariable =
           createVariable(write, const VoidType());
       VariableGet variableGet = createVariableGet(readVariable);
@@ -3701,10 +3679,6 @@
     DartType readIndexType =
         inferrer.getIndexKeyType(readTarget, inferrer.thisType!);
 
-    Member equalsMember = inferrer
-        .findInterfaceMember(readType, equalsName, node.testOffset)
-        .member!;
-
     ObjectAccessTarget writeTarget = node.setter != null
         ? new ObjectAccessTarget.interfaceMember(node.setter!,
             isPotentiallyNullable: false)
@@ -3807,8 +3781,7 @@
       //        super[v1] == null ? super.[]=(v1, b) : null
       //
       assert(valueVariable == null);
-      Expression equalsNull =
-          inferrer.createEqualsNull(node.testOffset, read, equalsMember);
+      Expression equalsNull = inferrer.createEqualsNull(node.testOffset, read);
       replacement = new ConditionalExpression(equalsNull, write,
           new NullLiteral()..fileOffset = node.testOffset, inferredType)
         ..fileOffset = node.testOffset;
@@ -3826,7 +3799,7 @@
 
       VariableDeclaration readVariable = createVariable(read, readType);
       Expression equalsNull = inferrer.createEqualsNull(
-          node.testOffset, createVariableGet(readVariable), equalsMember);
+          node.testOffset, createVariableGet(readVariable));
       VariableDeclaration writeVariable =
           createVariable(write, const VoidType());
       VariableGet readVariableGet = createVariableGet(readVariable);
@@ -3925,10 +3898,6 @@
     DartType readType = readResult.inferredType;
     inferrer.flowAnalysis.ifNullExpression_rightBegin(read, readType);
 
-    Member equalsMember = inferrer
-        .findInterfaceMember(readType, equalsName, node.testOffset)
-        .member!;
-
     writeIndex = inferrer.ensureAssignable(
         writeIndexType, indexResult.inferredType, writeIndex);
 
@@ -3974,8 +3943,7 @@
       //          ? receiverVariable.[]=(indexVariable, b) : null
       //
       assert(valueVariable == null);
-      Expression equalsNull =
-          inferrer.createEqualsNull(node.testOffset, read, equalsMember);
+      Expression equalsNull = inferrer.createEqualsNull(node.testOffset, read);
       replacement = new ConditionalExpression(equalsNull, write,
           new NullLiteral()..fileOffset = node.testOffset, inferredType)
         ..fileOffset = node.testOffset;
@@ -3994,7 +3962,7 @@
       //
       VariableDeclaration readVariable = createVariable(read, readType);
       Expression equalsNull = inferrer.createEqualsNull(
-          node.testOffset, createVariableGet(readVariable), equalsMember);
+          node.testOffset, createVariableGet(readVariable));
       VariableDeclaration writeVariable =
           createVariable(write, const VoidType());
       VariableGet readVariableGet = createVariableGet(readVariable);
@@ -5697,10 +5665,6 @@
     DartType readType = readResult.inferredType;
     inferrer.flowAnalysis.ifNullExpression_rightBegin(read, readType);
 
-    Member readEqualsMember = inferrer
-        .findInterfaceMember(readType, equalsName, node.testOffset)
-        .member!;
-
     VariableDeclaration? readVariable;
     if (!node.forEffect) {
       readVariable = createVariable(read, readType);
@@ -5741,7 +5705,7 @@
       //
 
       Expression readEqualsNull =
-          inferrer.createEqualsNull(node.readOffset, read, readEqualsMember);
+          inferrer.createEqualsNull(node.readOffset, read);
       replacement = new ConditionalExpression(readEqualsNull, write,
           new NullLiteral()..fileOffset = node.writeOffset, inferredType)
         ..fileOffset = node.writeOffset;
@@ -5756,8 +5720,8 @@
       //
       assert(readVariable != null);
 
-      Expression readEqualsNull = inferrer.createEqualsNull(
-          receiverVariable.fileOffset, read, readEqualsMember);
+      Expression readEqualsNull =
+          inferrer.createEqualsNull(receiverVariable.fileOffset, read);
       VariableGet variableGet = createVariableGet(readVariable!);
       if (inferrer.library.isNonNullableByDefault &&
           !identical(nonNullableReadType, readType)) {
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
index 80f997c..9e2f6f5 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
@@ -1872,15 +1872,7 @@
   }
 
   NullAwareGuard createNullAwareGuard(VariableDeclaration variable) {
-    Member? equalsMember =
-        findInterfaceMember(variable.type, equalsName, variable.fileOffset)
-            .member;
-    // Ensure operator == member even for `Never`.
-    equalsMember ??= findInterfaceMember(const DynamicType(), equalsName, -1,
-            instrumented: false)
-        .member!;
-    return new NullAwareGuard(
-        variable, variable.fileOffset, equalsMember, this);
+    return new NullAwareGuard(variable, variable.fileOffset, this);
   }
 
   ExpressionInferenceResult wrapExpressionInferenceResultInProblem(
@@ -3290,6 +3282,25 @@
             'checkGetterReturn', new InstrumentationValueForType(functionType));
       }
     }
+
+    if (isExpressionInvocation) {
+      if (isTopLevel) {
+        // Create an expression invocation for reporting the error during
+        // full inference.
+        return new ExpressionInferenceResult(
+            const InvalidType(),
+            new ExpressionInvocation(receiver, arguments)
+              ..fileOffset = fileOffset);
+      } else {
+        Expression error = helper!.buildProblem(
+            templateImplicitCallOfNonMethod.withArguments(
+                receiverType, isNonNullableByDefault),
+            fileOffset,
+            noLength);
+        return new ExpressionInferenceResult(const InvalidType(), error);
+      }
+    }
+
     ExpressionInferenceResult invocationResult = inferMethodInvocation(
         arguments.fileOffset,
         const Link<NullAwareGuard>(),
@@ -3303,15 +3314,6 @@
         isImplicitCall: true,
         implicitInvocationPropertyName: getter.name);
 
-    if (!isTopLevel && isExpressionInvocation) {
-      Expression error = helper!.buildProblem(
-          templateImplicitCallOfNonMethod.withArguments(
-              receiverType, isNonNullableByDefault),
-          fileOffset,
-          noLength);
-      return new ExpressionInferenceResult(const DynamicType(), error);
-    }
-
     if (!isTopLevel && target.isNullable) {
       // Handles cases like:
       //   C? c;
@@ -3475,6 +3477,24 @@
       }
     }
 
+    if (isExpressionInvocation) {
+      if (isTopLevel) {
+        // Create an expression invocation for reporting the error during
+        // full inference.
+        return new ExpressionInferenceResult(
+            const InvalidType(),
+            new ExpressionInvocation(receiver, arguments)
+              ..fileOffset = fileOffset);
+      } else {
+        Expression error = helper!.buildProblem(
+            templateImplicitCallOfNonMethod.withArguments(
+                receiverType, isNonNullableByDefault),
+            fileOffset,
+            noLength);
+        return new ExpressionInferenceResult(const InvalidType(), error);
+      }
+    }
+
     ExpressionInferenceResult invocationResult = inferMethodInvocation(
         arguments.fileOffset,
         const Link<NullAwareGuard>(),
@@ -3488,15 +3508,6 @@
         hoistedExpressions: hoistedExpressions,
         implicitInvocationPropertyName: field.name);
 
-    if (!isTopLevel && isExpressionInvocation) {
-      Expression error = helper!.buildProblem(
-          templateImplicitCallOfNonMethod.withArguments(
-              receiverType, isNonNullableByDefault),
-          fileOffset,
-          noLength);
-      return new ExpressionInferenceResult(const DynamicType(), error);
-    }
-
     if (!isTopLevel && target.isNullable) {
       // Handles cases like:
       //   C? c;
@@ -4471,10 +4482,8 @@
   }
 
   /// Creates a `e == null` test for the expression [left] using the
-  /// [fileOffset] as file offset for the created nodes and [equalsMember] as
-  /// the interface target of the created method invocation.
-  Expression createEqualsNull(
-      int fileOffset, Expression left, Member equalsMember) {
+  /// [fileOffset] as file offset for the created nodes.
+  Expression createEqualsNull(int fileOffset, Expression left) {
     return new EqualsNull(left)..fileOffset = fileOffset;
   }
 }
@@ -4808,20 +4817,15 @@
   /// The file offset used for the null-test.
   int _nullAwareFileOffset;
 
-  /// The [Member] used for the == call.
-  final Member _nullAwareEquals;
-
   final TypeInferrerImpl _inferrer;
 
-  NullAwareGuard(this._nullAwareVariable, this._nullAwareFileOffset,
-      this._nullAwareEquals, this._inferrer)
+  NullAwareGuard(
+      this._nullAwareVariable, this._nullAwareFileOffset, this._inferrer)
       // ignore: unnecessary_null_comparison
       : assert(_nullAwareVariable != null),
         // ignore: unnecessary_null_comparison
         assert(_nullAwareFileOffset != null),
         // ignore: unnecessary_null_comparison
-        assert(_nullAwareEquals != null),
-        // ignore: unnecessary_null_comparison
         assert(_inferrer != null) {
     // Ensure the initializer of [_nullAwareVariable] is promoted to
     // non-nullable.
@@ -4850,8 +4854,8 @@
     _inferrer.flowAnalysis.nullAwareAccess_end();
     // End non-nullable promotion of the initializer of [_nullAwareVariable].
     _inferrer.flowAnalysis.nullAwareAccess_end();
-    Expression equalsNull = _inferrer.createEqualsNull(_nullAwareFileOffset,
-        createVariableGet(_nullAwareVariable), _nullAwareEquals);
+    Expression equalsNull = _inferrer.createEqualsNull(
+        _nullAwareFileOffset, createVariableGet(_nullAwareVariable));
     ConditionalExpression condition = new ConditionalExpression(
         equalsNull,
         new NullLiteral()..fileOffset = _nullAwareFileOffset,
@@ -4864,8 +4868,7 @@
 
   @override
   String toString() =>
-      'NullAwareGuard($_nullAwareVariable,$_nullAwareFileOffset,'
-      '$_nullAwareEquals)';
+      'NullAwareGuard($_nullAwareVariable,$_nullAwareFileOffset)';
 }
 
 /// The result of an expression inference that is guarded with a null aware
diff --git a/pkg/front_end/testcases/extensions/call_methods.dart.weak.expect b/pkg/front_end/testcases/extensions/call_methods.dart.weak.expect
index 9fbb059..d38841f 100644
--- a/pkg/front_end/testcases/extensions/call_methods.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/call_methods.dart.weak.expect
@@ -22,22 +22,12 @@
 // var topLevel4 = 1.0("10");
 //                    ^
 //
-// pkg/front_end/testcases/extensions/call_methods.dart:34:18: Error: Too many positional arguments: 0 allowed, but 1 found.
-// Try removing the extra positional arguments.
-// var topLevel5 = a(2);
-//                  ^
-//
 // pkg/front_end/testcases/extensions/call_methods.dart:34:18: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
 // Try changing 'call' to a method or explicitly invoke 'call'.
 // var topLevel5 = a(2);
 //                  ^
 //
-// pkg/front_end/testcases/extensions/call_methods.dart:36:18: Error: Too many positional arguments: 0 allowed, but 2 found.
-// Try removing the extra positional arguments.
-// var topLevel6 = a(2, "3");
-//                  ^
-//
 // pkg/front_end/testcases/extensions/call_methods.dart:36:18: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
 // Try changing 'call' to a method or explicitly invoke 'call'.
@@ -64,22 +54,12 @@
 //   1.0("10");
 //      ^
 //
-// pkg/front_end/testcases/extensions/call_methods.dart:44:4: Error: Too many positional arguments: 0 allowed, but 1 found.
-// Try removing the extra positional arguments.
-//   a(2);
-//    ^
-//
 // pkg/front_end/testcases/extensions/call_methods.dart:44:4: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
 // Try changing 'call' to a method or explicitly invoke 'call'.
 //   a(2);
 //    ^
 //
-// pkg/front_end/testcases/extensions/call_methods.dart:45:4: Error: Too many positional arguments: 0 allowed, but 2 found.
-// Try removing the extra positional arguments.
-//   a(2, "3");
-//    ^
-//
 // pkg/front_end/testcases/extensions/call_methods.dart:45:4: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
 // Try changing 'call' to a method or explicitly invoke 'call'.
@@ -155,17 +135,17 @@
 var topLevel4 = 1.0(\"10\");
                    ^" in self::_extension#2|get#call(self::_extension#1|get#call(1.0)){<inapplicable>}.("10");
 static field self::A* a = new self::A::•();
-static field core::String* topLevel5 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:34:18: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
+static field invalid-type topLevel5 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:34:18: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
  - 'A' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
 Try changing 'call' to a method or explicitly invoke 'call'.
 var topLevel5 = a(2);
-                 ^" as{TypeError,ForDynamic} core::String*;
+                 ^";
 static field self::B* b = new self::B::•();
-static field core::String* topLevel6 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:36:18: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
+static field invalid-type topLevel6 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:36:18: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
  - 'A' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
 Try changing 'call' to a method or explicitly invoke 'call'.
 var topLevel6 = a(2, \"3\");
-                 ^" as{TypeError,ForDynamic} core::String*;
+                 ^";
 static method _extension#0|get#call(lowered final core::int* #this) → core::String*
   return "My name is int";
 static method _extension#1|get#call(lowered final core::num* #this) → core::String*
diff --git a/pkg/front_end/testcases/extensions/call_methods.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/call_methods.dart.weak.outline.expect
index 173e1a4..1745cce 100644
--- a/pkg/front_end/testcases/extensions/call_methods.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/call_methods.dart.weak.outline.expect
@@ -48,9 +48,9 @@
 static field core::String* topLevel3;
 static field core::String* topLevel4;
 static field self::A* a;
-static field core::String* topLevel5;
+static field invalid-type topLevel5;
 static field self::B* b;
-static field core::String* topLevel6;
+static field invalid-type topLevel6;
 static method _extension#0|get#call(lowered final core::int* #this) → core::String*
   ;
 static method _extension#1|get#call(lowered final core::num* #this) → core::String*
diff --git a/pkg/front_end/testcases/extensions/call_methods.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/call_methods.dart.weak.transformed.expect
index f07583d..d38841f 100644
--- a/pkg/front_end/testcases/extensions/call_methods.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/call_methods.dart.weak.transformed.expect
@@ -22,22 +22,12 @@
 // var topLevel4 = 1.0("10");
 //                    ^
 //
-// pkg/front_end/testcases/extensions/call_methods.dart:34:18: Error: Too many positional arguments: 0 allowed, but 1 found.
-// Try removing the extra positional arguments.
-// var topLevel5 = a(2);
-//                  ^
-//
 // pkg/front_end/testcases/extensions/call_methods.dart:34:18: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
 // Try changing 'call' to a method or explicitly invoke 'call'.
 // var topLevel5 = a(2);
 //                  ^
 //
-// pkg/front_end/testcases/extensions/call_methods.dart:36:18: Error: Too many positional arguments: 0 allowed, but 2 found.
-// Try removing the extra positional arguments.
-// var topLevel6 = a(2, "3");
-//                  ^
-//
 // pkg/front_end/testcases/extensions/call_methods.dart:36:18: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
 // Try changing 'call' to a method or explicitly invoke 'call'.
@@ -64,22 +54,12 @@
 //   1.0("10");
 //      ^
 //
-// pkg/front_end/testcases/extensions/call_methods.dart:44:4: Error: Too many positional arguments: 0 allowed, but 1 found.
-// Try removing the extra positional arguments.
-//   a(2);
-//    ^
-//
 // pkg/front_end/testcases/extensions/call_methods.dart:44:4: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
 // Try changing 'call' to a method or explicitly invoke 'call'.
 //   a(2);
 //    ^
 //
-// pkg/front_end/testcases/extensions/call_methods.dart:45:4: Error: Too many positional arguments: 0 allowed, but 2 found.
-// Try removing the extra positional arguments.
-//   a(2, "3");
-//    ^
-//
 // pkg/front_end/testcases/extensions/call_methods.dart:45:4: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
 // Try changing 'call' to a method or explicitly invoke 'call'.
@@ -155,13 +135,13 @@
 var topLevel4 = 1.0(\"10\");
                    ^" in self::_extension#2|get#call(self::_extension#1|get#call(1.0)){<inapplicable>}.("10");
 static field self::A* a = new self::A::•();
-static field core::String* topLevel5 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:34:18: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
+static field invalid-type topLevel5 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:34:18: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
  - 'A' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
 Try changing 'call' to a method or explicitly invoke 'call'.
 var topLevel5 = a(2);
                  ^";
 static field self::B* b = new self::B::•();
-static field core::String* topLevel6 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:36:18: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
+static field invalid-type topLevel6 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:36:18: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
  - 'A' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
 Try changing 'call' to a method or explicitly invoke 'call'.
 var topLevel6 = a(2, \"3\");
diff --git a/pkg/front_end/testcases/general/call.dart.weak.expect b/pkg/front_end/testcases/general/call.dart.weak.expect
index c717175..f9559169 100644
--- a/pkg/front_end/testcases/general/call.dart.weak.expect
+++ b/pkg/front_end/testcases/general/call.dart.weak.expect
@@ -139,7 +139,7 @@
 static field dynamic string3 = self::callable.{self::Callable::call}{(dynamic) →* dynamic}(1){(dynamic) →* dynamic};
 static field dynamic string4 = self::callable.{self::Callable::call}{(dynamic) →* dynamic}.call(1){(dynamic) →* dynamic};
 static field self::CallableGetter* callableGetter = new self::CallableGetter::•();
-static field dynamic string5 = invalid-expression "pkg/front_end/testcases/general/call.dart:63:29: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
+static field invalid-type string5 = invalid-expression "pkg/front_end/testcases/general/call.dart:63:29: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
  - 'CallableGetter' is from 'pkg/front_end/testcases/general/call.dart'.
 Try changing 'call' to a method or explicitly invoke 'call'.
 var string5 = callableGetter(1);
@@ -171,7 +171,7 @@
 static field dynamic nothing8 = invalid-expression "pkg/front_end/testcases/general/call.dart:76:39: Error: Too few positional arguments: 1 required, 0 given.
 var nothing8 = callable.call.call.call();
                                       ^" in self::callable.{self::Callable::call}{(dynamic) →* dynamic}.call{<inapplicable>}.();
-static field dynamic nothing9 = invalid-expression "pkg/front_end/testcases/general/call.dart:78:30: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
+static field invalid-type nothing9 = invalid-expression "pkg/front_end/testcases/general/call.dart:78:30: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
  - 'CallableGetter' is from 'pkg/front_end/testcases/general/call.dart'.
 Try changing 'call' to a method or explicitly invoke 'call'.
 var nothing9 = callableGetter();
@@ -191,7 +191,7 @@
   dynamic string3 = callable.{self::Callable::call}{(dynamic) →* dynamic}(1){(dynamic) →* dynamic};
   dynamic string4 = callable.{self::Callable::call}{(dynamic) →* dynamic}.call(1){(dynamic) →* dynamic};
   self::CallableGetter* callableGetter = new self::CallableGetter::•();
-  dynamic string5 = invalid-expression "pkg/front_end/testcases/general/call.dart:29:31: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
+  invalid-type string5 = invalid-expression "pkg/front_end/testcases/general/call.dart:29:31: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
  - 'CallableGetter' is from 'pkg/front_end/testcases/general/call.dart'.
 Try changing 'call' to a method or explicitly invoke 'call'.
   var string5 = callableGetter(1);
@@ -223,7 +223,7 @@
   invalid-type nothing8 = invalid-expression "pkg/front_end/testcases/general/call.dart:42:41: Error: Too few positional arguments: 1 required, 0 given.
   var nothing8 = callable.call.call.call();
                                         ^" in callable.{self::Callable::call}{(dynamic) →* dynamic}.call{<inapplicable>}.();
-  dynamic nothing9 = invalid-expression "pkg/front_end/testcases/general/call.dart:44:32: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
+  invalid-type nothing9 = invalid-expression "pkg/front_end/testcases/general/call.dart:44:32: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
  - 'CallableGetter' is from 'pkg/front_end/testcases/general/call.dart'.
 Try changing 'call' to a method or explicitly invoke 'call'.
   var nothing9 = callableGetter();
diff --git a/pkg/front_end/testcases/general/call.dart.weak.outline.expect b/pkg/front_end/testcases/general/call.dart.weak.outline.expect
index 9026e42..9d8c931 100644
--- a/pkg/front_end/testcases/general/call.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/call.dart.weak.outline.expect
@@ -45,7 +45,7 @@
 static field dynamic string3;
 static field dynamic string4;
 static field self::CallableGetter* callableGetter;
-static field dynamic string5;
+static field invalid-type string5;
 static field dynamic string6;
 static field dynamic string7;
 static field dynamic string8;
@@ -57,7 +57,7 @@
 static field dynamic nothing6;
 static field dynamic nothing7;
 static field dynamic nothing8;
-static field dynamic nothing9;
+static field invalid-type nothing9;
 static field dynamic nothing10;
 static field dynamic nothing11;
 static field dynamic nothing12;
diff --git a/pkg/front_end/testcases/general/call.dart.weak.transformed.expect b/pkg/front_end/testcases/general/call.dart.weak.transformed.expect
index 5d9b478..ccac183 100644
--- a/pkg/front_end/testcases/general/call.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/call.dart.weak.transformed.expect
@@ -139,7 +139,7 @@
 static field dynamic string3 = self::callable.{self::Callable::call}{(dynamic) →* dynamic}(1){(dynamic) →* dynamic};
 static field dynamic string4 = self::callable.{self::Callable::call}{(dynamic) →* dynamic}.call(1){(dynamic) →* dynamic};
 static field self::CallableGetter* callableGetter = new self::CallableGetter::•();
-static field dynamic string5 = invalid-expression "pkg/front_end/testcases/general/call.dart:63:29: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
+static field invalid-type string5 = invalid-expression "pkg/front_end/testcases/general/call.dart:63:29: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
  - 'CallableGetter' is from 'pkg/front_end/testcases/general/call.dart'.
 Try changing 'call' to a method or explicitly invoke 'call'.
 var string5 = callableGetter(1);
@@ -171,7 +171,7 @@
 static field dynamic nothing8 = invalid-expression "pkg/front_end/testcases/general/call.dart:76:39: Error: Too few positional arguments: 1 required, 0 given.
 var nothing8 = callable.call.call.call();
                                       ^" in self::callable.{self::Callable::call}{(dynamic) →* dynamic}.call{<inapplicable>}.();
-static field dynamic nothing9 = invalid-expression "pkg/front_end/testcases/general/call.dart:78:30: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
+static field invalid-type nothing9 = invalid-expression "pkg/front_end/testcases/general/call.dart:78:30: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
  - 'CallableGetter' is from 'pkg/front_end/testcases/general/call.dart'.
 Try changing 'call' to a method or explicitly invoke 'call'.
 var nothing9 = callableGetter();
@@ -191,7 +191,7 @@
   dynamic string3 = callable.{self::Callable::call}{(dynamic) →* dynamic}(1){(dynamic) →* dynamic};
   dynamic string4 = callable.{self::Callable::call}{(dynamic) →* dynamic}.call(1){(dynamic) →* dynamic};
   self::CallableGetter* callableGetter = new self::CallableGetter::•();
-  dynamic string5 = invalid-expression "pkg/front_end/testcases/general/call.dart:29:31: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
+  invalid-type string5 = invalid-expression "pkg/front_end/testcases/general/call.dart:29:31: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
  - 'CallableGetter' is from 'pkg/front_end/testcases/general/call.dart'.
 Try changing 'call' to a method or explicitly invoke 'call'.
   var string5 = callableGetter(1);
@@ -223,7 +223,7 @@
   invalid-type nothing8 = invalid-expression "pkg/front_end/testcases/general/call.dart:42:41: Error: Too few positional arguments: 1 required, 0 given.
   var nothing8 = callable.call.call.call();
                                         ^" in callable.{self::Callable::call}{(dynamic) →* dynamic}.call{<inapplicable>}.();
-  dynamic nothing9 = invalid-expression "pkg/front_end/testcases/general/call.dart:44:32: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
+  invalid-type nothing9 = invalid-expression "pkg/front_end/testcases/general/call.dart:44:32: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
  - 'CallableGetter' is from 'pkg/front_end/testcases/general/call.dart'.
 Try changing 'call' to a method or explicitly invoke 'call'.
   var nothing9 = callableGetter();
diff --git a/pkg/front_end/testcases/general/function_call1.dart b/pkg/front_end/testcases/general/function_call1.dart
new file mode 100644
index 0000000..418da83
--- /dev/null
+++ b/pkg/front_end/testcases/general/function_call1.dart
@@ -0,0 +1,26 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class _Closure1 {
+  _Closure1 get call => this;
+}
+
+class _Closure2 {
+  final _Closure2 call;
+
+  _Closure2(this.call);
+}
+
+test(_Closure1 foo, _Closure2 bar) {
+  foo();
+  bar();
+}
+
+late _Closure1 closure1;
+late _Closure2 closure2;
+
+var field1 = closure1();
+var field2 = closure2();
+
+main() {}
diff --git a/pkg/front_end/testcases/general/function_call1.dart.textual_outline.expect b/pkg/front_end/testcases/general/function_call1.dart.textual_outline.expect
new file mode 100644
index 0000000..aa8f3d6
--- /dev/null
+++ b/pkg/front_end/testcases/general/function_call1.dart.textual_outline.expect
@@ -0,0 +1,15 @@
+class _Closure1 {
+  _Closure1 get call => this;
+}
+
+class _Closure2 {
+  final _Closure2 call;
+  _Closure2(this.call);
+}
+
+test(_Closure1 foo, _Closure2 bar) {}
+late _Closure1 closure1;
+late _Closure2 closure2;
+var field1 = closure1();
+var field2 = closure2();
+main() {}
diff --git a/pkg/front_end/testcases/general/function_call1.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/function_call1.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..9249223
--- /dev/null
+++ b/pkg/front_end/testcases/general/function_call1.dart.textual_outline_modelled.expect
@@ -0,0 +1,19 @@
+class _Closure1 {
+  _Closure1 get call => this;
+}
+class _Closure2 {
+  _Closure2(this.call);
+  final _Closure2 call;
+}
+test(_Closure1 foo, _Closure2 bar) {}
+---- unknown chunk starts ----
+late
+---- unknown chunk ends ----
+_Closure1 closure1;
+---- unknown chunk starts ----
+late
+---- unknown chunk ends ----
+_Closure2 closure2;
+main() {}
+var field1 = closure1();
+var field2 = closure2();
diff --git a/pkg/front_end/testcases/general/function_call1.dart.weak.expect b/pkg/front_end/testcases/general/function_call1.dart.weak.expect
new file mode 100644
index 0000000..c5b503d
--- /dev/null
+++ b/pkg/front_end/testcases/general/function_call1.dart.weak.expect
@@ -0,0 +1,69 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/function_call1.dart:16:6: Error: Cannot invoke an instance of '_Closure1' because it declares 'call' to be something other than a method.
+//  - '_Closure1' is from 'pkg/front_end/testcases/general/function_call1.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+//   foo();
+//      ^
+//
+// pkg/front_end/testcases/general/function_call1.dart:17:6: Error: Cannot invoke an instance of '_Closure2' because it declares 'call' to be something other than a method.
+//  - '_Closure2' is from 'pkg/front_end/testcases/general/function_call1.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+//   bar();
+//      ^
+//
+// pkg/front_end/testcases/general/function_call1.dart:23:22: Error: Cannot invoke an instance of '_Closure1' because it declares 'call' to be something other than a method.
+//  - '_Closure1' is from 'pkg/front_end/testcases/general/function_call1.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+// var field1 = closure1();
+//                      ^
+//
+// pkg/front_end/testcases/general/function_call1.dart:24:22: Error: Cannot invoke an instance of '_Closure2' because it declares 'call' to be something other than a method.
+//  - '_Closure2' is from 'pkg/front_end/testcases/general/function_call1.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+// var field2 = closure2();
+//                      ^
+//
+import self as self;
+import "dart:core" as core;
+
+class _Closure1 extends core::Object {
+  synthetic constructor •() → self::_Closure1
+    : super core::Object::•()
+    ;
+  get call() → self::_Closure1
+    return this;
+}
+class _Closure2 extends core::Object {
+  final field self::_Closure2 call;
+  constructor •(self::_Closure2 call) → self::_Closure2
+    : self::_Closure2::call = call, super core::Object::•()
+    ;
+}
+late static field self::_Closure1 closure1;
+late static field self::_Closure2 closure2;
+static field invalid-type field1 = invalid-expression "pkg/front_end/testcases/general/function_call1.dart:23:22: Error: Cannot invoke an instance of '_Closure1' because it declares 'call' to be something other than a method.
+ - '_Closure1' is from 'pkg/front_end/testcases/general/function_call1.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+var field1 = closure1();
+                     ^";
+static field invalid-type field2 = invalid-expression "pkg/front_end/testcases/general/function_call1.dart:24:22: Error: Cannot invoke an instance of '_Closure2' because it declares 'call' to be something other than a method.
+ - '_Closure2' is from 'pkg/front_end/testcases/general/function_call1.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+var field2 = closure2();
+                     ^";
+static method test(self::_Closure1 foo, self::_Closure2 bar) → dynamic {
+  invalid-expression "pkg/front_end/testcases/general/function_call1.dart:16:6: Error: Cannot invoke an instance of '_Closure1' because it declares 'call' to be something other than a method.
+ - '_Closure1' is from 'pkg/front_end/testcases/general/function_call1.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+  foo();
+     ^";
+  invalid-expression "pkg/front_end/testcases/general/function_call1.dart:17:6: Error: Cannot invoke an instance of '_Closure2' because it declares 'call' to be something other than a method.
+ - '_Closure2' is from 'pkg/front_end/testcases/general/function_call1.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+  bar();
+     ^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/function_call1.dart.weak.outline.expect b/pkg/front_end/testcases/general/function_call1.dart.weak.outline.expect
new file mode 100644
index 0000000..8c62285
--- /dev/null
+++ b/pkg/front_end/testcases/general/function_call1.dart.weak.outline.expect
@@ -0,0 +1,23 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class _Closure1 extends core::Object {
+  synthetic constructor •() → self::_Closure1
+    ;
+  get call() → self::_Closure1
+    ;
+}
+class _Closure2 extends core::Object {
+  final field self::_Closure2 call;
+  constructor •(self::_Closure2 call) → self::_Closure2
+    ;
+}
+late static field self::_Closure1 closure1;
+late static field self::_Closure2 closure2;
+static field invalid-type field1;
+static field invalid-type field2;
+static method test(self::_Closure1 foo, self::_Closure2 bar) → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/function_call1.dart.weak.transformed.expect b/pkg/front_end/testcases/general/function_call1.dart.weak.transformed.expect
new file mode 100644
index 0000000..c5b503d
--- /dev/null
+++ b/pkg/front_end/testcases/general/function_call1.dart.weak.transformed.expect
@@ -0,0 +1,69 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/function_call1.dart:16:6: Error: Cannot invoke an instance of '_Closure1' because it declares 'call' to be something other than a method.
+//  - '_Closure1' is from 'pkg/front_end/testcases/general/function_call1.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+//   foo();
+//      ^
+//
+// pkg/front_end/testcases/general/function_call1.dart:17:6: Error: Cannot invoke an instance of '_Closure2' because it declares 'call' to be something other than a method.
+//  - '_Closure2' is from 'pkg/front_end/testcases/general/function_call1.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+//   bar();
+//      ^
+//
+// pkg/front_end/testcases/general/function_call1.dart:23:22: Error: Cannot invoke an instance of '_Closure1' because it declares 'call' to be something other than a method.
+//  - '_Closure1' is from 'pkg/front_end/testcases/general/function_call1.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+// var field1 = closure1();
+//                      ^
+//
+// pkg/front_end/testcases/general/function_call1.dart:24:22: Error: Cannot invoke an instance of '_Closure2' because it declares 'call' to be something other than a method.
+//  - '_Closure2' is from 'pkg/front_end/testcases/general/function_call1.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+// var field2 = closure2();
+//                      ^
+//
+import self as self;
+import "dart:core" as core;
+
+class _Closure1 extends core::Object {
+  synthetic constructor •() → self::_Closure1
+    : super core::Object::•()
+    ;
+  get call() → self::_Closure1
+    return this;
+}
+class _Closure2 extends core::Object {
+  final field self::_Closure2 call;
+  constructor •(self::_Closure2 call) → self::_Closure2
+    : self::_Closure2::call = call, super core::Object::•()
+    ;
+}
+late static field self::_Closure1 closure1;
+late static field self::_Closure2 closure2;
+static field invalid-type field1 = invalid-expression "pkg/front_end/testcases/general/function_call1.dart:23:22: Error: Cannot invoke an instance of '_Closure1' because it declares 'call' to be something other than a method.
+ - '_Closure1' is from 'pkg/front_end/testcases/general/function_call1.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+var field1 = closure1();
+                     ^";
+static field invalid-type field2 = invalid-expression "pkg/front_end/testcases/general/function_call1.dart:24:22: Error: Cannot invoke an instance of '_Closure2' because it declares 'call' to be something other than a method.
+ - '_Closure2' is from 'pkg/front_end/testcases/general/function_call1.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+var field2 = closure2();
+                     ^";
+static method test(self::_Closure1 foo, self::_Closure2 bar) → dynamic {
+  invalid-expression "pkg/front_end/testcases/general/function_call1.dart:16:6: Error: Cannot invoke an instance of '_Closure1' because it declares 'call' to be something other than a method.
+ - '_Closure1' is from 'pkg/front_end/testcases/general/function_call1.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+  foo();
+     ^";
+  invalid-expression "pkg/front_end/testcases/general/function_call1.dart:17:6: Error: Cannot invoke an instance of '_Closure2' because it declares 'call' to be something other than a method.
+ - '_Closure2' is from 'pkg/front_end/testcases/general/function_call1.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+  bar();
+     ^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/function_call2.dart b/pkg/front_end/testcases/general/function_call2.dart
new file mode 100644
index 0000000..06322b9
--- /dev/null
+++ b/pkg/front_end/testcases/general/function_call2.dart
@@ -0,0 +1,26 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class _Closure1 {
+  void Function() get call => () {};
+}
+
+class _Closure2 {
+  final void Function() call;
+
+  _Closure2(this.call);
+}
+
+test(_Closure1 foo, _Closure2 bar) {
+  foo();
+  bar();
+}
+
+late _Closure1 closure1;
+late _Closure2 closure2;
+
+var field1 = closure1();
+var field2 = closure2();
+
+main() {}
diff --git a/pkg/front_end/testcases/general/function_call2.dart.textual_outline.expect b/pkg/front_end/testcases/general/function_call2.dart.textual_outline.expect
new file mode 100644
index 0000000..183ffbe
--- /dev/null
+++ b/pkg/front_end/testcases/general/function_call2.dart.textual_outline.expect
@@ -0,0 +1,15 @@
+class _Closure1 {
+  void Function() get call => () {};
+}
+
+class _Closure2 {
+  final void Function() call;
+  _Closure2(this.call);
+}
+
+test(_Closure1 foo, _Closure2 bar) {}
+late _Closure1 closure1;
+late _Closure2 closure2;
+var field1 = closure1();
+var field2 = closure2();
+main() {}
diff --git a/pkg/front_end/testcases/general/function_call2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/function_call2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..eab5305
--- /dev/null
+++ b/pkg/front_end/testcases/general/function_call2.dart.textual_outline_modelled.expect
@@ -0,0 +1,19 @@
+class _Closure1 {
+  void Function() get call => () {};
+}
+class _Closure2 {
+  _Closure2(this.call);
+  final void Function() call;
+}
+test(_Closure1 foo, _Closure2 bar) {}
+---- unknown chunk starts ----
+late
+---- unknown chunk ends ----
+_Closure1 closure1;
+---- unknown chunk starts ----
+late
+---- unknown chunk ends ----
+_Closure2 closure2;
+main() {}
+var field1 = closure1();
+var field2 = closure2();
diff --git a/pkg/front_end/testcases/general/function_call2.dart.weak.expect b/pkg/front_end/testcases/general/function_call2.dart.weak.expect
new file mode 100644
index 0000000..c0f6881
--- /dev/null
+++ b/pkg/front_end/testcases/general/function_call2.dart.weak.expect
@@ -0,0 +1,69 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/function_call2.dart:16:6: Error: Cannot invoke an instance of '_Closure1' because it declares 'call' to be something other than a method.
+//  - '_Closure1' is from 'pkg/front_end/testcases/general/function_call2.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+//   foo();
+//      ^
+//
+// pkg/front_end/testcases/general/function_call2.dart:17:6: Error: Cannot invoke an instance of '_Closure2' because it declares 'call' to be something other than a method.
+//  - '_Closure2' is from 'pkg/front_end/testcases/general/function_call2.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+//   bar();
+//      ^
+//
+// pkg/front_end/testcases/general/function_call2.dart:23:22: Error: Cannot invoke an instance of '_Closure1' because it declares 'call' to be something other than a method.
+//  - '_Closure1' is from 'pkg/front_end/testcases/general/function_call2.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+// var field1 = closure1();
+//                      ^
+//
+// pkg/front_end/testcases/general/function_call2.dart:24:22: Error: Cannot invoke an instance of '_Closure2' because it declares 'call' to be something other than a method.
+//  - '_Closure2' is from 'pkg/front_end/testcases/general/function_call2.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+// var field2 = closure2();
+//                      ^
+//
+import self as self;
+import "dart:core" as core;
+
+class _Closure1 extends core::Object {
+  synthetic constructor •() → self::_Closure1
+    : super core::Object::•()
+    ;
+  get call() → () → void
+    return () → void {};
+}
+class _Closure2 extends core::Object {
+  final field () → void call;
+  constructor •(() → void call) → self::_Closure2
+    : self::_Closure2::call = call, super core::Object::•()
+    ;
+}
+late static field self::_Closure1 closure1;
+late static field self::_Closure2 closure2;
+static field invalid-type field1 = invalid-expression "pkg/front_end/testcases/general/function_call2.dart:23:22: Error: Cannot invoke an instance of '_Closure1' because it declares 'call' to be something other than a method.
+ - '_Closure1' is from 'pkg/front_end/testcases/general/function_call2.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+var field1 = closure1();
+                     ^";
+static field invalid-type field2 = invalid-expression "pkg/front_end/testcases/general/function_call2.dart:24:22: Error: Cannot invoke an instance of '_Closure2' because it declares 'call' to be something other than a method.
+ - '_Closure2' is from 'pkg/front_end/testcases/general/function_call2.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+var field2 = closure2();
+                     ^";
+static method test(self::_Closure1 foo, self::_Closure2 bar) → dynamic {
+  invalid-expression "pkg/front_end/testcases/general/function_call2.dart:16:6: Error: Cannot invoke an instance of '_Closure1' because it declares 'call' to be something other than a method.
+ - '_Closure1' is from 'pkg/front_end/testcases/general/function_call2.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+  foo();
+     ^";
+  invalid-expression "pkg/front_end/testcases/general/function_call2.dart:17:6: Error: Cannot invoke an instance of '_Closure2' because it declares 'call' to be something other than a method.
+ - '_Closure2' is from 'pkg/front_end/testcases/general/function_call2.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+  bar();
+     ^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/function_call2.dart.weak.outline.expect b/pkg/front_end/testcases/general/function_call2.dart.weak.outline.expect
new file mode 100644
index 0000000..704879e
--- /dev/null
+++ b/pkg/front_end/testcases/general/function_call2.dart.weak.outline.expect
@@ -0,0 +1,23 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class _Closure1 extends core::Object {
+  synthetic constructor •() → self::_Closure1
+    ;
+  get call() → () → void
+    ;
+}
+class _Closure2 extends core::Object {
+  final field () → void call;
+  constructor •(() → void call) → self::_Closure2
+    ;
+}
+late static field self::_Closure1 closure1;
+late static field self::_Closure2 closure2;
+static field invalid-type field1;
+static field invalid-type field2;
+static method test(self::_Closure1 foo, self::_Closure2 bar) → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/function_call2.dart.weak.transformed.expect b/pkg/front_end/testcases/general/function_call2.dart.weak.transformed.expect
new file mode 100644
index 0000000..c0f6881
--- /dev/null
+++ b/pkg/front_end/testcases/general/function_call2.dart.weak.transformed.expect
@@ -0,0 +1,69 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/function_call2.dart:16:6: Error: Cannot invoke an instance of '_Closure1' because it declares 'call' to be something other than a method.
+//  - '_Closure1' is from 'pkg/front_end/testcases/general/function_call2.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+//   foo();
+//      ^
+//
+// pkg/front_end/testcases/general/function_call2.dart:17:6: Error: Cannot invoke an instance of '_Closure2' because it declares 'call' to be something other than a method.
+//  - '_Closure2' is from 'pkg/front_end/testcases/general/function_call2.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+//   bar();
+//      ^
+//
+// pkg/front_end/testcases/general/function_call2.dart:23:22: Error: Cannot invoke an instance of '_Closure1' because it declares 'call' to be something other than a method.
+//  - '_Closure1' is from 'pkg/front_end/testcases/general/function_call2.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+// var field1 = closure1();
+//                      ^
+//
+// pkg/front_end/testcases/general/function_call2.dart:24:22: Error: Cannot invoke an instance of '_Closure2' because it declares 'call' to be something other than a method.
+//  - '_Closure2' is from 'pkg/front_end/testcases/general/function_call2.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+// var field2 = closure2();
+//                      ^
+//
+import self as self;
+import "dart:core" as core;
+
+class _Closure1 extends core::Object {
+  synthetic constructor •() → self::_Closure1
+    : super core::Object::•()
+    ;
+  get call() → () → void
+    return () → void {};
+}
+class _Closure2 extends core::Object {
+  final field () → void call;
+  constructor •(() → void call) → self::_Closure2
+    : self::_Closure2::call = call, super core::Object::•()
+    ;
+}
+late static field self::_Closure1 closure1;
+late static field self::_Closure2 closure2;
+static field invalid-type field1 = invalid-expression "pkg/front_end/testcases/general/function_call2.dart:23:22: Error: Cannot invoke an instance of '_Closure1' because it declares 'call' to be something other than a method.
+ - '_Closure1' is from 'pkg/front_end/testcases/general/function_call2.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+var field1 = closure1();
+                     ^";
+static field invalid-type field2 = invalid-expression "pkg/front_end/testcases/general/function_call2.dart:24:22: Error: Cannot invoke an instance of '_Closure2' because it declares 'call' to be something other than a method.
+ - '_Closure2' is from 'pkg/front_end/testcases/general/function_call2.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+var field2 = closure2();
+                     ^";
+static method test(self::_Closure1 foo, self::_Closure2 bar) → dynamic {
+  invalid-expression "pkg/front_end/testcases/general/function_call2.dart:16:6: Error: Cannot invoke an instance of '_Closure1' because it declares 'call' to be something other than a method.
+ - '_Closure1' is from 'pkg/front_end/testcases/general/function_call2.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+  foo();
+     ^";
+  invalid-expression "pkg/front_end/testcases/general/function_call2.dart:17:6: Error: Cannot invoke an instance of '_Closure2' because it declares 'call' to be something other than a method.
+ - '_Closure2' is from 'pkg/front_end/testcases/general/function_call2.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+  bar();
+     ^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/function_in_field.dart b/pkg/front_end/testcases/general/function_in_field.dart
index 8234ef2..ccfa71b 100644
--- a/pkg/front_end/testcases/general/function_in_field.dart
+++ b/pkg/front_end/testcases/general/function_in_field.dart
@@ -1,7 +1,9 @@
 // Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+
 // @dart=2.9
+
 var x = () {
   var y = 42;
   return y;
diff --git a/pkg/front_end/testcases/general/issue47223a.dart b/pkg/front_end/testcases/general/issue47223a.dart
new file mode 100644
index 0000000..2191ad1
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47223a.dart
@@ -0,0 +1,9 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+void test() {
+  (throw "some value") ?? "some other value";
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/issue47223a.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue47223a.dart.textual_outline.expect
new file mode 100644
index 0000000..31c91a2
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47223a.dart.textual_outline.expect
@@ -0,0 +1,2 @@
+void test() {}
+main() {}
diff --git a/pkg/front_end/testcases/general/issue47223a.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue47223a.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..4742c78
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47223a.dart.textual_outline_modelled.expect
@@ -0,0 +1,2 @@
+main() {}
+void test() {}
diff --git a/pkg/front_end/testcases/general/issue47223a.dart.weak.expect b/pkg/front_end/testcases/general/issue47223a.dart.weak.expect
new file mode 100644
index 0000000..1640c03
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47223a.dart.weak.expect
@@ -0,0 +1,15 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue47223a.dart:6:4: Warning: Operand of null-aware operation '??' has type 'Never' which excludes null.
+//   (throw "some value") ?? "some other value";
+//    ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method test() → void {
+  let final Never #t1 = throw "some value" in #t1 == null ?{core::String} "some other value" : #t1;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue47223a.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue47223a.dart.weak.outline.expect
new file mode 100644
index 0000000..d7d3d2f
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47223a.dart.weak.outline.expect
@@ -0,0 +1,7 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+
+static method test() → void
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/issue47223a.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue47223a.dart.weak.transformed.expect
new file mode 100644
index 0000000..1640c03
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47223a.dart.weak.transformed.expect
@@ -0,0 +1,15 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue47223a.dart:6:4: Warning: Operand of null-aware operation '??' has type 'Never' which excludes null.
+//   (throw "some value") ?? "some other value";
+//    ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method test() → void {
+  let final Never #t1 = throw "some value" in #t1 == null ?{core::String} "some other value" : #t1;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue47223b.dart b/pkg/front_end/testcases/general/issue47223b.dart
new file mode 100644
index 0000000..8528113
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47223b.dart
@@ -0,0 +1,9 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+void test() {
+  (throw "some value").foo ??= "foo";
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/issue47223b.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue47223b.dart.textual_outline.expect
new file mode 100644
index 0000000..31c91a2
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47223b.dart.textual_outline.expect
@@ -0,0 +1,2 @@
+void test() {}
+main() {}
diff --git a/pkg/front_end/testcases/general/issue47223b.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue47223b.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..4742c78
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47223b.dart.textual_outline_modelled.expect
@@ -0,0 +1,2 @@
+main() {}
+void test() {}
diff --git a/pkg/front_end/testcases/general/issue47223b.dart.weak.expect b/pkg/front_end/testcases/general/issue47223b.dart.weak.expect
new file mode 100644
index 0000000..13e925e
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47223b.dart.weak.expect
@@ -0,0 +1,15 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue47223b.dart:6:24: Warning: Operand of null-aware operation '??=' has type 'Never' which excludes null.
+//   (throw "some value").foo ??= "foo";
+//                        ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method test() → void {
+  let final Never #t1 = throw "some value" in #t1{Never}.foo == null ?{core::String} #t1{Never}.foo = "foo" : null;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue47223b.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue47223b.dart.weak.outline.expect
new file mode 100644
index 0000000..d7d3d2f
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47223b.dart.weak.outline.expect
@@ -0,0 +1,7 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+
+static method test() → void
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/issue47223b.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue47223b.dart.weak.transformed.expect
new file mode 100644
index 0000000..13e925e
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47223b.dart.weak.transformed.expect
@@ -0,0 +1,15 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue47223b.dart:6:24: Warning: Operand of null-aware operation '??=' has type 'Never' which excludes null.
+//   (throw "some value").foo ??= "foo";
+//                        ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method test() → void {
+  let final Never #t1 = throw "some value" in #t1{Never}.foo == null ?{core::String} #t1{Never}.foo = "foo" : null;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/bug30624.dart b/pkg/front_end/testcases/inference/bug30624.dart
index c074277..341d1e5 100644
--- a/pkg/front_end/testcases/inference/bug30624.dart
+++ b/pkg/front_end/testcases/inference/bug30624.dart
@@ -9,21 +9,21 @@
 
 class C<E> {
   void barA([int cmp(E a, E b)]) {
-    /*@ typeArgs=C::E* */ foo(this, cmp /*@target=Object.==*/ ?? _default);
+    /*@ typeArgs=C::E* */ foo(this, cmp  ?? _default);
   }
 
   void barB([int cmp(E a, E b)]) {
     /*@ typeArgs=C::E* */ foo(
-        this, cmp /*@target=Object.==*/ ?? (_default as int Function(E, E)));
+        this, cmp  ?? (_default as int Function(E, E)));
   }
 
   void barC([int cmp(E a, E b)]) {
     int Function(E, E) v = _default;
-    /*@ typeArgs=C::E* */ foo(this, cmp /*@target=Object.==*/ ?? v);
+    /*@ typeArgs=C::E* */ foo(this, cmp  ?? v);
   }
 
   void barD([int cmp(E a, E b)]) {
-    foo<E>(this, cmp /*@target=Object.==*/ ?? _default);
+    foo<E>(this, cmp  ?? _default);
   }
 
   void barE([int cmp(E a, E b)]) {
diff --git a/pkg/front_end/testcases/inference/bug32291.dart b/pkg/front_end/testcases/inference/bug32291.dart
index c71cdb6..782a12c 100644
--- a/pkg/front_end/testcases/inference/bug32291.dart
+++ b/pkg/front_end/testcases/inference/bug32291.dart
@@ -12,7 +12,7 @@
   var /*@ type=Iterable<List<String*>*>* */ i1 =
       l. /*@target=Iterable.map*/ /*@ typeArgs=List<String*>* */ map(
           /*@ returnType=List<String*>* */ (/*@ type=List<String*>* */ ll) =>
-              ll /*@target=List.==*/ ?? /*@ typeArgs=String* */ []);
+              ll ?? /*@ typeArgs=String* */ []);
   var /*@ type=Iterable<int*>* */ i2 =
       i1. /*@target=Iterable.map*/ /*@ typeArgs=int* */ map(
           /*@ returnType=int* */ (List<String> l) =>
diff --git a/pkg/front_end/testcases/inference/future_then_ifNull.dart b/pkg/front_end/testcases/inference/future_then_ifNull.dart
index e3927d5..5b67f07 100644
--- a/pkg/front_end/testcases/inference/future_then_ifNull.dart
+++ b/pkg/front_end/testcases/inference/future_then_ifNull.dart
@@ -18,20 +18,18 @@
   MyFuture<int> f;
   Future<int> t1 = f. /*@ typeArgs=int* */ /*@target=MyFuture.then*/ then(
       /*@ returnType=Future<int*>* */ (/*@ type=int* */ x) async =>
-          x /*@target=num.==*/ ?? await new Future<int>.value(3));
+          x ?? await new Future<int>.value(3));
   Future<int> t2 = f. /*@ typeArgs=int* */ /*@target=MyFuture.then*/ then(
       /*@returnType=FutureOr<int*>**/ (/*@ type=int* */ x) async {
-    return /*info:DOWN_CAST_COMPOSITE*/ await x /*@target=num.==*/ ??
-        new Future<int>.value(3);
+    return /*info:DOWN_CAST_COMPOSITE*/ await x ?? new Future<int>.value(3);
   });
   Future<int> t5 = f. /*@ typeArgs=int* */ /*@target=MyFuture.then*/ then(
       /*error:INVALID_CAST_FUNCTION_EXPR*/
       /*@ returnType=FutureOr<int*>* */ (/*@ type=int* */ x) =>
-          x /*@target=num.==*/ ?? new Future<int>.value(3));
+          x ?? new Future<int>.value(3));
   Future<int> t6 = f. /*@ typeArgs=int* */ /*@target=MyFuture.then*/ then(
       /*@ returnType=FutureOr<int*>* */ (/*@ type=int* */ x) {
-    return /*info:DOWN_CAST_COMPOSITE*/ x /*@target=num.==*/ ??
-        new Future<int>.value(3);
+    return /*info:DOWN_CAST_COMPOSITE*/ x ?? new Future<int>.value(3);
   });
 }
 
diff --git a/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart b/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart
index bcc3b3f..ea24047 100644
--- a/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart
+++ b/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart
@@ -7,8 +7,7 @@
 
 abstract class C<E> {
   void sort([int compare(E a, E b)]) {
-    /*@ typeArgs=C::E* */ sort2(
-        this, compare /*@target=Object.==*/ ?? _compareAny);
+    /*@ typeArgs=C::E* */ sort2(this, compare ?? _compareAny);
   }
 
   static int _compareAny(a, b) {
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart
index 51b65c1..c8f9c85 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart
+++ b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart
@@ -25,7 +25,7 @@
     /*@target=Test.member*/ member = /*@ typeArgs=B* */ f();
 
     /*@target=Test.member*/ /*@target=Test.member*/ member
-        /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+         ??= /*@ typeArgs=B* */ f();
 
     /*@target=Test.member*/ /*@target=Test.member*/ member
         /*@target=B.+*/ += /*@ typeArgs=C* */ f();
@@ -46,7 +46,7 @@
         /*@ typeArgs=B* */ f();
 
     var /*@ type=B* */ v2 = /*@target=Test.member*/ /*@target=Test.member*/
-        member /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+        member  ??= /*@ typeArgs=B* */ f();
 
     var /*@ type=A* */ v3 = /*@target=Test.member*/ /*@target=Test.member*/
         member /*@target=B.+*/ +=
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this_upwards.dart b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this_upwards.dart
index 9de089d..7892af4 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this_upwards.dart
+++ b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this_upwards.dart
@@ -16,7 +16,7 @@
     var /*@ type=int* */ v1 = /*@target=Test1.t*/ t = getInt();
 
     var /*@ type=int* */ v4 = /*@target=Test1.t*/ /*@target=Test1.t*/ t
-        /*@target=num.==*/ ??= getInt();
+         ??= getInt();
 
     var /*@ type=int* */ v7 = /*@target=Test1.t*/ /*@target=Test1.t*/ t
         /*@target=num.+*/ += getInt();
@@ -41,13 +41,13 @@
     var /*@ type=double* */ v3 = /*@target=Test2.t*/ t = getDouble();
 
     var /*@ type=num* */ v4 = /*@target=Test2.t*/ /*@target=Test2.t*/ t
-        /*@target=num.==*/ ??= getInt();
+         ??= getInt();
 
     var /*@ type=num* */ v5 = /*@target=Test2.t*/ /*@target=Test2.t*/ t
-        /*@target=num.==*/ ??= getNum();
+         ??= getNum();
 
     var /*@ type=num* */ v6 = /*@target=Test2.t*/ /*@target=Test2.t*/ t
-        /*@target=num.==*/ ??= getDouble();
+         ??= getDouble();
 
     var /*@ type=num* */ v7 = /*@target=Test2.t*/ /*@target=Test2.t*/ t
         /*@target=num.+*/ += getInt();
@@ -74,7 +74,7 @@
     var /*@ type=double* */ v3 = /*@target=Test3.t*/ t = getDouble();
 
     var /*@ type=double* */ v6 = /*@target=Test3.t*/ /*@target=Test3.t*/ t
-        /*@target=num.==*/ ??= getDouble();
+         ??= getDouble();
 
     var /*@ type=double* */ v7 = /*@target=Test3.t*/ /*@target=Test3.t*/ t
         /*@target=double.+*/ += getInt();
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart b/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart
index b1840b1..f72d8ca 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart
@@ -31,7 +31,7 @@
         /*@ typeArgs=Index* */ f()] = /*@ typeArgs=B* */ f();
 
     t /*@target=Test.[]*/ /*@target=Test.[]=*/ [/*@ typeArgs=Index* */ f()]
-        /*@target=A.==*/
+        
         ??= /*@ typeArgs=B* */ f();
 
     t /*@target=Test.[]*/ /*@target=Test.[]=*/ [/*@ typeArgs=Index* */ f()]
@@ -56,7 +56,7 @@
 
     var /*@ type=B* */ v2 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ [
             /*@ typeArgs=Index* */ f()]
-        /*@target=A.==*/
+        
         ??= /*@ typeArgs=B* */ f();
 
     var /*@ type=B* */ v4 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ [
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_super.dart b/pkg/front_end/testcases/inference/infer_assign_to_index_super.dart
index 4685ee6..f9e36a6 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_index_super.dart
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_super.dart
@@ -31,7 +31,7 @@
         /*@ typeArgs=Index* */ f()] = /*@ typeArgs=B* */ f();
 
     super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
-            /*@ typeArgs=Index* */ f()] /*@target=A.==*/
+            /*@ typeArgs=Index* */ f()] 
         ??= /*@ typeArgs=B* */ f();
 
     super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
@@ -56,7 +56,7 @@
         /*@ typeArgs=Index* */ f()] = /*@ typeArgs=B* */ f();
 
     var /*@ type=B* */ v2 = super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
-            /*@ typeArgs=Index* */ f()] /*@target=A.==*/
+            /*@ typeArgs=Index* */ f()] 
         ??= /*@ typeArgs=B* */ f();
 
     var /*@ type=A* */ v3 = super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_this.dart b/pkg/front_end/testcases/inference/infer_assign_to_index_this.dart
index 469bb25..d42816b 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_index_this.dart
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_this.dart
@@ -29,7 +29,7 @@
         /*@ typeArgs=Index* */ f()] = /*@ typeArgs=B* */ f();
 
     this /*@target=Test.[]*/ /*@target=Test.[]=*/ [
-            /*@ typeArgs=Index* */ f()] /*@target=A.==*/
+            /*@ typeArgs=Index* */ f()] 
         ??= /*@ typeArgs=B* */ f();
 
     this /*@target=Test.[]*/ /*@target=Test.[]=*/ [
@@ -54,7 +54,7 @@
         /*@ typeArgs=Index* */ f()] = /*@ typeArgs=B* */ f();
 
     var /*@ type=B* */ v2 = this /*@target=Test.[]*/ /*@target=Test.[]=*/ [
-            /*@ typeArgs=Index* */ f()] /*@target=A.==*/
+            /*@ typeArgs=Index* */ f()] 
         ??= /*@ typeArgs=B* */ f();
 
     var /*@ type=A* */ v4 = this /*@target=Test.[]*/ /*@target=Test.[]=*/ [
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_local.dart b/pkg/front_end/testcases/inference/infer_assign_to_local.dart
index 8123404..56ebaa0 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_local.dart
+++ b/pkg/front_end/testcases/inference/infer_assign_to_local.dart
@@ -22,7 +22,7 @@
   B local;
   local = /*@ typeArgs=B* */ f();
 
-  local /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+  local  ??= /*@ typeArgs=B* */ f();
 
   local /*@target=B.+*/ += /*@ typeArgs=C* */ f();
 
@@ -37,7 +37,7 @@
   var /*@ type=B* */ v1 = local = /*@ typeArgs=B* */ f();
 
   var /*@ type=B* */ v2 =
-      local /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+      local  ??= /*@ typeArgs=B* */ f();
 
   var /*@ type=A* */ v3 = local /*@target=B.+*/ += /*@ typeArgs=C* */ f();
 
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart b/pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart
index 8dc2a3e..282340c 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart
+++ b/pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart
@@ -12,7 +12,7 @@
 void test1(int t) {
   var /*@ type=int* */ v1 = t = getInt();
 
-  var /*@ type=int* */ v4 = t /*@target=num.==*/ ??= getInt();
+  var /*@ type=int* */ v4 = t  ??= getInt();
 
   var /*@ type=int* */ v7 = t /*@target=num.+*/ += getInt();
 
@@ -29,11 +29,11 @@
 
   var /*@ type=double* */ v3 = t = getDouble();
 
-  var /*@ type=num* */ v4 = t /*@target=num.==*/ ??= getInt();
+  var /*@ type=num* */ v4 = t  ??= getInt();
 
-  var /*@ type=num* */ v5 = t /*@target=num.==*/ ??= getNum();
+  var /*@ type=num* */ v5 = t  ??= getNum();
 
-  var /*@ type=num* */ v6 = t /*@target=num.==*/ ??= getDouble();
+  var /*@ type=num* */ v6 = t  ??= getDouble();
 
   var /*@ type=num* */ v7 = t /*@target=num.+*/ += getInt();
 
@@ -50,7 +50,7 @@
 void test3(double t) {
   var /*@ type=double* */ v3 = t = getDouble();
 
-  var /*@ type=double* */ v6 = t /*@target=num.==*/ ??= getDouble();
+  var /*@ type=double* */ v6 = t  ??= getDouble();
 
   var /*@ type=double* */ v7 = t /*@target=double.+*/ += getInt();
 
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_full.dart b/pkg/front_end/testcases/inference/infer_assign_to_property_full.dart
index c112d9c..24d478e 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_full.dart
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_full.dart
@@ -24,7 +24,7 @@
   static void test(Test t) {
     t. /*@target=Test.member*/ member = /*@ typeArgs=B* */ f();
     /*@ type=Test* */ /*@target=Test.member*/ t. /*@target=Test.member*/ member
-        /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+         ??= /*@ typeArgs=B* */ f();
     /*@ type=Test* */ t. /*@target=Test.member*/ /*@target=Test.member*/ member
         /*@target=B.+*/ += /*@ typeArgs=C* */ f();
     /*@ type=Test* */ t. /*@target=Test.member*/ /*@target=Test.member*/ member
@@ -40,7 +40,7 @@
     var /*@ type=B* */ v2 =
         /*@ type=Test* */ /*@target=Test.member*/ t
                 . /*@target=Test.member*/ member
-            /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+             ??= /*@ typeArgs=B* */ f();
     var /*@ type=A* */ v3 =
         /*@ type=Test* */ t
                 . /*@target=Test.member*/ /*@target=Test.member*/ member
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart
index a41c144..f810644 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart
@@ -22,62 +22,62 @@
   B member;
 
   static void test(Test t) {
-    /*@ type=Test* */ /*@target=Test.==*/ t?. /*@target=Test.member*/
+    /*@ type=Test* */  t?. /*@target=Test.member*/
         member = /*@ typeArgs=B* */ f();
 
-    /*@target=Test.==*/ t
+     t
             ?. /*@target=Test.member*/ /*@target=Test.member*/ member
-        /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+         ??= /*@ typeArgs=B* */ f();
 
-    /*@target=Test.==*/ t
+     t
             ?. /*@target=Test.member*/ /*@target=Test.member*/ member
         /*@target=B.+*/ += /*@ typeArgs=C* */ f();
 
-    /*@target=Test.==*/ t
+     t
             ?. /*@target=Test.member*/ /*@target=Test.member*/ member
         /*@target=B.**/ *= /*@ typeArgs=B* */ f();
 
-    /*@target=Test.==*/ t
+     t
             ?. /*@target=Test.member*/ /*@target=Test.member*/ member
         /*@target=B.&*/ &= /*@ typeArgs=A* */ f();
 
-    /*@target=B.-*/ -- /*@target=Test.==*/ t
+    /*@target=B.-*/ --  t
         ?. /*@target=Test.member*/ /*@target=Test.member*/ member;
 
-    /*@target=Test.==*/ t
+     t
             ?. /*@target=Test.member*/ /*@target=Test.member*/ member
         /*@target=B.-*/ --;
 
     var /*@ type=B* */ v1 =
-        /*@ type=Test* */ /*@target=Test.==*/ t?. /*@target=Test.member*/
+        /*@ type=Test* */  t?. /*@target=Test.member*/
             member = /*@ typeArgs=B* */ f();
 
     var /*@ type=B* */ v2 =
-        /*@target=Test.==*/ t
+         t
                 ?. /*@target=Test.member*/ /*@target=Test.member*/ member
-            /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+             ??= /*@ typeArgs=B* */ f();
 
     var /*@ type=A* */ v3 =
-        /*@target=Test.==*/ t
+         t
                 ?. /*@target=Test.member*/ /*@target=Test.member*/ member
             /*@target=B.+*/ += /*@ typeArgs=C* */ f();
 
     var /*@ type=B* */ v4 =
-        /*@target=Test.==*/ t
+         t
                 ?. /*@target=Test.member*/ /*@target=Test.member*/ member
             /*@target=B.**/ *= /*@ typeArgs=B* */ f();
 
     var /*@ type=C* */ v5 =
-        /*@target=Test.==*/ t
+         t
                 ?. /*@target=Test.member*/ /*@target=Test.member*/ member
             /*@target=B.&*/ &= /*@ typeArgs=A* */ f();
 
     var /*@ type=B* */ v6 =
-        /*@target=B.-*/ -- /*@target=Test.==*/ t
+        /*@target=B.-*/ --  t
             ?. /*@target=Test.member*/ /*@target=Test.member*/ member;
 
     var /*@ type=B* */ v7 =
-        /*@target=Test.==*/ t
+         t
             ?. /*@target=Test.member*/ /*@target=Test.member*/ member
         /*@target=B.-*/ --;
   }
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart
index ad284c2..82e2b7c 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart
@@ -13,24 +13,24 @@
   int prop;
 
   static void test(Test1 t) {
-    var /*@ type=int* */ v1 = /*@ type=Test1* */ /*@target=Test1.==*/ t
+    var /*@ type=int* */ v1 = /*@ type=Test1* */  t
         ?. /*@target=Test1.prop*/ prop = getInt();
 
     var /*@ type=int* */ v4 =
-        /*@target=Test1.==*/ t
+         t
                 ?. /*@target=Test1.prop*/ /*@target=Test1.prop*/ prop
-            /*@target=num.==*/ ??= getInt();
+             ??= getInt();
 
     var /*@ type=int* */ v7 =
-        /*@target=Test1.==*/ t
+         t
                 ?. /*@target=Test1.prop*/ /*@target=Test1.prop*/ prop
             /*@target=num.+*/ += getInt();
 
-    var /*@ type=int* */ v10 = /*@target=num.+*/ ++ /*@target=Test1.==*/ t
+    var /*@ type=int* */ v10 = /*@target=num.+*/ ++  t
         ?. /*@target=Test1.prop*/ /*@target=Test1.prop*/ prop;
 
     var /*@ type=int* */ v11 =
-        /*@target=Test1.==*/ t
+         t
             ?. /*@target=Test1.prop*/ /*@target=Test1.prop*/ prop
         /*@target=num.+*/ ++;
   }
@@ -40,49 +40,49 @@
   num prop;
 
   static void test(Test2 t) {
-    var /*@ type=int* */ v1 = /*@ type=Test2* */ /*@target=Test2.==*/ t
+    var /*@ type=int* */ v1 = /*@ type=Test2* */  t
         ?. /*@target=Test2.prop*/ prop = getInt();
 
-    var /*@ type=num* */ v2 = /*@ type=Test2* */ /*@target=Test2.==*/ t
+    var /*@ type=num* */ v2 = /*@ type=Test2* */  t
         ?. /*@target=Test2.prop*/ prop = getNum();
 
-    var /*@ type=double* */ v3 = /*@ type=Test2* */ /*@target=Test2.==*/ t
+    var /*@ type=double* */ v3 = /*@ type=Test2* */  t
         ?. /*@target=Test2.prop*/ prop = getDouble();
 
     var /*@ type=num* */ v4 =
-        /*@target=Test2.==*/ t
+         t
                 ?. /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop
-            /*@target=num.==*/ ??= getInt();
+             ??= getInt();
 
     var /*@ type=num* */ v5 =
-        /*@target=Test2.==*/ t
+         t
                 ?. /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop
-            /*@target=num.==*/ ??= getNum();
+             ??= getNum();
 
-    var /*@ type=num* */ v6 = /*@target=Test2.==*/ t
+    var /*@ type=num* */ v6 =  t
             ?. /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop
-        /*@target=num.==*/ ??= getDouble();
+         ??= getDouble();
 
     var /*@ type=num* */ v7 =
-        /*@target=Test2.==*/ t
+         t
                 ?. /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop
             /*@target=num.+*/ += getInt();
 
     var /*@ type=num* */ v8 =
-        /*@target=Test2.==*/ t
+         t
                 ?. /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop
             /*@target=num.+*/ += getNum();
 
     var /*@ type=num* */ v9 =
-        /*@target=Test2.==*/ t
+         t
                 ?. /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop
             /*@target=num.+*/ += getDouble();
 
-    var /*@ type=num* */ v10 = /*@target=num.+*/ ++ /*@target=Test2.==*/ t
+    var /*@ type=num* */ v10 = /*@target=num.+*/ ++  t
         ?. /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop;
 
     var /*@ type=num* */ v11 =
-        /*@target=Test2.==*/ t
+         t
             ?. /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop
         /*@target=num.+*/ ++;
   }
@@ -93,35 +93,35 @@
 
   static void test3(Test3 t) {
     var /*@ type=double* */ v3 =
-        /*@ type=Test3* */ /*@target=Test3.==*/ t
+        /*@ type=Test3* */  t
             ?. /*@target=Test3.prop*/ prop = getDouble();
 
     var /*@ type=double* */ v6 =
-        /*@target=Test3.==*/ t?.
+         t?.
                 /*@target=Test3.prop*/ /*@target=Test3.prop*/ prop
-            /*@target=num.==*/ ??= getDouble();
+             ??= getDouble();
 
     var /*@ type=double* */ v7 =
-        /*@target=Test3.==*/ t
+         t
                 ?. /*@target=Test3.prop*/ /*@target=Test3.prop*/ prop
             /*@target=double.+*/ += getInt();
 
     var /*@ type=double* */ v8 =
-        /*@target=Test3.==*/ t
+         t
                 ?. /*@target=Test3.prop*/ /*@target=Test3.prop*/ prop
             /*@target=double.+*/ += getNum();
 
     var /*@ type=double* */ v9 =
-        /*@target=Test3.==*/ t?.
+         t?.
                 /*@target=Test3.prop*/ /*@target=Test3.prop*/ prop
             /*@target=double.+*/ += getDouble();
 
     var /*@ type=double* */ v10 = /*@target=double.+*/ ++
-        /*@target=Test3.==*/ t
+         t
             ?. /*@target=Test3.prop*/ /*@target=Test3.prop*/ prop;
 
     var /*@ type=double* */ v11 =
-        /*@target=Test3.==*/ t
+         t
             ?. /*@target=Test3.prop*/ /*@target=Test3.prop*/ prop
         /*@target=double.+*/ ++;
   }
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart b/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart
index e626518..1c94bce 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart
@@ -27,7 +27,7 @@
     super.member = /*@ typeArgs=B* */ f();
 
     super. /*@target=Base.member*/ member
-        /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+         ??= /*@ typeArgs=B* */ f();
 
     super. /*@target=Base.member*/ member
         /*@target=B.+*/ += /*@ typeArgs=C* */ f();
@@ -46,7 +46,7 @@
     var /*@ type=B* */ v1 = super.member = /*@ typeArgs=B* */ f();
 
     var /*@ type=B* */ v2 = super. /*@target=Base.member*/ member
-        /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+         ??= /*@ typeArgs=B* */ f();
 
     var /*@ type=A* */ v3 = super. /*@target=Base.member*/ member
         /*@target=B.+*/ += /*@ typeArgs=C* */ f();
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart b/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart
index 5bb229f..b7a994d 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart
@@ -20,7 +20,7 @@
     var /*@ type=int* */ v1 = super.intProp = getInt();
 
     var /*@ type=int* */ v4 = super. /*@target=Base.intProp*/ intProp
-        /*@target=num.==*/ ??= getInt();
+         ??= getInt();
 
     var /*@ type=int* */ v7 = super. /*@target=Base.intProp*/ intProp
         /*@target=num.+*/ += getInt();
@@ -43,13 +43,13 @@
     var /*@ type=double* */ v3 = super.numProp = getDouble();
 
     var /*@ type=num* */ v4 = super. /*@target=Base.numProp*/ numProp
-        /*@target=num.==*/ ??= getInt();
+         ??= getInt();
 
     var /*@ type=num* */ v5 = super. /*@target=Base.numProp*/ numProp
-        /*@target=num.==*/ ??= getNum();
+         ??= getNum();
 
     var /*@ type=num* */ v6 = super. /*@target=Base.numProp*/ numProp
-        /*@target=num.==*/ ??= getDouble();
+         ??= getDouble();
 
     var /*@ type=num* */ v7 = super. /*@target=Base.numProp*/ numProp
         /*@target=num.+*/ += getInt();
@@ -77,7 +77,7 @@
     var /*@ type=double* */ v3 = super.doubleProp = getDouble();
 
     var /*@ type=double* */ v6 = super. /*@target=Base.doubleProp*/ doubleProp
-        /*@target=num.==*/ ??= getDouble();
+         ??= getDouble();
 
     var /*@ type=double* */ v7 = super. /*@target=Base.doubleProp*/ doubleProp
         /*@target=double.+*/ += getInt();
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart b/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart
index 26d84f6..541e475 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart
@@ -16,7 +16,7 @@
     var /*@ type=int* */ v1 = t. /*@target=Test1.prop*/ prop = getInt();
     var /*@ type=int* */ v4 = /*@ type=Test1* */ /*@target=Test1.prop*/ t
             . /*@target=Test1.prop*/ prop
-        /*@target=num.==*/ ??= getInt();
+         ??= getInt();
     var /*@ type=int* */ v7 =
         /*@ type=Test1* */ t. /*@target=Test1.prop*/ /*@target=Test1.prop*/ prop
             /*@target=num.+*/ += getInt();
@@ -37,13 +37,13 @@
     var /*@ type=double* */ v3 = t. /*@target=Test2.prop*/ prop = getDouble();
     var /*@ type=num* */ v4 = /*@ type=Test2* */ /*@target=Test2.prop*/ t
             . /*@target=Test2.prop*/ prop
-        /*@target=num.==*/ ??= getInt();
+         ??= getInt();
     var /*@ type=num* */ v5 = /*@ type=Test2* */ /*@target=Test2.prop*/ t
             . /*@target=Test2.prop*/ prop
-        /*@target=num.==*/ ??= getNum();
+         ??= getNum();
     var /*@ type=num* */ v6 = /*@ type=Test2* */ /*@target=Test2.prop*/ t
             . /*@target=Test2.prop*/ prop
-        /*@target=num.==*/ ??= getDouble();
+         ??= getDouble();
     var /*@ type=num* */ v7 =
         /*@ type=Test2* */ t. /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop
             /*@target=num.+*/ += getInt();
@@ -68,7 +68,7 @@
     var /*@ type=double* */ v3 = t. /*@target=Test3.prop*/ prop = getDouble();
     var /*@ type=double* */ v6 =
         /*@ type=Test3* */ /*@target=Test3.prop*/ t. /*@target=Test3.prop*/
-            prop /*@target=num.==*/ ??= getDouble();
+            prop  ??= getDouble();
     var /*@ type=double* */ v7 =
         /*@ type=Test3* */ t. /*@target=Test3.prop*/ /*@target=Test3.prop*/ prop
             /*@target=double.+*/ += getInt();
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_static.dart b/pkg/front_end/testcases/inference/infer_assign_to_static.dart
index 1f4c19b..c09b270 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_static.dart
+++ b/pkg/front_end/testcases/inference/infer_assign_to_static.dart
@@ -25,7 +25,7 @@
 void test_topLevelVariable() {
   topLevelVariable = /*@ typeArgs=B* */ f();
 
-  topLevelVariable /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+  topLevelVariable  ??= /*@ typeArgs=B* */ f();
 
   topLevelVariable /*@target=B.+*/ += /*@ typeArgs=C* */ f();
 
@@ -40,7 +40,7 @@
   var /*@ type=B* */ v1 = topLevelVariable = /*@ typeArgs=B* */ f();
 
   var /*@ type=B* */ v2 =
-      topLevelVariable /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+      topLevelVariable  ??= /*@ typeArgs=B* */ f();
 
   var /*@ type=A* */ v3 =
       topLevelVariable /*@target=B.+*/ += /*@ typeArgs=C* */ f();
@@ -60,7 +60,7 @@
 void test_staticVariable() {
   B.staticVariable = /*@ typeArgs=B* */ f();
 
-  B.staticVariable /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+  B.staticVariable  ??= /*@ typeArgs=B* */ f();
 
   B.staticVariable /*@target=B.+*/ += /*@ typeArgs=C* */ f();
 
@@ -75,7 +75,7 @@
   var /*@ type=B* */ v1 = B.staticVariable = /*@ typeArgs=B* */ f();
 
   var /*@ type=B* */ v2 =
-      B.staticVariable /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+      B.staticVariable  ??= /*@ typeArgs=B* */ f();
 
   var /*@ type=A* */ v3 =
       B.staticVariable /*@target=B.+*/ += /*@ typeArgs=C* */ f();
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_static_upwards.dart b/pkg/front_end/testcases/inference/infer_assign_to_static_upwards.dart
index 157f454..22ed9e5 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_static_upwards.dart
+++ b/pkg/front_end/testcases/inference/infer_assign_to_static_upwards.dart
@@ -16,7 +16,7 @@
 void test1() {
   var /*@ type=int* */ v1 = topLevelInt = getInt();
 
-  var /*@ type=int* */ v4 = topLevelInt /*@target=num.==*/ ??= getInt();
+  var /*@ type=int* */ v4 = topLevelInt  ??= getInt();
 
   var /*@ type=int* */ v7 = topLevelInt /*@target=num.+*/ += getInt();
 
@@ -33,11 +33,11 @@
 
   var /*@ type=double* */ v3 = topLevelNum = getDouble();
 
-  var /*@ type=num* */ v4 = topLevelNum /*@target=num.==*/ ??= getInt();
+  var /*@ type=num* */ v4 = topLevelNum  ??= getInt();
 
-  var /*@ type=num* */ v5 = topLevelNum /*@target=num.==*/ ??= getNum();
+  var /*@ type=num* */ v5 = topLevelNum  ??= getNum();
 
-  var /*@ type=num* */ v6 = topLevelNum /*@target=num.==*/ ??= getDouble();
+  var /*@ type=num* */ v6 = topLevelNum  ??= getDouble();
 
   var /*@ type=num* */ v7 = topLevelNum /*@target=num.+*/ += getInt();
 
@@ -55,7 +55,7 @@
   var /*@ type=double* */ v3 = topLevelDouble = getDouble();
 
   var /*@ type=double* */ v6 =
-      topLevelDouble /*@target=num.==*/ ??= getDouble();
+      topLevelDouble  ??= getDouble();
 
   var /*@ type=double* */ v7 = topLevelDouble /*@target=double.+*/ += getInt();
 
diff --git a/pkg/front_end/testcases/inference/null_aware_method_invocation.dart b/pkg/front_end/testcases/inference/null_aware_method_invocation.dart
index c1906ab..2d019d6 100644
--- a/pkg/front_end/testcases/inference/null_aware_method_invocation.dart
+++ b/pkg/front_end/testcases/inference/null_aware_method_invocation.dart
@@ -10,9 +10,8 @@
 }
 
 g(C c) {
-  var /*@ type=int* */ x = /*@ type=C* */ /*@target=C.==*/ c
-      ?. /*@target=C.f*/ f();
-  /*@ type=C* */ /*@target=C.==*/ c?. /*@target=C.f*/ f();
+  var /*@ type=int* */ x = /*@ type=C* */ c?. /*@target=C.f*/ f();
+  /*@ type=C* */ c?. /*@target=C.f*/ f();
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/null_aware_property_get.dart b/pkg/front_end/testcases/inference/null_aware_property_get.dart
index bc20ea3..3d2edef 100644
--- a/pkg/front_end/testcases/inference/null_aware_property_get.dart
+++ b/pkg/front_end/testcases/inference/null_aware_property_get.dart
@@ -10,9 +10,8 @@
 }
 
 void f(C c) {
-  var /*@ type=int* */ x = /*@ type=C* */ /*@target=C.==*/ c
-      ?. /*@target=C.x*/ x;
-  /*@ type=C* */ /*@target=C.==*/ c?. /*@target=C.x*/ x;
+  var /*@ type=int* */ x = /*@ type=C* */ c?. /*@target=C.x*/ x;
+  /*@ type=C* */ c?. /*@target=C.x*/ x;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/null_coalescing_operator.dart b/pkg/front_end/testcases/inference/null_coalescing_operator.dart
index f68c07f..8ce2e52 100644
--- a/pkg/front_end/testcases/inference/null_coalescing_operator.dart
+++ b/pkg/front_end/testcases/inference/null_coalescing_operator.dart
@@ -7,7 +7,6 @@
 
 main() {
   List<int> x;
-  var /*@ type=List<int*>* */ y =
-      x /*@target=List.==*/ ?? /*@ typeArgs=int* */ [];
+  var /*@ type=List<int*>* */ y = x ?? /*@ typeArgs=int* */ [];
   List<int> z = y;
 }
diff --git a/pkg/front_end/testcases/inference/null_coalescing_operator_2.dart b/pkg/front_end/testcases/inference/null_coalescing_operator_2.dart
index a6dfbb3..f84a4e4 100644
--- a/pkg/front_end/testcases/inference/null_coalescing_operator_2.dart
+++ b/pkg/front_end/testcases/inference/null_coalescing_operator_2.dart
@@ -7,5 +7,5 @@
 
 main() {
   List<int> x;
-  List<num> y = x /*@target=List.==*/ ?? /*@ typeArgs=num* */ [];
+  List<num> y = x ?? /*@ typeArgs=num* */ [];
 }
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart
index 22d5c37..ff8a546 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart
@@ -25,7 +25,7 @@
     /*@target=Test.member*/ member = /*@ typeArgs=B* */ f();
 
     /*@target=Test.member*/ /*@target=Test.member*/ member
-        /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+         ??= /*@ typeArgs=B* */ f();
 
     /*@target=Test.member*/ /*@target=Test.member*/ member
         /*@target=B.+*/ += /*@ typeArgs=C* */ f();
@@ -47,7 +47,7 @@
 
     var /*@ type=B* */ v2 = /*@target=Test.member*/ /*@target=Test.member*/
         member
-            /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+             ??= /*@ typeArgs=B* */ f();
 
     var /*@ type=A* */ v3 =
         /*@target=Test.member*/ /*@target=Test.member*/ member
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this_upwards.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this_upwards.dart
index c4cdedf..422d372 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this_upwards.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this_upwards.dart
@@ -18,10 +18,10 @@
     var /*@ type=num* */ v2 = /*@target=Test1.t*/ t = getNum();
 
     var /*@ type=int* */ v4 = /*@target=Test1.t*/ /*@target=Test1.t*/ t
-        /*@target=num.==*/ ??= getInt();
+         ??= getInt();
 
     var /*@ type=num* */ v5 = /*@target=Test1.t*/ /*@target=Test1.t*/ t
-        /*@target=num.==*/ ??= getNum();
+         ??= getNum();
 
     var /*@ type=int* */ v7 = /*@target=Test1.t*/ /*@target=Test1.t*/ t
         /*@target=num.+*/ += getInt();
@@ -49,13 +49,13 @@
     var /*@ type=double* */ v3 = /*@target=Test2.t*/ t = getDouble();
 
     var /*@ type=num* */ v4 = /*@target=Test2.t*/ /*@target=Test2.t*/ t
-        /*@target=num.==*/ ??= getInt();
+         ??= getInt();
 
     var /*@ type=num* */ v5 = /*@target=Test2.t*/ /*@target=Test2.t*/ t
-        /*@target=num.==*/ ??= getNum();
+         ??= getNum();
 
     var /*@ type=num* */ v6 = /*@target=Test2.t*/ /*@target=Test2.t*/ t
-        /*@target=num.==*/ ??= getDouble();
+         ??= getDouble();
 
     var /*@ type=num* */ v7 = /*@target=Test2.t*/ /*@target=Test2.t*/ t
         /*@target=num.+*/ += getInt();
@@ -84,10 +84,10 @@
     var /*@ type=double* */ v3 = /*@target=Test3.t*/ t = getDouble();
 
     var /*@ type=num* */ v5 = /*@target=Test3.t*/ /*@target=Test3.t*/ t
-        /*@target=num.==*/ ??= getNum();
+         ??= getNum();
 
     var /*@ type=double* */ v6 = /*@target=Test3.t*/ /*@target=Test3.t*/ t
-        /*@target=num.==*/ ??= getDouble();
+         ??= getDouble();
 
     var /*@ type=double* */ v7 = /*@target=Test3.t*/ /*@target=Test3.t*/ t
         /*@target=double.+*/ += getInt();
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart
index cd0681b..39a70e4 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart
@@ -32,7 +32,7 @@
 
     t /*@target=Test.[]*/ /*@target=Test.[]=*/ [
             /*@ typeArgs=Index* */ f()]
-        /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+         ??= /*@ typeArgs=B* */ f();
 
     t /*@target=Test.[]*/ /*@target=Test.[]=*/ [/*@ typeArgs=Index* */ f()]
         /*@target=B.+*/ += /*@ typeArgs=C* */ f();
@@ -57,7 +57,7 @@
 
     var /*@ type=B* */ v2 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ [
             /*@ typeArgs=Index* */ f()]
-        /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+         ??= /*@ typeArgs=B* */ f();
 
     var /*@ type=A* */ v3 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ [
             /*@ typeArgs=Index* */ f()]
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart
index 5cd412f..e4108f8 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart
@@ -38,7 +38,7 @@
         /*@ typeArgs=Index* */ f()] = /*@ typeArgs=A* */ f();
 
     t /*@target=Test.[]*/ /*@target=Test.[]=*/ [/*@ typeArgs=Index* */ f()]
-        /*@target=A.==*/ ??= /*@ typeArgs=A* */ f();
+         ??= /*@ typeArgs=A* */ f();
 
     t /*@target=Test.[]*/ /*@target=Test.[]=*/ [/*@ typeArgs=Index* */ f()]
         /*@target=B.+*/ += /*@ typeArgs=E* */ f();
@@ -54,7 +54,7 @@
 
     var /*@ type=A* */ v2 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ [
             /*@ typeArgs=Index* */ f()]
-        /*@target=A.==*/ ??= /*@ typeArgs=A* */ f();
+         ??= /*@ typeArgs=A* */ f();
 
     var /*@ type=D* */ v3 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ [
             /*@ typeArgs=Index* */ f()]
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super.dart
index 8817a4a..89b4f0a 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super.dart
@@ -32,7 +32,7 @@
 
     super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
             /*@ typeArgs=Index* */ f()]
-        /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+         ??= /*@ typeArgs=B* */ f();
 
     super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
             /*@ typeArgs=Index* */ f()]
@@ -57,7 +57,7 @@
 
     var /*@ type=B* */ v2 = super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
             /*@ typeArgs=Index* */ f()]
-        /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+         ??= /*@ typeArgs=B* */ f();
 
     var /*@ type=A* */ v3 = super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
             /*@ typeArgs=Index* */ f()]
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart
index 2caca66..afa9f53 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart
@@ -25,11 +25,11 @@
 
     var /*@ type=int* */ v4 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
-            /*@target=num.==*/ ??= getInt();
+             ??= getInt();
 
     var /*@ type=num* */ v5 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
-            /*@target=num.==*/ ??= getNum();
+             ??= getNum();
 
     var /*@ type=int* */ v7 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
@@ -57,15 +57,15 @@
 
     var /*@ type=int* */ v4 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
-            /*@target=num.==*/ ??= getInt();
+             ??= getInt();
 
     var /*@ type=num* */ v5 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
-            /*@target=num.==*/ ??= getNum();
+             ??= getNum();
 
     var /*@ type=num* */ v6 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
-            /*@target=num.==*/ ??= getDouble();
+             ??= getDouble();
 
     var /*@ type=int* */ v7 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
@@ -95,11 +95,11 @@
 
     var /*@ type=num* */ v5 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
-            /*@target=num.==*/ ??= getNum();
+             ??= getNum();
 
     var /*@ type=num* */ v6 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
-            /*@target=num.==*/ ??= getDouble();
+             ??= getDouble();
 
     var /*@ type=int* */ v7 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
@@ -129,11 +129,11 @@
 
     var /*@ type=num* */ v4 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
-            /*@target=num.==*/ ??= getInt();
+             ??= getInt();
 
     var /*@ type=num* */ v5 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
-            /*@target=num.==*/ ??= getNum();
+             ??= getNum();
 
     var /*@ type=num* */ v7 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
@@ -161,15 +161,15 @@
 
     var /*@ type=num* */ v4 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
-            /*@target=num.==*/ ??= getInt();
+             ??= getInt();
 
     var /*@ type=num* */ v5 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
-            /*@target=num.==*/ ??= getNum();
+             ??= getNum();
 
     var /*@ type=num* */ v6 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
-            /*@target=num.==*/ ??= getDouble();
+             ??= getDouble();
 
     var /*@ type=num* */ v7 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
@@ -199,11 +199,11 @@
 
     var /*@ type=num* */ v5 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
-            /*@target=num.==*/ ??= getNum();
+             ??= getNum();
 
     var /*@ type=num* */ v6 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
-            /*@target=num.==*/ ??= getDouble();
+             ??= getDouble();
 
     var /*@ type=num* */ v7 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
@@ -233,11 +233,11 @@
 
     var /*@ type=num* */ v4 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
-            /*@target=num.==*/ ??= getInt();
+             ??= getInt();
 
     var /*@ type=num* */ v5 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
-            /*@target=num.==*/ ??= getNum();
+             ??= getNum();
 
     var /*@ type=double* */ v7 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
@@ -265,15 +265,15 @@
 
     var /*@ type=num* */ v4 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
-            /*@target=num.==*/ ??= getInt();
+             ??= getInt();
 
     var /*@ type=num* */ v5 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
-            /*@target=num.==*/ ??= getNum();
+             ??= getNum();
 
     var /*@ type=double* */ v6 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
-            /*@target=num.==*/ ??= getDouble();
+             ??= getDouble();
 
     var /*@ type=double* */ v7 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
@@ -303,11 +303,11 @@
 
     var /*@ type=num* */ v5 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
-            /*@target=num.==*/ ??= getNum();
+             ??= getNum();
 
     var /*@ type=double* */ v6 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
-            /*@target=num.==*/ ??= getDouble();
+             ??= getDouble();
 
     var /*@ type=double* */ v7 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this.dart
index 8684930..e0b9ec5 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this.dart
@@ -30,7 +30,7 @@
 
     this /*@target=Test.[]*/ /*@target=Test.[]=*/ [
             /*@ typeArgs=Index* */ f()]
-        /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+         ??= /*@ typeArgs=B* */ f();
 
     this /*@target=Test.[]*/ /*@target=Test.[]=*/ [
             /*@ typeArgs=Index* */ f()]
@@ -55,7 +55,7 @@
 
     var /*@ type=B* */ v2 = this /*@target=Test.[]*/ /*@target=Test.[]=*/ [
             /*@ typeArgs=Index* */ f()]
-        /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+         ??= /*@ typeArgs=B* */ f();
 
     var /*@ type=A* */ v3 = this /*@target=Test.[]*/ /*@target=Test.[]=*/ [
             /*@ typeArgs=Index* */ f()]
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart
index f9e34c4..f6d9aab 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart
@@ -20,11 +20,11 @@
 
     var /*@ type=int* */ v4 = this
             /*@target=Test1.[]*/ /*@target=Test1.[]=*/ ['x']
-        /*@target=num.==*/ ??= getInt();
+         ??= getInt();
 
     var /*@ type=num* */ v5 = this
             /*@target=Test1.[]*/ /*@target=Test1.[]=*/ ['x']
-        /*@target=num.==*/ ??= getNum();
+         ??= getNum();
 
     var /*@ type=int* */ v7 = this
             /*@target=Test1.[]*/ /*@target=Test1.[]=*/ ['x']
@@ -56,15 +56,15 @@
 
     var /*@ type=int* */ v4 = this
             /*@target=Test2.[]*/ /*@target=Test2.[]=*/ ['x']
-        /*@target=num.==*/ ??= getInt();
+         ??= getInt();
 
     var /*@ type=num* */ v5 = this
             /*@target=Test2.[]*/ /*@target=Test2.[]=*/ ['x']
-        /*@target=num.==*/ ??= getNum();
+         ??= getNum();
 
     var /*@ type=num* */ v6 = this
             /*@target=Test2.[]*/ /*@target=Test2.[]=*/ ['x']
-        /*@target=num.==*/ ??= getDouble();
+         ??= getDouble();
 
     var /*@ type=int* */ v7 = this
             /*@target=Test2.[]*/ /*@target=Test2.[]=*/ ['x']
@@ -98,11 +98,11 @@
 
     var /*@ type=num* */ v5 = this
             /*@target=Test3.[]*/ /*@target=Test3.[]=*/ ['x']
-        /*@target=num.==*/ ??= getNum();
+         ??= getNum();
 
     var /*@ type=num* */ v6 = this
             /*@target=Test3.[]*/ /*@target=Test3.[]=*/ ['x']
-        /*@target=num.==*/ ??= getDouble();
+         ??= getDouble();
 
     var /*@ type=int* */ v7 = this
             /*@target=Test3.[]*/ /*@target=Test3.[]=*/ ['x']
@@ -136,11 +136,11 @@
 
     var /*@ type=num* */ v4 = this
             /*@target=Test4.[]*/ /*@target=Test4.[]=*/ ['x']
-        /*@target=num.==*/ ??= getInt();
+         ??= getInt();
 
     var /*@ type=num* */ v5 = this
             /*@target=Test4.[]*/ /*@target=Test4.[]=*/ ['x']
-        /*@target=num.==*/ ??= getNum();
+         ??= getNum();
 
     var /*@ type=num* */ v7 = this
             /*@target=Test4.[]*/ /*@target=Test4.[]=*/ ['x']
@@ -172,15 +172,15 @@
 
     var /*@ type=num* */ v4 = this
             /*@target=Test5.[]*/ /*@target=Test5.[]=*/ ['x']
-        /*@target=num.==*/ ??= getInt();
+         ??= getInt();
 
     var /*@ type=num* */ v5 = this
             /*@target=Test5.[]*/ /*@target=Test5.[]=*/ ['x']
-        /*@target=num.==*/ ??= getNum();
+         ??= getNum();
 
     var /*@ type=num* */ v6 = this
             /*@target=Test5.[]*/ /*@target=Test5.[]=*/ ['x']
-        /*@target=num.==*/ ??= getDouble();
+         ??= getDouble();
 
     var /*@ type=num* */ v7 = this
             /*@target=Test5.[]*/ /*@target=Test5.[]=*/ ['x']
@@ -214,11 +214,11 @@
 
     var /*@ type=num* */ v5 = this
             /*@target=Test6.[]*/ /*@target=Test6.[]=*/ ['x']
-        /*@target=num.==*/ ??= getNum();
+         ??= getNum();
 
     var /*@ type=num* */ v6 = this
             /*@target=Test6.[]*/ /*@target=Test6.[]=*/ ['x']
-        /*@target=num.==*/ ??= getDouble();
+         ??= getDouble();
 
     var /*@ type=num* */ v7 = this
             /*@target=Test6.[]*/ /*@target=Test6.[]=*/ ['x']
@@ -253,11 +253,11 @@
 
     var /*@ type=num* */ v4 = this
             /*@target=Test7.[]*/ /*@target=Test7.[]=*/ ['x']
-        /*@target=num.==*/ ??= getInt();
+         ??= getInt();
 
     var /*@ type=num* */ v5 = this
             /*@target=Test7.[]*/ /*@target=Test7.[]=*/ ['x']
-        /*@target=num.==*/ ??= getNum();
+         ??= getNum();
 
     var /*@ type=double* */ v7 = this
             /*@target=Test7.[]*/ /*@target=Test7.[]=*/ ['x']
@@ -291,15 +291,15 @@
 
     var /*@ type=num* */ v4 = this
             /*@target=Test8.[]*/ /*@target=Test8.[]=*/ ['x']
-        /*@target=num.==*/ ??= getInt();
+         ??= getInt();
 
     var /*@ type=num* */ v5 = this
             /*@target=Test8.[]*/ /*@target=Test8.[]=*/ ['x']
-        /*@target=num.==*/ ??= getNum();
+         ??= getNum();
 
     var /*@ type=double* */ v6 = this
             /*@target=Test8.[]*/ /*@target=Test8.[]=*/ ['x']
-        /*@target=num.==*/ ??= getDouble();
+         ??= getDouble();
 
     var /*@ type=double* */ v7 = this
             /*@target=Test8.[]*/ /*@target=Test8.[]=*/ ['x']
@@ -334,11 +334,11 @@
 
     var /*@ type=num* */ v5 = this
             /*@target=Test9.[]*/ /*@target=Test9.[]=*/ ['x']
-        /*@target=num.==*/ ??= getNum();
+         ??= getNum();
 
     var /*@ type=double* */ v6 = this
             /*@target=Test9.[]*/ /*@target=Test9.[]=*/ ['x']
-        /*@target=num.==*/ ??= getDouble();
+         ??= getDouble();
 
     var /*@ type=double* */ v7 = this
             /*@target=Test9.[]*/ /*@target=Test9.[]=*/ ['x']
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart
index caebb26..7980f3f 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart
@@ -20,10 +20,10 @@
   var /*@ type=num* */ v2 = t /*@target=Test.[]=*/ ['x'] = getNum();
 
   var /*@ type=int* */ v4 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
-      /*@target=num.==*/ ??= getInt();
+       ??= getInt();
 
   var /*@ type=num* */ v5 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
-      /*@target=num.==*/ ??= getNum();
+       ??= getNum();
 
   var /*@ type=int* */ v7 =
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ +=
@@ -48,13 +48,13 @@
   var /*@ type=double* */ v3 = t /*@target=Test.[]=*/ ['x'] = getDouble();
 
   var /*@ type=int* */ v4 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
-      /*@target=num.==*/ ??= getInt();
+       ??= getInt();
 
   var /*@ type=num* */ v5 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
-      /*@target=num.==*/ ??= getNum();
+       ??= getNum();
 
   var /*@ type=num* */ v6 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
-      /*@target=num.==*/ ??= getDouble();
+       ??= getDouble();
 
   var /*@ type=int* */ v7 =
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ +=
@@ -81,10 +81,10 @@
   var /*@ type=double* */ v3 = t /*@target=Test.[]=*/ ['x'] = getDouble();
 
   var /*@ type=num* */ v5 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
-      /*@target=num.==*/ ??= getNum();
+       ??= getNum();
 
   var /*@ type=num* */ v6 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
-      /*@target=num.==*/ ??= getDouble();
+       ??= getDouble();
 
   var /*@ type=int* */ v7 =
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ +=
@@ -111,10 +111,10 @@
   var /*@ type=num* */ v2 = t /*@target=Test.[]=*/ ['x'] = getNum();
 
   var /*@ type=num* */ v4 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
-      /*@target=num.==*/ ??= getInt();
+       ??= getInt();
 
   var /*@ type=num* */ v5 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
-      /*@target=num.==*/ ??= getNum();
+       ??= getNum();
 
   var /*@ type=num* */ v7 =
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ +=
@@ -139,13 +139,13 @@
   var /*@ type=double* */ v3 = t /*@target=Test.[]=*/ ['x'] = getDouble();
 
   var /*@ type=num* */ v4 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
-      /*@target=num.==*/ ??= getInt();
+       ??= getInt();
 
   var /*@ type=num* */ v5 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
-      /*@target=num.==*/ ??= getNum();
+       ??= getNum();
 
   var /*@ type=num* */ v6 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
-      /*@target=num.==*/ ??= getDouble();
+       ??= getDouble();
 
   var /*@ type=num* */ v7 =
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ +=
@@ -172,10 +172,10 @@
   var /*@ type=double* */ v3 = t /*@target=Test.[]=*/ ['x'] = getDouble();
 
   var /*@ type=num* */ v5 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
-      /*@target=num.==*/ ??= getNum();
+       ??= getNum();
 
   var /*@ type=num* */ v6 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
-      /*@target=num.==*/ ??= getDouble();
+       ??= getDouble();
 
   var /*@ type=num* */ v7 =
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ +=
@@ -202,10 +202,10 @@
   var /*@ type=num* */ v2 = t /*@target=Test.[]=*/ ['x'] = getNum();
 
   var /*@ type=num* */ v4 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
-      /*@target=num.==*/ ??= getInt();
+       ??= getInt();
 
   var /*@ type=num* */ v5 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
-      /*@target=num.==*/ ??= getNum();
+       ??= getNum();
 
   var /*@ type=double* */ v7 =
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=double.+*/ +=
@@ -231,13 +231,13 @@
   var /*@ type=double* */ v3 = t /*@target=Test.[]=*/ ['x'] = getDouble();
 
   var /*@ type=num* */ v4 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
-      /*@target=num.==*/ ??= getInt();
+       ??= getInt();
 
   var /*@ type=num* */ v5 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
-      /*@target=num.==*/ ??= getNum();
+       ??= getNum();
 
   var /*@ type=double* */ v6 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
-      /*@target=num.==*/ ??= getDouble();
+       ??= getDouble();
 
   var /*@ type=double* */ v7 =
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=double.+*/ +=
@@ -265,10 +265,10 @@
   var /*@ type=double* */ v3 = t /*@target=Test.[]=*/ ['x'] = getDouble();
 
   var /*@ type=num* */ v5 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
-      /*@target=num.==*/ ??= getNum();
+       ??= getNum();
 
   var /*@ type=double* */ v6 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
-      /*@target=num.==*/ ??= getDouble();
+       ??= getDouble();
 
   var /*@ type=double* */ v7 =
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=double.+*/ +=
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart
index 17b741e..d6b952a 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart
@@ -22,7 +22,7 @@
   B local;
   local = /*@ typeArgs=B* */ f();
 
-  local /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+  local  ??= /*@ typeArgs=B* */ f();
 
   local /*@target=B.+*/ += /*@ typeArgs=C* */ f();
 
@@ -37,7 +37,7 @@
   var /*@ type=B* */ v1 = local = /*@ typeArgs=B* */ f();
 
   var /*@ type=B* */ v2 =
-      local /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+      local  ??= /*@ typeArgs=B* */ f();
 
   var /*@ type=A* */ v3 = local
       /*@target=B.+*/ += /*@ typeArgs=C* */ f();
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards.dart
index 52101cc..6a3242d 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards.dart
@@ -14,9 +14,9 @@
 
   var /*@ type=num* */ v2 = t = getNum();
 
-  var /*@ type=int* */ v4 = t /*@target=num.==*/ ??= getInt();
+  var /*@ type=int* */ v4 = t ??= getInt();
 
-  var /*@ type=num* */ v5 = t /*@target=num.==*/ ??= getNum();
+  var /*@ type=num* */ v5 = t ??= getNum();
 
   var /*@ type=int* */ v7 = t /*@target=num.+*/ += getInt();
 
@@ -35,11 +35,11 @@
 
   var /*@ type=double* */ v3 = t = getDouble();
 
-  var /*@ type=num* */ v4 = t /*@target=num.==*/ ??= getInt();
+  var /*@ type=num* */ v4 = t ??= getInt();
 
-  var /*@ type=num* */ v5 = t /*@target=num.==*/ ??= getNum();
+  var /*@ type=num* */ v5 = t ??= getNum();
 
-  var /*@ type=num* */ v6 = t /*@target=num.==*/ ??= getDouble();
+  var /*@ type=num* */ v6 = t ??= getDouble();
 
   var /*@ type=num* */ v7 = t /*@target=num.+*/ += getInt();
 
@@ -58,9 +58,9 @@
 
   var /*@ type=double* */ v3 = t = getDouble();
 
-  var /*@ type=num* */ v5 = t /*@target=num.==*/ ??= getNum();
+  var /*@ type=num* */ v5 = t ??= getNum();
 
-  var /*@ type=double* */ v6 = t /*@target=num.==*/ ??= getDouble();
+  var /*@ type=double* */ v6 = t ??= getDouble();
 
   var /*@ type=double* */ v7 = t /*@target=double.+*/ += getInt();
 
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_full.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_property_full.dart
index c112d9c..24d478e 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_full.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_full.dart
@@ -24,7 +24,7 @@
   static void test(Test t) {
     t. /*@target=Test.member*/ member = /*@ typeArgs=B* */ f();
     /*@ type=Test* */ /*@target=Test.member*/ t. /*@target=Test.member*/ member
-        /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+         ??= /*@ typeArgs=B* */ f();
     /*@ type=Test* */ t. /*@target=Test.member*/ /*@target=Test.member*/ member
         /*@target=B.+*/ += /*@ typeArgs=C* */ f();
     /*@ type=Test* */ t. /*@target=Test.member*/ /*@target=Test.member*/ member
@@ -40,7 +40,7 @@
     var /*@ type=B* */ v2 =
         /*@ type=Test* */ /*@target=Test.member*/ t
                 . /*@target=Test.member*/ member
-            /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+             ??= /*@ typeArgs=B* */ f();
     var /*@ type=A* */ v3 =
         /*@ type=Test* */ t
                 . /*@target=Test.member*/ /*@target=Test.member*/ member
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware.dart
index 5719c09..0905ef9 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware.dart
@@ -22,60 +22,60 @@
   B member;
 
   static void test(Test t) {
-    /*@ type=Test* */ /*@target=Test.==*/ t
+    /*@ type=Test* */  t
         ?. /*@target=Test.member*/ member = /*@ typeArgs=B* */ f();
 
-    /*@target=Test.==*/ t?.
+     t?.
             /*@target=Test.member*/ /*@target=Test.member*/ member
-        /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+         ??= /*@ typeArgs=B* */ f();
 
-    /*@target=Test.==*/ t?.
+     t?.
             /*@target=Test.member*/ /*@target=Test.member*/ member
         /*@target=B.+*/ += /*@ typeArgs=C* */ f();
 
-    /*@target=Test.==*/ t?.
+     t?.
             /*@target=Test.member*/ /*@target=Test.member*/ member
         /*@target=B.**/ *= /*@ typeArgs=B* */ f();
 
-    /*@target=Test.==*/ t?.
+     t?.
             /*@target=Test.member*/ /*@target=Test.member*/ member
         /*@target=B.&*/ &= /*@ typeArgs=A* */ f();
 
-    /*@target=B.-*/ -- /*@target=Test.==*/ t?.
+    /*@target=B.-*/ --  t?.
         /*@target=Test.member*/ /*@target=Test.member*/ member;
 
-    /*@target=Test.==*/ t?.
+     t?.
             /*@target=Test.member*/ /*@target=Test.member*/ member
         /*@target=B.-*/ --;
 
     var /*@ type=B* */ v1 =
-        /*@ type=Test* */ /*@target=Test.==*/ t
+        /*@ type=Test* */  t
             ?. /*@target=Test.member*/ member = /*@ typeArgs=B* */ f();
 
     var /*@ type=B* */ v2 =
-        /*@target=Test.==*/ t
+         t
                 ?. /*@target=Test.member*/ /*@target=Test.member*/ member
-            /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+             ??= /*@ typeArgs=B* */ f();
 
     var /*@ type=A* */ v3 =
-        /*@target=Test.==*/ t
+         t
                 ?. /*@target=Test.member*/ /*@target=Test.member*/ member
             /*@target=B.+*/ += /*@ typeArgs=C* */ f();
 
     var /*@ type=B* */ v4 =
-        /*@target=Test.==*/ t
+         t
                 ?. /*@target=Test.member*/ /*@target=Test.member*/ member
             /*@target=B.**/ *= /*@ typeArgs=B* */ f();
 
     var /*@ type=C* */ v5 =
-        /*@target=Test.==*/ t
+         t
                 ?. /*@target=Test.member*/ /*@target=Test.member*/ member
             /*@target=B.&*/ &= /*@ typeArgs=A* */ f();
 
-    var /*@ type=B* */ v6 = /*@target=B.-*/ -- /*@target=Test.==*/ t
+    var /*@ type=B* */ v6 = /*@target=B.-*/ --  t
         ?. /*@target=Test.member*/ /*@target=Test.member*/ member;
 
-    var /*@ type=B* */ v7 = /*@target=Test.==*/ t
+    var /*@ type=B* */ v7 =  t
             ?. /*@target=Test.member*/ /*@target=Test.member*/ member
         /*@target=B.-*/ --;
   }
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware_upwards.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware_upwards.dart
index b72b887..692f54f 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware_upwards.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware_upwards.dart
@@ -13,33 +13,33 @@
   int prop;
 
   static void test(Test1 t) {
-    var /*@ type=int* */ v1 = /*@ type=Test1* */ /*@target=Test1.==*/ t
+    var /*@ type=int* */ v1 = /*@ type=Test1* */  t
         ?. /*@target=Test1.prop*/ prop = getInt();
 
-    var /*@ type=num* */ v2 = /*@ type=Test1* */ /*@target=Test1.==*/ t
+    var /*@ type=num* */ v2 = /*@ type=Test1* */  t
         ?. /*@target=Test1.prop*/ prop = getNum();
 
-    var /*@ type=int* */ v4 = /*@target=Test1.==*/ t?.
+    var /*@ type=int* */ v4 =  t?.
             /*@target=Test1.prop*/ /*@target=Test1.prop*/ prop
-        /*@target=num.==*/ ??= getInt();
+         ??= getInt();
 
-    var /*@ type=num* */ v5 = /*@target=Test1.==*/ t?.
+    var /*@ type=num* */ v5 =  t?.
             /*@target=Test1.prop*/ /*@target=Test1.prop*/ prop
-        /*@target=num.==*/ ??= getNum();
+         ??= getNum();
 
-    var /*@ type=int* */ v7 = /*@target=Test1.==*/ t?.
+    var /*@ type=int* */ v7 =  t?.
             /*@target=Test1.prop*/ /*@target=Test1.prop*/ prop
         /*@target=num.+*/ += getInt();
 
-    var /*@ type=num* */ v8 = /*@target=Test1.==*/ t?.
+    var /*@ type=num* */ v8 =  t?.
             /*@target=Test1.prop*/ /*@target=Test1.prop*/ prop
         /*@target=num.+*/ += getNum();
 
     var /*@ type=int* */ v10 = /*@target=num.+*/ ++
-        /*@target=Test1.==*/ t?.
+         t?.
             /*@target=Test1.prop*/ /*@target=Test1.prop*/ prop;
 
-    var /*@ type=int* */ v11 = /*@target=Test1.==*/ t?.
+    var /*@ type=int* */ v11 =  t?.
             /*@target=Test1.prop*/ /*@target=Test1.prop*/ prop
         /*@target=num.+*/ ++;
   }
@@ -49,43 +49,43 @@
   num prop;
 
   static void test(Test2 t) {
-    var /*@ type=int* */ v1 = /*@ type=Test2* */ /*@target=Test2.==*/ t
+    var /*@ type=int* */ v1 = /*@ type=Test2* */  t
         ?. /*@target=Test2.prop*/ prop = getInt();
 
-    var /*@ type=num* */ v2 = /*@ type=Test2* */ /*@target=Test2.==*/ t
+    var /*@ type=num* */ v2 = /*@ type=Test2* */  t
         ?. /*@target=Test2.prop*/ prop = getNum();
 
-    var /*@ type=double* */ v3 = /*@ type=Test2* */ /*@target=Test2.==*/ t
+    var /*@ type=double* */ v3 = /*@ type=Test2* */  t
         ?. /*@target=Test2.prop*/ prop = getDouble();
 
-    var /*@ type=num* */ v4 = /*@target=Test2.==*/ t?.
+    var /*@ type=num* */ v4 =  t?.
             /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop
-        /*@target=num.==*/ ??= getInt();
+         ??= getInt();
 
-    var /*@ type=num* */ v5 = /*@target=Test2.==*/ t?.
+    var /*@ type=num* */ v5 =  t?.
             /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop
-        /*@target=num.==*/ ??= getNum();
+         ??= getNum();
 
-    var /*@ type=num* */ v6 = /*@target=Test2.==*/ t?.
+    var /*@ type=num* */ v6 =  t?.
             /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop
-        /*@target=num.==*/ ??= getDouble();
+         ??= getDouble();
 
-    var /*@ type=num* */ v7 = /*@target=Test2.==*/ t?.
+    var /*@ type=num* */ v7 =  t?.
             /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop
         /*@target=num.+*/ += getInt();
 
-    var /*@ type=num* */ v8 = /*@target=Test2.==*/ t?.
+    var /*@ type=num* */ v8 =  t?.
             /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop
         /*@target=num.+*/ += getNum();
 
-    var /*@ type=num* */ v9 = /*@target=Test2.==*/ t?.
+    var /*@ type=num* */ v9 =  t?.
         /*@target=Test2.prop*/ /*@target=Test2.prop*/
         prop /*@target=num.+*/ += getDouble();
 
-    var /*@ type=num* */ v10 = /*@target=num.+*/ ++ /*@target=Test2.==*/
+    var /*@ type=num* */ v10 = /*@target=num.+*/ ++ 
         t?. /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop;
 
-    var /*@ type=num* */ v11 = /*@target=Test2.==*/
+    var /*@ type=num* */ v11 = 
         t?. /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop
         /*@target=num.+*/ ++;
   }
@@ -95,39 +95,39 @@
   double prop;
 
   static void test3(Test3 t) {
-    var /*@ type=num* */ v2 = /*@ type=Test3* */ /*@target=Test3.==*/ t
+    var /*@ type=num* */ v2 = /*@ type=Test3* */  t
         ?. /*@target=Test3.prop*/ prop = getNum();
 
-    var /*@ type=double* */ v3 = /*@ type=Test3* */ /*@target=Test3.==*/ t
+    var /*@ type=double* */ v3 = /*@ type=Test3* */  t
         ?. /*@target=Test3.prop*/ prop = getDouble();
 
-    var /*@ type=num* */ v5 = /*@target=Test3.==*/ t?.
+    var /*@ type=num* */ v5 =  t?.
             /*@target=Test3.prop*/ /*@target=Test3.prop*/ prop
-        /*@target=num.==*/ ??= getNum();
+         ??= getNum();
 
     var /*@ type=double* */ v6 =
-        /*@target=Test3.==*/ t?.
+         t?.
                 /*@target=Test3.prop*/ /*@target=Test3.prop*/ prop
-            /*@target=num.==*/ ??= getDouble();
+             ??= getDouble();
 
-    var /*@ type=double* */ v7 = /*@target=Test3.==*/ t?.
+    var /*@ type=double* */ v7 =  t?.
             /*@target=Test3.prop*/ /*@target=Test3.prop*/ prop
         /*@target=double.+*/ += getInt();
 
-    var /*@ type=double* */ v8 = /*@target=Test3.==*/ t?.
+    var /*@ type=double* */ v8 =  t?.
             /*@target=Test3.prop*/ /*@target=Test3.prop*/ prop
         /*@target=double.+*/ += getNum();
 
     var /*@ type=double* */ v9 =
-        /*@target=Test3.==*/ t?.
+         t?.
                 /*@target=Test3.prop*/ /*@target=Test3.prop*/ prop
             /*@target=double.+*/ += getDouble();
 
     var /*@ type=double* */ v10 = /*@target=double.+*/ ++
-        /*@target=Test3.==*/ t?.
+         t?.
             /*@target=Test3.prop*/ /*@target=Test3.prop*/ prop;
 
-    var /*@ type=double* */ v11 = /*@target=Test3.==*/
+    var /*@ type=double* */ v11 = 
         t?. /*@target=Test3.prop*/ /*@target=Test3.prop*/ prop
         /*@target=double.+*/ ++;
   }
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart
index 48ef55d..00881df 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart
@@ -27,7 +27,7 @@
     super.member = /*@ typeArgs=B* */ f();
 
     super. /*@target=Base.member*/ member
-        /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+         ??= /*@ typeArgs=B* */ f();
 
     super. /*@target=Base.member*/ member
         /*@target=B.+*/ += /*@ typeArgs=C* */ f();
@@ -46,7 +46,7 @@
     var /*@ type=B* */ v1 = super.member = /*@ typeArgs=B* */ f();
 
     var /*@ type=B* */ v2 = super. /*@target=Base.member*/ member
-        /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+         ??= /*@ typeArgs=B* */ f();
 
     var /*@ type=A* */ v3 = super. /*@target=Base.member*/ member
         /*@target=B.+*/ += /*@ typeArgs=C* */ f();
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards.dart
index c04c80e..fb14b71 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards.dart
@@ -22,10 +22,10 @@
     var /*@ type=num* */ v2 = super.intProp = getNum();
 
     var /*@ type=int* */ v4 = super. /*@target=Base.intProp*/ intProp
-        /*@target=num.==*/ ??= getInt();
+         ??= getInt();
 
     var /*@ type=num* */ v5 = super. /*@target=Base.intProp*/ intProp
-        /*@target=num.==*/ ??= getNum();
+         ??= getNum();
 
     var /*@ type=int* */ v7 = super. /*@target=Base.intProp*/ intProp
         /*@target=num.+*/ += getInt();
@@ -51,13 +51,13 @@
     var /*@ type=double* */ v3 = super.numProp = getDouble();
 
     var /*@ type=num* */ v4 = super. /*@target=Base.numProp*/ numProp
-        /*@target=num.==*/ ??= getInt();
+         ??= getInt();
 
     var /*@ type=num* */ v5 = super. /*@target=Base.numProp*/ numProp
-        /*@target=num.==*/ ??= getNum();
+         ??= getNum();
 
     var /*@ type=num* */ v6 = super. /*@target=Base.numProp*/ numProp
-        /*@target=num.==*/ ??= getDouble();
+         ??= getDouble();
 
     var /*@ type=num* */ v7 = super. /*@target=Base.numProp*/ numProp
         /*@target=num.+*/ += getInt();
@@ -84,10 +84,10 @@
     var /*@ type=double* */ v3 = super.doubleProp = getDouble();
 
     var /*@ type=num* */ v5 = super. /*@target=Base.doubleProp*/ doubleProp
-        /*@target=num.==*/ ??= getNum();
+         ??= getNum();
 
     var /*@ type=double* */ v6 = super. /*@target=Base.doubleProp*/ doubleProp
-        /*@target=num.==*/ ??= getDouble();
+         ??= getDouble();
 
     var /*@ type=double* */ v7 = super
         . /*@target=Base.doubleProp*/
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_upwards.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_property_upwards.dart
index e7d6d4b..e3c79e3 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_upwards.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_upwards.dart
@@ -17,10 +17,10 @@
     var /*@ type=num* */ v2 = t. /*@target=Test1.prop*/ prop = getNum();
     var /*@ type=int* */ v4 = /*@ type=Test1* */ /*@target=Test1.prop*/ t
             . /*@target=Test1.prop*/ prop
-        /*@target=num.==*/ ??= getInt();
+         ??= getInt();
     var /*@ type=num* */ v5 = /*@ type=Test1* */ /*@target=Test1.prop*/ t
             . /*@target=Test1.prop*/ prop
-        /*@target=num.==*/ ??= getNum();
+         ??= getNum();
     var /*@ type=int* */ v7 = /*@ type=Test1* */ t
             . /*@target=Test1.prop*/ /*@target=Test1.prop*/ prop
         /*@target=num.+*/ += getInt();
@@ -45,13 +45,13 @@
     var /*@ type=double* */ v3 = t. /*@target=Test2.prop*/ prop = getDouble();
     var /*@ type=num* */ v4 = /*@ type=Test2* */ /*@target=Test2.prop*/ t
             . /*@target=Test2.prop*/ prop
-        /*@target=num.==*/ ??= getInt();
+         ??= getInt();
     var /*@ type=num* */ v5 = /*@ type=Test2* */ /*@target=Test2.prop*/ t
             . /*@target=Test2.prop*/ prop
-        /*@target=num.==*/ ??= getNum();
+         ??= getNum();
     var /*@ type=num* */ v6 = /*@ type=Test2* */ /*@target=Test2.prop*/ t
             . /*@target=Test2.prop*/ prop
-        /*@target=num.==*/ ??= getDouble();
+         ??= getDouble();
     var /*@ type=num* */ v7 = /*@ type=Test2* */ t
             . /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop
         /*@target=num.+*/ += getInt();
@@ -78,10 +78,10 @@
     var /*@ type=double* */ v3 = t. /*@target=Test3.prop*/ prop = getDouble();
     var /*@ type=num* */ v5 = /*@ type=Test3* */ /*@target=Test3.prop*/ t
             . /*@target=Test3.prop*/ prop
-        /*@target=num.==*/ ??= getNum();
+         ??= getNum();
     var /*@ type=double* */ v6 = /*@ type=Test3* */ /*@target=Test3.prop*/ t
             . /*@target=Test3.prop*/ prop
-        /*@target=num.==*/ ??= getDouble();
+         ??= getDouble();
     var /*@ type=double* */ v7 = /*@ type=Test3* */ t
             . /*@target=Test3.prop*/ /*@target=Test3.prop*/ prop
         /*@target=double.+*/ += getInt();
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_static.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_static.dart
index 1f4c19b..c09b270 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_static.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_static.dart
@@ -25,7 +25,7 @@
 void test_topLevelVariable() {
   topLevelVariable = /*@ typeArgs=B* */ f();
 
-  topLevelVariable /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+  topLevelVariable  ??= /*@ typeArgs=B* */ f();
 
   topLevelVariable /*@target=B.+*/ += /*@ typeArgs=C* */ f();
 
@@ -40,7 +40,7 @@
   var /*@ type=B* */ v1 = topLevelVariable = /*@ typeArgs=B* */ f();
 
   var /*@ type=B* */ v2 =
-      topLevelVariable /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+      topLevelVariable  ??= /*@ typeArgs=B* */ f();
 
   var /*@ type=A* */ v3 =
       topLevelVariable /*@target=B.+*/ += /*@ typeArgs=C* */ f();
@@ -60,7 +60,7 @@
 void test_staticVariable() {
   B.staticVariable = /*@ typeArgs=B* */ f();
 
-  B.staticVariable /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+  B.staticVariable  ??= /*@ typeArgs=B* */ f();
 
   B.staticVariable /*@target=B.+*/ += /*@ typeArgs=C* */ f();
 
@@ -75,7 +75,7 @@
   var /*@ type=B* */ v1 = B.staticVariable = /*@ typeArgs=B* */ f();
 
   var /*@ type=B* */ v2 =
-      B.staticVariable /*@target=A.==*/ ??= /*@ typeArgs=B* */ f();
+      B.staticVariable  ??= /*@ typeArgs=B* */ f();
 
   var /*@ type=A* */ v3 =
       B.staticVariable /*@target=B.+*/ += /*@ typeArgs=C* */ f();
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_static_upwards.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_static_upwards.dart
index 4b22632..237f648 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_static_upwards.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_static_upwards.dart
@@ -18,9 +18,9 @@
 
   var /*@ type=num* */ v2 = topLevelInt = getNum();
 
-  var /*@ type=int* */ v4 = topLevelInt /*@target=num.==*/ ??= getInt();
+  var /*@ type=int* */ v4 = topLevelInt  ??= getInt();
 
-  var /*@ type=num* */ v5 = topLevelInt /*@target=num.==*/ ??= getNum();
+  var /*@ type=num* */ v5 = topLevelInt  ??= getNum();
 
   var /*@ type=int* */ v7 = topLevelInt /*@target=num.+*/ += getInt();
 
@@ -39,11 +39,11 @@
 
   var /*@ type=double* */ v3 = topLevelNum = getDouble();
 
-  var /*@ type=num* */ v4 = topLevelNum /*@target=num.==*/ ??= getInt();
+  var /*@ type=num* */ v4 = topLevelNum  ??= getInt();
 
-  var /*@ type=num* */ v5 = topLevelNum /*@target=num.==*/ ??= getNum();
+  var /*@ type=num* */ v5 = topLevelNum  ??= getNum();
 
-  var /*@ type=num* */ v6 = topLevelNum /*@target=num.==*/ ??= getDouble();
+  var /*@ type=num* */ v6 = topLevelNum  ??= getDouble();
 
   var /*@ type=num* */ v7 = topLevelNum /*@target=num.+*/ += getInt();
 
@@ -62,10 +62,10 @@
 
   var /*@ type=double* */ v3 = topLevelDouble = getDouble();
 
-  var /*@ type=num* */ v5 = topLevelDouble /*@target=num.==*/ ??= getNum();
+  var /*@ type=num* */ v5 = topLevelDouble  ??= getNum();
 
   var /*@ type=double* */ v6 =
-      topLevelDouble /*@target=num.==*/ ??= getDouble();
+      topLevelDouble  ??= getDouble();
 
   var /*@ type=double* */ v7 = topLevelDouble /*@target=double.+*/ += getInt();
 
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart b/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart
index 7478374..22e5ba7 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart
+++ b/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart
@@ -21,6 +21,6 @@
 var a = new A();
 var x = a. /*@target=A.b*/ b. /*@target=B.c*/ c;
 var y = a. /*@ type=B* */ /*@target=A.b*/ /*@target=B.c*/ b. /*@target=B.c*/ c
-    /*@target=C.==*/ ??= new D();
+     ??= new D();
 
 main() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.weak.expect
index 7934529..ea950c6 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.weak.expect
@@ -40,12 +40,12 @@
   synthetic constructor •() → self::C*
     : super core::Object::•()
     ;
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
   abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
   abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
   abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.weak.outline.expect
index 8899b99..da2cfcc 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.weak.outline.expect
@@ -38,12 +38,12 @@
 class C extends core::Object {
   synthetic constructor •() → self::C*
     ;
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
   abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
   abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
   abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.weak.transformed.expect
index 7934529..ea950c6 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.weak.transformed.expect
@@ -40,12 +40,12 @@
   synthetic constructor •() → self::C*
     : super core::Object::•()
     ;
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
   abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
   abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
   abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart b/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart
index c7d7e2b..89d50fb 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart
+++ b/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart
@@ -20,6 +20,6 @@
 var a = new A();
 var x = a. /*@target=A.b*/ b. /*@target=B.c*/ c;
 var y = a. /*@ type=B* */ /*@target=A.b*/ /*@target=B.c*/ b
-    . /*@target=B.c*/ c /*@target=C.==*/ ??= new D();
+    . /*@target=B.c*/ c ??= new D();
 
 main() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.weak.expect
index 07d3dfd..b174194 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.weak.expect
@@ -38,12 +38,12 @@
   synthetic constructor •() → self::C*
     : super core::Object::•()
     ;
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
   abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
   abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
   abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.weak.outline.expect
index 1ad86f8..06be72a 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.weak.outline.expect
@@ -35,12 +35,12 @@
 class C extends core::Object {
   synthetic constructor •() → self::C*
     ;
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
   abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
   abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
   abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.weak.transformed.expect
index 07d3dfd..b174194 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.weak.transformed.expect
@@ -38,12 +38,12 @@
   synthetic constructor •() → self::C*
     : super core::Object::•()
     ;
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
   abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
   abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
   abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
diff --git a/pkg/front_end/testcases/inference_new/null_aware_property_get.dart b/pkg/front_end/testcases/inference_new/null_aware_property_get.dart
index 9722b96..1aeaa68 100644
--- a/pkg/front_end/testcases/inference_new/null_aware_property_get.dart
+++ b/pkg/front_end/testcases/inference_new/null_aware_property_get.dart
@@ -11,6 +11,5 @@
 
 main() {
   Class c;
-  num Function() f = /*@target=Class.==*/ /*@type=Class**/ c
-      ?. /*@target=Class.method*/ method;
+  num Function() f = /*@type=Class**/ c?. /*@target=Class.method*/ method;
 }
diff --git a/tools/VERSION b/tools/VERSION
index 77009c4..b5587e5 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 15
 PATCH 0
-PRERELEASE 114
+PRERELEASE 115
 PRERELEASE_PATCH 0
\ No newline at end of file
