Augment. Allow 'static abstract' fields.

Change-Id: I42c4bbb9193c2debd3661898a8c410f76916958a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/504720
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Johnni Winther <johnniwinther@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
This commit is contained in:
Konstantin Shcheglov
2026-05-20 08:49:01 -07:00
committed by dart-scoped@luci-project-accounts.iam.gserviceaccount.com
parent a07da4d626
commit 39fcaa5d01
4 changed files with 67 additions and 24 deletions
@@ -227,17 +227,20 @@ class RemoveLexemeTest extends FixProcessorTest {
Future<void> test_abstract_static_field() async {
await resolveTestCode('''
// @dart = 3.5
abstract class A {
abstract static int? i;
}
''');
await assertHasFix('''
// @dart = 3.5
abstract class A {
static int? i;
}
''');
}
@FailingTest(reason: 'The code snippet and test name do not match')
Future<void> test_abstract_static_method() async {
await resolveTestCode('''
abstract class A {
+1 -1
View File
@@ -6046,7 +6046,7 @@ class AstBuilder extends StackListener {
assert(optional(';', endToken));
if (abstractToken != null) {
if (staticToken != null) {
if (staticToken != null && !enableAugmentations) {
handleRecoverableError(
fe_diag.abstractStaticField,
abstractToken,
@@ -3052,29 +3052,6 @@ FieldDeclaration
''');
}
void test_parseField_abstract_static() {
var parseResult = parseStringWithErrors(r'''
class C {
abstract static int? i;
}
''');
parseResult.assertErrors([error(diag.abstractStaticField, 12, 8)]);
var node = parseResult.findNode.singleClassMember;
assertParsedNodeText(node, r'''
FieldDeclaration
staticKeyword: static
abstractKeyword: abstract
fields: VariableDeclarationList
type: NamedType
name: int
question: ?
variables
VariableDeclaration
name: i
semicolon: ;
''');
}
void test_parseField_const_late() {
var parseResult = parseStringWithErrors(r'''
class C {
@@ -1407,6 +1407,69 @@ ClassDeclaration
''');
}
test_field_static_abstract() {
var parseResult = parseStringWithErrors(r'''
class A {
static abstract int? foo;
}
''');
parseResult.assertExpectedDiagnostics();
assertParsedNodeText(parseResult.findNode.singleClassDeclaration, r'''
ClassDeclaration
classKeyword: class
namePart: NameWithTypeParameters
typeName: A
body: BlockClassBody
leftBracket: {
members
FieldDeclaration
staticKeyword: static
abstractKeyword: abstract
fields: VariableDeclarationList
type: NamedType
name: int
question: ?
variables
VariableDeclaration
name: foo
semicolon: ;
rightBracket: }
''');
}
test_field_static_abstract_language305() {
var parseResult = parseStringWithErrors(r'''
// @dart = 3.5
class A {
static abstract int? foo;
// ^^^^^^^^
// [diag.abstractStaticField] Static fields can't be declared 'abstract'.
}
''');
parseResult.assertExpectedDiagnostics();
assertParsedNodeText(parseResult.findNode.singleClassDeclaration, r'''
ClassDeclaration
classKeyword: class
namePart: NameWithTypeParameters
typeName: A
body: BlockClassBody
leftBracket: {
members
FieldDeclaration
staticKeyword: static
abstractKeyword: abstract
fields: VariableDeclarationList
type: NamedType
name: int
question: ?
variables
VariableDeclaration
name: foo
semicolon: ;
rightBracket: }
''');
}
test_getter_augment() {
var parseResult = parseStringWithErrors(r'''
augment class A {