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

typedef F = <T extends core::Object? = dynamic>(T%) → void;
typedef G<@self::A::•<dynamic>() contravariant T extends core::Object? = dynamic> = (T%) → void;
class A<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
  const constructor •() → self::A<self::A::T%>
    : super core::Object::•()
    ;
}
class Class<T extends <S extends core::Object? = dynamic>(S%) → void> extends core::Object {
  synthetic constructor •() → self::Class<self::Class::T>
    ;
}
static field <T extends core::Object? = dynamic>(T%) →? void f;
static method method1<@self::A::•<core::String>() T extends core::Object? = dynamic>(self::method1::T% t) → void
  ;
static method method2(<T extends core::Object? = dynamic>(T%) → void f) → void
  ;
static method main() → dynamic
  ;


Extra constant evaluation status:
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///function_type_parameter.dart:13:17 -> InstanceConstant(const A<dynamic>{})
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///function_type_parameter.dart:15:15 -> InstanceConstant(const A<String*>{})
Extra constant evaluation: evaluated: 2, effectively constant: 2
