Skip to content

Commit 5d70261

Browse files
chloestefantsovaCommit Queue
authored andcommitted
[cfe] Enable setter/getter pairs with mismatching types
The new functionality is guided by the flag 'getter-setter-error'. Part of #58579 Change-Id: I540e1ac67d1a4fb244e57981311c0b56155050fc Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/396821 Reviewed-by: Johnni Winther <[email protected]> Commit-Queue: Chloe Stefantsova <[email protected]>
1 parent 681a598 commit 5d70261

18 files changed

+159
-9
lines changed

pkg/front_end/lib/src/kernel/hierarchy/members_node.dart

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -939,12 +939,14 @@ class ClassMembersNodeBuilder extends MembersNodeBuilder {
939939
/// not a valid getter/setter in `Class` because the type of the getter
940940
/// `Super.property2` is _not_ a subtype of the setter
941941
/// `Mixin.property1`.
942-
_membersBuilder.registerGetterSetterCheck(
943-
new DelayedClassGetterSetterCheck(
944-
classBuilder as SourceClassBuilder,
945-
name,
946-
interfaceGetable,
947-
interfaceSetable));
942+
SourceClassBuilder sourceClassBuilder =
943+
classBuilder as SourceClassBuilder;
944+
if (!sourceClassBuilder
945+
.libraryBuilder.libraryFeatures.getterSetterError.isEnabled) {
946+
_membersBuilder.registerGetterSetterCheck(
947+
new DelayedClassGetterSetterCheck(sourceClassBuilder, name,
948+
interfaceGetable, interfaceSetable));
949+
}
948950
}
949951
}
950952
overrides.collectOverrides(

pkg/front_end/lib/src/source/source_library_builder.dart

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1164,9 +1164,12 @@ class SourceLibraryBuilder extends LibraryBuilderImpl {
11641164
setterType = setterBuilder.procedure.setterType;
11651165
}
11661166

1167-
if (getterType is InvalidType || setterType is InvalidType) {
1168-
// Don't report a problem as something else is wrong that has already
1169-
// been reported.
1167+
if (libraryFeatures.getterSetterError.isEnabled ||
1168+
getterType is InvalidType ||
1169+
setterType is InvalidType) {
1170+
// Don't report a problem because the it isn't considered a problem in the
1171+
// current Dart version or because something else is wrong that has
1172+
// already been reported.
11701173
} else {
11711174
bool isValid = typeEnvironment.isSubtypeOf(
11721175
getterType, setterType, SubtypeCheckMode.withNullabilities);
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file
2+
// for details. All rights reserved. Use of this source code is governed by a
3+
// BSD-style license that can be found in the LICENSE file.
4+
5+
// See https://github.com/dart-lang/language/issues/2809.
6+
7+
class A {
8+
int get x => 42;
9+
set x(String _) {}
10+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
library;
2+
import self as self;
3+
import "dart:core" as core;
4+
5+
class A extends core::Object {
6+
synthetic constructor •() → self::A
7+
: super core::Object::•()
8+
;
9+
get x() → core::int
10+
return 42;
11+
set x(wildcard core::String _#wc0#formal) → void {}
12+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
library;
2+
import self as self;
3+
import "dart:core" as core;
4+
5+
class A extends core::Object {
6+
synthetic constructor •() → self::A
7+
: super core::Object::•()
8+
;
9+
get x() → core::int
10+
return 42;
11+
set x(wildcard core::String _#wc0#formal) → void {}
12+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
library;
2+
import self as self;
3+
import "dart:core" as core;
4+
5+
class A extends core::Object {
6+
synthetic constructor •() → self::A
7+
;
8+
get x() → core::int
9+
;
10+
set x(wildcard core::String _#wc0#formal) → void
11+
;
12+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
library;
2+
import self as self;
3+
import "dart:core" as core;
4+
5+
class A extends core::Object {
6+
synthetic constructor •() → self::A
7+
: super core::Object::•()
8+
;
9+
get x() → core::int
10+
return 42;
11+
set x(wildcard core::String _#wc0#formal) → void {}
12+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
class A {
2+
int get x => 42;
3+
set x(String _) {}
4+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
class A {
2+
int get x => 42;
3+
set x(String _) {}
4+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
--enable-experiment=getter-setter-error

0 commit comments

Comments
 (0)