Remove error if a final field without initializer is marked as late
Change-Id: Ibc81d71bc6ec2d223583dcbcb39b2311a49eda0b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/101220
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analyzer/lib/src/generated/error_verifier.dart b/pkg/analyzer/lib/src/generated/error_verifier.dart
index f1d4d06..8eb5579 100644
--- a/pkg/analyzer/lib/src/generated/error_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/error_verifier.dart
@@ -1951,7 +1951,7 @@
List<FieldElement> notInitFinalFields = <FieldElement>[];
fieldElementsMap.forEach((FieldElement fieldElement, INIT_STATE state) {
if (state == INIT_STATE.NOT_INIT) {
- if (fieldElement.isFinal) {
+ if (fieldElement.isFinal && !fieldElement.isLate) {
notInitFinalFields.add(fieldElement);
}
}
diff --git a/pkg/analyzer/test/src/diagnostics/final_not_initialized_test.dart b/pkg/analyzer/test/src/diagnostics/final_not_initialized_test.dart
index 6a84329..28b987a 100644
--- a/pkg/analyzer/test/src/diagnostics/final_not_initialized_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/final_not_initialized_test.dart
@@ -26,7 +26,67 @@
..contextFeatures = new FeatureSet.forTesting(
sdkVersion: '2.3.0', additionalFeatures: [Feature.non_nullable]);
- test_localVariable_withoutInitializer() {
+ test_field_noConstructor_initializer() {
+ assertNoErrorsInCode('''
+class C {
+ late final f = 1;
+}
+''');
+ }
+
+ test_field_noConstructor_noInitializer() {
+ assertNoErrorsInCode('''
+class C {
+ late final f;
+}
+''');
+ }
+
+ test_field_unnamedConstructor_constructorInitializer() {
+ assertNoErrorsInCode('''
+class C {
+ late final f;
+ C() : f = 2;
+}
+''');
+ }
+
+ test_field_unnamedConstructor_fieldFormalParameter() {
+ assertNoErrorsInCode('''
+class C {
+ late final f;
+ C(this.f);
+}
+''');
+ }
+
+ test_field_unnamedConstructor_initializer() {
+ assertNoErrorsInCode('''
+class C {
+ late final f = 1;
+ C();
+}
+''');
+ }
+
+ test_field_unnamedConstructor_noInitializer() {
+ assertNoErrorsInCode('''
+class C {
+ late final f;
+ C();
+}
+''');
+ }
+
+ test_localVariable_initializer() {
+ assertNoErrorsInCode('''
+f() {
+ late final x = 1;
+}
+''');
+ }
+
+ test_localVariable_noInitializer() {
assertNoErrorsInCode('''
f() {
late final x;