Skip to content

Commit 83a72e1

Browse files
scheglovcommit-bot@chromium.org
authored andcommitted
Switch completion tests to WithNonFunctionTypeAliasesMixin, updates and tests for suggesting non-function type aliases.
Change-Id: I0066d479b23b46e0aaaae43aebdc1bbc58336ad8 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/181282 Commit-Queue: Konstantin Shcheglov <[email protected]> Reviewed-by: Brian Wilkerson <[email protected]>
1 parent 79c35e8 commit 83a72e1

12 files changed

+138
-124
lines changed

pkg/analysis_server/lib/src/services/completion/dart/library_member_contributor.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ class LibraryMemberContributor extends DartCompletionContributor {
6262
} else {
6363
if (element is ClassElement ||
6464
element is ExtensionElement ||
65-
element is FunctionTypeAliasElement) {
65+
element is TypeAliasElement) {
6666
builder.suggestElement(element,
6767
kind: CompletionSuggestionKind.INVOCATION);
6868
} else if (!typesOnly &&

pkg/analysis_server/lib/src/services/completion/dart/local_library_contributor.dart

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ class LibraryElementSuggestionBuilder extends GeneralizingElementVisitor {
9696
@override
9797
void visitFunctionTypeAliasElement(FunctionTypeAliasElement element) {
9898
if (opType.includeTypeNameSuggestions) {
99-
builder.suggestFunctionTypeAlias(element, prefix: prefix);
99+
builder.suggestTypeAlias(element, prefix: prefix);
100100
}
101101
}
102102

@@ -126,6 +126,13 @@ class LibraryElementSuggestionBuilder extends GeneralizingElementVisitor {
126126
}
127127
}
128128

129+
@override
130+
void visitTypeAliasElement(TypeAliasElement element) {
131+
if (opType.includeTypeNameSuggestions) {
132+
builder.suggestTypeAlias(element, prefix: prefix);
133+
}
134+
}
135+
129136
/// Add constructor suggestions for the given class.
130137
void _addConstructorSuggestions(ClassElement classElem) {
131138
for (var constructor in classElem.constructors) {

pkg/analysis_server/lib/src/services/completion/dart/local_reference_contributor.dart

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -310,16 +310,14 @@ class _LocalVisitor extends LocalDeclarationVisitor {
310310
@override
311311
void declaredFunctionTypeAlias(FunctionTypeAlias declaration) {
312312
if (opType.includeTypeNameSuggestions) {
313-
builder.suggestFunctionTypeAlias(declaration.declaredElement,
314-
kind: _defaultKind);
313+
builder.suggestTypeAlias(declaration.declaredElement, kind: _defaultKind);
315314
}
316315
}
317316

318317
@override
319318
void declaredGenericTypeAlias(GenericTypeAlias declaration) {
320319
if (opType.includeTypeNameSuggestions) {
321-
builder.suggestFunctionTypeAlias(declaration.declaredElement,
322-
kind: _defaultKind);
320+
builder.suggestTypeAlias(declaration.declaredElement, kind: _defaultKind);
323321
}
324322
}
325323

pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -382,11 +382,11 @@ class SuggestionBuilder {
382382
} else if (element is FunctionElement &&
383383
element.enclosingElement is CompilationUnitElement) {
384384
suggestTopLevelFunction(element, kind: kind);
385-
} else if (element is FunctionTypeAliasElement) {
386-
suggestFunctionTypeAlias(element, kind: kind);
387385
} else if (element is PropertyAccessorElement &&
388386
element.enclosingElement is CompilationUnitElement) {
389387
suggestTopLevelPropertyAccessor(element, kind: kind);
388+
} else if (element is TypeAliasElement) {
389+
suggestTypeAlias(element, kind: kind);
390390
} else {
391391
throw ArgumentError('Cannot suggest a ${element.runtimeType}');
392392
}
@@ -487,19 +487,6 @@ class SuggestionBuilder {
487487
));
488488
}
489489

490-
/// Add a suggestion for a [functionTypeAlias]. If a [kind] is provided it
491-
/// will be used as the kind for the suggestion. If the alias can only be
492-
/// referenced using a prefix, then the [prefix] should be provided.
493-
void suggestFunctionTypeAlias(FunctionTypeAliasElement functionTypeAlias,
494-
{CompletionSuggestionKind kind = CompletionSuggestionKind.INVOCATION,
495-
String prefix}) {
496-
var relevance = _computeTopLevelRelevance(functionTypeAlias,
497-
defaultRelevance: 750,
498-
elementType: _instantiateFunctionTypeAlias(functionTypeAlias));
499-
_add(_createSuggestion(functionTypeAlias,
500-
kind: kind, prefix: prefix, relevance: relevance));
501-
}
502-
503490
/// Add a suggestion for a [keyword]. The [offset] is the offset from the
504491
/// beginning of the keyword where the cursor will be left.
505492
void suggestKeyword(String keyword, {int offset}) {
@@ -863,6 +850,18 @@ class SuggestionBuilder {
863850
kind: kind, prefix: prefix, relevance: relevance));
864851
}
865852

853+
/// Add a suggestion for a [typeAlias]. If a [kind] is provided it
854+
/// will be used as the kind for the suggestion. If the alias can only be
855+
/// referenced using a prefix, then the [prefix] should be provided.
856+
void suggestTypeAlias(TypeAliasElement typeAlias,
857+
{CompletionSuggestionKind kind = CompletionSuggestionKind.INVOCATION,
858+
String prefix}) {
859+
var relevance = _computeTopLevelRelevance(typeAlias,
860+
defaultRelevance: 750, elementType: _instantiateTypeAlias(typeAlias));
861+
_add(_createSuggestion(typeAlias,
862+
kind: kind, prefix: prefix, relevance: relevance));
863+
}
864+
866865
/// Add a suggestion for a type [parameter].
867866
void suggestTypeParameter(TypeParameterElement parameter) {
868867
var elementKind = _computeElementKind(parameter);
@@ -1083,7 +1082,7 @@ class SuggestionBuilder {
10831082
);
10841083
}
10851084

1086-
FunctionType _instantiateFunctionTypeAlias(FunctionTypeAliasElement element) {
1085+
DartType _instantiateTypeAlias(TypeAliasElement element) {
10871086
var typeParameters = element.typeParameters;
10881087
var typeArguments = const <DartType>[];
10891088
if (typeParameters.isNotEmpty) {

pkg/analysis_server/test/abstract_context.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,6 @@ mixin WithNonFunctionTypeAliasesMixin on AbstractContextTest {
282282
@override
283283
String get testPackageLanguageVersion => null;
284284

285-
@nonVirtual
286285
@override
287286
void setUp() {
288287
super.setUp();

pkg/analysis_server/test/services/completion/dart/arglist_contributor_test.dart

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -715,8 +715,8 @@ foo({String children}) {}
715715
addTestSource('main() { int.parse("16", ^);}');
716716
await computeSuggestions();
717717
assertSuggestArgumentsAndTypes(namedArgumentsWithTypes: {
718-
'radix': 'int',
719-
'onError': 'int Function(String)'
718+
'radix': 'int?',
719+
'onError': 'int Function(String)?'
720720
});
721721
}
722722

@@ -725,8 +725,8 @@ foo({String children}) {}
725725
addTestSource('main() { int.parse("16", r^);}');
726726
await computeSuggestions();
727727
assertSuggestArgumentsAndTypes(namedArgumentsWithTypes: {
728-
'radix': 'int',
729-
'onError': 'int Function(String)'
728+
'radix': 'int?',
729+
'onError': 'int Function(String)?'
730730
});
731731
}
732732

@@ -735,7 +735,7 @@ foo({String children}) {}
735735
addTestSource('main() { int.parse("16", radix: 7, ^);}');
736736
await computeSuggestions();
737737
assertSuggestArgumentsAndTypes(
738-
namedArgumentsWithTypes: {'onError': 'int Function(String)'});
738+
namedArgumentsWithTypes: {'onError': 'int Function(String)?'});
739739
}
740740

741741
Future<void> test_ArgumentList_imported_function_named_param2a() async {
@@ -750,8 +750,8 @@ foo({String children}) {}
750750
addTestSource('main() { int.parse("16", r^: 16);}');
751751
await computeSuggestions();
752752
assertSuggestArgumentsAndTypes(namedArgumentsWithTypes: {
753-
'radix': 'int',
754-
'onError': 'int Function(String)'
753+
'radix': 'int?',
754+
'onError': 'int Function(String)?'
755755
}, includeColon: false);
756756
}
757757

@@ -767,8 +767,8 @@ foo({String children}) {}
767767
addTestSource('main() { int.parse("16", ^: 16);}');
768768
await computeSuggestions();
769769
assertSuggestArgumentsAndTypes(namedArgumentsWithTypes: {
770-
'radix': 'int',
771-
'onError': 'int Function(String)'
770+
'radix': 'int?',
771+
'onError': 'int Function(String)?'
772772
});
773773
}
774774

pkg/analysis_server/test/services/completion/dart/combinator_contributor_test.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ class CombinatorContributorTest extends DartCompletionContributorTest {
107107
assertSuggestFunction('F1', 'PB',
108108
kind: CompletionSuggestionKind.IDENTIFIER);
109109
assertSuggestClass('Clz', kind: CompletionSuggestionKind.IDENTIFIER);
110-
assertSuggestFunctionTypeAlias('F2', null,
110+
assertSuggestTypeAlias('F2', null,
111111
kind: CompletionSuggestionKind.IDENTIFIER);
112112
assertNotSuggested('C');
113113
assertNotSuggested('D');

pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart

Lines changed: 32 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,8 @@ abstract class DartCompletionContributorTest
6868
}
6969
}
7070

71-
abstract class _BaseDartCompletionContributorTest extends AbstractContextTest {
71+
abstract class _BaseDartCompletionContributorTest extends AbstractContextTest
72+
with WithNonFunctionTypeAliasesMixin {
7273
static const String _UNCHECKED = '__UNCHECKED__';
7374
String testFile;
7475
int completionOffset;
@@ -354,36 +355,6 @@ abstract class _BaseDartCompletionContributorTest extends AbstractContextTest {
354355
return cs;
355356
}
356357

357-
CompletionSuggestion assertSuggestFunctionTypeAlias(
358-
String name,
359-
String returnType, {
360-
bool isDeprecated = false,
361-
CompletionSuggestionKind kind = CompletionSuggestionKind.INVOCATION,
362-
}) {
363-
var cs = assertSuggest(name, csKind: kind, isDeprecated: isDeprecated);
364-
if (returnType != null) {
365-
expect(cs.returnType, returnType);
366-
} else if (isNullExpectedReturnTypeConsideredDynamic) {
367-
expect(cs.returnType, 'dynamic');
368-
} else {
369-
expect(cs.returnType, isNull);
370-
}
371-
var element = cs.element;
372-
expect(element, isNotNull);
373-
expect(element.kind, equals(ElementKind.FUNCTION_TYPE_ALIAS));
374-
expect(element.name, equals(name));
375-
expect(element.isDeprecated, equals(isDeprecated));
376-
// TODO (danrubel) Determine why params are null
377-
// String param = element.parameters;
378-
// expect(param, isNotNull);
379-
// expect(param[0], equals('('));
380-
// expect(param[param.length - 1], equals(')'));
381-
expect(element.returnType, equals(returnType ?? 'dynamic'));
382-
// TODO (danrubel) Determine why param info is missing
383-
// assertHasParameterInfo(cs);
384-
return cs;
385-
}
386-
387358
CompletionSuggestion assertSuggestGetter(String name, String returnType,
388359
{CompletionSuggestionKind kind = CompletionSuggestionKind.INVOCATION,
389360
bool isDeprecated = false}) {
@@ -529,6 +500,36 @@ abstract class _BaseDartCompletionContributorTest extends AbstractContextTest {
529500
return cs;
530501
}
531502

503+
CompletionSuggestion assertSuggestTypeAlias(
504+
String name,
505+
String returnType, {
506+
bool isDeprecated = false,
507+
CompletionSuggestionKind kind = CompletionSuggestionKind.INVOCATION,
508+
}) {
509+
var cs = assertSuggest(name, csKind: kind, isDeprecated: isDeprecated);
510+
if (returnType != null) {
511+
expect(cs.returnType, returnType);
512+
} else if (isNullExpectedReturnTypeConsideredDynamic) {
513+
expect(cs.returnType, 'dynamic');
514+
} else {
515+
expect(cs.returnType, isNull);
516+
}
517+
var element = cs.element;
518+
expect(element, isNotNull);
519+
expect(element.kind, equals(ElementKind.TYPE_ALIAS));
520+
expect(element.name, equals(name));
521+
expect(element.isDeprecated, equals(isDeprecated));
522+
// TODO (danrubel) Determine why params are null
523+
// String param = element.parameters;
524+
// expect(param, isNotNull);
525+
// expect(param[0], equals('('));
526+
// expect(param[param.length - 1], equals(')'));
527+
expect(element.returnType, equals(returnType ?? 'dynamic'));
528+
// TODO (danrubel) Determine why param info is missing
529+
// assertHasParameterInfo(cs);
530+
return cs;
531+
}
532+
532533
CompletionSuggestion assertSuggestTypeParameter(String name) {
533534
var cs = assertSuggest(name, csKind: CompletionSuggestionKind.IDENTIFIER);
534535
expect(cs.returnType, isNull);

pkg/analysis_server/test/services/completion/dart/imported_reference_contributor_test.dart

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2400,7 +2400,7 @@ class B extends A {
24002400
assertSuggestClass('Object');
24012401
assertNotSuggested('T1');
24022402
assertNotSuggested('F1');
2403-
assertSuggestFunctionTypeAlias('D1', 'dynamic');
2403+
assertSuggestTypeAlias('D1', 'dynamic');
24042404
assertSuggestClass('C1');
24052405
assertNotSuggested('T2');
24062406
assertNotSuggested('F2');
@@ -2430,7 +2430,7 @@ class B extends A {
24302430
assertSuggestClass('Object');
24312431
assertNotSuggested('T1');
24322432
assertNotSuggested('F1');
2433-
assertSuggestFunctionTypeAlias('D1', 'dynamic');
2433+
assertSuggestTypeAlias('D1', 'dynamic');
24342434
assertSuggestClass('C1');
24352435
assertNotSuggested('T2');
24362436
assertNotSuggested('F2');
@@ -2461,7 +2461,7 @@ class B extends A {
24612461
assertSuggestClass('Object');
24622462
assertNotSuggested('T1');
24632463
assertNotSuggested('F1');
2464-
assertSuggestFunctionTypeAlias('D1', 'dynamic');
2464+
assertSuggestTypeAlias('D1', 'dynamic');
24652465
assertSuggestClass('C1');
24662466
assertNotSuggested('T2');
24672467
assertNotSuggested('F2');
@@ -2498,7 +2498,7 @@ main() {
24982498
}
24992499
''');
25002500
await computeSuggestions();
2501-
assertSuggestFunctionTypeAlias('F', 'void');
2501+
assertSuggestTypeAlias('F', 'void');
25022502
}
25032503

25042504
Future<void> test_functionTypeAlias_old() async {
@@ -2513,7 +2513,7 @@ main() {
25132513
}
25142514
''');
25152515
await computeSuggestions();
2516-
assertSuggestFunctionTypeAlias('F', 'void');
2516+
assertSuggestTypeAlias('F', 'void');
25172517
}
25182518

25192519
Future<void> test_IfStatement() async {
@@ -2914,7 +2914,7 @@ main() {
29142914
// in which case suggestions will have null (unresolved) returnType
29152915
assertSuggestTopLevelVar('T1', null);
29162916
assertSuggestFunction('F1', null);
2917-
assertSuggestFunctionTypeAlias('D1', 'dynamic');
2917+
assertSuggestTypeAlias('D1', 'dynamic');
29182918
assertSuggestClass('C1');
29192919
assertNotSuggested('T2');
29202920
assertNotSuggested('F2');
@@ -3178,7 +3178,7 @@ main() {
31783178
// to be resolved.
31793179
assertSuggestTopLevelVar('T1', /* null */ 'int');
31803180
assertSuggestFunction('F1', /* null */ 'dynamic');
3181-
assertSuggestFunctionTypeAlias('D1', /* null */ 'dynamic');
3181+
assertSuggestTypeAlias('D1', /* null */ 'dynamic');
31823182
assertSuggestClass('C1');
31833183
assertNotSuggested('T2');
31843184
assertNotSuggested('F2');
@@ -3477,7 +3477,7 @@ class B {
34773477
assertSuggestClass('Object');
34783478
assertNotSuggested('T1');
34793479
assertNotSuggested('F1');
3480-
assertSuggestFunctionTypeAlias('D1', 'dynamic');
3480+
assertSuggestTypeAlias('D1', 'dynamic');
34813481
assertSuggestClass('C1');
34823482
assertNotSuggested('T2');
34833483
assertNotSuggested('F2');
@@ -3506,7 +3506,7 @@ class B {
35063506
assertSuggestClass('Object');
35073507
assertNotSuggested('T1');
35083508
assertNotSuggested('F1');
3509-
assertSuggestFunctionTypeAlias('D1', 'dynamic');
3509+
assertSuggestTypeAlias('D1', 'dynamic');
35103510
assertSuggestClass('C1');
35113511
assertNotSuggested('T2');
35123512
assertNotSuggested('F2');
@@ -3535,7 +3535,7 @@ class B {
35353535
assertSuggestClass('Object');
35363536
assertNotSuggested('T1');
35373537
assertNotSuggested('F1');
3538-
assertSuggestFunctionTypeAlias('D1', 'dynamic');
3538+
assertSuggestTypeAlias('D1', 'dynamic');
35393539
assertSuggestClass('C1');
35403540
assertNotSuggested('T2');
35413541
assertNotSuggested('F2');
@@ -3566,7 +3566,7 @@ class B {
35663566
assertSuggestClass('Object');
35673567
assertNotSuggested('T1');
35683568
assertNotSuggested('F1');
3569-
assertSuggestFunctionTypeAlias('D1', 'dynamic');
3569+
assertSuggestTypeAlias('D1', 'dynamic');
35703570
assertSuggestClass('C1');
35713571
assertNotSuggested('T2');
35723572
assertNotSuggested('F2');
@@ -4564,7 +4564,7 @@ class B extends A {
45644564
expect(replacementLength, 0);
45654565
assertSuggestClass('Object');
45664566
assertSuggestClass('C1');
4567-
assertSuggestFunctionTypeAlias('T1', 'String');
4567+
assertSuggestTypeAlias('T1', 'String');
45684568
assertNotSuggested('C2');
45694569
assertNotSuggested('T2');
45704570
assertNotSuggested('F1');

pkg/analysis_server/test/services/completion/dart/library_member_contributor_test.dart

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,10 @@ main() {
224224
lib B;
225225
var T1;
226226
class X { }
227-
class Y { }''');
227+
class Y { }
228+
typedef void TypeAliasLegacy();
229+
typedef TypeAliasFunctionType = void Function();
230+
typedef TypeAliasInterfaceType = List<int>;''');
228231
addTestSource('''
229232
import "b.dart" as b;
230233
var T2;
@@ -235,6 +238,9 @@ main() {
235238
expect(replacementLength, 0);
236239
assertSuggestClass('X');
237240
assertSuggestClass('Y');
241+
assertSuggestTypeAlias('TypeAliasLegacy', 'void');
242+
assertSuggestTypeAlias('TypeAliasFunctionType', 'void');
243+
assertSuggestTypeAlias('TypeAliasInterfaceType', 'List<int>');
238244
assertNotSuggested('T1');
239245
assertNotSuggested('T2');
240246
assertNotSuggested('Object');

0 commit comments

Comments
 (0)