Version 1.12.0-dev.3.1

Cherry-pick baf00c19199e6739bed804e1f9c022f476c5d75a to dev
diff --git a/pkg/compiler/lib/src/js_emitter/full_emitter/nsm_emitter.dart b/pkg/compiler/lib/src/js_emitter/full_emitter/nsm_emitter.dart
index 7aa34bd..cf823c1 100644
--- a/pkg/compiler/lib/src/js_emitter/full_emitter/nsm_emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/full_emitter/nsm_emitter.dart
@@ -237,8 +237,8 @@
         for (var j = 0; j < shortNames.length; j++) {
           var type = 0;
           var shortName = shortNames[j];
-          if (shortName[0] == "${namer.getterPrefix[0]}") type = 1;
-          if (shortName[0] == "${namer.setterPrefix[0]}") type = 2;
+          if (shortName.indexOf("${namer.getterPrefix}") == 0) type = 1;
+          if (shortName.indexOf("${namer.setterPrefix}") == 0) type = 2;
           // Generate call to:
           //
           //     createInvocationMirror(String name, internalName, type,
diff --git a/tests/compiler/dart2js_extra/23828_test.dart b/tests/compiler/dart2js_extra/23828_test.dart
new file mode 100644
index 0000000..b6312a3
--- /dev/null
+++ b/tests/compiler/dart2js_extra/23828_test.dart
@@ -0,0 +1,17 @@
+// Copyright (c) 2015, 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.
+
+// Regression test for http://dartbug.com/23828/
+// Used to fail when methods contain a name starting with `get`
+import 'package:expect/expect.dart';
+
+confuse(x) { return x; return x; }
+
+class MA {
+  noSuchMethod(i) => Expect.equals(i.positionalArguments.length, 1);
+}
+
+main() {
+  confuse(new MA()).getFoo('a');
+}
diff --git a/tools/VERSION b/tools/VERSION
index 6cd4df1..c04e365 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -28,4 +28,4 @@
 MINOR 12
 PATCH 0
 PRERELEASE 3
-PRERELEASE_PATCH 0
+PRERELEASE_PATCH 1