[analyzer/cfe] Update abstract sealed error message.

State more explicitly that sealed classes are abstract and lead the
user to a better fix with the error message.

Bug: https://github.com/dart-lang/sdk/issues/52073
Change-Id: Id24c6cb187ee5497ca2819f930c48ff5aa8d07fc
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/296025
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Kallen Tu <kallentu@google.com>
This commit is contained in:
Kallen Tu 2023-04-20 19:54:30 +00:00 committed by Commit Queue
parent 9070c7baf1
commit 199feac353
11 changed files with 35 additions and 33 deletions

View file

@ -151,8 +151,8 @@ const MessageCode messageAbstractSealedClass = const MessageCode(
"AbstractSealedClass",
index: 132,
problemMessage:
r"""A class can't be declared both 'sealed' and 'abstract'.""",
correctionMessage: r"""Try removing the 'abstract' or 'sealed' keyword.""");
r"""A 'sealed' class can't be marked 'abstract' because it's already implicitly abstract.""",
correctionMessage: r"""Try removing the 'abstract' keyword.""");
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
const Code<Null> codeAbstractStaticField = messageAbstractStaticField;

View file

@ -208,8 +208,9 @@ class ParserErrorCode extends ErrorCode {
static const ParserErrorCode ABSTRACT_SEALED_CLASS = ParserErrorCode(
'ABSTRACT_SEALED_CLASS',
"A class can't be declared both 'sealed' and 'abstract'.",
correctionMessage: "Try removing the 'abstract' or 'sealed' keyword.",
"A 'sealed' class can't be marked 'abstract' because it's already "
"implicitly abstract.",
correctionMessage: "Try removing the 'abstract' keyword.",
hasPublishedDocs: true,
);

View file

@ -566,7 +566,8 @@ abstract class C {
### abstract_sealed_class
_A class can't be declared both 'sealed' and 'abstract'._
_A 'sealed' class can't be marked 'abstract' because it's already implicitly
abstract._
#### Description

View file

@ -962,8 +962,8 @@ AbstractLateField:
- "abstract class C {abstract late var f;}"
AbstractSealedClass:
problemMessage: "A class can't be declared both 'sealed' and 'abstract'."
correctionMessage: "Try removing the 'abstract' or 'sealed' keyword."
problemMessage: "A 'sealed' class can't be marked 'abstract' because it's already implicitly abstract."
correctionMessage: "Try removing the 'abstract' keyword."
analyzerCode: ParserErrorCode.ABSTRACT_SEALED_CLASS
index: 132
hasPublishedDocs: true

View file

@ -2,13 +2,13 @@ library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/sealed_class/sealed_abstract_class_declaration.dart:5:10: Error: A class can't be declared both 'sealed' and 'abstract'.
// Try removing the 'abstract' or 'sealed' keyword.
// pkg/front_end/testcases/sealed_class/sealed_abstract_class_declaration.dart:5:10: Error: A 'sealed' class can't be marked 'abstract' because it's already implicitly abstract.
// Try removing the 'abstract' keyword.
// abstract sealed class A {}
// ^^^^^^
//
// pkg/front_end/testcases/sealed_class/sealed_abstract_class_declaration.dart:6:1: Error: A class can't be declared both 'sealed' and 'abstract'.
// Try removing the 'abstract' or 'sealed' keyword.
// pkg/front_end/testcases/sealed_class/sealed_abstract_class_declaration.dart:6:1: Error: A 'sealed' class can't be marked 'abstract' because it's already implicitly abstract.
// Try removing the 'abstract' keyword.
// sealed abstract class A {}
// ^^^^^^
//

View file

@ -2,13 +2,13 @@ library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/sealed_class/sealed_abstract_class_declaration.dart:5:10: Error: A class can't be declared both 'sealed' and 'abstract'.
// Try removing the 'abstract' or 'sealed' keyword.
// pkg/front_end/testcases/sealed_class/sealed_abstract_class_declaration.dart:5:10: Error: A 'sealed' class can't be marked 'abstract' because it's already implicitly abstract.
// Try removing the 'abstract' keyword.
// abstract sealed class A {}
// ^^^^^^
//
// pkg/front_end/testcases/sealed_class/sealed_abstract_class_declaration.dart:6:1: Error: A class can't be declared both 'sealed' and 'abstract'.
// Try removing the 'abstract' or 'sealed' keyword.
// pkg/front_end/testcases/sealed_class/sealed_abstract_class_declaration.dart:6:1: Error: A 'sealed' class can't be marked 'abstract' because it's already implicitly abstract.
// Try removing the 'abstract' keyword.
// sealed abstract class A {}
// ^^^^^^
//

View file

@ -2,13 +2,13 @@ library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/sealed_class/sealed_abstract_class_declaration.dart:5:10: Error: A class can't be declared both 'sealed' and 'abstract'.
// Try removing the 'abstract' or 'sealed' keyword.
// pkg/front_end/testcases/sealed_class/sealed_abstract_class_declaration.dart:5:10: Error: A 'sealed' class can't be marked 'abstract' because it's already implicitly abstract.
// Try removing the 'abstract' keyword.
// abstract sealed class A {}
// ^^^^^^
//
// pkg/front_end/testcases/sealed_class/sealed_abstract_class_declaration.dart:6:1: Error: A class can't be declared both 'sealed' and 'abstract'.
// Try removing the 'abstract' or 'sealed' keyword.
// pkg/front_end/testcases/sealed_class/sealed_abstract_class_declaration.dart:6:1: Error: A 'sealed' class can't be marked 'abstract' because it's already implicitly abstract.
// Try removing the 'abstract' keyword.
// sealed abstract class A {}
// ^^^^^^
//

View file

@ -2,13 +2,13 @@ library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/sealed_class/sealed_abstract_class_declaration.dart:5:10: Error: A class can't be declared both 'sealed' and 'abstract'.
// Try removing the 'abstract' or 'sealed' keyword.
// pkg/front_end/testcases/sealed_class/sealed_abstract_class_declaration.dart:5:10: Error: A 'sealed' class can't be marked 'abstract' because it's already implicitly abstract.
// Try removing the 'abstract' keyword.
// abstract sealed class A {}
// ^^^^^^
//
// pkg/front_end/testcases/sealed_class/sealed_abstract_class_declaration.dart:6:1: Error: A class can't be declared both 'sealed' and 'abstract'.
// Try removing the 'abstract' or 'sealed' keyword.
// pkg/front_end/testcases/sealed_class/sealed_abstract_class_declaration.dart:6:1: Error: A 'sealed' class can't be marked 'abstract' because it's already implicitly abstract.
// Try removing the 'abstract' keyword.
// sealed abstract class A {}
// ^^^^^^
//

View file

@ -2,13 +2,13 @@ library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/sealed_class/sealed_abstract_class_declaration.dart:5:10: Error: A class can't be declared both 'sealed' and 'abstract'.
// Try removing the 'abstract' or 'sealed' keyword.
// pkg/front_end/testcases/sealed_class/sealed_abstract_class_declaration.dart:5:10: Error: A 'sealed' class can't be marked 'abstract' because it's already implicitly abstract.
// Try removing the 'abstract' keyword.
// abstract sealed class A {}
// ^^^^^^
//
// pkg/front_end/testcases/sealed_class/sealed_abstract_class_declaration.dart:6:1: Error: A class can't be declared both 'sealed' and 'abstract'.
// Try removing the 'abstract' or 'sealed' keyword.
// pkg/front_end/testcases/sealed_class/sealed_abstract_class_declaration.dart:6:1: Error: A 'sealed' class can't be marked 'abstract' because it's already implicitly abstract.
// Try removing the 'abstract' keyword.
// sealed abstract class A {}
// ^^^^^^
//

View file

@ -2,13 +2,13 @@ library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/sealed_class/sealed_abstract_class_declaration.dart:5:10: Error: A class can't be declared both 'sealed' and 'abstract'.
// Try removing the 'abstract' or 'sealed' keyword.
// pkg/front_end/testcases/sealed_class/sealed_abstract_class_declaration.dart:5:10: Error: A 'sealed' class can't be marked 'abstract' because it's already implicitly abstract.
// Try removing the 'abstract' keyword.
// abstract sealed class A {}
// ^^^^^^
//
// pkg/front_end/testcases/sealed_class/sealed_abstract_class_declaration.dart:6:1: Error: A class can't be declared both 'sealed' and 'abstract'.
// Try removing the 'abstract' or 'sealed' keyword.
// pkg/front_end/testcases/sealed_class/sealed_abstract_class_declaration.dart:6:1: Error: A 'sealed' class can't be marked 'abstract' because it's already implicitly abstract.
// Try removing the 'abstract' keyword.
// sealed abstract class A {}
// ^^^^^^
//

View file

@ -42,13 +42,13 @@ abstract class SealedMembers {
sealed abstract class SealedAndAbstractClass {}
// [error column 1, length 6]
// [analyzer] SYNTACTIC_ERROR.ABSTRACT_SEALED_CLASS
// [cfe] A class can't be declared both 'sealed' and 'abstract'.
// [cfe] A 'sealed' class can't be marked 'abstract' because it's already implicitly abstract.
abstract sealed class SealedAndAbstractClass2 {}
// ^^^^^^
// [analyzer] SYNTACTIC_ERROR.ABSTRACT_SEALED_CLASS
// [cfe] A class can't be declared both 'sealed' and 'abstract'.
// [cfe] A 'sealed' class can't be marked 'abstract' because it's already implicitly abstract.
sealed sealed class SealedDuplicateClass {}
// [error column 1, length 6]