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

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

static method main() → dynamic {
  core::List<dynamic> list = core::_GrowableList::•<dynamic>(0);
  if(list.{core::Iterable::isNotEmpty}{core::bool}) {
    new mai::Class::•().{mai::Class::method}(_in::unsafeCast<mai::Enum>(_in::unsafeCast<dynamic>(null))){(mai::Enum) → core::int};
  }
}

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

abstract class Enum extends core::Object {
  abstract get /*isLegacy*/ index() → core::int;
}
class Class extends core::Object {
  synthetic constructor •() → mai::Class
    : super core::Object::•()
    ;
  method method(mai::Enum e) → core::int
    return e.{mai::Enum::index}{core::int};
}



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