| // 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 mixin 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; | |
| } |