library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
import "package:expect/expect.dart" as exp;

import "package:expect/expect.dart";

class MessageType extends core::Object /*hasConstConstructor*/  {
  static const field self::MessageType print = #C2;
  static const field self::MessageType skip = #C4;
  final field core::String name;
  const constructor _(core::String name) → self::MessageType
    : self::MessageType::name = name, super core::Object::•()
    ;
  static factory parse(core::String name) → self::MessageType {
    if(name.{core::String::==}("print")) {
      return #C2;
    }
    return #C4;
  }
}
static const field self::MessageType printConst = #C2;
static method main() → void {
  exp::Expect::equals(#C2, #C2);
}

constants  {
  #C1 = "print"
  #C2 = self::MessageType {name:#C1}
  #C3 = "skip"
  #C4 = self::MessageType {name:#C3}
}


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