// @dart = 2.6
import 'never_opt_out_lib.dart';

Never optOutNever;
var inferredOptOutNever = optInNever;
main() {}

class B extends A {
  Null neverField;
  Null neverMethod(Null value) => value;
  Null get neverProperty => null;
  void set neverProperty(Null value) {}
  Null nullField;
  Null nullMethod(Null value) => value;
  Null get nullProperty => null;
  void set nullProperty(Null value) {}
}

class C extends A {
  Never neverField;
  Never neverMethod(Never value) => value;
  Never get neverProperty => null;
  void set neverProperty(Never value) {}
  Never nullField;
  Never nullMethod(Never value) => value;
  Never get nullProperty => null;
  void set nullProperty(Never value) {}
}

throws(void Function() f) {}
