Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit eb24e33

Browse files
author
Dart CI
committed
Version 2.10.0-137.0.dev
Merge commit '7da89dadafc7719b0feb7cd82518afe244019c15' into 'dev'
2 parents e41a600 + 7da89da commit eb24e33

File tree

33 files changed

+503
-165
lines changed

33 files changed

+503
-165
lines changed

DEPS

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ vars = {
142142
"source_map_stack_trace_rev": "1c3026f69d9771acf2f8c176a1ab750463309cce",
143143
"source_maps-0.9.4_rev": "38524",
144144
"source_maps_rev": "53eb92ccfe6e64924054f83038a534b959b12b3e",
145-
"source_span_rev": "94833d6cbf4552ebe5d2aa6714acecd93834e53a",
145+
"source_span_rev": "cc7c4288a83f71ecef3414199947b52a8c112c65",
146146
"sse_tag": "e5cf68975e8e87171a3dc297577aa073454a91dc",
147147
"stack_trace_tag": "d3813ca0a77348e0faf0d6af0cc17913e36afa39",
148148
"stagehand_tag": "v3.3.9",

pkg/_fe_analyzer_shared/test/flow_analysis/assigned_variables/data/for.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ forEach(int a, int b, int c) {
2323
}
2424
}
2525

26-
/*member: forEachWithDeclaration:declared={a, b, c}, assigned={a, b, c}*/
26+
/*member: forEachWithDeclaration:declared={a, b, c}, assigned={a, b}*/
2727
forEachWithDeclaration(int a, int b) {
2828
/*assigned={b}*/ for (var c in [a = 0]) {
2929
b = 0;

pkg/_fe_analyzer_shared/test/flow_analysis/assigned_variables/data/for_element.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ forEach(int a, int b, int c) {
1919
];
2020
}
2121

22-
/*member: forEachWithDeclaration:declared={a, b, c}, assigned={a, b, c}*/
22+
/*member: forEachWithDeclaration:declared={a, b, c}, assigned={a, b}*/
2323
forEachWithDeclaration(int a, int b) {
2424
[
2525
/*assigned={b}*/ for (var c in [a = 0]) (b = 0)
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
2+
// for details. All rights reserved. Use of this source code is governed by a
3+
// BSD-style license that can be found in the LICENSE file.
4+
5+
List<int Function()> f(List<num> nums) {
6+
List<int Function()> result = [];
7+
for (var n in nums) {
8+
if (n is int) {
9+
result.add(() => /*int*/ n);
10+
}
11+
}
12+
return result;
13+
}

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -786,7 +786,8 @@ class SuggestionBuilder {
786786
void suggestNamedArgument(ParameterElement parameter,
787787
{@required bool appendColon, @required bool appendComma}) {
788788
var name = parameter.name;
789-
var type = parameter.type?.getDisplayString(withNullability: false);
789+
var type = parameter.type?.getDisplayString(
790+
withNullability: request.libraryElement.isNonNullableByDefault);
790791

791792
var completion = name;
792793
if (appendColon) {
@@ -1286,7 +1287,8 @@ class SuggestionBuilder {
12861287
var paramType = parameter.type;
12871288
// Gracefully degrade if type not resolved yet
12881289
return paramType != null
1289-
? paramType.getDisplayString(withNullability: false)
1290+
? paramType.getDisplayString(
1291+
withNullability: request.libraryElement.isNonNullableByDefault)
12901292
: 'var';
12911293
}).toList();
12921294

pkg/analysis_server/lib/src/services/completion/token_details/token_detail_builder.dart

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,8 @@ class TokenDetailBuilder {
115115
} else if (type is InterfaceType) {
116116
Element element = type.element;
117117
if (element == null || element.isSynthetic) {
118+
assert(false, "untested branch may print nullable types wrong");
119+
// TODO: test this, use the the library's nullability (not tracked yet).
118120
buffer.write(type.getDisplayString(withNullability: false));
119121
} else {
120122
// String uri = element.library.source.uri.toString();
@@ -132,7 +134,9 @@ class TokenDetailBuilder {
132134
}
133135
}
134136
} else {
135-
// Handle `void` and `dynamic`.
137+
// Handle `void` and `dynamic`. Nullability doesn't affect this.
138+
assert(type.getDisplayString(withNullability: false) ==
139+
type.getDisplayString(withNullability: true));
136140
buffer.write(type.getDisplayString(withNullability: false));
137141
}
138142
}

pkg/analysis_server/lib/src/services/correction/fix/data_driven/add_type_parameter.dart

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,19 +23,18 @@ class AddTypeParameter extends Change<_Data> {
2323
final String extendedType;
2424

2525
/// The value extractor used to compute the value of the type argument.
26-
final ValueExtractor value;
26+
final ValueExtractor argumentValue;
2727

2828
/// Initialize a newly created change to describe adding a type parameter to a
2929
/// type or a function.
30-
// TODO(brianwilkerson) Support adding multiple type parameters.
3130
AddTypeParameter(
3231
{@required this.index,
3332
@required this.name,
34-
@required this.value,
33+
@required this.argumentValue,
3534
this.extendedType})
3635
: assert(index >= 0),
3736
assert(name != null),
38-
assert(value != null);
37+
assert(argumentValue != null);
3938

4039
@override
4140
void apply(DartFileEditBuilder builder, DataDrivenFix fix, _Data data) {
@@ -54,7 +53,7 @@ class AddTypeParameter extends Change<_Data> {
5453
if (node is NamedType) {
5554
// wrong_number_of_type_arguments
5655
// wrong_number_of_type_arguments_constructor
57-
var argument = value.from(node, fix.utils);
56+
var argument = argumentValue.from(node, fix.utils);
5857
if (argument == null) {
5958
return null;
6059
}
@@ -67,7 +66,7 @@ class AddTypeParameter extends Change<_Data> {
6766
var parent = node.parent;
6867
if (parent is InvocationExpression) {
6968
// wrong_number_of_type_arguments_method
70-
var argument = value.from(parent, fix.utils);
69+
var argument = argumentValue.from(parent, fix.utils);
7170
if (argument == null) {
7271
return null;
7372
}
@@ -86,7 +85,7 @@ class AddTypeParameter extends Change<_Data> {
8685
return _TypeParameterData(typeParameters, parent.name.end);
8786
} else if (node is TypeArgumentList && parent is ExtensionOverride) {
8887
// wrong_number_of_type_arguments_extension
89-
var argument = value.from(node, fix.utils);
88+
var argument = argumentValue.from(node, fix.utils);
9089
if (argument == null) {
9190
return null;
9291
}
@@ -120,6 +119,8 @@ class AddTypeParameter extends Change<_Data> {
120119

121120
void _applyToTypeParameters(
122121
DartFileEditBuilder builder, _TypeParameterData data) {
122+
// TODO(brianwilkerson) Define a `bound` to use in the declaration of the
123+
// parameter.
123124
var argumentValue =
124125
extendedType == null ? name : '$name extends $extendedType';
125126
var typeParameters = data.typeParameters;

pkg/analysis_server/lib/src/services/correction/fix/data_driven/transform_set_parser.dart

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,6 @@ class TransformSetParser {
6161
static const String _transformsKey = 'transforms';
6262
static const String _typedefKey = 'typedef';
6363
static const String _urisKey = 'uris';
64-
static const String _valueKey = 'value';
6564
static const String _versionKey = 'version';
6665

6766
/// A table mapping top-level keys for member elements to the list of keys for
@@ -261,18 +260,24 @@ class TransformSetParser {
261260
/// add-type-parameter change.
262261
AddTypeParameter _translateAddTypeParameterChange(YamlMap node) {
263262
_reportUnsupportedKeys(
264-
node, const {_indexKey, _kindKey, _nameKey, _valueKey});
263+
node, const {_indexKey, _kindKey, _nameKey, _argumentValueKey});
265264
var index = _translateInteger(node.valueAt(_indexKey),
266265
ErrorContext(key: _indexKey, parentNode: node));
267266
var name = _translateString(
268267
node.valueAt(_nameKey), ErrorContext(key: _nameKey, parentNode: node));
269-
var value = _translateValueExtractor(node.valueAt(_valueKey),
270-
ErrorContext(key: _valueKey, parentNode: node));
271-
if (index == null || name == null || value == null) {
268+
// TODO(brianwilkerson) In order to support adding multiple type parameters
269+
// we might need to introduce a `TypeParameterModification` change, similar
270+
// to `ParameterModification`. That becomes more likely if we add support
271+
// for removing type parameters.
272+
var argumentValue = _translateValueExtractor(
273+
node.valueAt(_argumentValueKey),
274+
ErrorContext(key: _argumentValueKey, parentNode: node));
275+
if (index == null || name == null || argumentValue == null) {
272276
// The error has already been reported.
273277
return null;
274278
}
275-
return AddTypeParameter(index: index, name: name, value: value);
279+
return AddTypeParameter(
280+
index: index, name: name, argumentValue: argumentValue);
276281
}
277282

278283
/// Translate the [node] into a value extractor. Return the resulting

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

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
66
import 'package:analysis_server/src/services/completion/dart/arglist_contributor.dart';
7+
import 'package:analyzer/src/dart/analysis/experiments.dart';
78
import 'package:analyzer_plugin/protocol/protocol_common.dart';
89
import 'package:test/test.dart';
910
import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -1077,6 +1078,50 @@ main() { f("16", radix: ^);}''');
10771078
assertNoSuggestions();
10781079
}
10791080

1081+
Future<void> test_ArgumentList_nnbd_function_named_param() async {
1082+
createAnalysisOptionsFile(experiments: [EnableString.non_nullable]);
1083+
addTestSource(r'''
1084+
f({int? nullable, int nonnullable}) {}
1085+
main() { f(^);}');
1086+
''');
1087+
await computeSuggestions();
1088+
assertSuggestArgumentsAndTypes(namedArgumentsWithTypes: {
1089+
'nullable': 'int?',
1090+
'nonnullable': 'int',
1091+
});
1092+
}
1093+
1094+
Future<void> test_ArgumentList_nnbd_function_named_param_imported() async {
1095+
createAnalysisOptionsFile(experiments: [EnableString.non_nullable]);
1096+
addSource('/home/test/lib/a.dart', '''
1097+
f({int? nullable, int nonnullable}) {}''');
1098+
createAnalysisOptionsFile(experiments: [EnableString.non_nullable]);
1099+
addTestSource(r'''
1100+
import "a.dart";
1101+
main() { f(^);}');
1102+
''');
1103+
await computeSuggestions();
1104+
assertSuggestArgumentsAndTypes(namedArgumentsWithTypes: {
1105+
'nullable': 'int?',
1106+
'nonnullable': 'int',
1107+
});
1108+
}
1109+
1110+
Future<void> test_ArgumentList_nnbd_function_named_param_legacy() async {
1111+
createAnalysisOptionsFile(experiments: [EnableString.non_nullable]);
1112+
addSource('/home/test/lib/a.dart', '''
1113+
// @dart = 2.8
1114+
f({int named}) {}''');
1115+
addTestSource(r'''
1116+
import "a.dart";
1117+
main() { f(^);}');
1118+
''');
1119+
await computeSuggestions();
1120+
assertSuggestArgumentsAndTypes(namedArgumentsWithTypes: {
1121+
'named': 'int*',
1122+
});
1123+
}
1124+
10801125
Future<void> test_superConstructorInvocation() async {
10811126
addTestSource('''
10821127
class A {

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

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import 'package:analysis_server/src/protocol_server.dart';
66
import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
77
import 'package:analysis_server/src/services/completion/dart/imported_reference_contributor.dart';
8+
import 'package:analyzer/src/dart/analysis/experiments.dart';
89
import 'package:test/test.dart';
910
import 'package:test_reflective_loader/test_reflective_loader.dart';
1011

@@ -2302,6 +2303,69 @@ class B extends A {
23022303
expect(suggestion.hasNamedParameters, true);
23032304
}
23042305

2306+
Future<void> test_function_parameters_nnbd_required() async {
2307+
createAnalysisOptionsFile(experiments: [EnableString.non_nullable]);
2308+
resolveSource('/home/test/lib/a.dart', '''
2309+
void m(int? nullable, int nonNullable) {}
2310+
''');
2311+
addTestSource('''
2312+
import 'a.dart';
2313+
2314+
main() {^}
2315+
''');
2316+
await computeSuggestions();
2317+
var suggestion = assertSuggestFunction('m', 'void');
2318+
expect(suggestion.parameterNames, hasLength(2));
2319+
expect(suggestion.parameterNames[0], 'nullable');
2320+
expect(suggestion.parameterTypes[0], 'int?');
2321+
expect(suggestion.parameterNames[1], 'nonNullable');
2322+
expect(suggestion.parameterTypes[1], 'int');
2323+
expect(suggestion.requiredParameterCount, 2);
2324+
expect(suggestion.hasNamedParameters, false);
2325+
}
2326+
2327+
Future<void> test_function_parameters_nnbd_required_into_legacy() async {
2328+
createAnalysisOptionsFile(experiments: [EnableString.non_nullable]);
2329+
resolveSource('/home/test/lib/a.dart', '''
2330+
void m(int? nullable, int nonNullable) {}
2331+
''');
2332+
addTestSource('''
2333+
// @dart = 2.8
2334+
import 'a.dart';
2335+
2336+
main() {^}
2337+
''');
2338+
await computeSuggestions();
2339+
var suggestion = assertSuggestFunction('m', 'void');
2340+
expect(suggestion.parameterNames, hasLength(2));
2341+
expect(suggestion.parameterNames[0], 'nullable');
2342+
expect(suggestion.parameterTypes[0], 'int');
2343+
expect(suggestion.parameterNames[1], 'nonNullable');
2344+
expect(suggestion.parameterTypes[1], 'int');
2345+
expect(suggestion.requiredParameterCount, 2);
2346+
expect(suggestion.hasNamedParameters, false);
2347+
}
2348+
2349+
Future<void> test_function_parameters_nnbd_required_legacy() async {
2350+
createAnalysisOptionsFile(experiments: [EnableString.non_nullable]);
2351+
resolveSource('/home/test/lib/a.dart', '''
2352+
// @dart = 2.8
2353+
void m(int param) {}
2354+
''');
2355+
addTestSource('''
2356+
import 'a.dart';
2357+
2358+
main() {^}
2359+
''');
2360+
await computeSuggestions();
2361+
var suggestion = assertSuggestFunction('m', 'void');
2362+
expect(suggestion.parameterNames, hasLength(1));
2363+
expect(suggestion.parameterNames[0], 'param');
2364+
expect(suggestion.parameterTypes[0], 'int*');
2365+
expect(suggestion.requiredParameterCount, 1);
2366+
expect(suggestion.hasNamedParameters, false);
2367+
}
2368+
23052369
Future<void> test_function_parameters_none() async {
23062370
resolveSource('/home/test/lib/a.dart', '''
23072371
void m() {}

pkg/analysis_server/test/src/services/correction/fix/data_driven/add_type_parameter_test.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -468,6 +468,6 @@ abstract class _AddTypeParameterChange extends DataDrivenFixProcessorTest {
468468
extendedType: extendedType,
469469
index: index,
470470
name: 'T',
471-
value: LiteralExtractor('String')),
471+
argumentValue: LiteralExtractor('String')),
472472
]);
473473
}

pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/invalid_value_test.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -152,9 +152,9 @@ transforms:
152152
- kind: 'addTypeParameter'
153153
index: 1
154154
name: 'T'
155-
value: 'int'
155+
argumentValue: 'int'
156156
''', [
157-
error(TransformSetErrorCode.invalidValue, 198, 5),
157+
error(TransformSetErrorCode.invalidValue, 206, 5),
158158
]);
159159
}
160160
}

pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/missing_key_test.dart

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ transforms:
9797
]);
9898
}
9999

100-
void test_addTypeParameterChange_index() {
100+
void test_addTypeParameterChange_argumentValue() {
101101
assertErrors('''
102102
version: 1
103103
transforms:
@@ -108,16 +108,14 @@ transforms:
108108
function: 'f'
109109
changes:
110110
- kind: 'addTypeParameter'
111+
index: 0
111112
name: 'a'
112-
value:
113-
kind: 'argument'
114-
index: 0
115113
''', [
116-
error(TransformSetErrorCode.missingKey, 124, 96),
114+
error(TransformSetErrorCode.missingKey, 124, 56),
117115
]);
118116
}
119117

120-
void test_addTypeParameterChange_name() {
118+
void test_addTypeParameterChange_index() {
121119
assertErrors('''
122120
version: 1
123121
transforms:
@@ -128,16 +126,16 @@ transforms:
128126
function: 'f'
129127
changes:
130128
- kind: 'addTypeParameter'
131-
index: 0
132-
value:
129+
name: 'a'
130+
argumentValue:
133131
kind: 'argument'
134132
index: 0
135133
''', [
136-
error(TransformSetErrorCode.missingKey, 124, 95),
134+
error(TransformSetErrorCode.missingKey, 124, 104),
137135
]);
138136
}
139137

140-
void test_addTypeParameterChange_value() {
138+
void test_addTypeParameterChange_name() {
141139
assertErrors('''
142140
version: 1
143141
transforms:
@@ -149,9 +147,11 @@ transforms:
149147
changes:
150148
- kind: 'addTypeParameter'
151149
index: 0
152-
name: 'a'
150+
argumentValue:
151+
kind: 'argument'
152+
index: 0
153153
''', [
154-
error(TransformSetErrorCode.missingKey, 124, 56),
154+
error(TransformSetErrorCode.missingKey, 124, 103),
155155
]);
156156
}
157157

0 commit comments

Comments
 (0)