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

Commit e92b406

Browse files
author
Dart CI
committed
Version 2.10.0-20.0.dev
Merge commit '4049442385fc06af9742a763e1717e3348754898' into 'dev'
2 parents 279a4b9 + 4049442 commit e92b406

File tree

57 files changed

+1534
-573
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+1534
-573
lines changed

DEPS

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ vars = {
4848
"co19_2_rev": "e48b3090826cf40b8037648f19d211e8eab1b4b6",
4949

5050
# The internal benchmarks to use. See go/dart-benchmarks-internal
51-
"benchmarks_internal_rev": "991d4cb32af0e914763ebbdeced91395bed874d8",
51+
"benchmarks_internal_rev": "760986cf29594acf424ee6e8af23a4322825935a",
5252
"checkout_benchmarks_internal": False,
5353

5454
# As Flutter does, we use Fuchsia's GN and Clang toolchain. These revision

pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import 'package:analysis_server/src/services/correction/dart/convert_quotes.dart
1717
import 'package:analysis_server/src/services/correction/dart/convert_to_contains.dart';
1818
import 'package:analysis_server/src/services/correction/dart/convert_to_generic_function_syntax.dart';
1919
import 'package:analysis_server/src/services/correction/dart/convert_to_if_null.dart';
20+
import 'package:analysis_server/src/services/correction/dart/convert_to_where_type.dart';
2021
import 'package:analysis_server/src/services/correction/dart/create_method.dart';
2122
import 'package:analysis_server/src/services/correction/dart/make_final.dart';
2223
import 'package:analysis_server/src/services/correction/dart/remove_argument.dart';
@@ -42,6 +43,7 @@ import 'package:analysis_server/src/services/correction/dart/replace_with_tear_o
4243
import 'package:analysis_server/src/services/correction/dart/replace_with_var.dart';
4344
import 'package:analysis_server/src/services/correction/dart/use_curly_braces.dart';
4445
import 'package:analysis_server/src/services/correction/dart/use_is_not_empty.dart';
46+
import 'package:analysis_server/src/services/correction/dart/use_rethrow.dart';
4547
import 'package:analysis_server/src/services/correction/fix.dart';
4648
import 'package:analysis_server/src/services/correction/fix_internal.dart';
4749
import 'package:analysis_server/src/services/linter/lint_names.dart';
@@ -90,6 +92,7 @@ class BulkFixProcessor {
9092
LintNames.prefer_if_null_operators: ConvertToIfNull.newInstance,
9193
LintNames.prefer_is_empty: ReplaceWithIsEmpty.newInstance,
9294
LintNames.prefer_is_not_empty: UesIsNotEmpty.newInstance,
95+
LintNames.prefer_iterable_whereType: ConvertToWhereType.newInstance,
9396
LintNames.prefer_single_quotes: ConvertToSingleQuotes.newInstance,
9497
LintNames.prefer_spread_collections: ConvertAddAllToSpread.newInstance,
9598
LintNames.slash_for_doc_comments: ConvertDocumentationIntoLine.newInstance,
@@ -100,6 +103,7 @@ class BulkFixProcessor {
100103
LintNames.unnecessary_new: RemoveUnnecessaryNew.newInstance,
101104
LintNames.unnecessary_overrides: RemoveMethodDeclaration.newInstance,
102105
LintNames.unnecessary_this: RemoveThisExpression.newInstance,
106+
LintNames.use_rethrow_when_possible: UseRethrow.newInstance,
103107
};
104108

105109
/// A map from an error code to a generator used to create the correction
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
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+
import 'package:analysis_server/src/services/linter/lint_names.dart';
6+
import 'package:test_reflective_loader/test_reflective_loader.dart';
7+
8+
import 'bulk_fix_processor.dart';
9+
10+
void main() {
11+
defineReflectiveSuite(() {
12+
defineReflectiveTests(ConvertToWhereTypeTest);
13+
});
14+
}
15+
16+
@reflectiveTest
17+
class ConvertToWhereTypeTest extends BulkFixProcessorTest {
18+
@override
19+
String get lintCode => LintNames.prefer_iterable_whereType;
20+
21+
Future<void> test_singleFile() async {
22+
await resolveTestUnit('''
23+
Iterable<C> f(List<Object> list) {
24+
return list.where((e) => e is C);
25+
}
26+
Iterable<C> f2(List<Object> list) =>
27+
list.where((e) => e is C);
28+
29+
class C {}
30+
''');
31+
await assertHasFix('''
32+
Iterable<C> f(List<Object> list) {
33+
return list.whereType<C>();
34+
}
35+
Iterable<C> f2(List<Object> list) =>
36+
list.whereType<C>();
37+
38+
class C {}
39+
''');
40+
}
41+
}

pkg/analysis_server/test/src/services/correction/fix/bulk/test_all.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import 'convert_to_if_null_test.dart' as convert_to_if_null;
1616
import 'convert_to_single_quoted_strings_test.dart'
1717
as convert_to_single_quoted_strings;
1818
import 'convert_to_spread_test.dart' as convert_to_spread;
19+
import 'convert_to_where_type_test.dart' as convert_to_where_type;
1920
import 'create_method_test.dart' as create_method;
2021
import 'make_final_test.dart' as make_final;
2122
import 'remove_argument_test.dart' as remove_argument;
@@ -42,6 +43,7 @@ import 'replace_with_tear_off_test.dart' as replace_with_tear_off;
4243
import 'replace_with_var_test.dart' as replace_with_var;
4344
import 'use_curly_braces_test.dart' as use_curly_braces;
4445
import 'use_is_not_empty_test.dart' as use_is_not_empty;
46+
import 'use_rethrow_test.dart' as use_rethrow;
4547

4648
void main() {
4749
defineReflectiveSuite(() {
@@ -54,6 +56,7 @@ void main() {
5456
convert_to_if_null.main();
5557
convert_to_single_quoted_strings.main();
5658
convert_to_spread.main();
59+
convert_to_where_type.main();
5760
create_method.main();
5861
make_final.main();
5962
remove_argument.main();
@@ -78,5 +81,6 @@ void main() {
7881
replace_with_var.main();
7982
use_curly_braces.main();
8083
use_is_not_empty.main();
84+
use_rethrow.main();
8185
}, name: 'bulk');
8286
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
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+
import 'package:analysis_server/src/services/linter/lint_names.dart';
6+
import 'package:test_reflective_loader/test_reflective_loader.dart';
7+
8+
import 'bulk_fix_processor.dart';
9+
10+
void main() {
11+
defineReflectiveSuite(() {
12+
defineReflectiveTests(UseRethrowTest);
13+
});
14+
}
15+
16+
@reflectiveTest
17+
class UseRethrowTest extends BulkFixProcessorTest {
18+
@override
19+
String get lintCode => LintNames.use_rethrow_when_possible;
20+
21+
Future<void> test_singleFile() async {
22+
await resolveTestUnit('''
23+
void f() {
24+
try {} catch (e) {
25+
throw e;
26+
}
27+
}
28+
29+
void f2() {
30+
try {} catch (e, stackTrace) {
31+
print(stackTrace);
32+
throw e;
33+
}
34+
}
35+
''');
36+
await assertHasFix('''
37+
void f() {
38+
try {} catch (e) {
39+
rethrow;
40+
}
41+
}
42+
43+
void f2() {
44+
try {} catch (e, stackTrace) {
45+
print(stackTrace);
46+
rethrow;
47+
}
48+
}
49+
''');
50+
}
51+
}

pkg/analyzer/lib/src/generated/error_verifier.dart

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2584,8 +2584,12 @@ class ErrorVerifier extends RecursiveAstVisitor<void> {
25842584
[variable.name.name]);
25852585
} else {
25862586
var variableElement = variable.declaredElement;
2587-
if (variableElement is FieldElement && variableElement.isAbstract) {
2588-
// Abstract fields can't be initialized, so no error.
2587+
if (variableElement is FieldElement &&
2588+
(variableElement.isAbstract || variableElement.isExternal)) {
2589+
// Abstract and external fields can't be initialized, so no error.
2590+
} else if (variableElement is TopLevelVariableElement &&
2591+
variableElement.isExternal) {
2592+
// External top level variables can't be initialized, so no error.
25892593
} else if (!_isNonNullableByDefault || !variable.isLate) {
25902594
_errorReporter.reportErrorForNode(
25912595
CompileTimeErrorCode.FINAL_NOT_INITIALIZED,

pkg/analyzer/test/src/dart/ast/element_locator_test.dart

Lines changed: 0 additions & 6 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:analyzer/src/dart/ast/element_locator.dart';
6-
import 'package:analyzer/src/generated/engine.dart';
76
import 'package:test/test.dart';
87
import 'package:test_reflective_loader/test_reflective_loader.dart';
98

@@ -18,11 +17,6 @@ main() {
1817

1918
@reflectiveTest
2019
class ElementLocatorTest extends PubPackageResolutionTest {
21-
@override
22-
AnalysisOptionsImpl get analysisOptions {
23-
return AnalysisOptionsImpl()..hint = false;
24-
}
25-
2620
test_locate_AssignmentExpression() async {
2721
await resolveTestCode(r'''
2822
int x = 0;

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -351,11 +351,17 @@ class PubPackageResolutionTest extends ContextResolutionTest {
351351

352352
void writeTestPackageConfig(
353353
PackageConfigFileBuilder config, {
354+
String languageVersion,
354355
bool js = false,
355356
bool meta = false,
356357
}) {
357358
config = config._copy();
358-
config.add(name: 'test', rootPath: testPackageRootPath);
359+
360+
config.add(
361+
name: 'test',
362+
rootPath: testPackageRootPath,
363+
languageVersion: languageVersion,
364+
);
359365

360366
if (js) {
361367
var jsPath = '/packages/js';

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,17 @@ void f() {
148148
''');
149149
}
150150

151+
test_set_external_variable_final_invalid() async {
152+
await assertErrorsInCode('''
153+
external final int x;
154+
void f(int value) {
155+
x = value;
156+
}
157+
''', [
158+
error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL_LOCAL, 44, 1),
159+
]);
160+
}
161+
151162
test_topLevelVariable_late() async {
152163
await assertNoErrorsInCode('''
153164
late final int a;

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

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,4 +98,44 @@ void f(B b, int x) {
9898
}
9999
''');
100100
}
101+
102+
test_set_external_field_final_invalid() async {
103+
await assertErrorsInCode('''
104+
class A {
105+
external final int x;
106+
}
107+
void f(A a, int x) {
108+
a.x = x;
109+
}
110+
''', [
111+
error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 61, 1),
112+
]);
113+
}
114+
115+
test_set_external_field_final_overridden_valid() async {
116+
await assertNoErrorsInCode('''
117+
class A {
118+
external final int x;
119+
}
120+
abstract class B extends A {
121+
void set x(int value);
122+
}
123+
void f(B b, int x) {
124+
b.x = x; // ok because setter provided in derived class
125+
}
126+
''');
127+
}
128+
129+
test_set_external_static_field_final_invalid() async {
130+
await assertErrorsInCode('''
131+
class A {
132+
external static final int x;
133+
}
134+
void f(int x) {
135+
A.x = x;
136+
}
137+
''', [
138+
error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 63, 1),
139+
]);
140+
}
101141
}

0 commit comments

Comments
 (0)