blob: d8f37df0ed7ea0fa6c995246b886925f9e5dbc9a [file] [log] [blame]
// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
typedef A<T> = Class<T>;
typedef B<T extends num> = Class<T>;
class Class<T> {
const Class();
@T()
static T? method0<S extends T>(T arg) {
T? local;
T;
void fun<U extends T>() {}
}
@Class<T>()
static Class<T>? method1<S extends Class<T>>(Class<T> arg) {
Class<T>? local;
new Class<T>();
Class<T>;
Class<T>.new;
void fun<U extends Class<T>>() {}
}
@Class<Class<T>>()
static Class<Class<T>>? method2<S extends Class<Class<T>>>(Class<Class<T>> arg) {
Class<Class<T>>? local;
new Class<Class<T>>();
Class<Class<T>>;
Class<Class<T>>.new;
void fun<U extends Class<Class<T>>>() {}
}
@A<T>()
static A<T>? method3<S extends A<T>>(A<T> arg) {
A<T>? local;
new A<T>();
A<T>;
A<T>.new;
void fun<U extends A<T>>() {}
}
@A<A<T>>()
static A<A<T>>? method4<S extends A<A<T>>>(A<A<T>> arg) {
A<A<T>>? local;
new A<A<T>>();
A<A<T>>;
A<A<T>>.new;
void fun<U extends A<A<T>>>() {}
}
@B<T>()
static B<T>? method5<S extends B<T>>(B<T> arg) {
B<T>? local;
new B<T>();
B<T>;
B<T>.new;
void fun<U extends B<T>>() {}
}
@A<B<T>>()
static A<B<T>>? method6<S extends A<B<T>>>(A<B<T>> arg) {
A<B<T>>? local;
new A<B<T>>();
A<B<T>>;
A<B<T>>.new;
void fun<U extends A<B<T>>>() {}
}
@Class<void Function<S extends T>()>()
static void Function<S extends T>()? method7<U extends void Function<S extends T>()>(void Function<S extends T>() arg) {
void Function<S extends T>()? local;
void fun<V extends void Function<S extends T>()>() {}
}
@T()
static T field0;
@Class<T>()
static Class<T>? field1;
@Class<Class<T>>()
static Type field2 = T;
@A<T>()
static Type field3 = Class<T>;
@B<T>()
static var field4 = (T t) => T;
@T()
final T? instanceField;
@T()
T instanceMethod<S extends T>(T t) {
T;
return t;
}
}
extension Extension<T> on T {
Extension(T t);
factory Extension.fact(T t) => null;
@T()
static T field0;
@T()
T field1;
@T()
static T? staticMethod<S extends T>(T arg) {
T? local;
T;
void fun<U extends T>() {}
}
@T()
T instanceMethod<S extends T>(T t) {
T;
return t;
}
}
mixin Mixin<T> {
Mixin(T t);
factory Mixin.fact(T t) => null;
@T()
static T field0;
@T()
static T? staticMethod<S extends T>(T arg) {
T? local;
T;
void fun<U extends T>() {}
}
@T()
T? instanceField;
@T()
T instanceMethod<S extends T>(T t) {
T;
return t;
}
}
main() {}