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

import "org-dartlang-testcase:///main_lib.dart";

static method main() → dynamic {
  core::List<dynamic> list = <dynamic>[];
  if(list.{core::Iterable::isNotEmpty}) {
    new mai::Class::•().{mai::Class::method}((null as{ForNonNullableByDefault} dynamic) as{TypeError,ForDynamic,ForNonNullableByDefault} mai::Enum);
  }
}

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

class Enum extends core::Object /*isEnum*/  {
  final field core::int index;
  final field core::String _name;
  static const field core::List<mai::Enum> values = #C4;
  static const field mai::Enum a = #C3;
  const constructor •(core::int index, core::String _name) → mai::Enum
    : mai::Enum::index = index, mai::Enum::_name = _name, super core::Object::•()
    ;
  method toString() → core::String
    return this.{mai::Enum::_name};
}
class Class extends core::Object {
  synthetic constructor •() → mai::Class
    : super core::Object::•()
    ;
  method method(mai::Enum e) → core::int
    return e.{mai::Enum::index};
}

constants  {
  #C1 = 0
  #C2 = "Enum.a"
  #C3 = mai::Enum {index:#C1, _name:#C2}
  #C4 = <mai::Enum*>[#C3]
}


Constructor coverage from constants:
org-dartlang-testcase:///main_lib.dart:
- Enum. (from org-dartlang-testcase:///main_lib.dart:5:6)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
