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();
+}