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

class Fisk<T extends core::Object = dynamic> extends core::Object {
  final field self::Fisk::T x;
  const constructor fisk(self::Fisk::T x) → self::Fisk<self::Fisk::T>
    : self::Fisk::x = x, super core::Object::•()
    ;
}
class Foo extends core::Object {
  final field core::int index;
  final field core::String _name;
  static const field core::List<self::Foo> values = const <self::Foo>[self::Foo::bar, self::Foo::baz, self::Foo::cafebabe];
  @self::hest
  static const field self::Foo bar = const self::Foo::•(0, "Foo.bar");
  @self::Fisk::fisk<core::int>(self::hest)
  static const field self::Foo baz = const self::Foo::•(1, "Foo.baz");
  static const field self::Foo cafebabe = const self::Foo::•(2, "Foo.cafebabe");
  const constructor •(core::int index, core::String _name) → self::Foo
    : self::Foo::index = index, self::Foo::_name = _name, super core::Object::•()
    ;
  method toString() → core::String
    return this.{=self::Foo::_name};
}
static const field core::int hest = 42;
static method main() → dynamic {}
