@@ -1172,6 +1172,18 @@ void f(C c) {}
11721172 assertUnion (cType.typeArguments[0 ].node, cBound.node);
11731173 }
11741174
1175+ test_typeName_union_with_bounds () async {
1176+ await analyze ('''
1177+ class C<T extends Object, U extends Object> {}
1178+ void f(C c) {}
1179+ ''' );
1180+ var cType = decoratedTypeAnnotation ('C c' );
1181+ var tBound = decoratedTypeAnnotation ('Object,' );
1182+ var uBound = decoratedTypeAnnotation ('Object>' );
1183+ assertUnion (cType.typeArguments[0 ].node, tBound.node);
1184+ assertUnion (cType.typeArguments[1 ].node, uBound.node);
1185+ }
1186+
11751187 test_variableDeclaration () async {
11761188 await analyze ('''
11771189void f(int i) {
@@ -1396,6 +1408,37 @@ void f(D x) {}
13961408 expect (decoratedArgArgType.typeArguments, isEmpty);
13971409 }
13981410
1411+ test_interfaceType_generic_instantiate_to_generic_type_2 () async {
1412+ await analyze ('''
1413+ class C<T, U> {}
1414+ class D<T extends C<int, String>, U extends C<num, double>> {}
1415+ void f(D x) {}
1416+ ''' );
1417+ var decoratedDType = decoratedTypeAnnotation ('D x' );
1418+ expect (decoratedFunctionType ('f' ).positionalParameters[0 ],
1419+ same (decoratedDType));
1420+ expect (decoratedDType.node, TypeMatcher <NullabilityNodeMutable >());
1421+ expect (decoratedDType.typeArguments, hasLength (2 ));
1422+ var decoratedArg0Type = decoratedDType.typeArguments[0 ];
1423+ expect (decoratedArg0Type.node, TypeMatcher <NullabilityNodeMutable >());
1424+ expect (decoratedArg0Type.typeArguments, hasLength (2 ));
1425+ var decoratedArg0Arg0Type = decoratedArg0Type.typeArguments[0 ];
1426+ expect (decoratedArg0Arg0Type.node, TypeMatcher <NullabilityNodeMutable >());
1427+ expect (decoratedArg0Arg0Type.typeArguments, isEmpty);
1428+ var decoratedArg0Arg1Type = decoratedArg0Type.typeArguments[1 ];
1429+ expect (decoratedArg0Arg1Type.node, TypeMatcher <NullabilityNodeMutable >());
1430+ expect (decoratedArg0Arg1Type.typeArguments, isEmpty);
1431+ var decoratedArg1Type = decoratedDType.typeArguments[1 ];
1432+ expect (decoratedArg1Type.node, TypeMatcher <NullabilityNodeMutable >());
1433+ expect (decoratedArg1Type.typeArguments, hasLength (2 ));
1434+ var decoratedArg1Arg0Type = decoratedArg1Type.typeArguments[0 ];
1435+ expect (decoratedArg1Arg0Type.node, TypeMatcher <NullabilityNodeMutable >());
1436+ expect (decoratedArg1Arg0Type.typeArguments, isEmpty);
1437+ var decoratedArg1Arg1Type = decoratedArg1Type.typeArguments[1 ];
1438+ expect (decoratedArg1Arg1Type.node, TypeMatcher <NullabilityNodeMutable >());
1439+ expect (decoratedArg1Arg1Type.typeArguments, isEmpty);
1440+ }
1441+
13991442 test_interfaceType_generic_instantiate_to_object () async {
14001443 await analyze ('''
14011444class C<T extends Object> {}
0 commit comments