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

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

static const field core::Set<foo::Foo> foo = #C5;
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::•()
    ;
}

constants  {
  #C1 = bar::Bar<dynamic> {}
  #C2 = null
  #C3 = <dynamic>[#C1, #C2]
  #C4 = core::_ImmutableMap<foo::Foo*, Null> {_kvPairs:#C3}
  #C5 = col::_UnmodifiableSet<foo::Foo*> {_map:#C4}
}


Constructor coverage from constants:
org-dartlang-testcase:///main.dart:
- Bar. (from org-dartlang-testcase:///bar_lib.dart:8:9)

org-dartlang-testcase:///foo_lib.dart:
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)

org-dartlang-testcase:///bar_lib.dart:
- Foo. (from org-dartlang-testcase:///foo_lib.dart:10:9)
