library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
import "foo_lib.dart" as foo;
import "bar_lib.dart" as bar;

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

static const field core::Set<foo::Foo> foo = const <foo::Foo>{const bar::Bar::•<dynamic>()};
static method main() → dynamic
  ;

library /*isNonNullableByDefault*/;
import self as foo;
import "dart:core" as core;
import "bar_lib.dart" as bar;
additionalExports = (bar::Bar)

import "org-dartlang-testcase:///bar_lib.dart";
export "org-dartlang-testcase:///bar_lib.dart";

abstract class Foo extends core::Object /*hasConstConstructor*/  {
  static final field dynamic _redirecting# = <dynamic>[foo::Foo::bar]/*isLegacy*/;
  const constructor •() → foo::Foo
    : super core::Object::•()
    ;
  static factory bar() → foo::Foo
    return new bar::Bar::•<dynamic>();
}

library /*isNonNullableByDefault*/;
import self as bar;
import "dart:core" as core;
import "foo_lib.dart" as foo;

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

class Bar<T extends core::Object? = dynamic> extends foo::Foo /*hasConstConstructor*/  {
  const constructor •() → bar::Bar<bar::Bar::T%>
    : super foo::Foo::•()
    ;
}


Extra constant evaluation status:
Evaluated: SetLiteral @ org-dartlang-testcase:///main.dart:7:27 -> SetConstant(const <Foo*>{const Bar<dynamic>{}})
Extra constant evaluation: evaluated: 4, effectively constant: 1
