| // Copyright (c) 2019, 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. |
| |
| class B { |
| final int x; |
| |
| B(this.x); |
| } |
| |
| class C extends B { |
| late final y = x + 1; |
| |
| C(int x) : super(x); |
| |
| method() => x; |
| } |
| |
| int? lateTopLevelField1Init; |
| int initLateTopLevelField1(int value) { |
| return lateTopLevelField1Init = value; |
| } |
| |
| late final int lateTopLevelField1 = initLateTopLevelField1(123); |
| |
| class Class<T> { |
| static int? lateStaticField1Init; |
| static int initLateStaticField1(int value) { |
| return lateStaticField1Init = value; |
| } |
| |
| static late final int lateStaticField1 = initLateStaticField1(87); |
| |
| static int? lateStaticField2Init; |
| static int initLateStaticField2(int value) { |
| return lateStaticField2Init = value; |
| } |
| |
| static late final int lateStaticField2 = initLateStaticField2(42); |
| |
| static staticMethod() { |
| expect(null, lateStaticField2Init); |
| expect(42, lateStaticField2); |
| expect(42, lateStaticField2Init); |
| } |
| |
| int? lateInstanceFieldInit; |
| int initLateInstanceField(int value) { |
| return lateInstanceFieldInit = value; |
| } |
| |
| late final int lateInstanceField = initLateInstanceField(16); |
| |
| T? lateGenericFieldInit; |
| T initLateGenericField(T value) { |
| return lateGenericFieldInit = value; |
| } |
| |
| final T field; |
| late final T lateGenericField = initLateGenericField(field); |
| |
| Class(this.field); |
| |
| instanceMethod() { |
| expect(null, lateInstanceFieldInit); |
| expect(16, lateInstanceField); |
| expect(16, lateInstanceFieldInit); |
| |
| expect(null, lateGenericFieldInit); |
| expect(field, lateGenericField); |
| expect(field, lateGenericFieldInit); |
| } |
| } |
| |
| extension Extension<T> on Class<T> { |
| static int? lateExtensionField1Init; |
| static int initLateExtensionField1(int value) { |
| return lateExtensionField1Init = value; |
| } |
| |
| static late final int lateExtensionField1 = initLateExtensionField1(87); |
| |
| static int? lateExtensionField2Init; |
| static int initLateExtensionField2(int value) { |
| return lateExtensionField2Init = value; |
| } |
| |
| static late final int lateExtensionField2 = initLateExtensionField2(42); |
| |
| static staticMethod() { |
| expect(null, lateExtensionField2Init); |
| expect(42, lateExtensionField2); |
| expect(42, lateExtensionField2Init); |
| } |
| } |
| |
| main() { |
| expect(null, lateTopLevelField1Init); |
| expect(123, lateTopLevelField1); |
| expect(123, lateTopLevelField1Init); |
| |
| expect(null, Class.lateStaticField1Init); |
| expect(87, Class.lateStaticField1); |
| expect(87, Class.lateStaticField1Init); |
| |
| Class.staticMethod(); |
| new Class<int>(0).instanceMethod(); |
| |
| expect(null, Extension.lateExtensionField1Init); |
| expect(87, Extension.lateExtensionField1); |
| expect(87, Extension.lateExtensionField1Init); |
| |
| Extension.staticMethod(); |
| expect(2, C(1).y); |
| } |
| |
| expect(expected, actual) { |
| if (expected != actual) throw 'Expected $expected, actual $actual'; |
| } |