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

import "package:expect/expect.dart";

class A<N extends core::Object? = dynamic, S extends core::Object? = dynamic, U extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
  final field core::List<self::A::U?>? field;
  constructor •(self::A::N% n, self::A::S% s) → self::A<self::A::N%, self::A::S%, self::A::U%>
    ;
  constructor empty() → self::A<self::A::N%, self::A::S%, self::A::U%>
    ;
  const constructor c(self::A::U% u, self::A::S% s) → self::A<self::A::N%, self::A::S%, self::A::U%>
    : self::A::field = const <Null>[null], super core::Object::•()
    ;
  static factory f<N extends core::Object? = dynamic, S extends core::Object? = dynamic, U extends core::Object? = dynamic>(self::A::f::S% s) → self::A<self::A::f::N%, self::A::f::S%, self::A::f::U%>
    ;
  get getter() → core::List<self::A::U?>?
    ;
  set setter(covariant-by-class self::A::S% s) → void
    ;
}
abstract class J<Aa extends core::Object? = dynamic, B extends core::Object? = dynamic> extends core::Object {
  synthetic constructor •() → self::J<self::J::Aa%, self::J::B%>
    ;
}
abstract class I<H extends core::Object? = dynamic, C extends core::Object? = dynamic, K extends core::Object? = dynamic> extends self::J<self::I::C%, self::I::K%> {
  synthetic constructor •() → self::I<self::I::H%, self::I::C%, self::I::K%>
    ;
}
static method main() → dynamic
  ;


Extra constant evaluation status:
Evaluated: ListLiteral @ org-dartlang-testcase:///issue_000070.dart:22:33 -> ListConstant(const <Null>[null])
Extra constant evaluation: evaluated: 1, effectively constant: 1
