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

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

static method main() → dynamic {
  self::expect(true, (#C1) is{ForNonNullableByDefault} <T extends core::Object?>() → void);
  self::expect(true, #C2);
  self::expect(true, (#C3) is{ForNonNullableByDefault} <T extends Never = dynamic>() → void);
  self::expect(true, #C2);
}
static method expect(dynamic expected, dynamic actual) → dynamic {
  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
    throw "Expected ${expected}, actual ${actual}";
}

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

typedef fnTypeWithNullableObjectBound = <T extends core::Object?>() → void;
typedef fnTypeWithNeverBound = <T extends Never = dynamic>() → void;
static method fnWithNonNullObjectBound<T extends core::Object>() → void
  return null;
static method fnWithNullBound<T extends Null>() → void
  return null;

constants  {
  #C1 = tearoff self2::fnWithNonNullObjectBound
  #C2 = true
  #C3 = tearoff self2::fnWithNullBound
}
