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

Commit 2e9c430

Browse files
author
Dart CI
committed
Version 2.14.0-182.0.dev
Merge commit 'e1f37f602954681b64ffcd37900f44ef857afd0b' into 'dev'
2 parents 202c42e + e1f37f6 commit 2e9c430

40 files changed

+753
-632
lines changed

benchmarks/SDKArtifactSizes/dart/SDKArtifactSizes.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ const snapshots = <String>[
3535

3636
Future<void> reportArtifactSize(String path, String name) async {
3737
final size = await File(path).length();
38-
print('SDKArtifactSize.$name(CodeSize): $size');
38+
print('SDKArtifactSizes.$name(CodeSize): $size');
3939
}
4040

4141
Future<void> main() async {

benchmarks/SDKArtifactSizes/dart2/SDKArtifactSizes.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ const snapshots = <String>[
3535

3636
Future<void> reportArtifactSize(String path, String name) async {
3737
final size = await File(path).length();
38-
print('SDKArtifactSize.$name(CodeSize): $size');
38+
print('SDKArtifactSizes.$name(CodeSize): $size');
3939
}
4040

4141
Future<void> main() async {

pkg/analysis_server/lib/src/cider/rename.dart

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,27 @@
44

55
import 'package:analysis_server/src/services/refactoring/refactoring.dart';
66
import 'package:analyzer/dart/element/element.dart';
7+
import 'package:analyzer/source/line_info.dart';
78
import 'package:analyzer/src/dart/ast/utilities.dart';
89
import 'package:analyzer/src/dart/micro/resolve_file.dart';
910
import 'package:analyzer/src/dart/micro/utils.dart';
1011

12+
class CanRenameResponse {
13+
final LineInfo lineInfo;
14+
final RenameRefactoringElement refactoringElement;
15+
final String oldName;
16+
17+
CanRenameResponse(this.lineInfo, this.refactoringElement, this.oldName);
18+
}
19+
1120
class CiderRenameComputer {
1221
final FileResolver _fileResolver;
1322

1423
CiderRenameComputer(this._fileResolver);
1524

1625
/// Check if the identifier at the [line], [column] for the file at the
1726
/// [filePath] can be renamed.
18-
RenameRefactoringElement? canRename(String filePath, int line, int column) {
27+
CanRenameResponse? canRename(String filePath, int line, int column) {
1928
var resolvedUnit = _fileResolver.resolve(path: filePath);
2029
var lineInfo = resolvedUnit.lineInfo;
2130
var offset = lineInfo.getOffsetOfLine(line) + column;
@@ -35,7 +44,11 @@ class CiderRenameComputer {
3544
if (!_canRenameElement(element)) {
3645
return null;
3746
}
38-
return RenameRefactoring.getElementToRename(node, element);
47+
var refactoring = RenameRefactoring.getElementToRename(node, element);
48+
if (refactoring != null) {
49+
return CanRenameResponse(lineInfo, refactoring, element.displayName);
50+
}
51+
return null;
3952
}
4053

4154
bool _canRenameElement(Element element) {

pkg/analysis_server/test/src/cider/rename_test.dart

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
// BSD-style license that can be found in the LICENSE file.
44

55
import 'package:analysis_server/src/cider/rename.dart';
6-
import 'package:analysis_server/src/services/refactoring/refactoring.dart';
76
import 'package:analyzer/source/line_info.dart';
87
import 'package:test/test.dart';
98
import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -31,8 +30,8 @@ class A {
3130
''');
3231

3332
expect(refactor, isNotNull);
34-
expect(refactor!.element.name, 'bar');
35-
expect(refactor.offset, _correctionContext.offset);
33+
expect(refactor!.refactoringElement.element.name, 'bar');
34+
expect(refactor.refactoringElement.offset, _correctionContext.offset);
3635
}
3736

3837
void test_canRename_function() {
@@ -42,8 +41,8 @@ void ^foo() {
4241
''');
4342

4443
expect(refactor, isNotNull);
45-
expect(refactor!.element.name, 'foo');
46-
expect(refactor.offset, _correctionContext.offset);
44+
expect(refactor!.refactoringElement.element.name, 'foo');
45+
expect(refactor.refactoringElement.offset, _correctionContext.offset);
4746
}
4847

4948
void test_canRename_label() {
@@ -58,8 +57,8 @@ main() {
5857
''');
5958

6059
expect(refactor, isNotNull);
61-
expect(refactor!.element.name, 'myLabel');
62-
expect(refactor.offset, _correctionContext.offset);
60+
expect(refactor!.refactoringElement.element.name, 'myLabel');
61+
expect(refactor.refactoringElement.offset, _correctionContext.offset);
6362
}
6463

6564
void test_canRename_local() {
@@ -70,8 +69,8 @@ void foo() {
7069
''');
7170

7271
expect(refactor, isNotNull);
73-
expect(refactor!.element.name, 'a');
74-
expect(refactor.offset, _correctionContext.offset);
72+
expect(refactor!.refactoringElement.element.name, 'a');
73+
expect(refactor.refactoringElement.offset, _correctionContext.offset);
7574
}
7675

7776
void test_canRename_method() {
@@ -82,8 +81,8 @@ extension E on int {
8281
''');
8382

8483
expect(refactor, isNotNull);
85-
expect(refactor!.element.name, 'foo');
86-
expect(refactor.offset, _correctionContext.offset);
84+
expect(refactor!.refactoringElement.element.name, 'foo');
85+
expect(refactor.refactoringElement.offset, _correctionContext.offset);
8786
}
8887

8988
void test_canRename_operator() {
@@ -104,11 +103,11 @@ void foo(int ^bar) {
104103
''');
105104

106105
expect(refactor, isNotNull);
107-
expect(refactor!.element.name, 'bar');
108-
expect(refactor.offset, _correctionContext.offset);
106+
expect(refactor!.refactoringElement.element.name, 'bar');
107+
expect(refactor.refactoringElement.offset, _correctionContext.offset);
109108
}
110109

111-
RenameRefactoringElement? _compute(String content) {
110+
CanRenameResponse? _compute(String content) {
112111
_updateFile(content);
113112

114113
return CiderRenameComputer(

pkg/analyzer/lib/src/dart/constant/evaluation.dart

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -822,11 +822,12 @@ class ConstantEvaluationEngine {
822822
DartObjectImpl obj,
823823
DartType type,
824824
) {
825-
if (obj.isNull) {
826-
return true;
825+
var typeSystem = library.typeSystem;
826+
if (!typeSystem.isNonNullableByDefault) {
827+
type = typeSystem.toLegacyType(type);
827828
}
828829
var objType = obj.type;
829-
return library.typeSystem.isSubtypeOf(objType, type);
830+
return typeSystem.isSubtypeOf(objType, type);
830831
}
831832

832833
DartObjectImpl _nullObject(LibraryElementImpl library) {

pkg/analyzer/test/generated/constant_test.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ class C {
5050
"const Center(name: 'v')",
5151
context: '''
5252
class Align {
53-
final double widthFactor;
53+
final double? widthFactor;
5454
const Align({String name, this.widthFactor})
5555
assert(widthFactor == null || widthFactor >= 0.0);
5656
}

pkg/analyzer/test/src/diagnostics/const_constructor_field_type_mismatch_test.dart

Lines changed: 62 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ main() {
1515

1616
@reflectiveTest
1717
class ConstConstructorFieldTypeMismatchTest extends PubPackageResolutionTest {
18-
test_assignable_generic() async {
18+
test_generic_int_int() async {
1919
await assertErrorsInCode(
2020
r'''
2121
class C<T> {
@@ -31,65 +31,95 @@ var v = const C<int>();
3131
);
3232
}
3333

34-
test_assignable_nullValue() async {
35-
await assertNoErrorsInCode(r'''
36-
class A {
37-
const A(x) : y = x;
38-
final int y;
34+
test_generic_string_int() async {
35+
await assertErrorsInCode(
36+
r'''
37+
class C<T> {
38+
final T x = y;
39+
const C();
3940
}
40-
var v = const A(null);
41-
''');
41+
const int y = 1;
42+
var v = const C<String>();
43+
''',
44+
[
45+
error(CompileTimeErrorCode.INVALID_ASSIGNMENT, 27, 1),
46+
error(
47+
CompileTimeErrorCode.CONST_CONSTRUCTOR_FIELD_TYPE_MISMATCH, 70, 17),
48+
],
49+
);
4250
}
4351

44-
test_assignable_unresolvedFieldAndNullValue() async {
52+
test_notGeneric_int_int() async {
4553
await assertErrorsInCode(r'''
4654
class A {
4755
const A(x) : y = x;
48-
final Unresolved y;
56+
final int y;
4957
}
50-
var v = const A(null);
58+
var v = const A('foo');
5159
''', [
52-
error(CompileTimeErrorCode.UNDEFINED_CLASS, 40, 10),
60+
error(CompileTimeErrorCode.CONST_CONSTRUCTOR_FIELD_TYPE_MISMATCH, 57, 14),
5361
]);
5462
}
5563

56-
test_notAssignable() async {
64+
test_notGeneric_int_null() async {
65+
var errors = expectedErrorsByNullability(nullable: [
66+
error(CompileTimeErrorCode.CONST_CONSTRUCTOR_FIELD_TYPE_MISMATCH, 57, 13),
67+
], legacy: []);
5768
await assertErrorsInCode(r'''
5869
class A {
5970
const A(x) : y = x;
6071
final int y;
6172
}
62-
var v = const A('foo');
73+
var v = const A(null);
74+
''', errors);
75+
}
76+
77+
test_notGeneric_null_forNonNullable_fromLegacy() async {
78+
newFile('$testPackageLibPath/a.dart', content: r'''
79+
class C {
80+
final int f;
81+
const C(a) : f = a;
82+
}
83+
''');
84+
await assertNoErrorsInCode('''
85+
// @dart = 2.9
86+
import 'a.dart';
87+
const a = const C(null);
88+
''');
89+
}
90+
91+
test_notGeneric_null_forNonNullable_fromNullSafe() async {
92+
await assertErrorsInCode('''
93+
class C {
94+
final int f;
95+
const C(a) : f = a;
96+
}
97+
98+
const a = const C(null);
6399
''', [
64-
error(CompileTimeErrorCode.CONST_CONSTRUCTOR_FIELD_TYPE_MISMATCH, 57, 14),
100+
error(CompileTimeErrorCode.CONST_CONSTRUCTOR_FIELD_TYPE_MISMATCH, 60, 13),
65101
]);
66102
}
67103

68-
test_notAssignable_generic() async {
69-
await assertErrorsInCode(
70-
r'''
71-
class C<T> {
72-
final T x = y;
73-
const C();
104+
test_notGeneric_unresolved_int() async {
105+
await assertErrorsInCode(r'''
106+
class A {
107+
const A(x) : y = x;
108+
final Unresolved y;
74109
}
75-
const int y = 1;
76-
var v = const C<String>();
77-
''',
78-
[
79-
error(CompileTimeErrorCode.INVALID_ASSIGNMENT, 27, 1),
80-
error(
81-
CompileTimeErrorCode.CONST_CONSTRUCTOR_FIELD_TYPE_MISMATCH, 70, 17),
82-
],
83-
);
110+
var v = const A(0);
111+
''', [
112+
error(CompileTimeErrorCode.UNDEFINED_CLASS, 40, 10),
113+
]);
84114
}
85115

86-
test_notAssignable_unresolved() async {
116+
test_notGeneric_unresolved_null() async {
87117
await assertErrorsInCode(r'''
88118
class A {
89119
const A(x) : y = x;
90120
final Unresolved y;
91121
}
92-
var v = const A('foo');
122+
var v = const A(null);
93123
''', [
94124
error(CompileTimeErrorCode.UNDEFINED_CLASS, 40, 10),
95125
]);

pkg/analyzer/test/src/diagnostics/list_element_type_not_assignable_test.dart

Lines changed: 39 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,19 @@ main() {
1111
defineReflectiveSuite(() {
1212
defineReflectiveTests(ListElementTypeNotAssignableTest);
1313
defineReflectiveTests(ListElementTypeNotAssignableWithNoImplicitCastsTest);
14+
defineReflectiveTests(ListElementTypeNotAssignableWithoutNullSafetyTest);
1415
});
1516
}
1617

1718
@reflectiveTest
1819
class ListElementTypeNotAssignableTest extends PubPackageResolutionTest
19-
with ListElementTypeNotAssignableTestCases {}
20+
with ListElementTypeNotAssignableTestCases {
21+
test_const_stringQuestion_null_value() async {
22+
await assertNoErrorsInCode('''
23+
var v = const <String?>[null];
24+
''');
25+
}
26+
}
2027

2128
mixin ListElementTypeNotAssignableTestCases on PubPackageResolutionTest {
2229
test_const_ifElement_thenElseFalse_intInt() async {
@@ -68,6 +75,32 @@ var v = const <int>[if (true) a];
6875
]);
6976
}
7077

78+
test_const_intInt() async {
79+
await assertNoErrorsInCode(r'''
80+
var v1 = <int> [42];
81+
var v2 = const <int> [42];
82+
''');
83+
}
84+
85+
test_const_intNull_dynamic() async {
86+
var errors = expectedErrorsByNullability(nullable: [
87+
error(CompileTimeErrorCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE, 36, 1),
88+
], legacy: []);
89+
await assertErrorsInCode('''
90+
const a = null;
91+
var v = const <int>[a];
92+
''', errors);
93+
}
94+
95+
test_const_intNull_value() async {
96+
var errors = expectedErrorsByNullability(nullable: [
97+
error(CompileTimeErrorCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE, 20, 4),
98+
], legacy: []);
99+
await assertErrorsInCode('''
100+
var v = const <int>[null];
101+
''', errors);
102+
}
103+
71104
test_const_spread_intInt() async {
72105
await assertNoErrorsInCode('''
73106
var v = const <int>[...[0, 1]];
@@ -91,32 +124,12 @@ var v = const <String>[x];
91124
]);
92125
}
93126

94-
test_const_stringNull() async {
95-
await assertNoErrorsInCode('''
96-
var v = const <String?>[null];
97-
''');
98-
}
99-
100-
test_const_stringNull_dynamic() async {
101-
await assertNoErrorsInCode('''
102-
const dynamic x = null;
103-
var v = const <String>[x];
104-
''');
105-
}
106-
107127
test_const_voidInt() async {
108128
await assertNoErrorsInCode('''
109129
var v = const <void>[42];
110130
''');
111131
}
112132

113-
test_element_type_is_assignable() async {
114-
await assertNoErrorsInCode(r'''
115-
var v1 = <int> [42];
116-
var v2 = const <int> [42];
117-
''');
118-
}
119-
120133
test_nonConst_ifElement_thenElseFalse_intDynamic() async {
121134
await assertNoErrorsInCode('''
122135
const dynamic a = 'a';
@@ -237,3 +250,8 @@ void f(Iterable<num> a) {
237250
]);
238251
}
239252
}
253+
254+
@reflectiveTest
255+
class ListElementTypeNotAssignableWithoutNullSafetyTest
256+
extends PubPackageResolutionTest
257+
with WithoutNullSafetyMixin, ListElementTypeNotAssignableTestCases {}

0 commit comments

Comments
 (0)