blob: b583f0617657e707e02049bd0c88255a21eb5f5f [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>> = Class1;
class G<X extends Class<X>> {}
class Class1 {}
test() {
new F(); // Error
new F<dynamic>(); // Error
new F<Class>(); // Error
new F<Class<dynamic>>(); // Error
new F<ConcreteClass>(); // Ok
new F<Class<ConcreteClass>>(); // Ok
new F<Object>(); // Error
new F<int>(); // Error
new G(); // Error
new G<dynamic>(); // Error
new G<Class>(); // Error
new G<Class<dynamic>>(); // Error
new G<ConcreteClass>(); // Ok
new G<Class<ConcreteClass>>(); // Ok
new G<Object>(); // Error
new G<int>(); // Error
F.new; // Ok
F<dynamic>.new; // Ok
F<Class>.new; // Ok
F<Class<dynamic>>.new; // Ok
F<ConcreteClass>.new; // Ok
F<Class<ConcreteClass>>.new; // Ok
F<Object>.new; // Error
F<int>.new; // Error
G.new; // Ok
G<dynamic>.new; // Error
G<Class>.new; // Error
G<Class<dynamic>>.new; // Error
G<ConcreteClass>.new; // Ok
G<Class<ConcreteClass>>.new; // Ok
G<Object>.new; // Error
G<int>.new; // Error
}
main() {}