Skip to content

Commit cba75a1

Browse files
stereotype441commit-bot@chromium.org
authored andcommitted
Migration: fix accidental hardcoded 0 in GraphBuilder.visitTypeName
Change-Id: I4d75bc286fe8d5dfe063b30525a99dacc96b4ec6 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/105961 Reviewed-by: Dan Rubel <[email protected]> Reviewed-by: Brian Wilkerson <[email protected]> Reviewed-by: Konstantin Shcheglov <[email protected]> Commit-Queue: Paul Berry <[email protected]>
1 parent e5f069b commit cba75a1

2 files changed

Lines changed: 44 additions & 1 deletion

File tree

pkg/nnbd_migration/lib/src/graph_builder.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -523,7 +523,7 @@ $stackTrace''');
523523
_variables.decoratedTypeAnnotation(_source, typeName);
524524
for (int i = 0; i < instantiatedType.typeArguments.length; i++) {
525525
_unionDecoratedTypes(
526-
instantiatedType.typeArguments[0],
526+
instantiatedType.typeArguments[i],
527527
_variables.decoratedElementType(element.typeParameters[i],
528528
create: true));
529529
}

pkg/nnbd_migration/test/migration_visitor_test.dart

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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('''
11771189
void 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('''
14011444
class C<T extends Object> {}

0 commit comments

Comments
 (0)