library;
import self as self;
import "never_opt_out_lib.dart" as nev;
import "dart:core" as core;

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

class B extends nev::A {
  field core::Null? neverField;
  field core::Null? nullField;
  synthetic constructor •() → self::B*
    ;
  method neverMethod(core::Null? value) → core::Null?
    ;
  get neverProperty() → core::Null?
    ;
  set neverProperty(core::Null? value) → void
    ;
  method nullMethod(core::Null? value) → core::Null?
    ;
  get nullProperty() → core::Null?
    ;
  set nullProperty(core::Null? value) → void
    ;
}
class C extends nev::A {
  field Never* neverField;
  field Never* nullField;
  synthetic constructor •() → self::C*
    ;
  method neverMethod(Never* value) → Never*
    ;
  get neverProperty() → Never*
    ;
  set neverProperty(Never* value) → void
    ;
  method nullMethod(Never* value) → Never*
    ;
  get nullProperty() → Never*
    ;
  set nullProperty(Never* value) → void
    ;
}
static field Never* optOutNever;
static field core::Null? inferredOptOutNever;
static method main() → dynamic
  ;
static method throws(() →* void f) → dynamic
  ;

library /*isNonNullableByDefault*/;
import self as nev;
import "dart:core" as core;

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

class A extends core::Object {
  field Never neverField;
  field core::Null? nullField;
  synthetic constructor •() → nev::A
    ;
  method neverMethod(Never value) → Never
    ;
  get neverProperty() → Never
    ;
  set neverProperty(Never value) → void
    ;
  method nullMethod(core::Null? value) → core::Null?
    ;
  get nullProperty() → core::Null?
    ;
  set nullProperty(core::Null? value) → void
    ;
}
static field Never optInNever;
static method throwing() → Never
  ;
