[cfe] Avoid looking up unneeded operator == for EqualsNull node

Closes #47223

Change-Id: I8ad80c38ed1454a0c6e8088e98cd6db5d7d19930
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/213540
Reviewed-by: Chloe Stefantsova <dmitryas@google.com>
Commit-Queue: Johnni Winther <johnniwinther@google.com>
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 99d410d..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(
@@ -4490,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;
   }
 }
@@ -4827,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.
@@ -4869,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,
@@ -4883,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/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;
 }