Setter with name of class is error

Fixes #34225.

Change-Id: I1efd39ad1739f49a60d724ca13d916623b9fff09
Reviewed-on: https://dart-review.googlesource.com/72841
Reviewed-by: Peter von der Ahé <ahe@google.com>
Reviewed-by: Erik Ernst <eernst@google.com>
Commit-Queue: Jens Johansen <jensj@google.com>
diff --git a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
index 014686a..407394b 100644
--- a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
@@ -475,9 +475,7 @@
     }
     bool isConstructor = declaration is ProcedureBuilder &&
         (declaration.isConstructor || declaration.isFactory);
-    if (!isConstructor &&
-        !declaration.isSetter &&
-        name == currentDeclaration.name) {
+    if (!isConstructor && name == currentDeclaration.name) {
       addCompileTimeError(
           messageMemberWithSameNameAsClass, charOffset, noLength, fileUri);
     }
diff --git a/pkg/front_end/testcases/regress/issue_30834.dart.direct.expect b/pkg/front_end/testcases/regress/issue_30834.dart.direct.expect
index de8a7cd..a07ea78 100644
--- a/pkg/front_end/testcases/regress/issue_30834.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_30834.dart.direct.expect
@@ -1,3 +1,9 @@
+// Errors:
+//
+// pkg/front_end/testcases/regress/issue_30834.dart:6:7: Error: A class member can't have the same name as the enclosing class.
+//   set A(v) {}
+//       ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/regress/issue_30834.dart.direct.transformed.expect b/pkg/front_end/testcases/regress/issue_30834.dart.direct.transformed.expect
index de8a7cd..a07ea78 100644
--- a/pkg/front_end/testcases/regress/issue_30834.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_30834.dart.direct.transformed.expect
@@ -1,3 +1,9 @@
+// Errors:
+//
+// pkg/front_end/testcases/regress/issue_30834.dart:6:7: Error: A class member can't have the same name as the enclosing class.
+//   set A(v) {}
+//       ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/regress/issue_30834.dart.strong.expect b/pkg/front_end/testcases/regress/issue_30834.dart.strong.expect
index 21d109e..729a604 100644
--- a/pkg/front_end/testcases/regress/issue_30834.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_30834.dart.strong.expect
@@ -1,3 +1,9 @@
+// Errors:
+//
+// pkg/front_end/testcases/regress/issue_30834.dart:6:7: Error: A class member can't have the same name as the enclosing class.
+//   set A(v) {}
+//       ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/regress/issue_30834.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_30834.dart.strong.transformed.expect
index 21d109e..729a604 100644
--- a/pkg/front_end/testcases/regress/issue_30834.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_30834.dart.strong.transformed.expect
@@ -1,3 +1,9 @@
+// Errors:
+//
+// pkg/front_end/testcases/regress/issue_30834.dart:6:7: Error: A class member can't have the same name as the enclosing class.
+//   set A(v) {}
+//       ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/regress/issue_34225.dart b/pkg/front_end/testcases/regress/issue_34225.dart
new file mode 100644
index 0000000..e058ee7
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_34225.dart
@@ -0,0 +1,18 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class C {
+  static set C(v) {} //# 01: compile-time error
+}
+
+class D {
+  set D(v) {} //# 02: compile-time error
+}
+
+main() {
+  var c = new C();
+  c.C = 5;
+  var d = new D();
+  d.D = 5;
+}
diff --git a/pkg/front_end/testcases/regress/issue_34225.dart.direct.expect b/pkg/front_end/testcases/regress/issue_34225.dart.direct.expect
new file mode 100644
index 0000000..6d82ff0
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_34225.dart.direct.expect
@@ -0,0 +1,37 @@
+// Errors:
+//
+// pkg/front_end/testcases/regress/issue_34225.dart:6:3: Error: Constructors can't be static.
+// Try removing the keyword 'static'.
+//   static set C(v) {} //# 01: compile-time error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/regress/issue_34225.dart:6:14: Error: A class member can't have the same name as the enclosing class.
+//   static set C(v) {} //# 01: compile-time error
+//              ^
+//
+// pkg/front_end/testcases/regress/issue_34225.dart:10:7: Error: A class member can't have the same name as the enclosing class.
+//   set D(v) {} //# 02: compile-time error
+//       ^
+
+library;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  set C(dynamic v) → dynamic {}
+}
+class D extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  set D(dynamic v) → dynamic {}
+}
+static method main() → dynamic {
+  dynamic c = new self::C::•();
+  c.C = 5;
+  dynamic d = new self::D::•();
+  d.D = 5;
+}
diff --git a/pkg/front_end/testcases/regress/issue_34225.dart.direct.transformed.expect b/pkg/front_end/testcases/regress/issue_34225.dart.direct.transformed.expect
new file mode 100644
index 0000000..6d82ff0
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_34225.dart.direct.transformed.expect
@@ -0,0 +1,37 @@
+// Errors:
+//
+// pkg/front_end/testcases/regress/issue_34225.dart:6:3: Error: Constructors can't be static.
+// Try removing the keyword 'static'.
+//   static set C(v) {} //# 01: compile-time error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/regress/issue_34225.dart:6:14: Error: A class member can't have the same name as the enclosing class.
+//   static set C(v) {} //# 01: compile-time error
+//              ^
+//
+// pkg/front_end/testcases/regress/issue_34225.dart:10:7: Error: A class member can't have the same name as the enclosing class.
+//   set D(v) {} //# 02: compile-time error
+//       ^
+
+library;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  set C(dynamic v) → dynamic {}
+}
+class D extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  set D(dynamic v) → dynamic {}
+}
+static method main() → dynamic {
+  dynamic c = new self::C::•();
+  c.C = 5;
+  dynamic d = new self::D::•();
+  d.D = 5;
+}
diff --git a/pkg/front_end/testcases/regress/issue_34225.dart.outline.expect b/pkg/front_end/testcases/regress/issue_34225.dart.outline.expect
new file mode 100644
index 0000000..e8b5fad
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_34225.dart.outline.expect
@@ -0,0 +1,18 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → void
+    ;
+  set C(dynamic v) → dynamic
+    ;
+}
+class D extends core::Object {
+  synthetic constructor •() → void
+    ;
+  set D(dynamic v) → dynamic
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/regress/issue_34225.dart.strong.expect b/pkg/front_end/testcases/regress/issue_34225.dart.strong.expect
new file mode 100644
index 0000000..94b326d
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_34225.dart.strong.expect
@@ -0,0 +1,37 @@
+// Errors:
+//
+// pkg/front_end/testcases/regress/issue_34225.dart:6:3: Error: Constructors can't be static.
+// Try removing the keyword 'static'.
+//   static set C(v) {} //# 01: compile-time error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/regress/issue_34225.dart:6:14: Error: A class member can't have the same name as the enclosing class.
+//   static set C(v) {} //# 01: compile-time error
+//              ^
+//
+// pkg/front_end/testcases/regress/issue_34225.dart:10:7: Error: A class member can't have the same name as the enclosing class.
+//   set D(v) {} //# 02: compile-time error
+//       ^
+
+library;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  set C(dynamic v) → void {}
+}
+class D extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  set D(dynamic v) → void {}
+}
+static method main() → dynamic {
+  self::C c = new self::C::•();
+  c.{self::C::C} = 5;
+  self::D d = new self::D::•();
+  d.{self::D::D} = 5;
+}
diff --git a/pkg/front_end/testcases/regress/issue_34225.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_34225.dart.strong.transformed.expect
new file mode 100644
index 0000000..94b326d
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_34225.dart.strong.transformed.expect
@@ -0,0 +1,37 @@
+// Errors:
+//
+// pkg/front_end/testcases/regress/issue_34225.dart:6:3: Error: Constructors can't be static.
+// Try removing the keyword 'static'.
+//   static set C(v) {} //# 01: compile-time error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/regress/issue_34225.dart:6:14: Error: A class member can't have the same name as the enclosing class.
+//   static set C(v) {} //# 01: compile-time error
+//              ^
+//
+// pkg/front_end/testcases/regress/issue_34225.dart:10:7: Error: A class member can't have the same name as the enclosing class.
+//   set D(v) {} //# 02: compile-time error
+//       ^
+
+library;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  set C(dynamic v) → void {}
+}
+class D extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  set D(dynamic v) → void {}
+}
+static method main() → dynamic {
+  self::C c = new self::C::•();
+  c.{self::C::C} = 5;
+  self::D d = new self::D::•();
+  d.{self::D::D} = 5;
+}
diff --git a/tests/language_2/language_2_analyzer.status b/tests/language_2/language_2_analyzer.status
index 520b638..b89f8ee 100644
--- a/tests/language_2/language_2_analyzer.status
+++ b/tests/language_2/language_2_analyzer.status
@@ -131,6 +131,7 @@
 regress_33235_16_test/03: MissingCompileTimeError
 regress_33235_19_test: CompileTimeError
 regress_33235_20_test: CompileTimeError
