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

typedef Function2<S extends core::Object = dynamic, T extends core::Object = dynamic> = ([S]) → T;
class Foo extends core::Object {
  field core::List<core::int> x;
  constructor •([core::List<core::int> x = const <dynamic>[1]]) → self::Foo
    : self::Foo::x = x, super core::Object::•()
    ;
  constructor named([core::List<core::int> x = const <dynamic>[1]]) → self::Foo
    : self::Foo::x = null, super core::Object::•()
    ;
}
static field ([core::List<core::int>]) → core::String g = ([dynamic llll = const <dynamic>[1]]) → dynamic => "hello";
static method f([core::List<core::int> l = const <dynamic>[1]]) → void {}
static method main() → dynamic {}
