library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd/late.dart:40:5: Error: Can't assign to the final variable 'lateFinalVariableWithInit'.
//     lateFinalVariableWithInit = 0;
//     ^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/late.dart:44:5: Error: Setter not found: 'lateFinalStaticFieldWithInit'.
//     lateFinalStaticFieldWithInit = 0;
//     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/late.dart:42:5: Error: The setter 'lateFinalInstanceFieldWithInit' isn't defined for the class 'Class'.
//  - 'Class' is from 'pkg/front_end/testcases/nnbd/late.dart'.
// Try correcting the name to the name of an existing setter, or defining a setter or field named 'lateFinalInstanceFieldWithInit'.
//     lateFinalInstanceFieldWithInit = 0;
//     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/late.dart:63:3: Error: Setter not found: 'lateFinalTopLevelFieldWithInit'.
//   lateFinalTopLevelFieldWithInit = 0;
//   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/late.dart:67:9: Error: Setter not found: 'lateFinalStaticFieldWithInit'.
//   Class.lateFinalStaticFieldWithInit = 0;
//         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/late.dart:65:5: Error: The setter 'lateFinalInstanceFieldWithInit' isn't defined for the class 'Class'.
//  - 'Class' is from 'pkg/front_end/testcases/nnbd/late.dart'.
// Try correcting the name to the name of an existing setter, or defining a setter or field named 'lateFinalInstanceFieldWithInit'.
//   c.lateFinalInstanceFieldWithInit = 0;
//     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
import self as self;
import "dart:core" as core;

class Class extends core::Object {
  late field core::int lateInstanceField;
  late final [setter] field core::int lateFinalInstanceField1;
  late final [setter] field core::int lateFinalInstanceField2;
  late final field core::int lateFinalInstanceFieldWithInit = 0;
  late field self::Class lateInstanceFieldThis = this;
  late final field self::Class lateFinalInstanceFieldThis = this;
  late static field core::int lateStaticField;
  late static final [setter] field core::int lateFinalStaticField1;
  late static final [setter] field core::int lateFinalStaticField2;
  late static final field core::int lateFinalStaticFieldWithInit = 0;
  synthetic constructor •() → self::Class
    : super core::Object::•()
    ;
  method method() → dynamic {
    late core::int lateVariable;
    late final core::int lateFinalVariable;
    late final core::int lateFinalVariableWithInit = 0;
    lateVariable = 0;
    lateFinalVariable = 0;
    this.{self::Class::lateInstanceField} = 0;
    this.{self::Class::lateFinalInstanceField1} = 0;
    self::Class::lateStaticField = 0;
    self::Class::lateFinalStaticField1 = 0;
  }
  method methodWithErrors() → dynamic {
    late final core::int lateFinalVariableWithInit = 0;
    invalid-expression "pkg/front_end/testcases/nnbd/late.dart:40:5: Error: Can't assign to the final variable 'lateFinalVariableWithInit'.
    lateFinalVariableWithInit = 0;
    ^^^^^^^^^^^^^^^^^^^^^^^^^";
    invalid-expression "pkg/front_end/testcases/nnbd/late.dart:42:5: Error: The setter 'lateFinalInstanceFieldWithInit' isn't defined for the class 'Class'.
 - 'Class' is from 'pkg/front_end/testcases/nnbd/late.dart'.
Try correcting the name to the name of an existing setter, or defining a setter or field named 'lateFinalInstanceFieldWithInit'.
    lateFinalInstanceFieldWithInit = 0;
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in this{<unresolved>}.lateFinalInstanceFieldWithInit = 0;
    invalid-expression "pkg/front_end/testcases/nnbd/late.dart:44:5: Error: Setter not found: 'lateFinalStaticFieldWithInit'.
    lateFinalStaticFieldWithInit = 0;
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
  }
}
late static field core::int lateTopLevelField;
late static final [setter] field core::int lateFinalTopLevelField;
late static final field core::int lateFinalTopLevelFieldWithInit = 0;
static method main() → dynamic {}
static method noErrors() → dynamic {
  self::lateTopLevelField = 0;
  self::lateFinalTopLevelField = 0;
  self::Class c1 = new self::Class::•();
  c1.{self::Class::method}(){() → dynamic};
  self::Class c2 = new self::Class::•();
  c2.{self::Class::lateInstanceField} = 0;
  c2.{self::Class::lateFinalInstanceField2} = 0;
  self::Class::lateStaticField = 0;
  self::Class::lateFinalStaticField2 = 0;
}
static method errors() → dynamic {
  invalid-expression "pkg/front_end/testcases/nnbd/late.dart:63:3: Error: Setter not found: 'lateFinalTopLevelFieldWithInit'.
  lateFinalTopLevelFieldWithInit = 0;
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
  self::Class c = new self::Class::•();
  invalid-expression "pkg/front_end/testcases/nnbd/late.dart:65:5: Error: The setter 'lateFinalInstanceFieldWithInit' isn't defined for the class 'Class'.
 - 'Class' is from 'pkg/front_end/testcases/nnbd/late.dart'.
Try correcting the name to the name of an existing setter, or defining a setter or field named 'lateFinalInstanceFieldWithInit'.
  c.lateFinalInstanceFieldWithInit = 0;
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.lateFinalInstanceFieldWithInit = 0;
  c.{self::Class::methodWithErrors}(){() → dynamic};
  invalid-expression "pkg/front_end/testcases/nnbd/late.dart:67:9: Error: Setter not found: 'lateFinalStaticFieldWithInit'.
  Class.lateFinalStaticFieldWithInit = 0;
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
}
