| // Copyright (c) 2024, 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 Base<T1, T2> { |
| T1? t1; |
| T2? t2; |
| |
| Base() { |
| print('Base: $T1, $T2'); |
| } |
| } |
| |
| class A extends Base<int, String> { |
| A(String s); |
| } |
| |
| class B<T> extends Base<List<T>, String> { |
| B() { |
| print('B: $T'); |
| } |
| } |
| |
| class C { |
| C(String s) { |
| print('C: $s'); |
| } |
| } |
| |
| foo1() => new C('hello'); |
| |
| void foo2() { |
| new A('hi'); |
| new B<int>(); |
| } |
| |
| void foo3<T>() { |
| new B<List<T>>(); |
| } |
| |
| class E<K, V> { |
| testReuse1() => new Map<K, V>(); |
| } |
| |
| class F<K, V> extends E<String, List<V>> { |
| testReuse2() => new Map<String, List<V>>(); |
| } |
| |
| class G<K, V> { |
| G(); |
| factory G.testFactory() => new H<String, K, V>(); |
| } |
| |
| class H<P1, P2, P3> extends G<P2, P3> {} |
| |
| void foo4() { |
| new G<int, List<String>>.testFactory(); |
| } |
| |
| class I { |
| I(param); |
| factory I.testFactory2({param}) => new I(param); |
| } |
| |
| void foo5() { |
| new I.testFactory2(); |
| new I.testFactory2(param: 42); |
| } |
| |
| class J { |
| J._(); |
| factory J() => J._(); |
| } |
| |
| abstract class L<S, T> { |
| factory L() => new TestTypeArgReuse<S, T>(); |
| } |
| |
| class TestTypeArgReuse<P, Q> extends Base<P, Q> implements L<P, Q> {} |
| |
| foo6() => List<String>.empty(); |
| |
| foo7(int n) => List<int>.filled(n, 0); |
| |
| main() { |
| foo1(); |
| foo2(); |
| foo3<String>(); |
| } |