library test;
import self as self;
import "dart:core" as core;
import "dart:async" as asy;

class MyFuture<T extends core::Object> extends core::Object implements asy::Future<self::MyFuture::T> {
  constructor •() → void
    : super core::Object::•() {}
  constructor value(dynamic x) → void
    : super core::Object::•() {}
  abstract method noSuchMethod(core::Invocation invocation) → dynamic;
  method then<S extends core::Object>((self::MyFuture::T) → asy::FutureOr<self::MyFuture::then::S> f, {core::Function onError = null}) → self::MyFuture<self::MyFuture::then::S>
    return null;
}
static method g1(core::bool x) → asy::Future<core::int> async {
  return (x ?{core::Object} 42 : asy::Future::value<core::int>(42)) as{TypeError} asy::FutureOr<core::int>;
}
static method g2(core::bool x) → asy::Future<core::int> async 
  return (x ?{core::Object} 42 : asy::Future::value<core::int>(42)) as{TypeError} asy::FutureOr<core::int>;
static method g3(core::bool x) → asy::Future<core::int> async {
  core::Object y = x ?{core::Object} 42 : asy::Future::value<core::int>(42);
  return y as{TypeError} asy::FutureOr<core::int>;
}
static method main() → dynamic {}
