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;