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

class E<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
  static const field core::List<self::E<dynamic, dynamic>> values = #C10;
  static const field self::E<core::int, core::String> one = #C3;
  static const field self::E<core::double, core::num> two = #C6;
  static const field self::E<core::int, core::int> three = #C9;
  const constructor •(core::int index, core::String name) → self::E<self::E::X%, self::E::Y%>
    : super core::_Enum::•(index, name)
    ;
  const constructor named(core::int index, core::String name, core::int value) → self::E<self::E::X%, self::E::Y%>
    : super core::_Enum::•(index, name)
    ;
  method toString() → core::String
    return "E.${this.{core::_Enum::_name}{core::String}}";
}
static method main() → dynamic {}

constants  {
  #C1 = 0
  #C2 = "one"
  #C3 = self::E<core::int*, core::String*> {index:#C1, _name:#C2}
  #C4 = 1
  #C5 = "two"
  #C6 = self::E<core::double*, core::num*> {index:#C4, _name:#C5}
  #C7 = 2
  #C8 = "three"
  #C9 = self::E<core::int*, core::int*> {index:#C7, _name:#C8}
  #C10 = <self::E<dynamic, dynamic>*>[#C3, #C6, #C9]
}


Constructor coverage from constants:
org-dartlang-testcase:///entries_with_type_arguments.dart:
- E. (from org-dartlang-testcase:///entries_with_type_arguments.dart:10:9)
- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- E.named (from org-dartlang-testcase:///entries_with_type_arguments.dart:11:9)
