Issue 45467. A setter in lexical scope shadows inherited getter.
Bug: https://github.com/dart-lang/sdk/issues/45467
Change-Id: I1c7c67fcc61f9cc2661ba4a2d73da9634a285d41
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/196800
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analyzer/lib/src/dart/resolver/lexical_lookup.dart b/pkg/analyzer/lib/src/dart/resolver/lexical_lookup.dart
index 63bc1cf..542fd5e 100644
--- a/pkg/analyzer/lib/src/dart/resolver/lexical_lookup.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/lexical_lookup.dart
@@ -30,7 +30,7 @@
requested: _resolver.toLegacyElement(scopeSetter),
);
}
- if (!scopeGetter!.isInstanceMember) {
+ if (scopeGetter != null && !scopeGetter.isInstanceMember) {
return LexicalLookupResult(
recovery: _resolver.toLegacyElement(scopeGetter),
);
@@ -41,6 +41,11 @@
requested: _resolver.toLegacyElement(scopeGetter),
);
}
+ if (scopeSetter != null && !scopeSetter.isInstanceMember) {
+ return LexicalLookupResult(
+ recovery: _resolver.toLegacyElement(scopeSetter),
+ );
+ }
}
}
diff --git a/pkg/analyzer/test/src/diagnostics/assignment_to_final_test.dart b/pkg/analyzer/test/src/diagnostics/assignment_to_final_test.dart
index 0e78785..d45f72d 100644
--- a/pkg/analyzer/test/src/diagnostics/assignment_to_final_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/assignment_to_final_test.dart
@@ -52,6 +52,24 @@
]);
}
+ test_simpleIdentifier_inheritedSetter_shadowedBy_topLevelGetter() async {
+ await assertErrorsInCode('''
+class A {
+ void set foo(int _) {}
+}
+
+int get foo => 0;
+
+class B extends A {
+ void bar() {
+ foo = 0;
+ }
+}
+''', [
+ error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 96, 3),
+ ]);
+ }
+
test_simpleIdentifier_topLevelGetter() async {
await assertErrorsInCode('''
int get x => 0;
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_identifier_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_identifier_test.dart
index 1c584a0..69cb215 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_identifier_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_identifier_test.dart
@@ -133,6 +133,24 @@
]);
}
+ test_inheritedGetter_shadowedBy_topLevelSetter() async {
+ await assertErrorsInCode('''
+class A {
+ int get foo => 0;
+}
+
+void set foo(int _) {}
+
+class B extends A {
+ void bar() {
+ foo;
+ }
+}
+''', [
+ error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 96, 3),
+ ]);
+ }
+
test_initializer() async {
await assertErrorsInCode('''
var a = b;