library;
//
// Problems in library:
//
// pkg/front_end/testcases/general/issue53560.dart:9:3: Error: 'B' is already declared in this scope.
//   B() : this._(1);
//   ^
// pkg/front_end/testcases/general/issue53560.dart:8:3: Context: Previous declaration of 'B'.
//   B(_);
//   ^
//
// pkg/front_end/testcases/general/issue53560.dart:9:14: Error: Couldn't find constructor 'B._'.
//   B() : this._(1);
//              ^
//
// pkg/front_end/testcases/general/issue53560.dart:13:29: Error: Can't use 'B' because it is declared more than once.
//   final A<double> doubles = A();
//                             ^
//
import self as self;
import "dart:core" as core;

typedef A<invariant X extends core::Object? = dynamic> = self::B<X%, (X%) → dynamic>;
class B<T extends core::Object? = dynamic, Invariance extends (self::B::T%) → dynamic = (Never) → dynamic> extends core::Object {
  constructor •(wildcard dynamic _#wc0#formal) → self::B<self::B::T%, self::B::Invariance>
    : super core::Object::•()
    ;
}
static method test() → dynamic {
  final self::B<core::double, (core::double) → dynamic> doubles = invalid-expression "pkg/front_end/testcases/general/issue53560.dart:13:29: Error: Can't use 'B' because it is declared more than once.
  final A<double> doubles = A();
                            ^";
}
static synthetic method _#A#new#tearOff<invariant X extends core::Object? = dynamic>(dynamic _#wc0#formal) → self::B<self::_#A#new#tearOff::X%, (self::_#A#new#tearOff::X%) → dynamic>
  return new self::B::•<self::_#A#new#tearOff::X%, (self::_#A#new#tearOff::X%) → dynamic>(_#wc0#formal);
