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

import "dart:async";

class C extends core::Object {
  static field core::int staticField;
  field core::int field;
  synthetic constructor •() → self::C
    ;
  static get staticGetter() → core::int
    ;
  static set staticSetter(dynamic val) → void
    ;
  static method staticFoo(core::int param) → core::int
    ;
  get getter() → core::int
    ;
  set setter(dynamic val) → void
    ;
  method foo(core::int param) → core::int
    ;
}
static field core::int globalVariable;
static final field core::bool assertStatementsEnabled;
static method topLevelFoo(core::int param) → core::int
  ;
static get topLevelGetter() → core::int
  ;
static set topLevelSetter(dynamic val) → void
  ;
static method dummy() → dynamic
  ;
static method staticMembers() → dynamic async 
  ;
static method topLevelMembers() → dynamic async 
  ;
static method instanceMembers() → dynamic async 
  ;
static method others() → dynamic async 
  ;
static method conditionals() → dynamic async 
  ;
static method asserts() → dynamic async 
  ;
static method controlFlow() → dynamic async 
  ;
static method future<T extends core::Object? = dynamic>(self::future::T% value) → FutureOr<self::future::T%> async 
  ;
static method id<T extends core::Object? = dynamic>(self::id::T% value) → FutureOr<self::id::T%>
  ;
static method intStream() → asy::Stream<core::int> async* 
  ;
static method main() → dynamic async 
  ;
static method expect(dynamic expected, dynamic actual) → dynamic
  ;
static method expectList(core::List<dynamic> expected, core::List<dynamic> actual) → dynamic
  ;