+regress_34225_test/02: MissingCompileTimeError # Issue #34225, #34289
 setter3_test/01: CompileTimeError # Invalid test, see https://github.com/dart-lang/sdk/issues/33837
 setter3_test/02: CompileTimeError # Invalid test, see https://github.com/dart-lang/sdk/issues/33837
 setter_override2_test/02: MissingCompileTimeError # Issue 14736
diff --git a/tests/language_2/language_2_dartdevc.status b/tests/language_2/language_2_dartdevc.status
index 440a3db..52ede30 100644
--- a/tests/language_2/language_2_dartdevc.status
+++ b/tests/language_2/language_2_dartdevc.status
@@ -158,6 +158,7 @@
 regress_33235_16_test/03: MissingCompileTimeError
 regress_33235_19_test: CompileTimeError
 regress_33235_20_test: CompileTimeError
+regress_34225_test/02: MissingCompileTimeError # Issue #34225, #34289
 setter3_test/01: CompileTimeError # Invalid test, see https://github.com/dart-lang/sdk/issues/33837
 setter3_test/02: CompileTimeError # Invalid test, see https://github.com/dart-lang/sdk/issues/33837
 setter_override2_test/02: MissingCompileTimeError # Issue 14736
diff --git a/tests/language_2/regress_34225_test.dart b/tests/language_2/regress_34225_test.dart
new file mode 100644
index 0000000..0117672
--- /dev/null
+++ b/tests/language_2/regress_34225_test.dart
@@ -0,0 +1,12 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class C {
+  static set C(v) {} //# 01: compile-time error
+  set C(v) {} //# 02: compile-time error
+}
+
+main() {
+  new C();
+}