Skip to content

Commit a64db87

Browse files
scheglovcommit-bot@chromium.org
authored andcommitted
Test that legacy code that use non-function type aliases.
Change-Id: I8b80c2eb6f2ccc9a1d523e4350a47715cde1c411 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/176322 Commit-Queue: Konstantin Shcheglov <[email protected]> Reviewed-by: Brian Wilkerson <[email protected]>
1 parent fe2205e commit a64db87

File tree

2 files changed

+95
-28
lines changed

2 files changed

+95
-28
lines changed

pkg/analyzer/test/src/dart/resolution/type_name_test.dart

Lines changed: 79 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -346,79 +346,130 @@ void f() {
346346
);
347347
}
348348

349-
test_typeAlias_asParameter_Never_none() async {
349+
test_typeAlias_asParameterType_interfaceType_none() async {
350350
await assertNoErrorsInCode(r'''
351-
typedef X = Never;
352-
void f(X a, X? b) {}
351+
typedef X<T> = Map<int, T>;
352+
void f(X<String> a, X<String?> b) {}
353353
''');
354354

355355
assertTypeName(
356-
findNode.typeName('X a'),
356+
findNode.typeName('X<String>'),
357357
findElement.typeAlias('X'),
358-
'Never',
358+
'Map<int, String>',
359359
);
360360

361361
assertTypeName(
362-
findNode.typeName('X? b'),
362+
findNode.typeName('X<String?>'),
363363
findElement.typeAlias('X'),
364-
'Never?',
364+
'Map<int, String?>',
365365
);
366366
}
367367

368-
test_typeAlias_asParameter_Never_question() async {
368+
test_typeAlias_asParameterType_interfaceType_none_inLegacy() async {
369+
newFile('$testPackageLibPath/a.dart', content: r'''
370+
typedef X<T> = Map<int, T>;
371+
''');
369372
await assertNoErrorsInCode(r'''
370-
typedef X = Never?;
371-
void f(X a, X? b) {}
373+
// @dart = 2.9
374+
import 'a.dart';
375+
void f(X<String> a) {}
372376
''');
373377

374378
assertTypeName(
375-
findNode.typeName('X a'),
379+
findNode.typeName('X<String>'),
380+
findElement.importFind('package:test/a.dart').typeAlias('X'),
381+
'Map<int*, String*>*',
382+
);
383+
}
384+
385+
test_typeAlias_asParameterType_interfaceType_question() async {
386+
await assertNoErrorsInCode(r'''
387+
typedef X<T> = List<T?>;
388+
void f(X<int> a, X<int?> b) {}
389+
''');
390+
391+
assertTypeName(
392+
findNode.typeName('X<int>'),
376393
findElement.typeAlias('X'),
377-
'Never?',
394+
'List<int?>',
378395
);
379396

380397
assertTypeName(
381-
findNode.typeName('X? b'),
398+
findNode.typeName('X<int?>'),
382399
findElement.typeAlias('X'),
383-
'Never?',
400+
'List<int?>',
384401
);
385402
}
386403

387-
test_typeAlias_asParameterType_interfaceType_none() async {
404+
test_typeAlias_asParameterType_interfaceType_question_inLegacy() async {
405+
newFile('$testPackageLibPath/a.dart', content: r'''
406+
typedef X<T> = List<T?>;
407+
''');
388408
await assertNoErrorsInCode(r'''
389-
typedef X<T> = Map<int, T>;
390-
void f(X<String> a, X<String?> b) {}
409+
// @dart = 2.9
410+
import 'a.dart';
411+
void f(X<int> a) {}
391412
''');
392413

393414
assertTypeName(
394-
findNode.typeName('X<String>'),
415+
findNode.typeName('X<int>'),
416+
findElement.importFind('package:test/a.dart').typeAlias('X'),
417+
'List<int*>*',
418+
);
419+
}
420+
421+
test_typeAlias_asParameterType_Never_none() async {
422+
await assertNoErrorsInCode(r'''
423+
typedef X = Never;
424+
void f(X a, X? b) {}
425+
''');
426+
427+
assertTypeName(
428+
findNode.typeName('X a'),
395429
findElement.typeAlias('X'),
396-
'Map<int, String>',
430+
'Never',
397431
);
398432

399433
assertTypeName(
400-
findNode.typeName('X<String?>'),
434+
findNode.typeName('X? b'),
401435
findElement.typeAlias('X'),
402-
'Map<int, String?>',
436+
'Never?',
403437
);
404438
}
405439

406-
test_typeAlias_asParameterType_interfaceType_question() async {
440+
test_typeAlias_asParameterType_Never_none_inLegacy() async {
441+
newFile('$testPackageLibPath/a.dart', content: r'''
442+
typedef X = Never;
443+
''');
407444
await assertNoErrorsInCode(r'''
408-
typedef X<T> = List<T?>;
409-
void f(X<int> a, X<int?> b) {}
445+
// @dart = 2.9
446+
import 'a.dart';
447+
void f(X a) {}
410448
''');
411449

412450
assertTypeName(
413-
findNode.typeName('X<int>'),
451+
findNode.typeName('X a'),
452+
findElement.importFind('package:test/a.dart').typeAlias('X'),
453+
'Null*',
454+
);
455+
}
456+
457+
test_typeAlias_asParameterType_Never_question() async {
458+
await assertNoErrorsInCode(r'''
459+
typedef X = Never?;
460+
void f(X a, X? b) {}
461+
''');
462+
463+
assertTypeName(
464+
findNode.typeName('X a'),
414465
findElement.typeAlias('X'),
415-
'List<int?>',
466+
'Never?',
416467
);
417468

418469
assertTypeName(
419-
findNode.typeName('X<int?>'),
470+
findNode.typeName('X? b'),
420471
findElement.typeAlias('X'),
421-
'List<int?>',
472+
'Never?',
422473
);
423474
}
424475

pkg/analyzer/test/src/summary/resynthesize_common.dart

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12595,6 +12595,22 @@ void f(int a) {}
1259512595
''');
1259612596
}
1259712597

12598+
test_typedef_nonFunction_using_interface_noTypeParameters_legacy() async {
12599+
featureSet = FeatureSets.nonFunctionTypeAliases;
12600+
newFile('/a.dart', content: r'''
12601+
typedef A = List<int>;
12602+
''');
12603+
var library = await checkLibrary(r'''
12604+
// @dart = 2.9
12605+
import 'a.dart';
12606+
void f(A a) {}
12607+
''');
12608+
checkElementText(library, r'''
12609+
import 'a.dart';
12610+
void f(List<int*>* a) {}
12611+
''');
12612+
}
12613+
1259812614
test_typedef_nonFunction_using_interface_noTypeParameters_question() async {
1259912615
featureSet = FeatureSets.nonFunctionTypeAliases;
1260012616
var library = await checkLibrary(r'''

0 commit comments

Comments
 (0)