Skip to content

Commit 372cb6b

Browse files
author
danrubel
committed
fix combinator contributor
gracefully degrade given partially element information better reporting of exceptions during testing [email protected] Review URL: https://codereview.chromium.org/1506623002 .
1 parent 109ccda commit 372cb6b

File tree

5 files changed

+29
-23
lines changed

5 files changed

+29
-23
lines changed

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

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,12 @@ CompletionSuggestion createSuggestion(Element element,
5252
suggestion.parameterNames = element.parameters
5353
.map((ParameterElement parameter) => parameter.name)
5454
.toList();
55-
suggestion.parameterTypes = element.parameters
56-
.map((ParameterElement parameter) => parameter.type.displayName)
57-
.toList();
55+
suggestion.parameterTypes =
56+
element.parameters.map((ParameterElement parameter) {
57+
DartType paramType = parameter.type;
58+
// Gracefully degrade if type not resolved yet
59+
return paramType != null ? paramType.displayName : 'var';
60+
}).toList();
5861
suggestion.requiredParameterCount = element.parameters
5962
.where((ParameterElement parameter) =>
6063
parameter.parameterKind == ParameterKind.REQUIRED)

pkg/analysis_server/test/completion_test.dart

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1121,44 +1121,38 @@ main(A a) {
11211121
buildTests(
11221122
'testCompletion_combinator_afterComma',
11231123
'''
1124-
"import 'dart:math' show cos, !1;''',
1125-
<String>["1+PI", "1+sin", "1+Random", "1-String"],
1126-
failingTests: '1');
1124+
import 'dart:math' show cos, !1;''',
1125+
<String>["1+PI", "1+sin", "1+Random", "1-String"]);
11271126

11281127
buildTests(
11291128
'testCompletion_combinator_ended',
11301129
'''
11311130
import 'dart:math' show !1;"''',
1132-
<String>["1+PI", "1+sin", "1+Random", "1-String"],
1133-
failingTests: '1');
1131+
<String>["1+PI", "1+sin", "1+Random", "1-String"]);
11341132

11351133
buildTests(
11361134
'testCompletion_combinator_export',
11371135
'''
11381136
export 'dart:math' show !1;"''',
1139-
<String>["1+PI", "1+sin", "1+Random", "1-String"],
1140-
failingTests: '1');
1137+
<String>["1+PI", "1+sin", "1+Random", "1-String"]);
11411138

11421139
buildTests(
11431140
'testCompletion_combinator_hide',
11441141
'''
11451142
import 'dart:math' hide !1;"''',
1146-
<String>["1+PI", "1+sin", "1+Random", "1-String"],
1147-
failingTests: '1');
1143+
<String>["1+PI", "1+sin", "1+Random", "1-String"]);
11481144

11491145
buildTests(
11501146
'testCompletion_combinator_notEnded',
11511147
'''
11521148
import 'dart:math' show !1"''',
1153-
<String>["1+PI", "1+sin", "1+Random", "1-String"],
1154-
failingTests: '1');
1149+
<String>["1+PI", "1+sin", "1+Random", "1-String"]);
11551150

11561151
buildTests(
11571152
'testCompletion_combinator_usePrefix',
11581153
'''
11591154
import 'dart:math' show s!1"''',
1160-
<String>["1+sin", "1+sqrt", "1-cos", "1-String"],
1161-
failingTests: '1');
1155+
<String>["1+sin", "1+sqrt", "1-cos", "1-String"]);
11621156

11631157
buildTests(
11641158
'testCompletion_constructor_field',

pkg/analysis_server/test/domain_completion_test.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -358,6 +358,8 @@ class CompletionTest extends AbstractAnalysisTest {
358358
expect(suggestionsDone, isNotNull);
359359
suggestions = params.results;
360360
}
361+
} else if (notification.event == SERVER_ERROR) {
362+
fail('server error: ${notification.toJson()}');
361363
}
362364
}
363365

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

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,8 @@ class CombinatorContributorTest extends DartCompletionContributorTest {
7676
assertSuggestClass('PB',
7777
relevance: DART_RELEVANCE_DEFAULT,
7878
kind: CompletionSuggestionKind.IDENTIFIER);
79-
assertSuggestTopLevelVar('T1', null, DART_RELEVANCE_DEFAULT,
80-
CompletionSuggestionKind.IDENTIFIER);
79+
assertSuggestTopLevelVar('T1', null,
80+
kind: CompletionSuggestionKind.IDENTIFIER);
8181
assertSuggestFunction('F1', 'PB',
8282
kind: CompletionSuggestionKind.IDENTIFIER);
8383
assertNotSuggested('C');
@@ -127,8 +127,8 @@ class CombinatorContributorTest extends DartCompletionContributorTest {
127127
assertSuggestClass('PB',
128128
relevance: DART_RELEVANCE_DEFAULT,
129129
kind: CompletionSuggestionKind.IDENTIFIER);
130-
assertSuggestTopLevelVar('T1', null, DART_RELEVANCE_DEFAULT,
131-
CompletionSuggestionKind.IDENTIFIER);
130+
assertSuggestTopLevelVar('T1', null,
131+
kind: CompletionSuggestionKind.IDENTIFIER);
132132
assertSuggestFunction('F1', 'PB',
133133
kind: CompletionSuggestionKind.IDENTIFIER);
134134
assertSuggestClass('Clz',
@@ -141,4 +141,11 @@ class CombinatorContributorTest extends DartCompletionContributorTest {
141141
assertNotSuggested('X');
142142
assertNotSuggested('Object');
143143
}
144+
145+
test_Combinator_show_PI() async {
146+
addTestSource('import "dart:math" show ^;');
147+
await computeSuggestions();
148+
assertSuggestTopLevelVar('PI', 'double',
149+
kind: CompletionSuggestionKind.IDENTIFIER);
150+
}
144151
}

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -215,9 +215,9 @@ abstract class DartCompletionContributorTest extends AbstractContextTest {
215215
}
216216

217217
CompletionSuggestion assertSuggestTopLevelVar(String name, String returnType,
218-
[int relevance = DART_RELEVANCE_DEFAULT,
219-
CompletionSuggestionKind kind = CompletionSuggestionKind.INVOCATION,
220-
String importUri]) {
218+
{int relevance: DART_RELEVANCE_DEFAULT,
219+
CompletionSuggestionKind kind: CompletionSuggestionKind.INVOCATION,
220+
String importUri}) {
221221
CompletionSuggestion cs = assertSuggest(name,
222222
csKind: kind, relevance: relevance, importUri: importUri);
223223
expect(cs.returnType, returnType != null ? returnType : 'dynamic');

0 commit comments

Comments
 (0)