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

Never optOutNever;
var inferredOptOutNever = optInNever;
genericMethod<T>() {}

class GenericClass<T> {}

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) {}
