// 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.

/*member: _#topLevelNonNullableWithoutInitializer:lateField*/
/*member: topLevelNonNullableWithoutInitializer:lateFieldGetter*/
/*member: topLevelNonNullableWithoutInitializer=:lateFieldSetter*/
late int topLevelNonNullableWithoutInitializer;
/*member: _#finalTopLevelNonNullableWithoutInitializer:lateField*/
/*member: finalTopLevelNonNullableWithoutInitializer:lateFieldGetter*/
/*member: finalTopLevelNonNullableWithoutInitializer=:lateFieldSetter*/
late final int finalTopLevelNonNullableWithoutInitializer;
/*member: _#topLevelNullableWithoutInitializer:lateField*/
/*member: _#topLevelNullableWithoutInitializer#isSet:lateIsSetField*/
/*member: topLevelNullableWithoutInitializer:lateFieldGetter*/
/*member: topLevelNullableWithoutInitializer=:lateFieldSetter*/
late int? topLevelNullableWithoutInitializer;
/*member: _#finalTopLevelNullableWithoutInitializer:lateField*/
/*member: _#finalTopLevelNullableWithoutInitializer#isSet:lateIsSetField*/
/*member: finalTopLevelNullableWithoutInitializer:lateFieldGetter*/
/*member: finalTopLevelNullableWithoutInitializer=:lateFieldSetter*/
late final int? finalTopLevelNullableWithoutInitializer;
/*member: _#topLevelNonNullableWithInitializer:lateField*/
/*member: topLevelNonNullableWithInitializer:lateFieldGetter*/
/*member: topLevelNonNullableWithInitializer=:lateFieldSetter*/
late int topLevelNonNullableWithInitializer = 0;
/*member: _#finalTopLevelNonNullableWithInitializer:lateField*/
/*member: finalTopLevelNonNullableWithInitializer:lateFieldGetter*/
late final int finalTopLevelNonNullableWithInitializer = 0;
/*member: _#topLevelNullableWithInitializer:lateField*/
/*member: _#topLevelNullableWithInitializer#isSet:lateIsSetField*/
/*member: topLevelNullableWithInitializer:lateFieldGetter*/
/*member: topLevelNullableWithInitializer=:lateFieldSetter*/
late int? topLevelNullableWithInitializer = 0;
/*member: _#finalTopLevelNullableWithInitializer:lateField*/
/*member: _#finalTopLevelNullableWithInitializer#isSet:lateIsSetField*/
/*member: finalTopLevelNullableWithInitializer:lateFieldGetter*/
late final int? finalTopLevelNullableWithInitializer = 0;

class Class {
  /*member: Class._#Class#instanceNonNullableWithoutInitializer:lateField*/
  /*member: Class.instanceNonNullableWithoutInitializer:lateFieldGetter*/
  /*member: Class.instanceNonNullableWithoutInitializer=:lateFieldSetter*/
  late int instanceNonNullableWithoutInitializer;
  /*member: Class._#Class#finalInstanceNonNullableWithoutInitializer:lateField*/
  /*member: Class.finalInstanceNonNullableWithoutInitializer:lateFieldGetter*/
  /*member: Class.finalInstanceNonNullableWithoutInitializer=:lateFieldSetter*/
  late final int finalInstanceNonNullableWithoutInitializer;
  /*member: Class._#Class#instanceNullableWithoutInitializer:lateField*/
  /*member: Class._#Class#instanceNullableWithoutInitializer#isSet:lateIsSetField*/
  /*member: Class.instanceNullableWithoutInitializer:lateFieldGetter*/
  /*member: Class.instanceNullableWithoutInitializer=:lateFieldSetter*/
  late int? instanceNullableWithoutInitializer;
  /*member: Class._#Class#finalInstanceNullableWithoutInitializer:lateField*/
  /*member: Class._#Class#finalInstanceNullableWithoutInitializer#isSet:lateIsSetField*/
  /*member: Class.finalInstanceNullableWithoutInitializer:lateFieldGetter*/
  /*member: Class.finalInstanceNullableWithoutInitializer=:lateFieldSetter*/
  late final int? finalInstanceNullableWithoutInitializer;
  /*member: Class._#Class#instanceNonNullableWithInitializer:lateField*/
  /*member: Class.instanceNonNullableWithInitializer:lateFieldGetter*/
  /*member: Class.instanceNonNullableWithInitializer=:lateFieldSetter*/
  late int instanceNonNullableWithInitializer = 0;
  /*member: Class._#Class#finalInstanceNonNullableWithInitializer:lateField*/
  /*member: Class.finalInstanceNonNullableWithInitializer:lateFieldGetter*/
  late final int finalInstanceNonNullableWithInitializer = 0;
  /*member: Class._#Class#instanceNullableWithInitializer:lateField*/
  /*member: Class._#Class#instanceNullableWithInitializer#isSet:lateIsSetField*/
  /*member: Class.instanceNullableWithInitializer:lateFieldGetter*/
  /*member: Class.instanceNullableWithInitializer=:lateFieldSetter*/
  late int? instanceNullableWithInitializer = 0;
  /*member: Class._#Class#finalInstanceNullableWithInitializer:lateField*/
  /*member: Class._#Class#finalInstanceNullableWithInitializer#isSet:lateIsSetField*/
  /*member: Class.finalInstanceNullableWithInitializer:lateFieldGetter*/
  late final int? finalInstanceNullableWithInitializer = 0;

