[analyzer] fix method name for `concrete_class_with_abstract_member`
Fixes #49334
Change-Id: Idd47028064e4c98d693e7b9d831322a2c6c628ad
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/249614
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_into_block_body.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_into_block_body.dart
index 61d60b6..c8e9c08 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_into_block_body.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_into_block_body.dart
@@ -61,7 +61,7 @@
var functionElement = _getFunctionElement(body.parent);
if (functionElement == null) return null;
- var lines = ['// TODO: implement ${functionElement.name}'];
+ var lines = ['// TODO: implement ${functionElement.displayName}'];
var returnValueType = functionElement.returnType;
if (!returnValueType.isVoid) {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/convert_into_block_body_test.dart b/pkg/analysis_server/test/src/services/correction/fix/convert_into_block_body_test.dart
index a9904be..d429ee6 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/convert_into_block_body_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/convert_into_block_body_test.dart
@@ -65,7 +65,7 @@
enum E {
v;
set s(int _) {
- // TODO: implement s=
+ // TODO: implement s
}
}
''');
diff --git a/pkg/analyzer/lib/src/error/inheritance_override.dart b/pkg/analyzer/lib/src/error/inheritance_override.dart
index 5d239db..e0deb86 100644
--- a/pkg/analyzer/lib/src/error/inheritance_override.dart
+++ b/pkg/analyzer/lib/src/error/inheritance_override.dart
@@ -749,14 +749,15 @@
/// because the class itself defines an abstract method with this [name],
/// report the more specific error, and return `true`.
bool _reportConcreteClassWithAbstractMember(String name) {
- bool checkMemberNameCombo(ClassMember member, String memberName) {
+ bool checkMemberNameCombo(
+ ClassMember member, String memberName, String displayName) {
if (memberName == name) {
reporter.reportErrorForNode(
classElement.isEnum
? CompileTimeErrorCode.ENUM_WITH_ABSTRACT_MEMBER
: CompileTimeErrorCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER,
member,
- [name, classElement.name],
+ [displayName, classElement.name],
);
return true;
} else {
@@ -766,18 +767,18 @@
for (var member in members) {
if (member is MethodDeclaration) {
- var name2 = member.name.name;
+ var displayName = member.name.name;
+ var name2 = displayName;
if (member.isSetter) {
name2 += '=';
}
- if (checkMemberNameCombo(member, name2)) return true;
+ if (checkMemberNameCombo(member, name2, displayName)) return true;
} else if (member is FieldDeclaration) {
for (var variableDeclaration in member.fields.variables) {
var name2 = variableDeclaration.name.name;
- if (checkMemberNameCombo(member, name2)) return true;
+ if (checkMemberNameCombo(member, name2, name2)) return true;
if (!variableDeclaration.isFinal) {
- name2 += '=';
- if (checkMemberNameCombo(member, name2)) return true;
+ if (checkMemberNameCombo(member, '$name2=', name2)) return true;
}
}
}
diff --git a/pkg/analyzer/test/src/diagnostics/concrete_class_with_abstract_member_test.dart b/pkg/analyzer/test/src/diagnostics/concrete_class_with_abstract_member_test.dart
index d81ddad..684d8d8 100644
--- a/pkg/analyzer/test/src/diagnostics/concrete_class_with_abstract_member_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/concrete_class_with_abstract_member_test.dart
@@ -25,8 +25,6 @@
''', [
error(CompileTimeErrorCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER, 12, 16,
text: "'x' must have a method body because 'A' isn't abstract."),
- error(CompileTimeErrorCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER, 12, 16,
- text: "'x=' must have a method body because 'A' isn't abstract."),
]);
}
@@ -56,6 +54,17 @@
}
''');
}
+
+ test_setter() async {
+ await assertErrorsInCode('''
+class A {
+ set s(int i);
+}
+''', [
+ error(CompileTimeErrorCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER, 12, 13,
+ text: "'s' must have a method body because 'A' isn't abstract."),
+ ]);
+ }
}
mixin ConcreteClassWithAbstractMemberTestCases on PubPackageResolutionTest {