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 /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _identityHashCode() → core::int*; -> core::Object::_identityHashCode
  abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
  abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
  abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
  abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
  abstract member-signature operator /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ ==(dynamic other) → core::bool*; -> core::Object::==
  abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ hashCode() → core::int*; -> core::Object::hashCode
  abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ toString() → core::String*; -> core::Object::toString
  abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
  abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ 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<core::Null?>* local1i = <core::Null?>[null];
  core::Set<inf::C<dynamic>*>* local2a = block {
    final core::Set<inf::C<dynamic>*>* #t1 = new col::_CompactLinkedHashSet::•<inf::C<dynamic>*>();
    #t1.{core::Set::add}(inf::field1);
    #t1.{core::Set::add}(null);
  } =>#t1;
  core::Set<inf::C<dynamic>*>* local2b = block {
    final core::Set<inf::C<dynamic>*>* #t2 = new col::_CompactLinkedHashSet::•<inf::C<dynamic>*>();
    #t2.{core::Set::add}(inf::field2);
    #t2.{core::Set::add}(null);
  } =>#t2;
  core::Set<inf::C<core::int*>*>* local2c = block {
    final core::Set<inf::C<core::int*>*>* #t3 = new col::_CompactLinkedHashSet::•<inf::C<core::int*>*>();
    #t3.{core::Set::add}(inf::field3);
    #t3.{core::Set::add}(null);
  } =>#t3;
  core::Set<inf::C<core::int*>*>* local2d = block {
    final core::Set<inf::C<core::int*>*>* #t4 = new col::_CompactLinkedHashSet::•<inf::C<core::int*>*>();
    #t4.{core::Set::add}(inf::field4);
    #t4.{core::Set::add}(null);
  } =>#t4;
  core::Set<inf::C<core::int*>*>* local2e = block {
    final core::Set<inf::C<core::int*>*>* #t5 = new col::_CompactLinkedHashSet::•<inf::C<core::int*>*>();
    #t5.{core::Set::add}(inf::field5);
    #t5.{core::Set::add}(null);
  } =>#t5;
  core::Set<inf::C<core::int*>*>* local2f = block {
    final core::Set<inf::C<core::int*>*>* #t6 = new col::_CompactLinkedHashSet::•<inf::C<core::int*>*>();
    #t6.{core::Set::add}(inf::field6);
    #t6.{core::Set::add}(null);
  } =>#t6;
  core::Set<core::int*>* local2g = block {
    final core::Set<core::int*>* #t7 = new col::_CompactLinkedHashSet::•<core::int*>();
    #t7.{core::Set::add}(inf::field7);
    #t7.{core::Set::add}(null);
  } =>#t7;
  core::Set<core::int*>* local2h = block {
    final core::Set<core::int*>* #t8 = new col::_CompactLinkedHashSet::•<core::int*>();
    #t8.{core::Set::add}(inf::field8);
    #t8.{core::Set::add}(null);
  } =>#t8;
  core::Set<inf::C<dynamic>*>* local3a = block {
    final core::Set<inf::C<dynamic>*>* #t9 = new col::_CompactLinkedHashSet::•<inf::C<dynamic>*>();
    #t9.{core::Set::add}(null);
    #t9.{core::Set::add}(inf::field1);
  } =>#t9;
  core::Set<inf::C<dynamic>*>* local3b = block {
    final core::Set<inf::C<dynamic>*>* #t10 = new col::_CompactLinkedHashSet::•<inf::C<dynamic>*>();
    #t10.{core::Set::add}(null);
    #t10.{core::Set::add}(inf::field2);
  } =>#t10;
  core::Set<inf::C<core::int*>*>* local3c = block {
    final core::Set<inf::C<core::int*>*>* #t11 = new col::_CompactLinkedHashSet::•<inf::C<core::int*>*>();
    #t11.{core::Set::add}(null);
    #t11.{core::Set::add}(inf::field3);
  } =>#t11;
  core::Set<inf::C<core::int*>*>* local3d = block {
    final core::Set<inf::C<core::int*>*>* #t12 = new col::_CompactLinkedHashSet::•<inf::C<core::int*>*>();
    #t12.{core::Set::add}(null);
    #t12.{core::Set::add}(inf::field4);
  } =>#t12;
  core::Set<inf::C<core::int*>*>* local3e = block {
    final core::Set<inf::C<core::int*>*>* #t13 = new col::_CompactLinkedHashSet::•<inf::C<core::int*>*>();
    #t13.{core::Set::add}(null);
    #t13.{core::Set::add}(inf::field5);
  } =>#t13;
  core::Set<inf::C<core::int*>*>* local3f = block {
    final core::Set<inf::C<core::int*>*>* #t14 = new col::_CompactLinkedHashSet::•<inf::C<core::int*>*>();
    #t14.{core::Set::add}(null);
    #t14.{core::Set::add}(inf::field6);
  } =>#t14;
  core::Set<core::int*>* local3g = block {
    final core::Set<core::int*>* #t15 = new col::_CompactLinkedHashSet::•<core::int*>();
    #t15.{core::Set::add}(null);
    #t15.{core::Set::add}(inf::field7);
  } =>#t15;
  core::Set<core::int*>* local3h = block {
    final core::Set<core::int*>* #t16 = new col::_CompactLinkedHashSet::•<core::int*>();
    #t16.{core::Set::add}(null);
    #t16.{core::Set::add}(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<core::Null?> local1i = <core::Null?>[null];
  core::Set<inf::C<dynamic>?> local2a = block {
    final core::Set<inf::C<dynamic>?> #t17 = new col::_CompactLinkedHashSet::•<inf::C<dynamic>?>();
    #t17.{core::Set::add}(inf::field1);
    #t17.{core::Set::add}(null);
  } =>#t17;
  core::Set<inf::C<dynamic>?> local2b = block {
    final core::Set<inf::C<dynamic>?> #t18 = new col::_CompactLinkedHashSet::•<inf::C<dynamic>?>();
    #t18.{core::Set::add}(inf::field2);
    #t18.{core::Set::add}(null);
  } =>#t18;
  core::Set<inf::C<core::int>?> local2c = block {
    final core::Set<inf::C<core::int>?> #t19 = new col::_CompactLinkedHashSet::•<inf::C<core::int>?>();
    #t19.{core::Set::add}(inf::field3);
    #t19.{core::Set::add}(null);
  } =>#t19;
  core::Set<inf::C<core::int>?> local2d = block {
    final core::Set<inf::C<core::int>?> #t20 = new col::_CompactLinkedHashSet::•<inf::C<core::int>?>();
    #t20.{core::Set::add}(inf::field4);
    #t20.{core::Set::add}(null);
  } =>#t20;
  core::Set<inf::C<core::int?>?> local2e = block {
    final core::Set<inf::C<core::int?>?> #t21 = new col::_CompactLinkedHashSet::•<inf::C<core::int?>?>();
    #t21.{core::Set::add}(inf::field5);
    #t21.{core::Set::add}(null);
  } =>#t21;
  core::Set<inf::C<core::int?>?> local2f = block {
    final core::Set<inf::C<core::int?>?> #t22 = new col::_CompactLinkedHashSet::•<inf::C<core::int?>?>();
    #t22.{core::Set::add}(inf::field6);
    #t22.{core::Set::add}(null);
  } =>#t22;
  core::Set<core::int?> local2g = block {
    final core::Set<core::int?> #t23 = new col::_CompactLinkedHashSet::•<core::int?>();
    #t23.{core::Set::add}(inf::field7);
    #t23.{core::Set::add}(null);
  } =>#t23;
  core::Set<core::int?> local2h = block {
    final core::Set<core::int?> #t24 = new col::_CompactLinkedHashSet::•<core::int?>();
    #t24.{core::Set::add}(inf::field8);
    #t24.{core::Set::add}(null);
  } =>#t24;
  core::Set<inf::C<dynamic>?> local3a = block {
    final core::Set<inf::C<dynamic>?> #t25 = new col::_CompactLinkedHashSet::•<inf::C<dynamic>?>();
    #t25.{core::Set::add}(null);
    #t25.{core::Set::add}(inf::field1);
  } =>#t25;
  core::Set<inf::C<dynamic>?> local3b = block {
    final core::Set<inf::C<dynamic>?> #t26 = new col::_CompactLinkedHashSet::•<inf::C<dynamic>?>();
    #t26.{core::Set::add}(null);
    #t26.{core::Set::add}(inf::field2);
  } =>#t26;
  core::Set<inf::C<core::int>?> local3c = block {
    final core::Set<inf::C<core::int>?> #t27 = new col::_CompactLinkedHashSet::•<inf::C<core::int>?>();
    #t27.{core::Set::add}(null);
    #t27.{core::Set::add}(inf::field3);
  } =>#t27;
  core::Set<inf::C<core::int>?> local3d = block {
    final core::Set<inf::C<core::int>?> #t28 = new col::_CompactLinkedHashSet::•<inf::C<core::int>?>();
    #t28.{core::Set::add}(null);
    #t28.{core::Set::add}(inf::field4);
  } =>#t28;
  core::Set<inf::C<core::int?>?> local3e = block {
    final core::Set<inf::C<core::int?>?> #t29 = new col::_CompactLinkedHashSet::•<inf::C<core::int?>?>();
    #t29.{core::Set::add}(null);
    #t29.{core::Set::add}(inf::field5);
  } =>#t29;
  core::Set<inf::C<core::int?>?> local3f = block {
    final core::Set<inf::C<core::int?>?> #t30 = new col::_CompactLinkedHashSet::•<inf::C<core::int?>?>();
    #t30.{core::Set::add}(null);
    #t30.{core::Set::add}(inf::field6);
  } =>#t30;
  core::Set<core::int?> local3g = block {
    final core::Set<core::int?> #t31 = new col::_CompactLinkedHashSet::•<core::int?>();
    #t31.{core::Set::add}(null);
    #t31.{core::Set::add}(inf::field7);
  } =>#t31;
  core::Set<core::int?> local3h = block {
    final core::Set<core::int?> #t32 = new col::_CompactLinkedHashSet::•<core::int?>();
    #t32.{core::Set::add}(null);
    #t32.{core::Set::add}(inf::field8);
  } =>#t32;
}
