// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. // Test that it is an error for a class with no generative constructors to // have a final instance variable without an initializing expression, except // if it is `abstract` or `external`. The latter also holds in a class with // generative constructors. // Has factory, hence no default, hence no generative constructors. abstract class A { final dynamic n; // ^ // [analyzer] COMPILE_TIME_ERROR.FINAL_NOT_INITIALIZED // [cfe] Final field 'n' is not initialized. // Uninitialized, but no errors. abstract final int x1; abstract final int? x2; external final String x3; external final String? x4; factory A() = B; } class B implements A { dynamic get n => 1; int get x1 => 1; int? get x2 => null; String get x3 => ""; String? get x4 => null; } class C = Object with A; // ^ // [analyzer] COMPILE_TIME_ERROR.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER // [cfe] The non-abstract class 'C' is missing implementations for these members: // Has a generative constructor: default. abstract class D { // Uninitialized, but no errors. abstract final int x1; abstract final int? x2; external final String x3; external final String? x4; } void main() { A(); C(); var _ = D; }