  /*member: Class._#staticNonNullableWithoutInitializer:lateField*/
  /*member: Class.staticNonNullableWithoutInitializer:lateFieldGetter*/
  /*member: Class.staticNonNullableWithoutInitializer=:lateFieldSetter*/
  static late int staticNonNullableWithoutInitializer;
  /*member: Class._#finalStaticNonNullableWithoutInitializer:lateField*/
  /*member: Class.finalStaticNonNullableWithoutInitializer:lateFieldGetter*/
  /*member: Class.finalStaticNonNullableWithoutInitializer=:lateFieldSetter*/
  static late final int finalStaticNonNullableWithoutInitializer;
  /*member: Class._#staticNullableWithoutInitializer:lateField*/
  /*member: Class._#staticNullableWithoutInitializer#isSet:lateIsSetField*/
  /*member: Class.staticNullableWithoutInitializer:lateFieldGetter*/
  /*member: Class.staticNullableWithoutInitializer=:lateFieldSetter*/
  static late int? staticNullableWithoutInitializer;
  /*member: Class._#finalStaticNullableWithoutInitializer:lateField*/
  /*member: Class._#finalStaticNullableWithoutInitializer#isSet:lateIsSetField*/
  /*member: Class.finalStaticNullableWithoutInitializer:lateFieldGetter*/
  /*member: Class.finalStaticNullableWithoutInitializer=:lateFieldSetter*/
  static late final int? finalStaticNullableWithoutInitializer;
  /*member: Class._#staticNonNullableWithInitializer:lateField*/
  /*member: Class.staticNonNullableWithInitializer:lateFieldGetter*/
  /*member: Class.staticNonNullableWithInitializer=:lateFieldSetter*/
  static late int staticNonNullableWithInitializer = 0;
  /*member: Class._#finalStaticNonNullableWithInitializer:lateField*/
  /*member: Class.finalStaticNonNullableWithInitializer:lateFieldGetter*/
  static late final int finalStaticNonNullableWithInitializer = 0;
  /*member: Class._#staticNullableWithInitializer:lateField*/
  /*member: Class._#staticNullableWithInitializer#isSet:lateIsSetField*/
  /*member: Class.staticNullableWithInitializer:lateFieldGetter*/
  /*member: Class.staticNullableWithInitializer=:lateFieldSetter*/
  static late int? staticNullableWithInitializer = 0;
  /*member: Class._#finalStaticNullableWithInitializer:lateField*/
  /*member: Class._#finalStaticNullableWithInitializer#isSet:lateIsSetField*/
  /*member: Class.finalStaticNullableWithInitializer:lateFieldGetter*/
  static late final int? finalStaticNullableWithInitializer = 0;
}
