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
    let dynamic #redirecting_factory = bar::Bar::• in let dynamic #typeArg0 = null in invalid-expression;
}

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 -> InstanceConstant(const _UnmodifiableSet<Foo*>{_UnmodifiableSet._map: const _ImmutableMap<Foo*, Null>{_ImmutableMap._kvPairs: const <dynamic>[const Bar<dynamic>{}, null]}})
Extra constant evaluation: evaluated: 6, effectively constant: 1
