blob: 98d74d7ca2055665e75da7e8da8a6b55fb78583c [file] [log] [blame]
// Copyright (c) 2022, 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.
class Class<T> {}
class ConcreteClass implements Class<ConcreteClass> {}
typedef F<X extends Class<X>> = X;
class G<X extends Class<X>> {}
void method1(
F t1, // Ok
F<dynamic> t2, // Ok
F<Class> t3, // Ok
F<Class<dynamic>> t4, // Ok
F<ConcreteClass> t5, // Ok
F<Class<ConcreteClass>> t6, // Ok
F<Object> t7, // Error
F<int> t8, // Error
{
required G s1, // Ok
required G<dynamic> s2, // Ok
required G<Class> s3, // Ok
required G<Class<dynamic>> s4, // Ok
required G<ConcreteClass> s5, // Ok
required G<Class<ConcreteClass>> s6, // Ok
required G<Object> s7, // Error
required G<int> s8, // Error
}) {
void local(
F t1, // Ok
F<dynamic> t2, // Ok
F<Class> t3, // Ok
F<Class<dynamic>> t4, // Ok
F<ConcreteClass> t5, // Ok
F<Class<ConcreteClass>> t6, // Ok
F<Object> t7, // Error
F<int> t8, // Error
{
required G s1, // Ok
required G<dynamic> s2, // Ok
required G<Class> s3, // Ok
required G<Class<dynamic>> s4, // Ok
required G<ConcreteClass> s5, // Ok
required G<Class<ConcreteClass>> s6, // Ok
required G<Object> s7, // Error
required G<int> s8, // Error
}) {}
(
F t1, // Ok
F<dynamic> t2, // Ok
F<Class> t3, // Ok
F<Class<dynamic>> t4, // Ok
F<ConcreteClass> t5, // Ok
F<Class<ConcreteClass>> t6, // Ok
F<Object> t7, // Error
F<int> t8, // Error
{
required G s1, // Ok
required G<dynamic> s2, // Ok
required G<Class> s3, // Ok
required G<Class<dynamic>> s4, // Ok
required G<ConcreteClass> s5, // Ok
required G<Class<ConcreteClass>> s6, // Ok
required G<Object> s7, // Error
required G<int> s8, // Error
}) {};
}
class Class1 {
Class1(
F t1, // Ok
F<dynamic> t2, // Ok
F<Class> t3, // Ok
F<Class<dynamic>> t4, // Ok
F<ConcreteClass> t5, // Ok
F<Class<ConcreteClass>> t6, // Ok
F<Object> t7, // Error
F<int> t8, // Error
{
required G s1, // Ok
required G<dynamic> s2, // Ok
required G<Class> s3, // Ok
required G<Class<dynamic>> s4, // Ok
required G<ConcreteClass> s5, // Ok
required G<Class<ConcreteClass>> s6, // Ok
required G<Object> s7, // Error
required G<int> s8, // Error
});
void method2(
F t1, // Ok
F<dynamic> t2, // Ok
F<Class> t3, // Ok
F<Class<dynamic>> t4, // Ok
F<ConcreteClass> t5, // Ok
F<Class<ConcreteClass>> t6, // Ok
F<Object> t7, // Error
F<int> t8, // Error
{
required G s1, // Ok
required G<dynamic> s2, // Ok
required G<Class> s3, // Ok
required G<Class<dynamic>> s4, // Ok
required G<ConcreteClass> s5, // Ok
required G<Class<ConcreteClass>> s6, // Ok
required G<Object> s7, // Error
required G<int> s8, // Error
}) {}
}
extension Extension1 on int {
void method3(
F t1, // Ok
F<dynamic> t2, // Ok
F<Class> t3, // Ok
F<Class<dynamic>> t4, // Ok
F<ConcreteClass> t5, // Ok
F<Class<ConcreteClass>> t6, // Ok
F<Object> t7, // Error
F<int> t8, // Error
{
required G s1, // Ok
required G<dynamic> s2, // Ok
required G<Class> s3, // Ok
required G<Class<dynamic>> s4, // Ok
required G<ConcreteClass> s5, // Ok
required G<Class<ConcreteClass>> s6, // Ok
required G<Object> s7, // Error
required G<int> s8, // Error
}) {}
}
main() {}