library;
import self as self;
import "dart:core" as core;
import "infer_constraints_from_opt_in_lib.dart" as inf;
import "dart:collection" as col;

import "org-dartlang-testcase:///infer_constraints_from_opt_in_lib.dart";

abstract class A extends core::Object {
  synthetic constructor •() → self::A*
    : super core::Object::•()
    ;
  method baz(inf::B* b) → dynamic {
    b.{inf::B::foo}(b.{inf::B::bar}<core::List<core::int*>*>());
  }
  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
  abstract member-signature method toString() → core::String*; -> core::Object::toString
  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
static method main() → dynamic {
  core::List<dynamic>* local0 = <dynamic>[];
  core::List<inf::C<dynamic>*>* local1a = <inf::C<dynamic>*>[inf::field1];
  core::List<inf::C<dynamic>*>* local1b = <inf::C<dynamic>*>[inf::field2];
  core::List<inf::C<core::int*>*>* local1c = <inf::C<core::int*>*>[inf::field3];
  core::List<inf::C<core::int*>*>* local1d = <inf::C<core::int*>*>[inf::field4];
  core::List<inf::C<core::int*>*>* local1e = <inf::C<core::int*>*>[inf::field5];
  core::List<inf::C<core::int*>*>* local1f = <inf::C<core::int*>*>[inf::field6];
  core::List<core::int*>* local1g = <core::int*>[inf::field7];
  core::List<core::int*>* local1h = <core::int*>[inf::field8];
  core::List<Null>* local1i = <Null>[null];
  core::Set<inf::C<dynamic>*>* local2a = block {
    final core::Set<inf::C<dynamic>*>* #t1 = col::LinkedHashSet::•<inf::C<dynamic>*>();
    #t1.{core::Set::add}{Invariant}(inf::field1);
    #t1.{core::Set::add}{Invariant}(null);
  } =>#t1;
  core::Set<inf::C<dynamic>*>* local2b = block {
    final core::Set<inf::C<dynamic>*>* #t2 = col::LinkedHashSet::•<inf::C<dynamic>*>();
    #t2.{core::Set::add}{Invariant}(inf::field2);
    #t2.{core::Set::add}{Invariant}(null);
  } =>#t2;
  core::Set<inf::C<core::int*>*>* local2c = block {
    final core::Set<inf::C<core::int*>*>* #t3 = col::LinkedHashSet::•<inf::C<core::int*>*>();
    #t3.{core::Set::add}{Invariant}(inf::field3);
    #t3.{core::Set::add}{Invariant}(null);
  } =>#t3;
  core::Set<inf::C<core::int*>*>* local2d = block {
    final core::Set<inf::C<core::int*>*>* #t4 = col::LinkedHashSet::•<inf::C<core::int*>*>();
    #t4.{core::Set::add}{Invariant}(inf::field4);
    #t4.{core::Set::add}{Invariant}(null);
  } =>#t4;
  core::Set<inf::C<core::int*>*>* local2e = block {
    final core::Set<inf::C<core::int*>*>* #t5 = col::LinkedHashSet::•<inf::C<core::int*>*>();
    #t5.{core::Set::add}{Invariant}(inf::field5);
    #t5.{core::Set::add}{Invariant}(null);
  } =>#t5;
  core::Set<inf::C<core::int*>*>* local2f = block {
    final core::Set<inf::C<core::int*>*>* #t6 = col::LinkedHashSet::•<inf::C<core::int*>*>();
    #t6.{core::Set::add}{Invariant}(inf::field6);
    #t6.{core::Set::add}{Invariant}(null);
  } =>#t6;
  core::Set<core::int*>* local2g = block {
    final core::Set<core::int*>* #t7 = col::LinkedHashSet::•<core::int*>();
    #t7.{core::Set::add}{Invariant}(inf::field7);
    #t7.{core::Set::add}{Invariant}(null);
  } =>#t7;
  core::Set<core::int*>* local2h = block {
    final core::Set<core::int*>* #t8 = col::LinkedHashSet::•<core::int*>();
    #t8.{core::Set::add}{Invariant}(inf::field8);
    #t8.{core::Set::add}{Invariant}(null);
  } =>#t8;
  core::Set<inf::C<dynamic>*>* local3a = block {
    final core::Set<inf::C<dynamic>*>* #t9 = col::LinkedHashSet::•<inf::C<dynamic>*>();
    #t9.{core::Set::add}{Invariant}(null);
    #t9.{core::Set::add}{Invariant}(inf::field1);
  } =>#t9;
  core::Set<inf::C<dynamic>*>* local3b = block {
    final core::Set<inf::C<dynamic>*>* #t10 = col::LinkedHashSet::•<inf::C<dynamic>*>();
    #t10.{core::Set::add}{Invariant}(null);
    #t10.{core::Set::add}{Invariant}(inf::field2);
  } =>#t10;
  core::Set<inf::C<core::int*>*>* local3c = block {
    final core::Set<inf::C<core::int*>*>* #t11 = col::LinkedHashSet::•<inf::C<core::int*>*>();
    #t11.{core::Set::add}{Invariant}(null);
    #t11.{core::Set::add}{Invariant}(inf::field3);
  } =>#t11;
  core::Set<inf::C<core::int*>*>* local3d = block {
    final core::Set<inf::C<core::int*>*>* #t12 = col::LinkedHashSet::•<inf::C<core::int*>*>();
    #t12.{core::Set::add}{Invariant}(null);
    #t12.{core::Set::add}{Invariant}(inf::field4);
  } =>#t12;
  core::Set<inf::C<core::int*>*>* local3e = block {
    final core::Set<inf::C<core::int*>*>* #t13 = col::LinkedHashSet::•<inf::C<core::int*>*>();
    #t13.{core::Set::add}{Invariant}(null);
    #t13.{core::Set::add}{Invariant}(inf::field5);
  } =>#t13;
  core::Set<inf::C<core::int*>*>* local3f = block {
    final core::Set<inf::C<core::int*>*>* #t14 = col::LinkedHashSet::•<inf::C<core::int*>*>();
    #t14.{core::Set::add}{Invariant}(null);
    #t14.{core::Set::add}{Invariant}(inf::field6);
  } =>#t14;
  core::Set<core::int*>* local3g = block {
    final core::Set<core::int*>* #t15 = col::LinkedHashSet::•<core::int*>();
    #t15.{core::Set::add}{Invariant}(null);
    #t15.{core::Set::add}{Invariant}(inf::field7);
  } =>#t15;
  core::Set<core::int*>* local3h = block {
    final core::Set<core::int*>* #t16 = col::LinkedHashSet::•<core::int*>();
    #t16.{core::Set::add}{Invariant}(null);
    #t16.{core::Set::add}{Invariant}(inf::field8);
  } =>#t16;
}

library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd_mixed/infer_constraints_from_opt_in_lib.dart:11:9: Error: Field 'field5' should be initialized because its type 'C<int?>' doesn't allow null.
//  - 'C' is from 'pkg/front_end/testcases/nnbd_mixed/infer_constraints_from_opt_in_lib.dart'.
// C<int?> field5;
//         ^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/infer_constraints_from_opt_in_lib.dart:13:5: Error: Field 'field7' should be initialized because its type 'int' doesn't allow null.
// int field7;
//     ^^^^^^
//
import self as inf;
import "dart:core" as core;
import "dart:collection" as col;

class C<T extends core::Object? = dynamic> extends core::Object {
  synthetic constructor •() → inf::C<inf::C::T%>
    : super core::Object::•()
    ;
}
abstract class B extends core::Object {
  synthetic constructor •() → inf::B
    : super core::Object::•()
    ;
  abstract method bar<X extends core::List<core::int?>? = core::List<core::int?>?>() → inf::B::bar::X%;
  abstract method foo(core::List<core::int> list) → dynamic;
}
static field inf::C<dynamic> field1 = new inf::C::•<dynamic>();
static field inf::C<dynamic>? field2;
static field inf::C<core::int> field3 = new inf::C::•<core::int>();
static field inf::C<core::int>? field4;
static field inf::C<core::int?> field5;
static field inf::C<core::int?>? field6;
static field core::int field7;
static field core::int? field8;
static method method() → dynamic {
  core::List<dynamic> local0 = <dynamic>[];
  core::List<inf::C<dynamic>> local1a = <inf::C<dynamic>>[inf::field1];
  core::List<inf::C<dynamic>?> local1b = <inf::C<dynamic>?>[inf::field2];
  core::List<inf::C<core::int>> local1c = <inf::C<core::int>>[inf::field3];
  core::List<inf::C<core::int>?> local1d = <inf::C<core::int>?>[inf::field4];
  core::List<inf::C<core::int?>> local1e = <inf::C<core::int?>>[inf::field5];
  core::List<inf::C<core::int?>?> local1f = <inf::C<core::int?>?>[inf::field6];
  core::List<core::int> local1g = <core::int>[inf::field7];
  core::List<core::int?> local1h = <core::int?>[inf::field8];
  core::List<Null> local1i = <Null>[null];
  core::Set<inf::C<dynamic>?> local2a = block {
    final core::Set<inf::C<dynamic>?> #t17 = col::LinkedHashSet::•<inf::C<dynamic>?>();
    #t17.{core::Set::add}{Invariant}(inf::field1);
    #t17.{core::Set::add}{Invariant}(null);
  } =>#t17;
  core::Set<inf::C<dynamic>?> local2b = block {
    final core::Set<inf::C<dynamic>?> #t18 = col::LinkedHashSet::•<inf::C<dynamic>?>();
    #t18.{core::Set::add}{Invariant}(inf::field2);
    #t18.{core::Set::add}{Invariant}(null);
  } =>#t18;
  core::Set<inf::C<core::int>?> local2c = block {
    final core::Set<inf::C<core::int>?> #t19 = col::LinkedHashSet::•<inf::C<core::int>?>();
    #t19.{core::Set::add}{Invariant}(inf::field3);
    #t19.{core::Set::add}{Invariant}(null);
  } =>#t19;
  core::Set<inf::C<core::int>?> local2d = block {
    final core::Set<inf::C<core::int>?> #t20 = col::LinkedHashSet::•<inf::C<core::int>?>();
    #t20.{core::Set::add}{Invariant}(inf::field4);
    #t20.{core::Set::add}{Invariant}(null);
  } =>#t20;
  core::Set<inf::C<core::int?>?> local2e = block {
    final core::Set<inf::C<core::int?>?> #t21 = col::LinkedHashSet::•<inf::C<core::int?>?>();
    #t21.{core::Set::add}{Invariant}(inf::field5);
    #t21.{core::Set::add}{Invariant}(null);
  } =>#t21;
  core::Set<inf::C<core::int?>?> local2f = block {
    final core::Set<inf::C<core::int?>?> #t22 = col::LinkedHashSet::•<inf::C<core::int?>?>();
    #t22.{core::Set::add}{Invariant}(inf::field6);
    #t22.{core::Set::add}{Invariant}(null);
  } =>#t22;
  core::Set<core::int?> local2g = block {
    final core::Set<core::int?> #t23 = col::LinkedHashSet::•<core::int?>();
    #t23.{core::Set::add}{Invariant}(inf::field7);
    #t23.{core::Set::add}{Invariant}(null);
  } =>#t23;
  core::Set<core::int?> local2h = block {
    final core::Set<core::int?> #t24 = col::LinkedHashSet::•<core::int?>();
    #t24.{core::Set::add}{Invariant}(inf::field8);
    #t24.{core::Set::add}{Invariant}(null);
  } =>#t24;
  core::Set<inf::C<dynamic>?> local3a = block {
    final core::Set<inf::C<dynamic>?> #t25 = col::LinkedHashSet::•<inf::C<dynamic>?>();
    #t25.{core::Set::add}{Invariant}(null);
    #t25.{core::Set::add}{Invariant}(inf::field1);
  } =>#t25;
  core::Set<inf::C<dynamic>?> local3b = block {
    final core::Set<inf::C<dynamic>?> #t26 = col::LinkedHashSet::•<inf::C<dynamic>?>();
    #t26.{core::Set::add}{Invariant}(null);
    #t26.{core::Set::add}{Invariant}(inf::field2);
  } =>#t26;
  core::Set<inf::C<core::int>?> local3c = block {
    final core::Set<inf::C<core::int>?> #t27 = col::LinkedHashSet::•<inf::C<core::int>?>();
    #t27.{core::Set::add}{Invariant}(null);
    #t27.{core::Set::add}{Invariant}(inf::field3);
  } =>#t27;
  core::Set<inf::C<core::int>?> local3d = block {
    final core::Set<inf::C<core::int>?> #t28 = col::LinkedHashSet::•<inf::C<core::int>?>();
    #t28.{core::Set::add}{Invariant}(null);
    #t28.{core::Set::add}{Invariant}(inf::field4);
  } =>#t28;
  core::Set<inf::C<core::int?>?> local3e = block {
    final core::Set<inf::C<core::int?>?> #t29 = col::LinkedHashSet::•<inf::C<core::int?>?>();
    #t29.{core::Set::add}{Invariant}(null);
    #t29.{core::Set::add}{Invariant}(inf::field5);
  } =>#t29;
  core::Set<inf::C<core::int?>?> local3f = block {
    final core::Set<inf::C<core::int?>?> #t30 = col::LinkedHashSet::•<inf::C<core::int?>?>();
    #t30.{core::Set::add}{Invariant}(null);
    #t30.{core::Set::add}{Invariant}(inf::field6);
  } =>#t30;
  core::Set<core::int?> local3g = block {
    final core::Set<core::int?> #t31 = col::LinkedHashSet::•<core::int?>();
    #t31.{core::Set::add}{Invariant}(null);
    #t31.{core::Set::add}{Invariant}(inf::field7);
  } =>#t31;
  core::Set<core::int?> local3h = block {
    final core::Set<core::int?> #t32 = col::LinkedHashSet::•<core::int?>();
    #t32.{core::Set::add}{Invariant}(null);
    #t32.{core::Set::add}{Invariant}(inf::field8);
  } =>#t32;
}
