Ensure CFE provides correct setter name to instantiateInvocation.

All of the backends (dart2js, DDC, VM) were checking if the invocation
name was tagged with "set:" and appending "=" to the name if so.
Instead, we can simply have the CFE perform this logic at the callsite.

Note that the name of the setter itself is still unchanged. Backends may
still need to generate the correct name themselves when handling NSMs
via code paths other than instantiateInvocation.

Change-Id: Iae42c849d3557be3e3b77c3af6f3993347ba0b6c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/156142
Reviewed-by: Johnni Winther <johnniwinther@google.com>
Commit-Queue: Mayank Patke <fishythefish@google.com>
diff --git a/pkg/compiler/lib/src/kernel/dart2js_target.dart b/pkg/compiler/lib/src/kernel/dart2js_target.dart
index c6aa102..891c462 100644
--- a/pkg/compiler/lib/src/kernel/dart2js_target.dart
+++ b/pkg/compiler/lib/src/kernel/dart2js_target.dart
@@ -127,7 +127,7 @@
       name = name.substring(4);
     } else if (name.startsWith('set:')) {
       kind = invocationMirrorSetterKind;
-      name = name.substring(4) + '=';
+      name = name.substring(4);
     } else {
       kind = invocationMirrorMethodKind;
     }
diff --git a/pkg/dev_compiler/lib/src/kernel/target.dart b/pkg/dev_compiler/lib/src/kernel/target.dart
index 6d31716..33e19e8 100644
--- a/pkg/dev_compiler/lib/src/kernel/target.dart
+++ b/pkg/dev_compiler/lib/src/kernel/target.dart
@@ -186,10 +186,8 @@
       return createInvocation('getter', [SymbolLiteral(name.substring(4))]);
     }
     if (name.startsWith('set:')) {
-      return createInvocation('setter', [
-        SymbolLiteral(name.substring(4) + '='),
-        arguments.positional.single
-      ]);
+      return createInvocation('setter',
+          [SymbolLiteral(name.substring(4)), arguments.positional.single]);
     }
     var ctorArgs = <Expression>[
       SymbolLiteral(name),
diff --git a/pkg/front_end/lib/src/fasta/builder/class_builder.dart b/pkg/front_end/lib/src/fasta/builder/class_builder.dart
index 3dc2b49..7a7f258 100644
--- a/pkg/front_end/lib/src/fasta/builder/class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/class_builder.dart
@@ -857,10 +857,12 @@
       Member noSuchMethodInterface, KernelTarget target, Procedure procedure) {
     String prefix =
         procedure.isGetter ? 'get:' : procedure.isSetter ? 'set:' : '';
+    String invocationName = prefix + procedure.name.name;
+    if (procedure.isSetter) invocationName += '=';
     Expression invocation = target.backendTarget.instantiateInvocation(
         target.loader.coreTypes,
         new ThisExpression(),
-        prefix + procedure.name.name,
+        invocationName,
         new Arguments.forwarded(procedure.function, library.library),
         procedure.fileOffset,
         /*isSuper=*/ false);
diff --git a/pkg/front_end/lib/src/fasta/source/source_loader.dart b/pkg/front_end/lib/src/fasta/source/source_loader.dart
index 0d67f5f..6376960 100644
--- a/pkg/front_end/lib/src/fasta/source/source_loader.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_loader.dart
@@ -1204,12 +1204,6 @@
     }
   }
 
-  Expression instantiateInvocation(Expression receiver, String name,
-      Arguments arguments, int offset, bool isSuper) {
-    return target.backendTarget.instantiateInvocation(
-        coreTypes, receiver, name, arguments, offset, isSuper);
-  }
-
   Expression instantiateNoSuchMethodError(
       Expression receiver, String name, Arguments arguments, int offset,
       {bool isMethod: false,
diff --git a/pkg/kernel/lib/transformations/mixin_full_resolution.dart b/pkg/kernel/lib/transformations/mixin_full_resolution.dart
index 15e0289..314803a 100644
--- a/pkg/kernel/lib/transformations/mixin_full_resolution.dart
+++ b/pkg/kernel/lib/transformations/mixin_full_resolution.dart
@@ -325,7 +325,7 @@
         hierarchy.getDispatchTarget(lookupClass, new Name("noSuchMethod"));
     String methodNameUsed = (isGetter)
         ? "get:$methodName"
-        : (isSetter) ? "set:$methodName" : methodName;
+        : (isSetter) ? "set:$methodName=" : methodName;
     if (noSuchMethod != null &&
         noSuchMethod.function.positionalParameters.length == 1 &&
         noSuchMethod.function.namedParameters.isEmpty) {
diff --git a/pkg/vm/lib/target/vm.dart b/pkg/vm/lib/target/vm.dart
index 8bcbb48..82af071 100644
--- a/pkg/vm/lib/target/vm.dart
+++ b/pkg/vm/lib/target/vm.dart
@@ -233,7 +233,7 @@
     bool isGetter = false, isSetter = false, isMethod = false;
     if (name.startsWith("set:")) {
       isSetter = true;
-      name = name.substring(4) + "=";
+      name = name.substring(4);
     } else if (name.startsWith("get:")) {
       isGetter = true;
       name = name.substring(4);