Version 2.13.0-17.0.dev
Merge commit '7b1c194057f74c4091d48747e1f4a9f62a6b0a33' into 'dev'
diff --git a/DEPS b/DEPS
index 301e6de..397cf38 100644
--- a/DEPS
+++ b/DEPS
@@ -68,8 +68,8 @@
"gperftools_revision": "180bfa10d7cb38e8b3784d60943d50e8fcef0dcb",
# Revisions of /third_party/* dependencies.
- "args_rev": "2c6a221f45e4e0ef447b5d09101bf8a52e1ccd36",
- "async_rev": "695b3ac280f107c84adf7488743abfdfaaeea68f",
+ "args_rev": "c3c7fd4ae728d03cd43e723f11d099b07045ad01",
+ "async_rev": "376d418b1b535030fbe3369938d2ffdbb0340a77",
"bazel_worker_rev": "060c55a933d39798681a4f533b161b81dc48d77e",
"benchmark_harness_rev": "c546dbd9f639f75cd2f75de8df2eb9f8ea15e8e7",
"boolean_selector_rev": "665e6921ab246569420376f827bff4585dff0b14",
@@ -78,11 +78,11 @@
"browser-compat-data_tag": "v1.0.22",
"charcode_rev": "bcd8a12c315b7a83390e4865ad847ecd9344cba2",
"chrome_rev" : "19997",
- "cli_util_rev" : "50cc840b146615899e97b892578848401b2028d5",
+ "cli_util_rev" : "fd1b716e8a350a454e01ae56df540293d31ff6c8",
"clock_rev" : "a494269254ba978e7ef8f192c5f7fec3fc05b9d3",
- "collection_rev": "e4bb038ce2d8e66fb15818aa40685c68d53692ab",
- "convert_rev": "6513985a1b1ea8a0b987fbef699250ce2cdc3cca",
- "crypto_rev": "c89a5be0375875fe7ff71625fa2b79f5a421f06d",
+ "collection_rev": "9967dcd3d7645db6de48d5abfab3018bb0c84236",
+ "convert_rev": "a60156c6efd653657c8926b5788219ed609917d7",
+ "crypto_rev": "1c8ccc07b83b100216dc6dede767371043385648",
"csslib_rev": "e411d862fd8cc50415c1badf2632e017373b3f47",
"dart2js_info_rev" : "e0acfeb5affdf94c53067e68bd836adf589628fd",
@@ -105,7 +105,7 @@
"ffi_rev": "f288e906c92e2ab378768dfa61a40814ede7a2a5",
"fixnum_rev": "16d3890c6dc82ca629659da1934e412292508bba",
"file_rev": "0e09370f581ab6388d46fda4cdab66638c0171a1",
- "glob_rev": "7c0ef8d4fa086f6b185c4dd724b700e7d7ad8f79",
+ "glob_rev": "a62acf590598f458d3198d9f2930c1c9dd4b1379",
"html_rev": "00cd3c22dac0e68e6ed9e7e4945101aedb1b3109",
"http_io_rev": "2fa188caf7937e313026557713f7feffedd4978b",
"http_multi_server_rev" : "e8c8be7f15b4fb50757ff5bf29766721fbe24fe4",
@@ -122,19 +122,19 @@
"logging_rev": "e2f633b543ef89c54688554b15ca3d7e425b86a2",
"markupsafe_rev": "8f45f5cfa0009d2a70589bcda0349b8cb2b72783",
"markdown_rev": "6f89681d59541ddb1cf3a58efbdaa2304ffc3f51",
- "matcher_rev": "63f1110a657fb5e2dc378db8895fef7b0a13ab30",
+ "matcher_rev": "43d5cac48fcd386643016e767164da87c5c25e29",
"mime_rev": "c931f4bed87221beaece356494b43731445ce7b8",
"mockito_rev": "d39ac507483b9891165e422ec98d9fb480037c8b",
"mustache_rev": "664737ecad027e6b96d0d1e627257efa0e46fcb1",
"oauth2_tag": "1.6.0",
- "package_config_rev": "0e208cb5a9482d780c47627368d3f5bdc409f37b",
- "path_rev": "62ecd5a78ffe5734d14ed0df76d20309084cd04a",
- "pedantic_rev": "a884ea2db943b8756cc94385990bd750aec06928",
+ "package_config_rev": "249af482de9ebabfc781bf10d6152c938e5ce45e",
+ "path_rev": "407ab76187fade41c31e39c745b39661b710106c",
+ "pedantic_rev": "df177f6ae531426aaf7bbf0121c90dc89d9c57bf",
"ply_rev": "604b32590ffad5cbb82e4afef1d305512d06ae93",
"pool_rev": "7abe634002a1ba8a0928eded086062f1307ccfae",
"protobuf_rev": "0d03fd588df69e9863e2a2efc0059dee8f18d5b2",
"pub_rev": "0e657414a472e74ca5dd76ae0db50cc060251dec",
- "pub_semver_rev": "10569a1e867e909cf5db201f73118020453e5db8",
+ "pub_semver_rev": "f50d80ef10c4b2fa5f4c8878036a4d9342c0cc82",
"resource_rev": "6b79867d0becf5395e5819a75720963b8298e9a7",
"root_certificates_rev": "7e5ec82c99677a2e5b95ce296c4d68b0d3378ed8",
"rust_revision": "b7856f695d65a8ebc846754f97d15814bcb1c244",
@@ -146,7 +146,7 @@
"source_map_stack_trace_rev": "1c3026f69d9771acf2f8c176a1ab750463309cce",
"source_maps-0.9.4_rev": "38524",
"source_maps_rev": "53eb92ccfe6e64924054f83038a534b959b12b3e",
- "source_span_rev": "aecb614eac3caa333658493b31a32b4e904cb0a4",
+ "source_span_rev": "1be3c44045a06dff840d2ed3a13e6082d7a03a23",
"sse_tag": "17b52bbdeee53fc54e5bdf9b80934460a9d63ba6",
"stack_trace_tag": "6788afc61875079b71b3d1c3e65aeaa6a25cbc2f",
"stagehand_rev": "e64ac90cac508981011299c4ceb819149e71f1bd",
@@ -157,16 +157,16 @@
"test_process_tag": "1.0.3",
"term_glyph_rev": "6a0f9b6fb645ba75e7a00a4e20072678327a0347",
"test_reflective_loader_rev": "b76ae201ab9c6f3b90643958965e7cc215a38e9b",
- "test_rev": "e37a93bbeae23b215972d1659ac865d71287ff6a",
+ "test_rev": "bb98af3d17a821c28488ef8e2881e3ca173baf94",
"typed_data_tag": "f94fc57b8e8c0e4fe4ff6cfd8290b94af52d3719",
"usage_rev": "6c64d9e7b6b3758d06d030efcb5afe20bfc04dde",
"vector_math_rev": "0c9f5d68c047813a6dcdeb88ba7a42daddf25025",
- "watcher_rev": "14706140b3670ca1dfeca73480bdd3091b728ce9",
+ "watcher_rev": "3924194385fb215cef483193ed2879a618a3d69c",
"webdriver_rev": "5a8d6805d9cf8a3cbb4fcd64849b538b7491e50e",
"web_components_rev": "8f57dac273412a7172c8ade6f361b407e2e4ed02",
"web_socket_channel_rev": "680358915e331fda823908234f80beba1ed4ec83",
"WebCore_rev": "fb11e887f77919450e497344da570d780e078bc8",
- "yaml_rev": "cca02c9e4f6826d62644901ed65c6d72b90a0713",
+ "yaml_rev": "2392d113b0104dd19358f2833a282f19e2d67c01",
"zlib_rev": "bf44340d1b6be1af8950bbdf664fec0cf5a831cc",
"crashpad_rev": "bf327d8ceb6a669607b0dbab5a83a275d03f99ed",
"minichromium_rev": "8d641e30a8b12088649606b912c2bc4947419ccc",
diff --git a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
index 7b15767..71efad4 100644
--- a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
@@ -3272,7 +3272,7 @@
const MessageCode messageExpressionNotMetadata = const MessageCode(
"ExpressionNotMetadata",
message:
- r"""This can't be used as metadata; metadata should be a reference to a compile-time constant variable, or a call to a constant constructor.""");
+ r"""This can't be used as an annotation; an annotation should be a reference to a compile-time constant variable, or a call to a constant constructor.""");
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
const Code<Null> codeExtendFunction = messageExtendFunction;
@@ -6428,7 +6428,7 @@
const MessageCode messageMetadataTypeArguments = const MessageCode(
"MetadataTypeArguments",
index: 91,
- message: r"""An annotation (metadata) can't use type arguments.""");
+ message: r"""An annotation can't use type arguments.""");
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
const Code<Null> codeMetadataTypeArgumentsUninstantiated =
@@ -6439,7 +6439,7 @@
"MetadataTypeArgumentsUninstantiated",
index: 114,
message:
- r"""An annotation (metadata) with type arguments must be followed by an argument list.""");
+ r"""An annotation with type arguments must be followed by an argument list.""");
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
const Template<Message Function(String name)> templateMethodNotFound =
diff --git a/pkg/analysis_server/benchmark/perf/benchmarks_impl.dart b/pkg/analysis_server/benchmark/perf/benchmarks_impl.dart
index c9b438c..fab0850 100644
--- a/pkg/analysis_server/benchmark/perf/benchmarks_impl.dart
+++ b/pkg/analysis_server/benchmark/perf/benchmarks_impl.dart
@@ -116,6 +116,7 @@
var contents = File(filePath).readAsStringSync();
await test.openFile(filePath, contents);
+ await test.analysisFinished;
var stopwatch = Stopwatch()..start();
diff --git a/pkg/analyzer/lib/src/dart/error/syntactic_errors.g.dart b/pkg/analyzer/lib/src/dart/error/syntactic_errors.g.dart
index f6d971f..5265c24 100644
--- a/pkg/analyzer/lib/src/dart/error/syntactic_errors.g.dart
+++ b/pkg/analyzer/lib/src/dart/error/syntactic_errors.g.dart
@@ -149,11 +149,11 @@
const ParserErrorCode _ANNOTATION_WITH_TYPE_ARGUMENTS = ParserErrorCode(
'ANNOTATION_WITH_TYPE_ARGUMENTS',
- r"An annotation (metadata) can't use type arguments.");
+ r"An annotation can't use type arguments.");
const ParserErrorCode _ANNOTATION_WITH_TYPE_ARGUMENTS_UNINSTANTIATED =
ParserErrorCode('ANNOTATION_WITH_TYPE_ARGUMENTS_UNINSTANTIATED',
- r"An annotation (metadata) with type arguments must be followed by an argument list.");
+ r"An annotation with type arguments must be followed by an argument list.");
const ParserErrorCode _BINARY_OPERATOR_WRITTEN_OUT = ParserErrorCode(
'BINARY_OPERATOR_WRITTEN_OUT',
diff --git a/pkg/analyzer/test/generated/error_suppression_test.dart b/pkg/analyzer/test/generated/error_suppression_test.dart
index 07a3c23..3c020cb 100644
--- a/pkg/analyzer/test/generated/error_suppression_test.dart
+++ b/pkg/analyzer/test/generated/error_suppression_test.dart
@@ -83,7 +83,7 @@
await assertNoErrorsInCode('''
//ignore_for_file: unused_element , unnecessary_cast
int x = (0 as int); //UNNECESSARY_CAST
-String _foo; //UNUSED_ELEMENT
+String _foo = ''; //UNUSED_ELEMENT
''');
}
@@ -98,7 +98,7 @@
//UNNECESSARY_CAST
int x = (0 as int);
// ignore: unused_element
-String _foo; //UNUSED_ELEMENT
+String _foo = ''; //UNUSED_ELEMENT
''', [
error(HintCode.UNNECESSARY_CAST, 28, 8),
]);
@@ -108,7 +108,7 @@
await assertErrorsInCode('''
//UNNECESSARY_CAST
int x = (0 as int);
-String _foo; // ignore: $ignoredCode
+String _foo = ''; // ignore: $ignoredCode
''', [
error(HintCode.UNNECESSARY_CAST, 28, 8),
]);
@@ -119,7 +119,7 @@
await assertNoErrorsInCode('''
import 'package:meta/meta.dart';
-int f({@Required('x') int a}) => 0;
+int f({@Required('x') int? a}) => 0;
// ignore: missing_required_param_with_details
int x = f();
@@ -169,7 +169,7 @@
await assertErrorsInCode('''
int x = (0 as int); //This is the first comment...
// ignore: $ignoredCode
-String _foo; //UNUSED_ELEMENT
+String _foo = ''; //UNUSED_ELEMENT
''', [
error(HintCode.UNNECESSARY_CAST, 9, 8),
]);
@@ -178,7 +178,7 @@
test_multiple_ignore_for_files() async {
await assertNoErrorsInCode('''
int x = (0 as int); //UNNECESSARY_CAST
-String _foo; //UNUSED_ELEMENT
+String _foo = ''; //UNUSED_ELEMENT
// ignore_for_file: unnecessary_cast,$ignoredCode
''');
}
diff --git a/pkg/analyzer/test/generated/invalid_code_test.dart b/pkg/analyzer/test/generated/invalid_code_test.dart
index 601a4c6..a82cd94 100644
--- a/pkg/analyzer/test/generated/invalid_code_test.dart
+++ b/pkg/analyzer/test/generated/invalid_code_test.dart
@@ -19,7 +19,10 @@
/// errors generated, but we want to make sure that there is at least one,
/// and analysis finishes without exceptions.
@reflectiveTest
-class InvalidCodeTest extends PubPackageResolutionTest {
+class InvalidCodeTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
+ // TODO(https://github.com/dart-lang/sdk/issues/44666): Use null safety in
+ // test cases.
test_const_AwaitExpression() async {
await _assertCanBeAnalyzed(r'''
const a = await b();
diff --git a/pkg/analyzer/test/generated/non_error_resolver_test.dart b/pkg/analyzer/test/generated/non_error_resolver_test.dart
index 67216c3..6f2cf9d 100644
--- a/pkg/analyzer/test/generated/non_error_resolver_test.dart
+++ b/pkg/analyzer/test/generated/non_error_resolver_test.dart
@@ -13,8 +13,8 @@
main() {
defineReflectiveSuite(() {
- defineReflectiveTests(NonErrorResolverTest);
defineReflectiveTests(NonConstantValueInInitializer);
+ defineReflectiveTests(NonErrorResolverTest);
});
}
@@ -53,7 +53,10 @@
}
@reflectiveTest
-class NonErrorResolverTest extends PubPackageResolutionTest {
+class NonErrorResolverTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
+ // TODO(https://github.com/dart-lang/sdk/issues/44666): Use null safety in
+ // test cases.
test_ambiguousExport() async {
newFile("$testPackageLibPath/lib1.dart", content: r'''
library lib1;
diff --git a/pkg/analyzer/test/generated/resolver_test.dart b/pkg/analyzer/test/generated/resolver_test.dart
index 6660814..9ca2024 100644
--- a/pkg/analyzer/test/generated/resolver_test.dart
+++ b/pkg/analyzer/test/generated/resolver_test.dart
@@ -277,7 +277,10 @@
/// The class `StrictModeTest` contains tests to ensure that the correct errors
/// and warnings are reported when the analysis engine is run in strict mode.
@reflectiveTest
-class StrictModeTest extends PubPackageResolutionTest {
+class StrictModeTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
+ // TODO(https://github.com/dart-lang/sdk/issues/44666): Use null safety in
+ // test cases.
test_assert_is() async {
await assertErrorsInCode(r'''
int f(num n) {
@@ -417,7 +420,10 @@
}
@reflectiveTest
-class TypePropagationTest extends PubPackageResolutionTest {
+class TypePropagationTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
+ // TODO(https://github.com/dart-lang/sdk/issues/44666): Use null safety in
+ // test cases.
test_assignment_null() async {
String code = r'''
main() {
diff --git a/pkg/analyzer/test/generated/resolver_test_case.dart b/pkg/analyzer/test/generated/resolver_test_case.dart
index ceaa0ac..2be2ffb 100644
--- a/pkg/analyzer/test/generated/resolver_test_case.dart
+++ b/pkg/analyzer/test/generated/resolver_test_case.dart
@@ -285,7 +285,11 @@
}
/// Shared infrastructure for [StaticTypeAnalyzer2Test].
-class StaticTypeAnalyzer2TestShared extends PubPackageResolutionTest {
+class StaticTypeAnalyzer2TestShared extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
+ // TODO(https://github.com/dart-lang/sdk/issues/44666): Use null safety in
+ // test cases.
+
/// Looks up the identifier with [name] and validates that its type type
/// stringifies to [type] and that its generics match the given stringified
/// output.
diff --git a/pkg/analyzer/test/generated/simple_resolver_test.dart b/pkg/analyzer/test/generated/simple_resolver_test.dart
index 6269fe3..981d29c 100644
--- a/pkg/analyzer/test/generated/simple_resolver_test.dart
+++ b/pkg/analyzer/test/generated/simple_resolver_test.dart
@@ -530,7 +530,7 @@
await assertNoErrorsInCode(r'''
typedef bool P(e);
class A {
- P p;
+ late P p;
m(e) {
if (p(e)) {}
}
@@ -604,7 +604,7 @@
main() {
foo = 0;
}
-A a;''');
+A a = A();''');
verifyTestResolved();
}
@@ -693,11 +693,11 @@
test_indexExpression_typeParameters() async {
await assertNoErrorsInCode(r'''
f() {
- List<int> a;
+ List<int> a = [];
a[0];
- List<List<int>> b;
+ List<List<int>> b = [];
b[0][0];
- List<List<List<int>>> c;
+ List<List<List<int>>> c = [];
c[0][0][0];
}''');
verifyTestResolved();
@@ -706,10 +706,10 @@
test_indexExpression_typeParameters_invalidAssignmentWarning() async {
await assertErrorsInCode(r'''
f() {
- List<List<int>> b;
+ List<List<int>> b = [];
b[0][0] = 'hi';
}''', [
- error(CompileTimeErrorCode.INVALID_ASSIGNMENT, 39, 4),
+ error(CompileTimeErrorCode.INVALID_ASSIGNMENT, 44, 4),
]);
verifyTestResolved();
}
@@ -854,7 +854,7 @@
await assertNoErrorsInCode(r'''
const A = null;
class C {
- @A int f;
+ @A int f = 1;
}''');
verifyTestResolved();
@@ -1077,7 +1077,7 @@
test_methodCascades_withSetter() async {
await assertNoErrorsInCode(r'''
class A {
- String name;
+ String name = '';
void m1() {}
void m2() {}
void m() {
diff --git a/pkg/analyzer/test/generated/static_type_warning_code_test.dart b/pkg/analyzer/test/generated/static_type_warning_code_test.dart
index e29bb22..7a161cd 100644
--- a/pkg/analyzer/test/generated/static_type_warning_code_test.dart
+++ b/pkg/analyzer/test/generated/static_type_warning_code_test.dart
@@ -11,172 +11,109 @@
defineReflectiveSuite(() {
defineReflectiveTests(StaticTypeWarningCodeTest);
defineReflectiveTests(StrongModeStaticTypeWarningCodeTest);
+ defineReflectiveTests(StaticTypeWarningCodeWithoutNullSafetyTest);
});
}
+/// TODO(srawlins) Figure out what to do with the rest of these tests.
+/// The names do not correspond to diagnostic codes, so it isn't clear what
+/// they're testing.
@reflectiveTest
class StaticTypeWarningCodeTest extends PubPackageResolutionTest {
- test_assert_message_suppresses_type_promotion() async {
- // If a variable is assigned to inside the expression for an assert
- // message, type promotion should be suppressed, just as it would be if the
- // assignment occurred outside an assert statement. (Note that it is a
- // dubious practice for the computation of an assert message to have side
- // effects, since it is only evaluated if the assert fails).
- await assertErrorsInCode('''
-class C {
- void foo() {}
-}
-
-f(Object x) {
- if (x is C) {
- x.foo();
- assert(true, () { x = new C(); return 'msg'; }());
- }
-}
-''', [
- error(CompileTimeErrorCode.UNDEFINED_METHOD, 65, 3),
- ]);
- }
-
- test_await_flattened() async {
- await assertErrorsInCode('''
-Future<Future<int>> ffi() => null;
-f() async {
- Future<int> b = await ffi();
-}
-''', [
- error(HintCode.UNUSED_LOCAL_VARIABLE, 61, 1),
- ]);
- }
-
test_await_simple() async {
await assertErrorsInCode('''
-Future<int> fi() => null;
+Future<int> fi() => Future.value(0);
f() async {
String a = await fi(); // Warning: int not assignable to String
}
''', [
- error(HintCode.UNUSED_LOCAL_VARIABLE, 47, 1),
- error(CompileTimeErrorCode.INVALID_ASSIGNMENT, 51, 10),
+ error(HintCode.UNUSED_LOCAL_VARIABLE, 58, 1),
+ error(CompileTimeErrorCode.INVALID_ASSIGNMENT, 62, 10),
]);
}
test_awaitForIn_declaredVariableRightType() async {
await assertErrorsInCode('''
-f() async {
- Stream<int> stream;
+f(Stream<int> stream) async {
await for (int i in stream) {}
}
''', [
- error(HintCode.UNUSED_LOCAL_VARIABLE, 51, 1),
+ error(HintCode.UNUSED_LOCAL_VARIABLE, 47, 1),
]);
}
test_awaitForIn_declaredVariableWrongType() async {
await assertErrorsInCode('''
-f() async {
- Stream<String> stream;
+f(Stream<String> stream) async {
await for (int i in stream) {}
}
''', [
- error(HintCode.UNUSED_LOCAL_VARIABLE, 54, 1),
- error(CompileTimeErrorCode.FOR_IN_OF_INVALID_ELEMENT_TYPE, 59, 6),
+ error(HintCode.UNUSED_LOCAL_VARIABLE, 50, 1),
+ error(CompileTimeErrorCode.FOR_IN_OF_INVALID_ELEMENT_TYPE, 55, 6),
]);
}
test_awaitForIn_downcast() async {
await assertErrorsInCode('''
-f() async {
- Stream<num> stream;
+f(Stream<num> stream) async {
await for (int i in stream) {}
}
''', [
- error(HintCode.UNUSED_LOCAL_VARIABLE, 51, 1),
+ error(HintCode.UNUSED_LOCAL_VARIABLE, 47, 1),
+ error(CompileTimeErrorCode.FOR_IN_OF_INVALID_ELEMENT_TYPE, 52, 6),
]);
}
test_awaitForIn_dynamicVariable() async {
await assertErrorsInCode('''
-f() async {
- Stream<int> stream;
+f(Stream<int> stream) async {
await for (var i in stream) {}
}
''', [
- error(HintCode.UNUSED_LOCAL_VARIABLE, 51, 1),
+ error(HintCode.UNUSED_LOCAL_VARIABLE, 47, 1),
]);
}
test_awaitForIn_existingVariableRightType() async {
await assertErrorsInCode('''
-f() async {
- Stream<int> stream;
- int i;
+f(Stream<int> stream) async {
+ late int i;
await for (i in stream) {}
}
''', [
- error(HintCode.UNUSED_LOCAL_VARIABLE, 40, 1),
+ error(HintCode.UNUSED_LOCAL_VARIABLE, 41, 1),
]);
}
test_awaitForIn_existingVariableWrongType() async {
await assertErrorsInCode('''
-f() async {
- Stream<String> stream;
- int i;
+f(Stream<String> stream) async {
+ late int i;
await for (i in stream) {}
}
''', [
- error(HintCode.UNUSED_LOCAL_VARIABLE, 43, 1),
- error(CompileTimeErrorCode.FOR_IN_OF_INVALID_ELEMENT_TYPE, 64, 6),
+ error(HintCode.UNUSED_LOCAL_VARIABLE, 44, 1),
+ error(CompileTimeErrorCode.FOR_IN_OF_INVALID_ELEMENT_TYPE, 65, 6),
]);
}
test_awaitForIn_streamOfDynamic() async {
await assertErrorsInCode('''
-f() async {
- Stream stream;
+f(Stream stream) async {
await for (int i in stream) {}
}
''', [
- error(HintCode.UNUSED_LOCAL_VARIABLE, 46, 1),
+ error(HintCode.UNUSED_LOCAL_VARIABLE, 42, 1),
]);
}
test_awaitForIn_upcast() async {
await assertErrorsInCode('''
-f() async {
- Stream<int> stream;
+f(Stream<int> stream) async {
await for (num i in stream) {}
}
''', [
- error(HintCode.UNUSED_LOCAL_VARIABLE, 51, 1),
- ]);
- }
-
- test_bug21912() async {
- await assertErrorsInCode('''
-class A {}
-class B extends A {}
-
-typedef T Function2<S, T>(S z);
-typedef B AToB(A x);
-typedef A BToA(B x);
-
-void main() {
- {
- Function2<Function2<A, B>, Function2<B, A>> t1;
- Function2<AToB, BToA> t2;
-
- Function2<Function2<int, double>, Function2<int, double>> left;
-
- left = t1;
- left = t2;
- }
-}
-''', [
- error(HintCode.UNUSED_LOCAL_VARIABLE, 271, 4),
- error(CompileTimeErrorCode.INVALID_ASSIGNMENT, 289, 2),
- error(CompileTimeErrorCode.INVALID_ASSIGNMENT, 304, 2),
+ error(HintCode.UNUSED_LOCAL_VARIABLE, 47, 1),
]);
}
@@ -201,16 +138,6 @@
]);
}
- test_forIn_downcast() async {
- await assertErrorsInCode('''
-f() {
- for (int i in <num>[]) {}
-}
-''', [
- error(HintCode.UNUSED_LOCAL_VARIABLE, 17, 1),
- ]);
- }
-
test_forIn_dynamic() async {
await assertErrorsInCode('''
f() {
@@ -278,12 +205,11 @@
test_forIn_object() async {
await assertErrorsInCode('''
-f() {
- Object o; // Could be [].
+f(List o) { // Could be [].
for (var i in o) {}
}
''', [
- error(HintCode.UNUSED_LOCAL_VARIABLE, 45, 1),
+ error(HintCode.UNUSED_LOCAL_VARIABLE, 39, 1),
]);
}
@@ -322,80 +248,66 @@
]);
}
- // TODO(srawlins) Figure out what to do with the rest of these tests.
- // The names do not correspond to diagnostic codes, so it isn't clear what
- // they're testing.
-
test_typePromotion_booleanAnd_useInRight_accessedInClosureRight_mutated() async {
await assertErrorsInCode(r'''
callMe(f()) { f(); }
-main(Object p) {
+f(Object p) {
(p is String) && callMe(() { p.length; });
p = 0;
}
''', [
- error(CompileTimeErrorCode.UNDEFINED_GETTER, 71, 6),
- ]);
- }
-
- test_typePromotion_booleanAnd_useInRight_mutatedInLeft() async {
- await assertErrorsInCode(r'''
-main(Object p) {
- ((p is String) && ((p = 42) == 42)) && p.length != 0;
-}
-''', [
- error(CompileTimeErrorCode.UNDEFINED_GETTER, 60, 6),
- ]);
- }
-
- test_typePromotion_booleanAnd_useInRight_mutatedInRight() async {
- await assertErrorsInCode(r'''
-main(Object p) {
- (p is String) && (((p = 42) == 42) && p.length != 0);
-}
-''', [
- error(CompileTimeErrorCode.UNDEFINED_GETTER, 59, 6),
- ]);
- }
-
- test_typePromotion_conditional_useInThen_accessedInClosure_hasAssignment_after() async {
- await assertErrorsInCode(r'''
-callMe(f()) { f(); }
-main(Object p) {
- p is String ? callMe(() { p.length; }) : 0;
- p = 42;
-}
-''', [
error(CompileTimeErrorCode.UNDEFINED_GETTER, 68, 6),
]);
}
+ test_typePromotion_booleanAnd_useInRight_mutatedInLeft() async {
+ await assertErrorsInCode(r'''
+f(Object p) {
+ ((p is String) && ((p = 42) == 42)) && p.length != 0;
+}
+''', [
+ error(CompileTimeErrorCode.UNDEFINED_GETTER, 57, 6),
+ ]);
+ }
+
+ test_typePromotion_booleanAnd_useInRight_mutatedInRight() async {
+ await assertErrorsInCode(r'''
+f(Object p) {
+ (p is String) && (((p = 42) == 42) && p.length != 0);
+}
+''', [
+ error(CompileTimeErrorCode.UNDEFINED_GETTER, 56, 6),
+ ]);
+ }
+
+ test_typePromotion_conditional_useInThen_accessedInClosure_hasAssignment_after() async {
+ await assertErrorsInCode(r'''
+callMe(f()) { f(); }
+g(Object p) {
+ p is String ? callMe(() { p.length; }) : 0;
+ p = 42;
+}
+''', [
+ error(CompileTimeErrorCode.UNDEFINED_GETTER, 65, 6),
+ ]);
+ }
+
test_typePromotion_conditional_useInThen_accessedInClosure_hasAssignment_before() async {
await assertErrorsInCode(r'''
callMe(f()) { f(); }
-main(Object p) {
+g(Object p) {
p = 42;
p is String ? callMe(() { p.length; }) : 0;
}
''', [
- error(CompileTimeErrorCode.UNDEFINED_GETTER, 78, 6),
- ]);
- }
-
- test_typePromotion_conditional_useInThen_hasAssignment() async {
- await assertErrorsInCode(r'''
-main(Object p) {
- p is String ? (p.length + (p = 42)) : 0;
-}
-''', [
- error(CompileTimeErrorCode.UNDEFINED_GETTER, 36, 6),
+ error(CompileTimeErrorCode.UNDEFINED_GETTER, 75, 6),
]);
}
test_typePromotion_if_accessedInClosure_hasAssignment() async {
await assertErrorsInCode(r'''
callMe(f()) { f(); }
-main(Object p) {
+f(Object p) {
if (p is String) {
callMe(() {
p.length;
@@ -404,19 +316,7 @@
p = 0;
}
''', [
- error(CompileTimeErrorCode.UNDEFINED_GETTER, 83, 6),
- ]);
- }
-
- test_typePromotion_if_and_right_hasAssignment() async {
- await assertErrorsInCode(r'''
-main(Object p) {
- if (p is String && (p = null) == null) {
- p.length;
- }
-}
-''', [
- error(CompileTimeErrorCode.UNDEFINED_GETTER, 66, 6),
+ error(CompileTimeErrorCode.UNDEFINED_GETTER, 80, 6),
]);
}
@@ -428,13 +328,13 @@
var b;
}
-main(A<V> p) {
+f(A<V> p) {
if (p is B) {
p.b;
}
}
''', [
- error(CompileTimeErrorCode.UNDEFINED_GETTER, 100, 1),
+ error(CompileTimeErrorCode.UNDEFINED_GETTER, 97, 1),
]);
}
@@ -446,93 +346,53 @@
var b;
}
-main(A<V> p) {
+f(A<V> p) {
if (p is B<int>) {
p.b;
}
}
''', [
- error(CompileTimeErrorCode.UNDEFINED_GETTER, 105, 1),
- ]);
- }
-
- test_typePromotion_if_hasAssignment_after() async {
- await assertErrorsInCode(r'''
-main(Object p) {
- if (p is String) {
- p.length;
- p = 0;
- }
-}
-''', [
- error(CompileTimeErrorCode.UNDEFINED_GETTER, 44, 6),
+ error(CompileTimeErrorCode.UNDEFINED_GETTER, 102, 1),
]);
}
test_typePromotion_if_hasAssignment_before() async {
await assertErrorsInCode(r'''
-main(Object p) {
+f(Object p) {
if (p is String) {
p = 0;
p.length;
}
}
''', [
- error(CompileTimeErrorCode.UNDEFINED_GETTER, 55, 6),
- ]);
- }
-
- test_typePromotion_if_hasAssignment_inClosure_anonymous_after() async {
- await assertErrorsInCode(r'''
-main(Object p) {
- if (p is String) {
- p.length;
- }
- () {p = 0;};
-}
-''', [
- error(CompileTimeErrorCode.UNDEFINED_GETTER, 44, 6),
+ error(CompileTimeErrorCode.UNDEFINED_GETTER, 52, 6),
]);
}
test_typePromotion_if_hasAssignment_inClosure_anonymous_before() async {
await assertErrorsInCode(r'''
-main(Object p) {
+f(Object p) {
() {p = 0;};
if (p is String) {
p.length;
}
}
''', [
- error(CompileTimeErrorCode.UNDEFINED_GETTER, 59, 6),
- ]);
- }
-
- test_typePromotion_if_hasAssignment_inClosure_function_after() async {
- await assertErrorsInCode(r'''
-main(Object p) {
- if (p is String) {
- p.length;
- }
- f() {p = 0;};
-}
-''', [
- error(CompileTimeErrorCode.UNDEFINED_GETTER, 44, 6),
- error(HintCode.UNUSED_ELEMENT, 58, 1),
+ error(CompileTimeErrorCode.UNDEFINED_GETTER, 56, 6),
]);
}
test_typePromotion_if_hasAssignment_inClosure_function_before() async {
await assertErrorsInCode(r'''
-main(Object p) {
+g(Object p) {
f() {p = 0;};
if (p is String) {
p.length;
}
}
''', [
- error(HintCode.UNUSED_ELEMENT, 19, 1),
- error(CompileTimeErrorCode.UNDEFINED_GETTER, 60, 6),
+ error(HintCode.UNUSED_ELEMENT, 16, 1),
+ error(CompileTimeErrorCode.UNDEFINED_GETTER, 57, 6),
]);
}
@@ -544,13 +404,13 @@
var b;
}
-main(A<V> p) {
+f(A<V> p) {
if (p is B) {
p.b;
}
}
''', [
- error(CompileTimeErrorCode.UNDEFINED_GETTER, 103, 1),
+ error(CompileTimeErrorCode.UNDEFINED_GETTER, 100, 1),
]);
}
@@ -562,26 +422,162 @@
var b;
}
-main(A<V> p) {
+f(A<V> p) {
if (p is B) {
p.b;
}
}
''', [
- error(CompileTimeErrorCode.UNDEFINED_GETTER, 112, 1),
+ error(CompileTimeErrorCode.UNDEFINED_GETTER, 109, 1),
]);
}
test_wrongNumberOfTypeArguments() async {
await assertErrorsInCode(r'''
class A<E> {
- E element;
+ late E element;
}
-main(A<NoSuchType> a) {
+g(A<NoSuchType> a) {
a.element.anyGetterExistsInDynamic;
}
''', [
- error(CompileTimeErrorCode.NON_TYPE_AS_TYPE_ARGUMENT, 35, 10),
+ error(CompileTimeErrorCode.NON_TYPE_AS_TYPE_ARGUMENT, 37, 10),
+ ]);
+ }
+}
+
+@reflectiveTest
+class StaticTypeWarningCodeWithoutNullSafetyTest
+ extends PubPackageResolutionTest with WithoutNullSafetyMixin {
+ test_assert_message_suppresses_type_promotion() async {
+ // If a variable is assigned to inside the expression for an assert
+ // message, type promotion should be suppressed, just as it would be if the
+ // assignment occurred outside an assert statement. (Note that it is a
+ // dubious practice for the computation of an assert message to have side
+ // effects, since it is only evaluated if the assert fails).
+ await assertErrorsInCode('''
+class C {
+ void foo() {}
+}
+
+f(Object x) {
+ if (x is C) {
+ x.foo();
+ assert(true, () { x = new C(); return 'msg'; }());
+ }
+}
+''', [
+ error(CompileTimeErrorCode.UNDEFINED_METHOD, 65, 3),
+ ]);
+ }
+
+ test_await_flattened() async {
+ await assertErrorsInCode('''
+Future<Future<int>> ffi() => null;
+f() async {
+ Future<int> b = await ffi();
+}
+''', [
+ error(HintCode.UNUSED_LOCAL_VARIABLE, 61, 1),
+ ]);
+ }
+
+ test_bug21912() async {
+ await assertErrorsInCode('''
+class A {}
+class B extends A {}
+
+typedef T Function2<S, T>(S z);
+typedef B AToB(A x);
+typedef A BToA(B x);
+
+void main() {
+ {
+ Function2<Function2<A, B>, Function2<B, A>> t1;
+ Function2<AToB, BToA> t2;
+
+ Function2<Function2<int, double>, Function2<int, double>> left;
+
+ left = t1;
+ left = t2;
+ }
+}
+''', [
+ error(HintCode.UNUSED_LOCAL_VARIABLE, 271, 4),
+ error(CompileTimeErrorCode.INVALID_ASSIGNMENT, 289, 2),
+ error(CompileTimeErrorCode.INVALID_ASSIGNMENT, 304, 2),
+ ]);
+ }
+
+ test_forIn_downcast() async {
+ await assertErrorsInCode('''
+f() {
+ for (int i in <num>[]) {}
+}
+''', [
+ error(HintCode.UNUSED_LOCAL_VARIABLE, 17, 1),
+ ]);
+ }
+
+ test_typePromotion_conditional_useInThen_hasAssignment() async {
+ await assertErrorsInCode(r'''
+f(Object p) {
+ p is String ? (p.length + (p = 42)) : 0;
+}
+''', [
+ error(CompileTimeErrorCode.UNDEFINED_GETTER, 33, 6),
+ ]);
+ }
+
+ test_typePromotion_if_and_right_hasAssignment() async {
+ await assertErrorsInCode(r'''
+f(Object p) {
+ if (p is String && (p = null) == null) {
+ p.length;
+ }
+}
+''', [
+ error(CompileTimeErrorCode.UNDEFINED_GETTER, 63, 6),
+ ]);
+ }
+
+ test_typePromotion_if_hasAssignment_after() async {
+ await assertErrorsInCode(r'''
+f(Object p) {
+ if (p is String) {
+ p.length;
+ p = 0;
+ }
+}
+''', [
+ error(CompileTimeErrorCode.UNDEFINED_GETTER, 41, 6),
+ ]);
+ }
+
+ test_typePromotion_if_hasAssignment_inClosure_anonymous_after() async {
+ await assertErrorsInCode(r'''
+f(Object p) {
+ if (p is String) {
+ p.length;
+ }
+ () {p = 0;};
+}
+''', [
+ error(CompileTimeErrorCode.UNDEFINED_GETTER, 41, 6),
+ ]);
+ }
+
+ test_typePromotion_if_hasAssignment_inClosure_function_after() async {
+ await assertErrorsInCode(r'''
+g(Object p) {
+ if (p is String) {
+ p.length;
+ }
+ f() {p = 0;};
+}
+''', [
+ error(CompileTimeErrorCode.UNDEFINED_GETTER, 41, 6),
+ error(HintCode.UNUSED_ELEMENT, 55, 1),
]);
}
}
diff --git a/pkg/analyzer/test/generated/strong_mode_test.dart b/pkg/analyzer/test/generated/strong_mode_test.dart
index 2364704..5954810 100644
--- a/pkg/analyzer/test/generated/strong_mode_test.dart
+++ b/pkg/analyzer/test/generated/strong_mode_test.dart
@@ -26,7 +26,10 @@
/// Strong mode static analyzer local type inference tests
@reflectiveTest
-class StrongModeLocalInferenceTest extends PubPackageResolutionTest {
+class StrongModeLocalInferenceTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
+ // TODO(https://github.com/dart-lang/sdk/issues/44666): Use null safety in
+ // test cases.
TypeAssertions? _assertions;
late final Asserter<DartType> _isDynamic;
diff --git a/pkg/analyzer/test/src/dart/analysis/dependency/base.dart b/pkg/analyzer/test/src/dart/analysis/dependency/base.dart
index 5581413..4d09fb6 100644
--- a/pkg/analyzer/test/src/dart/analysis/dependency/base.dart
+++ b/pkg/analyzer/test/src/dart/analysis/dependency/base.dart
@@ -9,8 +9,10 @@
import '../../resolution/context_collection_resolution.dart';
-class BaseDependencyTest extends PubPackageResolutionTest {
-// DependencyTracker tracker;
+class BaseDependencyTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
+ // TODO(https://github.com/dart-lang/sdk/issues/44666): Use null safety in
+ // test cases.
late final String a;
late final String b;
late final String c;
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
index 020f3a0..de3eeed 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
@@ -35,7 +35,9 @@
/// Integration tests for resolution.
@reflectiveTest
class AnalysisDriverResolutionTest extends PubPackageResolutionTest
- with ElementsTypesMixin {
+ with WithoutNullSafetyMixin, ElementsTypesMixin {
+ // TODO(https://github.com/dart-lang/sdk/issues/44666): Use null safety in
+ // test cases.
void assertDeclaredVariableType(SimpleIdentifier node, String expected) {
var element = node.staticElement as VariableElement;
assertType(element.type, expected);
diff --git a/pkg/analyzer/test/src/dart/analysis/index_test.dart b/pkg/analyzer/test/src/dart/analysis/index_test.dart
index 808c5fb..8c190aa 100644
--- a/pkg/analyzer/test/src/dart/analysis/index_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/index_test.dart
@@ -35,7 +35,9 @@
@reflectiveTest
class IndexTest extends PubPackageResolutionTest
- with _IndexMixin, WithNonFunctionTypeAliasesMixin {
+ with WithoutNullSafetyMixin, _IndexMixin, WithNonFunctionTypeAliasesMixin {
+ // TODO(https://github.com/dart-lang/sdk/issues/44666): Use null safety in
+ // test cases.
test_fieldFormalParameter_noSuchField() async {
await _indexTestUnit('''
class B<T> {
diff --git a/pkg/analyzer/test/src/dart/constant/evaluation_test.dart b/pkg/analyzer/test/src/dart/constant/evaluation_test.dart
index d45c744..86367f8 100644
--- a/pkg/analyzer/test/src/dart/constant/evaluation_test.dart
+++ b/pkg/analyzer/test/src/dart/constant/evaluation_test.dart
@@ -1016,7 +1016,10 @@
}
}
-class ConstantVisitorTestSupport extends PubPackageResolutionTest {
+class ConstantVisitorTestSupport extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
+ // TODO(https://github.com/dart-lang/sdk/issues/44666): Use null safety in
+ // test cases.
DartObjectImpl _evaluateConstant(
String name, {
List<ErrorCode>? errorCodes,
diff --git a/pkg/analyzer/test/src/dart/constant/potentially_constant_test.dart b/pkg/analyzer/test/src/dart/constant/potentially_constant_test.dart
index 9951612..529c2fb 100644
--- a/pkg/analyzer/test/src/dart/constant/potentially_constant_test.dart
+++ b/pkg/analyzer/test/src/dart/constant/potentially_constant_test.dart
@@ -179,7 +179,10 @@
}
@reflectiveTest
-class PotentiallyConstantTest extends PubPackageResolutionTest {
+class PotentiallyConstantTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
+ // TODO(https://github.com/dart-lang/sdk/issues/44666): Use null safety in
+ // test cases.
test_adjacentStrings() async {
await _assertConst(r'''
var x = 'a' 'b';
diff --git a/pkg/analyzer/test/src/dart/element/inheritance_manager3_test.dart b/pkg/analyzer/test/src/dart/element/inheritance_manager3_test.dart
index d584afe..bb83b55 100644
--- a/pkg/analyzer/test/src/dart/element/inheritance_manager3_test.dart
+++ b/pkg/analyzer/test/src/dart/element/inheritance_manager3_test.dart
@@ -1281,7 +1281,10 @@
}
}
-class _InheritanceManager3Base extends PubPackageResolutionTest {
+class _InheritanceManager3Base extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
+ // TODO(https://github.com/dart-lang/sdk/issues/44666): Use null safety in
+ // test cases.
late final InheritanceManager3 manager;
@override
diff --git a/pkg/analyzer/test/src/dart/resolution/assignment_test.dart b/pkg/analyzer/test/src/dart/resolution/assignment_test.dart
index f5bd0cd..5a639d1 100644
--- a/pkg/analyzer/test/src/dart/resolution/assignment_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/assignment_test.dart
@@ -12,7 +12,6 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(AssignmentDriverResolutionTest);
- defineReflectiveTests(AssignmentDriverResolutionWithNullSafetyTest);
defineReflectiveTests(
AssignmentDriverResolutionWithNonFunctionTypeAliasesTest,
);
@@ -2425,8 +2424,3 @@
assertType(assignment.rightHandSide, 'int');
}
}
-
-@reflectiveTest
-class AssignmentDriverResolutionWithNullSafetyTest
- extends PubPackageResolutionTest
- with WithNullSafetyMixin, AssignmentDriverResolutionTestCases {}
diff --git a/pkg/analyzer/test/src/dart/resolution/ast_rewrite_test.dart b/pkg/analyzer/test/src/dart/resolution/ast_rewrite_test.dart
index ab1f6c6..f9664da 100644
--- a/pkg/analyzer/test/src/dart/resolution/ast_rewrite_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/ast_rewrite_test.dart
@@ -392,7 +392,12 @@
@reflectiveTest
class AstRewriteMethodInvocationWithNonFunctionTypeAliasesTest
extends PubPackageResolutionTest
- with WithNonFunctionTypeAliasesMixin, AstRewriteMethodInvocationTestCases {
+ with
+ WithoutNullSafetyMixin,
+ WithNonFunctionTypeAliasesMixin,
+ AstRewriteMethodInvocationTestCases {
+ // TODO(https://github.com/dart-lang/sdk/issues/44666): Use null safety in
+ // test cases.
test_targetNull_typeAlias_interfaceType() async {
await assertNoErrorsInCode(r'''
class A<T, U> {
diff --git a/pkg/analyzer/test/src/dart/resolution/await_expression_test.dart b/pkg/analyzer/test/src/dart/resolution/await_expression_test.dart
index e2baade..e29f77d 100644
--- a/pkg/analyzer/test/src/dart/resolution/await_expression_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/await_expression_test.dart
@@ -14,7 +14,8 @@
}
@reflectiveTest
-class AwaitExpressionResolutionTest extends PubPackageResolutionTest {
+class AwaitExpressionResolutionTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_future() async {
await assertNoErrorsInCode(r'''
f(Future<int> a) async {
diff --git a/pkg/analyzer/test/src/dart/resolution/binary_expression_test.dart b/pkg/analyzer/test/src/dart/resolution/binary_expression_test.dart
index 7c699c7..99c85ca 100644
--- a/pkg/analyzer/test/src/dart/resolution/binary_expression_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/binary_expression_test.dart
@@ -12,13 +12,104 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(BinaryExpressionResolutionTest);
- defineReflectiveTests(BinaryExpressionResolutionWithNullSafetyTest);
});
}
@reflectiveTest
class BinaryExpressionResolutionTest extends PubPackageResolutionTest
- with BinaryExpressionResolutionTestCases {}
+ with BinaryExpressionResolutionTestCases {
+ test_ifNull_left_nullableContext() async {
+ await assertNoErrorsInCode(r'''
+T f<T>(T t) => t;
+
+int g() => f(null) ?? 0;
+''');
+
+ assertMethodInvocation2(
+ findNode.methodInvocation('f(null)'),
+ element: findElement.topFunction('f'),
+ typeArgumentTypes: ['int?'],
+ invokeType: 'int? Function(int?)',
+ type: 'int?',
+ );
+
+ assertBinaryExpression(
+ findNode.binary('?? 0'),
+ element: null,
+ type: 'int',
+ );
+ }
+
+ test_ifNull_nullableInt_int() async {
+ await assertNoErrorsInCode(r'''
+void f(int? x, int y) {
+ x ?? y;
+}
+''');
+
+ assertBinaryExpression(
+ findNode.binary('x ?? y'),
+ element: null,
+ type: 'int',
+ );
+ }
+
+ test_ifNull_nullableInt_nullableDouble() async {
+ await assertNoErrorsInCode(r'''
+void f(int? x, double? y) {
+ x ?? y;
+}
+''');
+
+ assertBinaryExpression(
+ findNode.binary('x ?? y'),
+ element: null,
+ type: 'num?',
+ );
+ }
+
+ test_ifNull_nullableInt_nullableInt() async {
+ await assertNoErrorsInCode(r'''
+void f(int? x) {
+ x ?? x;
+}
+''');
+
+ assertBinaryExpression(
+ findNode.binary('x ?? x'),
+ element: null,
+ type: 'int?',
+ );
+ }
+
+ test_plus_int_never() async {
+ await assertNoErrorsInCode('''
+f(int a, Never b) {
+ a + b;
+}
+''');
+
+ assertBinaryExpression(findNode.binary('a + b'),
+ element: numElement.getMethod('+'), type: 'num');
+ }
+
+ test_plus_never_int() async {
+ await assertErrorsInCode(r'''
+f(Never a, int b) {
+ a + b;
+}
+''', [
+ error(HintCode.RECEIVER_OF_TYPE_NEVER, 22, 1),
+ error(HintCode.DEAD_CODE, 26, 2),
+ ]);
+
+ assertBinaryExpression(
+ findNode.binary('a + b'),
+ element: isNull,
+ type: 'Never',
+ );
+ }
+}
mixin BinaryExpressionResolutionTestCases on PubPackageResolutionTest {
test_bangEq() async {
@@ -701,100 +792,3 @@
);
}
}
-
-@reflectiveTest
-class BinaryExpressionResolutionWithNullSafetyTest
- extends PubPackageResolutionTest
- with WithNullSafetyMixin, BinaryExpressionResolutionTestCases {
- test_ifNull_left_nullableContext() async {
- await assertNoErrorsInCode(r'''
-T f<T>(T t) => t;
-
-int g() => f(null) ?? 0;
-''');
-
- assertMethodInvocation2(
- findNode.methodInvocation('f(null)'),
- element: findElement.topFunction('f'),
- typeArgumentTypes: ['int?'],
- invokeType: 'int? Function(int?)',
- type: 'int?',
- );
-
- assertBinaryExpression(
- findNode.binary('?? 0'),
- element: null,
- type: 'int',
- );
- }
-
- test_ifNull_nullableInt_int() async {
- await assertNoErrorsInCode(r'''
-void f(int? x, int y) {
- x ?? y;
-}
-''');
-
- assertBinaryExpression(
- findNode.binary('x ?? y'),
- element: null,
- type: 'int',
- );
- }
-
- test_ifNull_nullableInt_nullableDouble() async {
- await assertNoErrorsInCode(r'''
-void f(int? x, double? y) {
- x ?? y;
-}
-''');
-
- assertBinaryExpression(
- findNode.binary('x ?? y'),
- element: null,
- type: 'num?',
- );
- }
-
- test_ifNull_nullableInt_nullableInt() async {
- await assertNoErrorsInCode(r'''
-void f(int? x) {
- x ?? x;
-}
-''');
-
- assertBinaryExpression(
- findNode.binary('x ?? x'),
- element: null,
- type: 'int?',
- );
- }
-
- test_plus_int_never() async {
- await assertNoErrorsInCode('''
-f(int a, Never b) {
- a + b;
-}
-''');
-
- assertBinaryExpression(findNode.binary('a + b'),
- element: numElement.getMethod('+'), type: 'num');
- }
-
- test_plus_never_int() async {
- await assertErrorsInCode(r'''
-f(Never a, int b) {
- a + b;
-}
-''', [
- error(HintCode.RECEIVER_OF_TYPE_NEVER, 22, 1),
- error(HintCode.DEAD_CODE, 26, 2),
- ]);
-
- assertBinaryExpression(
- findNode.binary('a + b'),
- element: isNull,
- type: 'Never',
- );
- }
-}
diff --git a/pkg/analyzer/test/src/dart/resolution/class_alias_test.dart b/pkg/analyzer/test/src/dart/resolution/class_alias_test.dart
index d2ae9a5..9429125 100644
--- a/pkg/analyzer/test/src/dart/resolution/class_alias_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/class_alias_test.dart
@@ -16,7 +16,9 @@
@reflectiveTest
class ClassAliasDriverResolutionTest extends PubPackageResolutionTest
- with ElementsTypesMixin {
+ with WithoutNullSafetyMixin, ElementsTypesMixin {
+ // TODO(https://github.com/dart-lang/sdk/issues/44666): Use null safety in
+ // test cases.
test_defaultConstructor() async {
await assertNoErrorsInCode(r'''
class A {}
diff --git a/pkg/analyzer/test/src/dart/resolution/class_test.dart b/pkg/analyzer/test/src/dart/resolution/class_test.dart
index c542921..f2bff29 100644
--- a/pkg/analyzer/test/src/dart/resolution/class_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/class_test.dart
@@ -18,7 +18,9 @@
@reflectiveTest
class ClassDriverResolutionTest extends PubPackageResolutionTest
- with ElementsTypesMixin {
+ with WithoutNullSafetyMixin, ElementsTypesMixin {
+ // TODO(https://github.com/dart-lang/sdk/issues/44666): Use null safety in
+ // test cases.
test_element_allSupertypes() async {
await assertNoErrorsInCode(r'''
class A {}
diff --git a/pkg/analyzer/test/src/dart/resolution/constant_test.dart b/pkg/analyzer/test/src/dart/resolution/constant_test.dart
index 7d9f46b..5ee85c3 100644
--- a/pkg/analyzer/test/src/dart/resolution/constant_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/constant_test.dart
@@ -21,7 +21,8 @@
}
@reflectiveTest
-class ConstantResolutionTest extends PubPackageResolutionTest {
+class ConstantResolutionTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_constantValue_defaultParameter_noDefaultValue() async {
newFile('$testPackageLibPath/a.dart', content: r'''
class A {
diff --git a/pkg/analyzer/test/src/dart/resolution/context_collection_resolution.dart b/pkg/analyzer/test/src/dart/resolution/context_collection_resolution.dart
index a0be018..ab0d50f 100644
--- a/pkg/analyzer/test/src/dart/resolution/context_collection_resolution.dart
+++ b/pkg/analyzer/test/src/dart/resolution/context_collection_resolution.dart
@@ -247,12 +247,15 @@
String get testFilePath => '$testPackageLibPath/test.dart';
/// The language version to use by default for `package:test`.
- String? get testPackageLanguageVersion => '2.9';
+ String? get testPackageLanguageVersion => '2.12';
String get testPackageLibPath => '$testPackageRootPath/lib';
String get testPackageRootPath => '$workspaceRootPath/test';
+ @override
+ bool get typeToStringWithNullability => true;
+
String get workspaceRootPath => '/home';
@override
@@ -346,9 +349,6 @@
@override
String? get testPackageLanguageVersion => null;
- @override
- bool get typeToStringWithNullability => true;
-
@nonVirtual
@override
void setUp() {
@@ -363,9 +363,19 @@
}
mixin WithNullSafetyMixin on PubPackageResolutionTest {
+ // TODO(https://github.com/dart-lang/sdk/issues/44666): This mixin is a no-op
+ // on PubPackageResolutionTest; remove its usage and remove it.
@override
- String? get testPackageLanguageVersion => null;
+ String? get testPackageLanguageVersion => '2.12';
@override
bool get typeToStringWithNullability => true;
}
+
+mixin WithoutNullSafetyMixin on PubPackageResolutionTest {
+ @override
+ String? get testPackageLanguageVersion => '2.9';
+
+ @override
+ bool get typeToStringWithNullability => false;
+}
diff --git a/pkg/analyzer/test/src/dart/resolution/export_test.dart b/pkg/analyzer/test/src/dart/resolution/export_test.dart
index fe41eaf..21640db 100644
--- a/pkg/analyzer/test/src/dart/resolution/export_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/export_test.dart
@@ -14,7 +14,10 @@
}
@reflectiveTest
-class ExportResolutionTest extends PubPackageResolutionTest {
+class ExportResolutionTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
+ // TODO(https://github.com/dart-lang/sdk/issues/44666): Use null safety in
+ // test cases.
test_configurations_default() async {
newFile('$testPackageLibPath/a.dart', content: 'class A {}');
newFile('$testPackageLibPath/a_html.dart', content: 'class A {}');
diff --git a/pkg/analyzer/test/src/dart/resolution/extension_method_test.dart b/pkg/analyzer/test/src/dart/resolution/extension_method_test.dart
index f0ee58d..8e94415 100644
--- a/pkg/analyzer/test/src/dart/resolution/extension_method_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/extension_method_test.dart
@@ -27,7 +27,8 @@
/// Tests that show that extension declarations and the members inside them are
/// resolved correctly.
@reflectiveTest
-class ExtensionMethodsDeclarationTest extends PubPackageResolutionTest {
+class ExtensionMethodsDeclarationTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
@override
List<MockSdkLibrary> get additionalMockSdkLibraries => [
MockSdkLibrary([
@@ -355,7 +356,8 @@
/// Tests that show that extension declarations support all of the possible
/// types in the `on` clause.
@reflectiveTest
-class ExtensionMethodsExtendedTypeTest extends PubPackageResolutionTest {
+class ExtensionMethodsExtendedTypeTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_named_generic() async {
await assertNoErrorsInCode('''
class C<T> {}
@@ -482,7 +484,8 @@
/// Tests that extension members can be correctly resolved when referenced
/// by code external to the extension declaration.
@reflectiveTest
-class ExtensionMethodsExternalReferenceTest extends PubPackageResolutionTest {
+class ExtensionMethodsExternalReferenceTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
/// Corresponds to: extension_member_resolution_t07
test_dynamicInvocation() async {
await assertNoErrorsInCode(r'''
@@ -1747,7 +1750,8 @@
/// Tests that extension members can be correctly resolved when referenced
/// by code internal to (within) the extension declaration.
@reflectiveTest
-class ExtensionMethodsInternalReferenceTest extends PubPackageResolutionTest {
+class ExtensionMethodsInternalReferenceTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_instance_call() async {
await assertNoErrorsInCode('''
class C {}
diff --git a/pkg/analyzer/test/src/dart/resolution/extension_override_test.dart b/pkg/analyzer/test/src/dart/resolution/extension_override_test.dart
index 7946260..eea3223 100644
--- a/pkg/analyzer/test/src/dart/resolution/extension_override_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/extension_override_test.dart
@@ -19,7 +19,8 @@
}
@reflectiveTest
-class ExtensionOverrideTest extends PubPackageResolutionTest {
+class ExtensionOverrideTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
late ExtensionElement extension;
late ExtensionOverride extensionOverride;
diff --git a/pkg/analyzer/test/src/dart/resolution/field_test.dart b/pkg/analyzer/test/src/dart/resolution/field_test.dart
index 431a369..1ff7e4e 100644
--- a/pkg/analyzer/test/src/dart/resolution/field_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/field_test.dart
@@ -11,7 +11,6 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(FieldTest);
- defineReflectiveTests(FieldWithNullSafetyTest);
});
}
@@ -63,19 +62,6 @@
assertType(findElement.field('f').type, 'dynamic');
}
- test_type_inferred_null() async {
- await resolveTestCode('''
-class A {
- var f = null;
-}
-''');
- assertType(findElement.field('f').type, 'dynamic');
- }
-}
-
-@reflectiveTest
-class FieldWithNullSafetyTest extends PubPackageResolutionTest
- with WithNullSafetyMixin {
test_type_inferred_nonNullify() async {
newFile('$testPackageLibPath/a.dart', content: r'''
// @dart = 2.7
@@ -94,4 +80,13 @@
assertType(findElement.field('f').type, 'int');
}
+
+ test_type_inferred_null() async {
+ await resolveTestCode('''
+class A {
+ var f = null;
+}
+''');
+ assertType(findElement.field('f').type, 'dynamic');
+ }
}
diff --git a/pkg/analyzer/test/src/dart/resolution/for_element_test.dart b/pkg/analyzer/test/src/dart/resolution/for_element_test.dart
index 5094df7..06f0e44 100644
--- a/pkg/analyzer/test/src/dart/resolution/for_element_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/for_element_test.dart
@@ -9,13 +9,32 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(ForEachElementTest);
- defineReflectiveTests(ForEachElementWithNullSafetyTest);
defineReflectiveTests(ForLoopElementTest);
});
}
@reflectiveTest
-class ForEachElementTest extends PubPackageResolutionTest {
+class ForEachElementTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
+ test_optIn_fromOptOut() async {
+ newFile('$testPackageLibPath/a.dart', content: r'''
+class A implements Iterable<int> {
+ Iterator<int> iterator => throw 0;
+}
+''');
+
+ await assertNoErrorsInCode(r'''
+// @dart = 2.7
+import 'a.dart';
+
+f(A a) {
+ for (var v in a) {
+ v;
+ }
+}
+''');
+ }
+
test_withDeclaration_scope() async {
await assertNoErrorsInCode(r'''
main() {
@@ -49,29 +68,6 @@
}
@reflectiveTest
-class ForEachElementWithNullSafetyTest extends ForEachElementTest
- with WithNullSafetyMixin {
- test_optIn_fromOptOut() async {
- newFile('$testPackageLibPath/a.dart', content: r'''
-class A implements Iterable<int> {
- Iterator<int> iterator => throw 0;
-}
-''');
-
- await assertNoErrorsInCode(r'''
-// @dart = 2.7
-import 'a.dart';
-
-f(A a) {
- for (var v in a) {
- v;
- }
-}
-''');
- }
-}
-
-@reflectiveTest
class ForLoopElementTest extends PubPackageResolutionTest {
test_condition_rewrite() async {
await assertNoErrorsInCode(r'''
diff --git a/pkg/analyzer/test/src/dart/resolution/function_expression_invocation_test.dart b/pkg/analyzer/test/src/dart/resolution/function_expression_invocation_test.dart
index 8e76124..21df44e 100644
--- a/pkg/analyzer/test/src/dart/resolution/function_expression_invocation_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/function_expression_invocation_test.dart
@@ -15,7 +15,8 @@
}
@reflectiveTest
-class FunctionExpressionInvocationTest extends PubPackageResolutionTest {
+class FunctionExpressionInvocationTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_dynamic_withoutTypeArguments() async {
await assertNoErrorsInCode(r'''
main() {
diff --git a/pkg/analyzer/test/src/dart/resolution/generic_function_type_test.dart b/pkg/analyzer/test/src/dart/resolution/generic_function_type_test.dart
index a717dea..4ae2a74 100644
--- a/pkg/analyzer/test/src/dart/resolution/generic_function_type_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/generic_function_type_test.dart
@@ -29,7 +29,7 @@
static const x = const A<bool Function()>();
}
-int Function(int a) y;
+int Function(int a)? y;
''');
}
@@ -44,7 +44,7 @@
const x = const A<bool Function()>();
-int Function(int a) y;
+int Function(int a)? y;
''');
}
@@ -52,7 +52,7 @@
await assertNoErrorsInCode(r'''
const a = 42;
-Function<@a T>() x;
+Function<@a T>()? x;
''');
var T = findNode.typeParameter('T');
var annotation = T.declaredElement!.metadata[0];
@@ -63,15 +63,15 @@
/// [FunctionDeclaration], all of them are resolved correctly.
test_typeAnnotation_function() async {
await assertNoErrorsInCode('''
-void Function() f<T extends bool Function()>(int Function() a) {
+void Function()? f<T extends bool Function()>(int Function() a) {
return null;
}
-double Function() x;
+double Function()? x;
''');
assertType(
- findNode.genericFunctionType('void Function()'),
- 'void Function()',
+ findNode.genericFunctionType('void Function()?'),
+ 'void Function()?',
);
assertType(
findNode.genericFunctionType('bool Function()'),
@@ -82,8 +82,8 @@
'int Function()',
);
assertType(
- findNode.genericFunctionType('double Function()'),
- 'double Function()',
+ findNode.genericFunctionType('double Function()?'),
+ 'double Function()?',
);
}
@@ -116,16 +116,16 @@
test_typeAnnotation_method() async {
await assertNoErrorsInCode('''
class C {
- void Function() m<T extends bool Function()>(int Function() a) {
+ void Function()? m<T extends bool Function()>(int Function() a) {
return null;
}
}
-double Function() x;
+double Function()? x;
''');
assertType(
- findNode.genericFunctionType('void Function()'),
- 'void Function()',
+ findNode.genericFunctionType('void Function()?'),
+ 'void Function()?',
);
assertType(
findNode.genericFunctionType('bool Function()'),
@@ -136,8 +136,8 @@
'int Function()',
);
assertType(
- findNode.genericFunctionType('double Function()'),
- 'double Function()',
+ findNode.genericFunctionType('double Function()?'),
+ 'double Function()?',
);
}
diff --git a/pkg/analyzer/test/src/dart/resolution/generic_type_alias_test.dart b/pkg/analyzer/test/src/dart/resolution/generic_type_alias_test.dart
index bedb4ae..0decdba 100644
--- a/pkg/analyzer/test/src/dart/resolution/generic_type_alias_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/generic_type_alias_test.dart
@@ -25,7 +25,7 @@
typedef G = Function<S>();
-C<G> x;
+C<G>? x;
''', [
error(CompileTimeErrorCode.GENERIC_FUNCTION_TYPE_CANNOT_BE_TYPE_ARGUMENT,
45, 1),
@@ -36,7 +36,7 @@
await assertErrorsInCode(r'''
class C<T> {}
-C<Function<S>()> x;
+C<Function<S>()>? x;
''', [
error(CompileTimeErrorCode.GENERIC_FUNCTION_TYPE_CANNOT_BE_TYPE_ARGUMENT,
17, 13),
@@ -58,14 +58,14 @@
test_genericFunctionTypeCannotBeTypeArgument_literal_functionType() async {
await assertErrorsInCode(r'''
-T Function<T>(T) f;
+late T Function<T>(T?) f;
main() {
f<Function<S>()>(null);
}
''', [
error(CompileTimeErrorCode.GENERIC_FUNCTION_TYPE_CANNOT_BE_TYPE_ARGUMENT,
- 34, 13),
+ 40, 13),
]);
}
@@ -88,7 +88,7 @@
await assertErrorsInCode(r'''
typedef T F<T>(T t);
-F<Function<S>()> x;
+F<Function<S>()>? x;
''', [
error(CompileTimeErrorCode.GENERIC_FUNCTION_TYPE_CANNOT_BE_TYPE_ARGUMENT,
24, 13),
@@ -145,12 +145,12 @@
test_type_element() async {
await assertNoErrorsInCode(r'''
-G<int> g;
+G<int>? g;
typedef G<T> = T Function(double);
''');
var type = findElement.topVar('g').type as FunctionType;
- assertType(type, 'int Function(double)');
+ assertType(type, 'int Function(double)?');
var typedefG = findElement.typeAlias('G');
var functionG = typedefG.aliasedElement as GenericFunctionTypeElement;
diff --git a/pkg/analyzer/test/src/dart/resolution/if_element_test.dart b/pkg/analyzer/test/src/dart/resolution/if_element_test.dart
index 7b76cf5..9eb0ae3 100644
--- a/pkg/analyzer/test/src/dart/resolution/if_element_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/if_element_test.dart
@@ -9,7 +9,6 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(IfElementTest);
- defineReflectiveTests(IfElementWithNullSafetyTest);
});
}
@@ -31,7 +30,3 @@
);
}
}
-
-@reflectiveTest
-class IfElementWithNullSafetyTest extends IfElementTest
- with WithNullSafetyMixin {}
diff --git a/pkg/analyzer/test/src/dart/resolution/import_test.dart b/pkg/analyzer/test/src/dart/resolution/import_test.dart
index 145bae8..ff571ec 100644
--- a/pkg/analyzer/test/src/dart/resolution/import_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/import_test.dart
@@ -13,7 +13,10 @@
}
@reflectiveTest
-class ImportDirectiveResolutionTest extends PubPackageResolutionTest {
+class ImportDirectiveResolutionTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
+ // TODO(https://github.com/dart-lang/sdk/issues/44666): Use null safety in
+ // test cases.
test_configurations_default() async {
newFile('$testPackageLibPath/a.dart', content: 'class A {}');
newFile('$testPackageLibPath/a_html.dart', content: 'class A {}');
diff --git a/pkg/analyzer/test/src/dart/resolution/index_expression_test.dart b/pkg/analyzer/test/src/dart/resolution/index_expression_test.dart
index e3e0404..e10926e 100644
--- a/pkg/analyzer/test/src/dart/resolution/index_expression_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/index_expression_test.dart
@@ -10,7 +10,6 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(IndexExpressionTest);
- defineReflectiveTests(IndexExpressionWithNullSafetyTest);
});
}
@@ -68,6 +67,36 @@
);
}
+ test_read_cascade_nullShorting() async {
+ await assertNoErrorsInCode(r'''
+class A {
+ bool operator[](int index) => false;
+}
+
+void f(A? a) {
+ a?..[0]..[1];
+}
+''');
+
+ var indexElement = findElement.method('[]');
+
+ assertIndexExpression(
+ findNode.index('..[0]'),
+ readElement: indexElement,
+ writeElement: null,
+ type: 'bool',
+ );
+
+ assertIndexExpression(
+ findNode.index('..[1]'),
+ readElement: indexElement,
+ writeElement: null,
+ type: 'bool',
+ );
+
+ assertType(findNode.cascade('a?'), 'A?');
+ }
+
test_read_generic() async {
await assertNoErrorsInCode(r'''
class A<T> {
@@ -97,6 +126,28 @@
);
}
+ test_read_nullable() async {
+ await assertNoErrorsInCode(r'''
+class A {
+ bool operator[](int index) => false;
+}
+
+void f(A? a) {
+ a?[0];
+}
+''');
+
+ var indexElement = findElement.method('[]');
+
+ var indexExpression = findNode.index('a?[0]');
+ assertIndexExpression(
+ indexExpression,
+ readElement: indexElement,
+ writeElement: null,
+ type: 'bool?',
+ );
+ }
+
test_readWrite_assignment() async {
await assertNoErrorsInCode(r'''
class A {
@@ -207,154 +258,6 @@
);
}
- test_write() async {
- await assertNoErrorsInCode(r'''
-class A {
- void operator[]=(int index, num value) {}
-}
-
-void f(A a) {
- a[0] = 1.2;
-}
-''');
-
- var indexEqElement = findElement.method('[]=');
-
- var indexExpression = findNode.index('a[0]');
- if (hasAssignmentLeftResolution) {
- assertIndexExpression(
- indexExpression,
- readElement: null,
- writeElement: indexEqElement,
- type: null,
- );
- }
- assertParameterElement(
- indexExpression.index,
- indexEqElement.parameters[0],
- );
-
- var assignment = indexExpression.parent as AssignmentExpression;
- assertAssignment(
- assignment,
- readElement: null,
- readType: null,
- writeElement: indexEqElement,
- writeType: 'num',
- operatorElement: null,
- type: 'double',
- );
- assertParameterElement(
- assignment.rightHandSide,
- indexEqElement.parameters[1],
- );
- }
-
- test_write_generic() async {
- await assertNoErrorsInCode(r'''
-class A<T> {
- void operator[]=(int index, T value) {}
-}
-
-void f(A<double> a) {
- a[0] = 1.2;
-}
-''');
-
- var indexEqElement = findElement.method('[]=');
-
- var indexExpression = findNode.index('a[0]');
- if (hasAssignmentLeftResolution) {
- assertIndexExpression(
- indexExpression,
- readElement: null,
- writeElement: elementMatcher(
- indexEqElement,
- substitution: {'T': 'double'},
- ),
- type: null,
- );
- }
- assertParameterElement(
- indexExpression.index,
- indexEqElement.parameters[0],
- );
-
- var assignment = indexExpression.parent as AssignmentExpression;
- assertAssignment(
- assignment,
- readElement: null,
- readType: null,
- writeElement: elementMatcher(
- indexEqElement,
- substitution: {'T': 'double'},
- ),
- writeType: 'double',
- operatorElement: null,
- type: 'double',
- );
- assertParameterElement(
- assignment.rightHandSide,
- indexEqElement.parameters[1],
- );
- }
-}
-
-@reflectiveTest
-class IndexExpressionWithNullSafetyTest extends IndexExpressionTest
- with WithNullSafetyMixin {
- test_read_cascade_nullShorting() async {
- await assertNoErrorsInCode(r'''
-class A {
- bool operator[](int index) => false;
-}
-
-void f(A? a) {
- a?..[0]..[1];
-}
-''');
-
- var indexElement = findElement.method('[]');
-
- assertIndexExpression(
- findNode.index('..[0]'),
- readElement: indexElement,
- writeElement: null,
- type: 'bool',
- );
-
- assertIndexExpression(
- findNode.index('..[1]'),
- readElement: indexElement,
- writeElement: null,
- type: 'bool',
- );
-
- assertType(findNode.cascade('a?'), 'A?');
- }
-
- test_read_nullable() async {
- await assertNoErrorsInCode(r'''
-class A {
- bool operator[](int index) => false;
-}
-
-void f(A? a) {
- a?[0];
-}
-''');
-
- var indexElement = findElement.method('[]');
-
- var indexExpression = findNode.index('a?[0]');
- assertIndexExpression(
- indexExpression,
- readElement: indexElement,
- writeElement: null,
- type: 'bool?',
- );
- }
-
test_readWrite_nullable() async {
await assertNoErrorsInCode(r'''
class A {
@@ -401,6 +304,49 @@
);
}
+ test_write() async {
+ await assertNoErrorsInCode(r'''
+class A {
+ void operator[]=(int index, num value) {}
+}
+
+void f(A a) {
+ a[0] = 1.2;
+}
+''');
+
+ var indexEqElement = findElement.method('[]=');
+
+ var indexExpression = findNode.index('a[0]');
+ if (hasAssignmentLeftResolution) {
+ assertIndexExpression(
+ indexExpression,
+ readElement: null,
+ writeElement: indexEqElement,
+ type: null,
+ );
+ }
+ assertParameterElement(
+ indexExpression.index,
+ indexEqElement.parameters[0],
+ );
+
+ var assignment = indexExpression.parent as AssignmentExpression;
+ assertAssignment(
+ assignment,
+ readElement: null,
+ readType: null,
+ writeElement: indexEqElement,
+ writeType: 'num',
+ operatorElement: null,
+ type: 'double',
+ );
+ assertParameterElement(
+ assignment.rightHandSide,
+ indexEqElement.parameters[1],
+ );
+ }
+
test_write_cascade_nullShorting() async {
await assertNoErrorsInCode(r'''
class A {
@@ -453,6 +399,55 @@
assertType(findNode.cascade('a?'), 'A?');
}
+ test_write_generic() async {
+ await assertNoErrorsInCode(r'''
+class A<T> {
+ void operator[]=(int index, T value) {}
+}
+
+void f(A<double> a) {
+ a[0] = 1.2;
+}
+''');
+
+ var indexEqElement = findElement.method('[]=');
+
+ var indexExpression = findNode.index('a[0]');
+ if (hasAssignmentLeftResolution) {
+ assertIndexExpression(
+ indexExpression,
+ readElement: null,
+ writeElement: elementMatcher(
+ indexEqElement,
+ substitution: {'T': 'double'},
+ ),
+ type: null,
+ );
+ }
+ assertParameterElement(
+ indexExpression.index,
+ indexEqElement.parameters[0],
+ );
+
+ var assignment = indexExpression.parent as AssignmentExpression;
+ assertAssignment(
+ assignment,
+ readElement: null,
+ readType: null,
+ writeElement: elementMatcher(
+ indexEqElement,
+ substitution: {'T': 'double'},
+ ),
+ writeType: 'double',
+ operatorElement: null,
+ type: 'double',
+ );
+ assertParameterElement(
+ assignment.rightHandSide,
+ indexEqElement.parameters[1],
+ );
+ }
+
test_write_nullable() async {
await assertNoErrorsInCode(r'''
class A {
diff --git a/pkg/analyzer/test/src/dart/resolution/instance_creation_test.dart b/pkg/analyzer/test/src/dart/resolution/instance_creation_test.dart
index b37c4cb..5bf3bac 100644
--- a/pkg/analyzer/test/src/dart/resolution/instance_creation_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/instance_creation_test.dart
@@ -10,7 +10,6 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(InstanceCreationTest);
- defineReflectiveTests(InstanceCreationWithNullSafetyTest);
});
}
@@ -171,7 +170,3 @@
);
}
}
-
-@reflectiveTest
-class InstanceCreationWithNullSafetyTest extends PubPackageResolutionTest
- with WithNullSafetyMixin, InstanceCreationTestCases {}
diff --git a/pkg/analyzer/test/src/dart/resolution/instance_member_inference_class_test.dart b/pkg/analyzer/test/src/dart/resolution/instance_member_inference_class_test.dart
index 0516a3a..aaf0e18 100644
--- a/pkg/analyzer/test/src/dart/resolution/instance_member_inference_class_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/instance_member_inference_class_test.dart
@@ -11,7 +11,6 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(InstanceMemberInferenceClassTest);
- defineReflectiveTests(InstanceMemberInferenceClassWithNullSafetyTest);
});
}
@@ -159,6 +158,28 @@
_assertFieldTypeDynamic(foo);
}
+ test_field_multiple_gettersSetters_final_nonNullify() async {
+ newFile('$testPackageLibPath/a.dart', content: r'''
+// @dart = 2.7
+abstract class A {
+ int get foo;
+}
+abstract class B {
+ set foo(num _);
+}
+''');
+
+ await resolveTestCode('''
+import 'a.dart';
+
+class X implements A, B {
+ final foo;
+}
+''');
+ var foo = findElement.field('foo', of: 'X');
+ _assertFieldType(foo, 'int');
+ }
+
test_field_multiple_gettersSetters_notFinal_combined_notSame() async {
await resolveTestCode('''
class A {
@@ -236,6 +257,28 @@
_assertFieldTypeDynamic(foo);
}
+ test_field_multiple_gettersSetters_notFinal_nonNullify() async {
+ newFile('$testPackageLibPath/a.dart', content: r'''
+// @dart = 2.7
+abstract class A {
+ int get foo;
+}
+abstract class B {
+ set foo(int _);
+}
+''');
+
+ await resolveTestCode('''
+import 'a.dart';
+
+class X implements A, B {
+ var foo;
+}
+''');
+ var foo = findElement.field('foo', of: 'X');
+ _assertFieldType(foo, 'int');
+ }
+
test_field_multiple_setters_combined() async {
await resolveTestCode('''
class A {
@@ -268,6 +311,42 @@
_assertFieldTypeDynamic(foo);
}
+ test_field_single_getter_nonNullify() async {
+ newFile('$testPackageLibPath/a.dart', content: r'''
+// @dart = 2.7
+abstract class A {
+ int get foo;
+}
+''');
+ await resolveTestCode('''
+import 'a.dart';
+
+abstract class B implements A {
+ var foo;
+}
+''');
+ var foo = findElement.field('foo', of: 'B');
+ _assertFieldType(foo, 'int');
+ }
+
+ test_field_single_setter_nonNullify() async {
+ newFile('$testPackageLibPath/a.dart', content: r'''
+// @dart = 2.7
+abstract class A {
+ set foo(int _);
+}
+''');
+ await resolveTestCode('''
+import 'a.dart';
+
+abstract class B implements A {
+ var foo;
+}
+''');
+ var foo = findElement.field('foo', of: 'B');
+ _assertFieldType(foo, 'int');
+ }
+
test_getter_multiple_getters_combined() async {
await resolveTestCode('''
class A {
@@ -386,6 +465,42 @@
_assertGetterTypeDynamic(foo);
}
+ test_getter_single_getter_nonNullify() async {
+ newFile('$testPackageLibPath/a.dart', content: r'''
+// @dart = 2.7
+abstract class A {
+ int get foo;
+}
+''');
+ await resolveTestCode('''
+import 'a.dart';
+
+abstract class B implements A {
+ get foo;
+}
+''');
+ var foo = findElement.getter('foo', of: 'B');
+ _assertGetterType(foo, 'int');
+ }
+
+ test_getter_single_setter_nonNullify() async {
+ newFile('$testPackageLibPath/a.dart', content: r'''
+// @dart = 2.7
+abstract class A {
+ set foo(int _);
+}
+''');
+ await resolveTestCode('''
+import 'a.dart';
+
+abstract class B implements A {
+ get foo;
+}
+''');
+ var foo = findElement.getter('foo', of: 'B');
+ _assertGetterType(foo, 'int');
+ }
+
test_invalid_field_overrides_method() async {
await resolveTestCode('''
abstract class A {
@@ -536,6 +651,24 @@
assertType(p.type, 'num');
}
+ test_method_parameter_required_multiple_different_merge() async {
+ await resolveTestCode('''
+class A {
+ void foo(Object? p) {}
+}
+
+class B {
+ void foo(dynamic p) {}
+}
+
+class C implements A, B {
+ void foo(p) {}
+}
+''');
+ var p = findElement.method('foo', of: 'C').parameters[0];
+ assertType(p.type, 'Object?');
+ }
+
test_method_parameter_required_multiple_incompatible() async {
await resolveTestCode('''
class A {
@@ -581,6 +714,24 @@
assertType(p.type, 'T');
}
+ test_method_parameter_required_single_nonNullify() async {
+ newFile('$testPackageLibPath/a.dart', content: r'''
+// @dart = 2.7
+class A {
+ void foo(int p) {}
+}
+''');
+ await resolveTestCode('''
+import 'a.dart';
+
+class B implements A {
+ void foo(p) {}
+}
+''');
+ var p = findElement.method('foo', of: 'B').parameters[0];
+ assertType(p.type, 'int');
+ }
+
test_method_parameter_requiredAndPositional() async {
await resolveTestCode('''
class A {
@@ -661,6 +812,24 @@
assertTypeDynamic(foo.returnType);
}
+ test_method_return_multiple_different_merge() async {
+ await resolveTestCode('''
+class A {
+ Object? foo() => throw 0;
+}
+
+class B {
+ dynamic foo() => throw 0;
+}
+
+class C implements A, B {
+ foo() => throw 0;
+}
+''');
+ var foo = findElement.method('foo', of: 'C');
+ assertType(foo.returnType, 'Object?');
+ }
+
test_method_return_multiple_different_void() async {
await resolveTestCode('''
class A {
@@ -725,6 +894,24 @@
assertType(foo.returnType, 'void');
}
+ test_method_return_nonNullify() async {
+ newFile('$testPackageLibPath/a.dart', content: r'''
+// @dart = 2.7
+abstract class A {
+ int foo();
+}
+''');
+ await resolveTestCode('''
+import 'a.dart';
+
+abstract class B implements A {
+ foo();
+}
+''');
+ var foo = findElement.method('foo', of: 'B');
+ assertType(foo.returnType, 'int');
+ }
+
test_method_return_single() async {
await resolveTestCode('''
class A {
@@ -869,6 +1056,42 @@
_assertSetterTypeDynamic(foo);
}
+ test_setter_single_getter_nonNullify() async {
+ newFile('$testPackageLibPath/a.dart', content: r'''
+// @dart = 2.7
+abstract class A {
+ int get foo;
+}
+''');
+ await resolveTestCode('''
+import 'a.dart';
+
+abstract class B implements A {
+ set foo(_);
+}
+''');
+ var foo = findElement.setter('foo', of: 'B');
+ _assertSetterType(foo, 'int');
+ }
+
+ test_setter_single_setter_nonNullify() async {
+ newFile('$testPackageLibPath/a.dart', content: r'''
+// @dart = 2.7
+abstract class A {
+ set foo(int _);
+}
+''');
+ await resolveTestCode('''
+import 'a.dart';
+
+abstract class B implements A {
+ set foo(_);
+}
+''');
+ var foo = findElement.setter('foo', of: 'B');
+ _assertSetterType(foo, 'int');
+ }
+
test_setter_single_setter_withoutParameter() async {
await resolveTestCode('''
class A {
@@ -941,231 +1164,3 @@
assertTypeDynamic(accessor.parameters.single.type);
}
}
-
-@reflectiveTest
-class InstanceMemberInferenceClassWithNullSafetyTest
- extends InstanceMemberInferenceClassTest with WithNullSafetyMixin {
- test_field_multiple_gettersSetters_final_nonNullify() async {
- newFile('$testPackageLibPath/a.dart', content: r'''
-// @dart = 2.7
-abstract class A {
- int get foo;
-}
-abstract class B {
- set foo(num _);
-}
-''');
-
- await resolveTestCode('''
-import 'a.dart';
-
-class X implements A, B {
- final foo;
-}
-''');
- var foo = findElement.field('foo', of: 'X');
- _assertFieldType(foo, 'int');
- }
-
- test_field_multiple_gettersSetters_notFinal_nonNullify() async {
- newFile('$testPackageLibPath/a.dart', content: r'''
-// @dart = 2.7
-abstract class A {
- int get foo;
-}
-abstract class B {
- set foo(int _);
-}
-''');
-
- await resolveTestCode('''
-import 'a.dart';
-
-class X implements A, B {
- var foo;
-}
-''');
- var foo = findElement.field('foo', of: 'X');
- _assertFieldType(foo, 'int');
- }
-
- test_field_single_getter_nonNullify() async {
- newFile('$testPackageLibPath/a.dart', content: r'''
-// @dart = 2.7
-abstract class A {
- int get foo;
-}
-''');
- await resolveTestCode('''
-import 'a.dart';
-
-abstract class B implements A {
- var foo;
-}
-''');
- var foo = findElement.field('foo', of: 'B');
- _assertFieldType(foo, 'int');
- }
-
- test_field_single_setter_nonNullify() async {
- newFile('$testPackageLibPath/a.dart', content: r'''
-// @dart = 2.7
-abstract class A {
- set foo(int _);
-}
-''');
- await resolveTestCode('''
-import 'a.dart';
-
-abstract class B implements A {
- var foo;
-}
-''');
- var foo = findElement.field('foo', of: 'B');
- _assertFieldType(foo, 'int');
- }
-
- test_getter_single_getter_nonNullify() async {
- newFile('$testPackageLibPath/a.dart', content: r'''
-// @dart = 2.7
-abstract class A {
- int get foo;
-}
-''');
- await resolveTestCode('''
-import 'a.dart';
-
-abstract class B implements A {
- get foo;
-}
-''');
- var foo = findElement.getter('foo', of: 'B');
- _assertGetterType(foo, 'int');
- }
-
- test_getter_single_setter_nonNullify() async {
- newFile('$testPackageLibPath/a.dart', content: r'''
-// @dart = 2.7
-abstract class A {
- set foo(int _);
-}
-''');
- await resolveTestCode('''
-import 'a.dart';
-
-abstract class B implements A {
- get foo;
-}
-''');
- var foo = findElement.getter('foo', of: 'B');
- _assertGetterType(foo, 'int');
- }
-
- test_method_parameter_required_multiple_different_merge() async {
- await resolveTestCode('''
-class A {
- void foo(Object? p) {}
-}
-
-class B {
- void foo(dynamic p) {}
-}
-
-class C implements A, B {
- void foo(p) {}
-}
-''');
- var p = findElement.method('foo', of: 'C').parameters[0];
- assertType(p.type, 'Object?');
- }
-
- test_method_parameter_required_single_nonNullify() async {
- newFile('$testPackageLibPath/a.dart', content: r'''
-// @dart = 2.7
-class A {
- void foo(int p) {}
-}
-''');
- await resolveTestCode('''
-import 'a.dart';
-
-class B implements A {
- void foo(p) {}
-}
-''');
- var p = findElement.method('foo', of: 'B').parameters[0];
- assertType(p.type, 'int');
- }
-
- test_method_return_multiple_different_merge() async {
- await resolveTestCode('''
-class A {
- Object? foo() => throw 0;
-}
-
-class B {
- dynamic foo() => throw 0;
-}
-
-class C implements A, B {
- foo() => throw 0;
-}
-''');
- var foo = findElement.method('foo', of: 'C');
- assertType(foo.returnType, 'Object?');
- }
-
- test_method_return_nonNullify() async {
- newFile('$testPackageLibPath/a.dart', content: r'''
-// @dart = 2.7
-abstract class A {
- int foo();
-}
-''');
- await resolveTestCode('''
-import 'a.dart';
-
-abstract class B implements A {
- foo();
-}
-''');
- var foo = findElement.method('foo', of: 'B');
- assertType(foo.returnType, 'int');
- }
-
- test_setter_single_getter_nonNullify() async {
- newFile('$testPackageLibPath/a.dart', content: r'''
-// @dart = 2.7
-abstract class A {
- int get foo;
-}
-''');
- await resolveTestCode('''
-import 'a.dart';
-
-abstract class B implements A {
- set foo(_);
-}
-''');
- var foo = findElement.setter('foo', of: 'B');
- _assertSetterType(foo, 'int');
- }
-
- test_setter_single_setter_nonNullify() async {
- newFile('$testPackageLibPath/a.dart', content: r'''
-// @dart = 2.7
-abstract class A {
- set foo(int _);
-}
-''');
- await resolveTestCode('''
-import 'a.dart';
-
-abstract class B implements A {
- set foo(_);
-}
-''');
- var foo = findElement.setter('foo', of: 'B');
- _assertSetterType(foo, 'int');
- }
-}
diff --git a/pkg/analyzer/test/src/dart/resolution/instance_member_inference_mixin_test.dart b/pkg/analyzer/test/src/dart/resolution/instance_member_inference_mixin_test.dart
index 53579d1..a9a312f 100644
--- a/pkg/analyzer/test/src/dart/resolution/instance_member_inference_mixin_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/instance_member_inference_mixin_test.dart
@@ -9,7 +9,6 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(InstanceMemberInferenceClassTest);
- defineReflectiveTests(InstanceMemberInferenceClassWithNullSafetyTest);
});
}
@@ -103,6 +102,24 @@
assertType(p.type, 'num');
}
+ test_method_parameter_required_multiple_different_merge() async {
+ await resolveTestCode('''
+class A {
+ void foo(Object? p) {}
+}
+
+class B {
+ void foo(dynamic p) {}
+}
+
+mixin M on A, B {
+ void foo(p) {}
+}
+''');
+ var p = findElement.method('foo', of: 'M').parameters[0];
+ assertType(p.type, 'Object?');
+ }
+
test_method_parameter_required_multiple_incompatible() async {
await resolveTestCode('''
class A {
@@ -228,6 +245,24 @@
assertTypeDynamic(foo.returnType);
}
+ test_method_return_multiple_different_merge() async {
+ await resolveTestCode('''
+class A {
+ Object? foo() => throw 0;
+}
+
+class B {
+ dynamic foo() => throw 0;
+}
+
+mixin M on A, B {
+ foo() => throw 0;
+}
+''');
+ var foo = findElement.method('foo', of: 'M');
+ assertType(foo.returnType, 'Object?');
+ }
+
test_method_return_multiple_different_void() async {
await resolveTestCode('''
class A {
@@ -318,43 +353,3 @@
assertType(foo.returnType, 'T');
}
}
-
-@reflectiveTest
-class InstanceMemberInferenceClassWithNullSafetyTest
- extends InstanceMemberInferenceClassTest with WithNullSafetyMixin {
- test_method_parameter_required_multiple_different_merge() async {
- await resolveTestCode('''
-class A {
- void foo(Object? p) {}
-}
-
-class B {
- void foo(dynamic p) {}
-}
-
-mixin M on A, B {
- void foo(p) {}
-}
-''');
- var p = findElement.method('foo', of: 'M').parameters[0];
- assertType(p.type, 'Object?');
- }
-
- test_method_return_multiple_different_merge() async {
- await resolveTestCode('''
-class A {
- Object? foo() => throw 0;
-}
-
-class B {
- dynamic foo() => throw 0;
-}
-
-mixin M on A, B {
- foo() => throw 0;
-}
-''');
- var foo = findElement.method('foo', of: 'M');
- assertType(foo.returnType, 'Object?');
- }
-}
diff --git a/pkg/analyzer/test/src/dart/resolution/metadata_test.dart b/pkg/analyzer/test/src/dart/resolution/metadata_test.dart
index 2f5b4ba..32b7598 100644
--- a/pkg/analyzer/test/src/dart/resolution/metadata_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/metadata_test.dart
@@ -20,7 +20,8 @@
}
@reflectiveTest
-class MetadataResolutionTest extends PubPackageResolutionTest {
+class MetadataResolutionTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_genericClass_instanceGetter() async {
await resolveTestCode(r'''
class A<T> {
diff --git a/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart b/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart
index e493bde8..8092ff1 100644
--- a/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart
@@ -23,7 +23,7 @@
@reflectiveTest
class MethodInvocationResolutionTest extends PubPackageResolutionTest
- with MethodInvocationResolutionTestCases {}
+ with WithoutNullSafetyMixin, MethodInvocationResolutionTestCases {}
mixin MethodInvocationResolutionTestCases on PubPackageResolutionTest {
test_clamp_double_context_double() async {
diff --git a/pkg/analyzer/test/src/dart/resolution/mixin_test.dart b/pkg/analyzer/test/src/dart/resolution/mixin_test.dart
index a95d9f4..9e23683 100644
--- a/pkg/analyzer/test/src/dart/resolution/mixin_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/mixin_test.dart
@@ -19,7 +19,9 @@
@reflectiveTest
class MixinDriverResolutionTest extends PubPackageResolutionTest
- with ElementsTypesMixin {
+ with WithoutNullSafetyMixin, ElementsTypesMixin {
+ // TODO(https://github.com/dart-lang/sdk/issues/44666): Use null safety in
+ // test cases.
test_accessor_getter() async {
await assertNoErrorsInCode(r'''
mixin M {
diff --git a/pkg/analyzer/test/src/dart/resolution/namespace_test.dart b/pkg/analyzer/test/src/dart/resolution/namespace_test.dart
index 30c9944..fcb7a12 100644
--- a/pkg/analyzer/test/src/dart/resolution/namespace_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/namespace_test.dart
@@ -9,7 +9,6 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(ImportResolutionTest);
- defineReflectiveTests(ImportResolutionWithNullSafetyTest);
});
}
@@ -26,7 +25,3 @@
''');
}
}
-
-@reflectiveTest
-class ImportResolutionWithNullSafetyTest extends ImportResolutionTest
- with WithNullSafetyMixin {}
diff --git a/pkg/analyzer/test/src/dart/resolution/non_nullable_test.dart b/pkg/analyzer/test/src/dart/resolution/non_nullable_test.dart
index c705570..b6473d4 100644
--- a/pkg/analyzer/test/src/dart/resolution/non_nullable_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/non_nullable_test.dart
@@ -435,7 +435,8 @@
}
@reflectiveTest
-class NullableTest extends PubPackageResolutionTest {
+class NullableTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
@override
bool get typeToStringWithNullability => true;
diff --git a/pkg/analyzer/test/src/dart/resolution/postfix_expression_test.dart b/pkg/analyzer/test/src/dart/resolution/postfix_expression_test.dart
index ba93f9f..e86d332 100644
--- a/pkg/analyzer/test/src/dart/resolution/postfix_expression_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/postfix_expression_test.dart
@@ -17,7 +17,8 @@
}
@reflectiveTest
-class PostfixExpressionResolutionTest extends PubPackageResolutionTest {
+class PostfixExpressionResolutionTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_dec_simpleIdentifier_parameter_int() async {
await assertNoErrorsInCode(r'''
void f(int x) {
diff --git a/pkg/analyzer/test/src/dart/resolution/prefix_element_test.dart b/pkg/analyzer/test/src/dart/resolution/prefix_element_test.dart
index a87e051..d39e7d9 100644
--- a/pkg/analyzer/test/src/dart/resolution/prefix_element_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/prefix_element_test.dart
@@ -16,7 +16,10 @@
}
@reflectiveTest
-class PrefixElementTest extends PubPackageResolutionTest {
+class PrefixElementTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
+ // TODO(https://github.com/dart-lang/sdk/issues/44666): Use null safety in
+ // test cases.
test_scope_lookup() async {
newFile('$testPackageLibPath/a.dart', content: r'''
var foo = 0;
diff --git a/pkg/analyzer/test/src/dart/resolution/prefix_expression_test.dart b/pkg/analyzer/test/src/dart/resolution/prefix_expression_test.dart
index b263cdf..eb49c3f 100644
--- a/pkg/analyzer/test/src/dart/resolution/prefix_expression_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/prefix_expression_test.dart
@@ -17,7 +17,8 @@
}
@reflectiveTest
-class PrefixExpressionResolutionTest extends PubPackageResolutionTest {
+class PrefixExpressionResolutionTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_bang_bool_context() async {
await assertNoErrorsInCode(r'''
T f<T>() {
diff --git a/pkg/analyzer/test/src/dart/resolution/prefixed_identifier_test.dart b/pkg/analyzer/test/src/dart/resolution/prefixed_identifier_test.dart
index c3d86dd..24598f7 100644
--- a/pkg/analyzer/test/src/dart/resolution/prefixed_identifier_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/prefixed_identifier_test.dart
@@ -19,7 +19,8 @@
}
@reflectiveTest
-class PrefixedIdentifierResolutionTest extends PubPackageResolutionTest {
+class PrefixedIdentifierResolutionTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_dynamic_explicitCore_withPrefix() async {
await assertNoErrorsInCode(r'''
import 'dart:core' as mycore;
diff --git a/pkg/analyzer/test/src/dart/resolution/property_access_test.dart b/pkg/analyzer/test/src/dart/resolution/property_access_test.dart
index 63ab662..9c22823 100644
--- a/pkg/analyzer/test/src/dart/resolution/property_access_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/property_access_test.dart
@@ -16,7 +16,8 @@
}
@reflectiveTest
-class PropertyAccessResolutionTest extends PubPackageResolutionTest {
+class PropertyAccessResolutionTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_extensionOverride_read() async {
await assertNoErrorsInCode('''
class A {}
diff --git a/pkg/analyzer/test/src/dart/resolution/simple_identifier_test.dart b/pkg/analyzer/test/src/dart/resolution/simple_identifier_test.dart
index 9d01ef1..292d3ff 100644
--- a/pkg/analyzer/test/src/dart/resolution/simple_identifier_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/simple_identifier_test.dart
@@ -15,7 +15,8 @@
}
@reflectiveTest
-class SimpleIdentifierResolutionTest extends PubPackageResolutionTest {
+class SimpleIdentifierResolutionTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_dynamic_explicitCore() async {
await assertNoErrorsInCode(r'''
import 'dart:core';
diff --git a/pkg/analyzer/test/src/dart/resolution/top_level_variable_test.dart b/pkg/analyzer/test/src/dart/resolution/top_level_variable_test.dart
index 60e2338..1349f39 100644
--- a/pkg/analyzer/test/src/dart/resolution/top_level_variable_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/top_level_variable_test.dart
@@ -16,7 +16,8 @@
}
@reflectiveTest
-class TopLevelVariableTest extends PubPackageResolutionTest {
+class TopLevelVariableTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_session_getterSetter() async {
await resolveTestCode('''
var v = 0;
diff --git a/pkg/analyzer/test/src/dart/resolution/try_statement_test.dart b/pkg/analyzer/test/src/dart/resolution/try_statement_test.dart
index d5d60964..75c7e3c 100644
--- a/pkg/analyzer/test/src/dart/resolution/try_statement_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/try_statement_test.dart
@@ -10,7 +10,6 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(TryStatementTest);
- defineReflectiveTests(TryStatementWithNullSafetyTest);
});
}
@@ -63,7 +62,3 @@
expect(node.stackTraceParameter!.staticElement, st);
}
}
-
-@reflectiveTest
-class TryStatementWithNullSafetyTest extends TryStatementTest
- with WithNullSafetyMixin {}
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/conditional_expression_test.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/conditional_expression_test.dart
index d52a86d..71d74e19 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_inference/conditional_expression_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/conditional_expression_test.dart
@@ -14,7 +14,8 @@
}
@reflectiveTest
-class ConditionalExpressionTest extends PubPackageResolutionTest {
+class ConditionalExpressionTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_upward() async {
await resolveTestCode('''
void f(bool a, int b, int c) {
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/equality_expressions_test.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/equality_expressions_test.dart
index 9bca502..d56dc4a 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_inference/equality_expressions_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/equality_expressions_test.dart
@@ -16,7 +16,7 @@
}
@reflectiveTest
-class EqualTest extends PubPackageResolutionTest {
+class EqualTest extends PubPackageResolutionTest with WithoutNullSafetyMixin {
test_simple() async {
await resolveTestCode('''
void f(Object a, Object b) {
@@ -32,7 +32,8 @@
class EqualWithNullSafetyTest extends EqualTest with WithNullSafetyMixin {}
@reflectiveTest
-class NotEqualTest extends PubPackageResolutionTest {
+class NotEqualTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_simple() async {
await resolveTestCode('''
void f(Object a, Object b) {
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/extension_methods_test.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/extension_methods_test.dart
index 86b728d..5ba77c9 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_inference/extension_methods_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/extension_methods_test.dart
@@ -11,13 +11,12 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(ExtensionMethodsTest);
- defineReflectiveTests(ExtensionMethodsWithNullSafetyTest);
});
}
@reflectiveTest
class ExtensionMethodsTest extends PubPackageResolutionTest
- with ExtensionMethodsTestCases {}
+ with WithoutNullSafetyMixin, ExtensionMethodsTestCases {}
mixin ExtensionMethodsTestCases on ResolutionTest {
test_implicit_getter() async {
@@ -618,7 +617,3 @@
}
}
}
-
-@reflectiveTest
-class ExtensionMethodsWithNullSafetyTest extends PubPackageResolutionTest
- with WithNullSafetyMixin, ExtensionMethodsTestCases {}
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/function_expression_test.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/function_expression_test.dart
index 7de1d06..bcde92b 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_inference/function_expression_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/function_expression_test.dart
@@ -15,7 +15,8 @@
}
@reflectiveTest
-class FunctionExpressionTest extends PubPackageResolutionTest {
+class FunctionExpressionTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_contextFunctionType_returnType_async_blockBody_futureOrVoid() async {
var expectedErrors = expectedErrorsByNullability(
nullable: [
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/list_literal_test.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/list_literal_test.dart
index a4ac9d6..80aeb15 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_inference/list_literal_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/list_literal_test.dart
@@ -15,7 +15,8 @@
}
@reflectiveTest
-class ListLiteralTest extends PubPackageResolutionTest {
+class ListLiteralTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_context_noTypeArgs_expression_conflict() async {
await assertErrorsInCode('''
List<int> a = ['a'];
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/local_variable_test.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/local_variable_test.dart
index 90aabcf..5d3126f 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_inference/local_variable_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/local_variable_test.dart
@@ -14,7 +14,8 @@
}
@reflectiveTest
-class LocalVariableTest extends PubPackageResolutionTest {
+class LocalVariableTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_int() async {
await resolveTestCode('''
void f() {
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/logical_boolean_expressions_test.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/logical_boolean_expressions_test.dart
index edb58ce..209ac2b 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_inference/logical_boolean_expressions_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/logical_boolean_expressions_test.dart
@@ -16,7 +16,8 @@
}
@reflectiveTest
-class LogicalAndTest extends PubPackageResolutionTest {
+class LogicalAndTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_upward() async {
await resolveTestCode('''
void f(bool a, bool b) {
@@ -47,7 +48,8 @@
}
@reflectiveTest
-class LogicalOrTest extends PubPackageResolutionTest {
+class LogicalOrTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_upward() async {
await resolveTestCode('''
void f(bool a, bool b) {
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/map_literal_test.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/map_literal_test.dart
index b58f912..e4af4f6 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_inference/map_literal_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/map_literal_test.dart
@@ -16,7 +16,8 @@
}
@reflectiveTest
-class MapLiteralTest extends PubPackageResolutionTest {
+class MapLiteralTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
AstNode setOrMapLiteral(String search) => findNode.setOrMapLiteral(search);
test_context_noTypeArgs_entry_conflictingKey() async {
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/set_literal_test.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/set_literal_test.dart
index 2b46b42..e9562aa 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_inference/set_literal_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/set_literal_test.dart
@@ -11,7 +11,6 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(SetLiteralTest);
- defineReflectiveTests(SetLiteralWithNullSafetyTest);
});
}
@@ -19,6 +18,8 @@
class SetLiteralTest extends PubPackageResolutionTest {
AstNode setLiteral(String search) => findNode.setOrMapLiteral(search);
+ AstNode setOrMapLiteral(String search) => findNode.setOrMapLiteral(search);
+
test_context_noTypeArgs_expression_conflict() async {
await assertErrorsInCode('''
Set<int> a = {'a'};
@@ -105,6 +106,28 @@
assertType(setLiteral('{}'), 'Set<dynamic>');
}
+ test_context_noTypeArgs_noEntries() async {
+ await assertNoErrorsInCode('''
+Set<String> a = {};
+''');
+ assertType(setOrMapLiteral('{'), 'Set<String>');
+ }
+
+ test_context_noTypeArgs_noEntries_typeParameterNullable() async {
+ await assertNoErrorsInCode('''
+class C<T extends Object?> {
+ Set<T> a = {}; // 1
+ Set<T>? b = {}; // 2
+ Set<T?> c = {}; // 3
+ Set<T?>? d = {}; // 4
+}
+''');
+ assertType(setOrMapLiteral('{}; // 1'), 'Set<T>');
+ assertType(setOrMapLiteral('{}; // 2'), 'Set<T>');
+ assertType(setOrMapLiteral('{}; // 3'), 'Set<T?>');
+ assertType(setOrMapLiteral('{}; // 4'), 'Set<T?>');
+ }
+
test_context_typeArgs_expression_conflictingExpression() async {
await assertErrorsInCode('''
Set<String> a = <String>{0};
@@ -286,6 +309,41 @@
assertType(setLiteral('{if'), 'Set<dynamic>');
}
+ test_noContext_noTypeArgs_spread_never() async {
+ await assertErrorsInCode('''
+void f(Never a, bool b) async {
+ // ignore:unused_local_variable
+ var v = {...a, if (b) throw 0};
+}
+''', [
+ error(HintCode.DEAD_CODE, 87, 12),
+ ]);
+ assertType(setLiteral('{...'), 'Set<Never>');
+ }
+
+ test_noContext_noTypeArgs_spread_nullAware_never() async {
+ await assertErrorsInCode('''
+void f(Never a, bool b) async {
+ // ignore:unused_local_variable
+ var v = {...?a, if (b) throw 0};
+}
+''', [
+ error(StaticWarningCode.INVALID_NULL_AWARE_OPERATOR, 77, 4),
+ error(HintCode.DEAD_CODE, 88, 12),
+ ]);
+ assertType(setLiteral('{...'), 'Set<Never>');
+ }
+
+ test_noContext_noTypeArgs_spread_nullAware_null() async {
+ await assertNoErrorsInCode('''
+void f(Null a, bool b) async {
+ // ignore:unused_local_variable
+ var v = {...?a, if (b) throw 0};
+}
+''');
+ assertType(setLiteral('{...'), 'Set<Never>');
+ }
+
test_noContext_noTypeArgs_spread_nullAware_nullAndNotNull() async {
await assertNoErrorsInCode('''
void f(Null a) {
@@ -296,6 +354,29 @@
assertType(setLiteral('{1'), 'Set<int>');
}
+ test_noContext_noTypeArgs_spread_nullAware_typeParameter_never() async {
+ await assertErrorsInCode('''
+void f<T extends Never>(T a, bool b) async {
+ // ignore:unused_local_variable
+ var v = {...?a, if (b) throw 0};
+}
+''', [
+ error(StaticWarningCode.INVALID_NULL_AWARE_OPERATOR, 90, 4),
+ error(HintCode.DEAD_CODE, 101, 12),
+ ]);
+ assertType(setLiteral('{...'), 'Set<Never>');
+ }
+
+ test_noContext_noTypeArgs_spread_nullAware_typeParameter_null() async {
+ await assertNoErrorsInCode('''
+void f<T extends Null>(T a, bool b) async {
+ // ignore:unused_local_variable
+ var v = {...?a, if (b) throw 0};
+}
+''');
+ assertType(setLiteral('{...'), 'Set<Never>');
+ }
+
test_noContext_noTypeArgs_spread_typeParameter_implementsIterable() async {
await assertNoErrorsInCode('''
void f<T extends List<int>>(T a) {
@@ -306,6 +387,18 @@
assertType(setLiteral('{...'), 'Set<int>');
}
+ test_noContext_noTypeArgs_spread_typeParameter_never() async {
+ await assertErrorsInCode('''
+void f<T extends Never>(T a, bool b) async {
+ // ignore:unused_local_variable
+ var v = {...a, if (b) throw 0};
+}
+''', [
+ error(HintCode.DEAD_CODE, 100, 12),
+ ]);
+ assertType(setLiteral('{...'), 'Set<Never>');
+ }
+
test_noContext_noTypeArgs_spread_typeParameter_notImplementsIterable() async {
await assertErrorsInCode('''
void f<T extends num>(T a) {
@@ -361,101 +454,3 @@
assertType(setLiteral('{'), 'Set<num>');
}
}
-
-@reflectiveTest
-class SetLiteralWithNullSafetyTest extends SetLiteralTest
- with WithNullSafetyMixin {
- AstNode setOrMapLiteral(String search) => findNode.setOrMapLiteral(search);
-
- test_context_noTypeArgs_noEntries() async {
- await assertNoErrorsInCode('''
-Set<String> a = {};
-''');
- assertType(setOrMapLiteral('{'), 'Set<String>');
- }
-
- test_context_noTypeArgs_noEntries_typeParameterNullable() async {
- await assertNoErrorsInCode('''
-class C<T extends Object?> {
- Set<T> a = {}; // 1
- Set<T>? b = {}; // 2
- Set<T?> c = {}; // 3
- Set<T?>? d = {}; // 4
-}
-''');
- assertType(setOrMapLiteral('{}; // 1'), 'Set<T>');
- assertType(setOrMapLiteral('{}; // 2'), 'Set<T>');
- assertType(setOrMapLiteral('{}; // 3'), 'Set<T?>');
- assertType(setOrMapLiteral('{}; // 4'), 'Set<T?>');
- }
-
- test_noContext_noTypeArgs_spread_never() async {
- await assertErrorsInCode('''
-void f(Never a, bool b) async {
- // ignore:unused_local_variable
- var v = {...a, if (b) throw 0};
-}
-''', [
- error(HintCode.DEAD_CODE, 87, 12),
- ]);
- assertType(setLiteral('{...'), 'Set<Never>');
- }
-
- test_noContext_noTypeArgs_spread_nullAware_never() async {
- await assertErrorsInCode('''
-void f(Never a, bool b) async {
- // ignore:unused_local_variable
- var v = {...?a, if (b) throw 0};
-}
-''', [
- error(StaticWarningCode.INVALID_NULL_AWARE_OPERATOR, 77, 4),
- error(HintCode.DEAD_CODE, 88, 12),
- ]);
- assertType(setLiteral('{...'), 'Set<Never>');
- }
-
- test_noContext_noTypeArgs_spread_nullAware_null() async {
- await assertNoErrorsInCode('''
-void f(Null a, bool b) async {
- // ignore:unused_local_variable
- var v = {...?a, if (b) throw 0};
-}
-''');
- assertType(setLiteral('{...'), 'Set<Never>');
- }
-
- test_noContext_noTypeArgs_spread_nullAware_typeParameter_never() async {
- await assertErrorsInCode('''
-void f<T extends Never>(T a, bool b) async {
- // ignore:unused_local_variable
- var v = {...?a, if (b) throw 0};
-}
-''', [
- error(StaticWarningCode.INVALID_NULL_AWARE_OPERATOR, 90, 4),
- error(HintCode.DEAD_CODE, 101, 12),
- ]);
- assertType(setLiteral('{...'), 'Set<Never>');
- }
-
- test_noContext_noTypeArgs_spread_nullAware_typeParameter_null() async {
- await assertNoErrorsInCode('''
-void f<T extends Null>(T a, bool b) async {
- // ignore:unused_local_variable
- var v = {...?a, if (b) throw 0};
-}
-''');
- assertType(setLiteral('{...'), 'Set<Never>');
- }
-
- test_noContext_noTypeArgs_spread_typeParameter_never() async {
- await assertErrorsInCode('''
-void f<T extends Never>(T a, bool b) async {
- // ignore:unused_local_variable
- var v = {...a, if (b) throw 0};
-}
-''', [
- error(HintCode.DEAD_CODE, 100, 12),
- ]);
- assertType(setLiteral('{...'), 'Set<Never>');
- }
-}
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/type_test_expressions_test.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/type_test_expressions_test.dart
index 63618fd..7e9f8fe 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_inference/type_test_expressions_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/type_test_expressions_test.dart
@@ -16,7 +16,7 @@
}
@reflectiveTest
-class IsNotTest extends PubPackageResolutionTest {
+class IsNotTest extends PubPackageResolutionTest with WithoutNullSafetyMixin {
test_simple() async {
await resolveTestCode('''
void f(Object a) {
@@ -32,7 +32,7 @@
class IsNotWithNullSafetyTest extends IsNotTest with WithNullSafetyMixin {}
@reflectiveTest
-class IsTest extends PubPackageResolutionTest {
+class IsTest extends PubPackageResolutionTest with WithoutNullSafetyMixin {
test_simple() async {
await resolveTestCode('''
void f(Object a) {
diff --git a/pkg/analyzer/test/src/dart/resolution/type_name_test.dart b/pkg/analyzer/test/src/dart/resolution/type_name_test.dart
index 7587a08..baab335 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_name_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_name_test.dart
@@ -19,7 +19,8 @@
}
@reflectiveTest
-class TypeNameResolutionTest extends PubPackageResolutionTest {
+class TypeNameResolutionTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
@override
bool get typeToStringWithNullability => true;
diff --git a/pkg/analyzer/test/src/diagnostics/abstract_class_member_test.dart b/pkg/analyzer/test/src/diagnostics/abstract_class_member_test.dart
index e51f4cb..cba3c60 100644
--- a/pkg/analyzer/test/src/diagnostics/abstract_class_member_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/abstract_class_member_test.dart
@@ -15,7 +15,8 @@
}
@reflectiveTest
-class AbstractClassMemberTest extends PubPackageResolutionTest {
+class AbstractClassMemberTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_abstract_field_dynamic() async {
await assertErrorsInCode(
'''
diff --git a/pkg/analyzer/test/src/diagnostics/ambiguous_import_test.dart b/pkg/analyzer/test/src/diagnostics/ambiguous_import_test.dart
index fe447bc..1dbb8a7 100644
--- a/pkg/analyzer/test/src/diagnostics/ambiguous_import_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/ambiguous_import_test.dart
@@ -218,7 +218,7 @@
import 'lib1.dart';
import 'lib2.dart';
class A<T> {}
-A<N> f() { return null; }''', [
+A<N>? f() { return null; }''', [
error(CompileTimeErrorCode.AMBIGUOUS_IMPORT, 56, 1),
]);
}
diff --git a/pkg/analyzer/test/src/diagnostics/ambiguous_set_or_map_literal_test.dart b/pkg/analyzer/test/src/diagnostics/ambiguous_set_or_map_literal_test.dart
index 1430312..30de480 100644
--- a/pkg/analyzer/test/src/diagnostics/ambiguous_set_or_map_literal_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/ambiguous_set_or_map_literal_test.dart
@@ -17,7 +17,8 @@
}
@reflectiveTest
-class AmbiguousSetOrMapLiteralBothTest extends PubPackageResolutionTest {
+class AmbiguousSetOrMapLiteralBothTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_map() async {
await assertNoErrorsInCode('''
f(Map<int, int> map) {
@@ -108,7 +109,8 @@
}
@reflectiveTest
-class AmbiguousSetOrMapLiteralEitherTest extends PubPackageResolutionTest {
+class AmbiguousSetOrMapLiteralEitherTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_invalidPrefixOperator() async {
// Guard against an exception being thrown.
await assertErrorsInCode('''
diff --git a/pkg/analyzer/test/src/diagnostics/argument_type_not_assignable_catch_error_on_error_test.dart b/pkg/analyzer/test/src/diagnostics/argument_type_not_assignable_catch_error_on_error_test.dart
index d457687..ceb0706 100644
--- a/pkg/analyzer/test/src/diagnostics/argument_type_not_assignable_catch_error_on_error_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/argument_type_not_assignable_catch_error_on_error_test.dart
@@ -17,7 +17,7 @@
@reflectiveTest
class ArgumentTypeNotAssignableCatchErrorOnErrorTest
- extends PubPackageResolutionTest {
+ extends PubPackageResolutionTest with WithoutNullSafetyMixin {
void test_firstParameterIsDynamic() async {
await assertNoErrorsInCode('''
void f(Future<int> future, Future<int> Function(dynamic a) callback) {
diff --git a/pkg/analyzer/test/src/diagnostics/argument_type_not_assignable_test.dart b/pkg/analyzer/test/src/diagnostics/argument_type_not_assignable_test.dart
index d62e2fa..1ce8a4b 100644
--- a/pkg/analyzer/test/src/diagnostics/argument_type_not_assignable_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/argument_type_not_assignable_test.dart
@@ -16,7 +16,8 @@
}
@reflectiveTest
-class ArgumentTypeNotAssignableTest extends PubPackageResolutionTest {
+class ArgumentTypeNotAssignableTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_ambiguousClassName() async {
// See dartbug.com/19624
newFile('$testPackageLibPath/lib2.dart', content: '''
diff --git a/pkg/analyzer/test/src/diagnostics/assignment_of_do_not_store_test.dart b/pkg/analyzer/test/src/diagnostics/assignment_of_do_not_store_test.dart
index e2c27bb..27f94c8 100644
--- a/pkg/analyzer/test/src/diagnostics/assignment_of_do_not_store_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/assignment_of_do_not_store_test.dart
@@ -241,14 +241,14 @@
import 'package:meta/meta.dart';
@doNotStore
-final v = '';
+final String? v = '';
class A {
final f = v ?? v;
}
''', [
- error(HintCode.ASSIGNMENT_OF_DO_NOT_STORE, 83, 1),
- error(HintCode.ASSIGNMENT_OF_DO_NOT_STORE, 88, 1),
+ error(HintCode.ASSIGNMENT_OF_DO_NOT_STORE, 91, 1),
+ error(HintCode.ASSIGNMENT_OF_DO_NOT_STORE, 96, 1),
]);
}
diff --git a/pkg/analyzer/test/src/diagnostics/assignment_to_final_local_test.dart b/pkg/analyzer/test/src/diagnostics/assignment_to_final_local_test.dart
index 0ce29b5..81bfd42 100644
--- a/pkg/analyzer/test/src/diagnostics/assignment_to_final_local_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/assignment_to_final_local_test.dart
@@ -15,7 +15,8 @@
}
@reflectiveTest
-class AssignmentToFinalLocalTest extends PubPackageResolutionTest {
+class AssignmentToFinalLocalTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_localVariable() async {
await assertErrorsInCode('''
f() {
diff --git a/pkg/analyzer/test/src/diagnostics/assignment_to_final_test.dart b/pkg/analyzer/test/src/diagnostics/assignment_to_final_test.dart
index 6b1537c..0e78785 100644
--- a/pkg/analyzer/test/src/diagnostics/assignment_to_final_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/assignment_to_final_test.dart
@@ -15,7 +15,8 @@
}
@reflectiveTest
-class AssignmentToFinalTest extends PubPackageResolutionTest {
+class AssignmentToFinalTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_prefixedIdentifier_instanceField() async {
await assertNoErrorsInCode('''
class A {
diff --git a/pkg/analyzer/test/src/diagnostics/can_be_null_after_null_aware_test.dart b/pkg/analyzer/test/src/diagnostics/can_be_null_after_null_aware_test.dart
index 9fa19a3..2659709 100644
--- a/pkg/analyzer/test/src/diagnostics/can_be_null_after_null_aware_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/can_be_null_after_null_aware_test.dart
@@ -10,11 +10,45 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(CanBeNullAfterNullAwareTest);
+ defineReflectiveTests(CanBeNullAfterNullAwareWithoutNullSafetyTest);
});
}
@reflectiveTest
class CanBeNullAfterNullAwareTest extends PubPackageResolutionTest {
+ test_definedForNull() async {
+ await assertNoErrorsInCode(r'''
+m(x) {
+ x?.a.hashCode;
+ x?.a.runtimeType;
+ x?.a.toString();
+ x?.b().hashCode;
+ x?.b().runtimeType;
+ x?.b().toString();
+}
+''');
+ }
+
+ test_guarded_methodInvocation() async {
+ await assertNoErrorsInCode(r'''
+m(x) {
+ x?.a()?.b();
+}
+''');
+ }
+
+ test_guarded_propertyAccess() async {
+ await assertNoErrorsInCode(r'''
+m(x) {
+ x?.a?.b;
+}
+''');
+ }
+}
+
+@reflectiveTest
+class CanBeNullAfterNullAwareWithoutNullSafetyTest
+ extends PubPackageResolutionTest with WithoutNullSafetyMixin {
test_afterCascade() async {
await assertErrorsInCode(r'''
m(x) {
@@ -45,35 +79,6 @@
]);
}
- test_definedForNull() async {
- await assertNoErrorsInCode(r'''
-m(x) {
- x?.a.hashCode;
- x?.a.runtimeType;
- x?.a.toString();
- x?.b().hashCode;
- x?.b().runtimeType;
- x?.b().toString();
-}
-''');
- }
-
- test_guarded_methodInvocation() async {
- await assertNoErrorsInCode(r'''
-m(x) {
- x?.a()?.b();
-}
-''');
- }
-
- test_guarded_propertyAccess() async {
- await assertNoErrorsInCode(r'''
-m(x) {
- x?.a?.b;
-}
-''');
- }
-
test_methodInvocation() async {
await assertErrorsInCode(r'''
m(x) {
diff --git a/pkg/analyzer/test/src/diagnostics/case_block_not_terminated_test.dart b/pkg/analyzer/test/src/diagnostics/case_block_not_terminated_test.dart
index 67e0536..6b5aa1e 100644
--- a/pkg/analyzer/test/src/diagnostics/case_block_not_terminated_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/case_block_not_terminated_test.dart
@@ -10,6 +10,7 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(CaseBlockNotTerminatedTest);
+ defineReflectiveTests(CaseBlockNotTerminatedWithoutNullSafetyTest);
});
}
@@ -26,20 +27,6 @@
''');
}
- test_notTerminated() async {
- await assertErrorsInCode('''
-void f(int a) {
- switch (a) {
- case 0:
- print(0);
- default:
- return;
- }
-}''', [
- error(CompileTimeErrorCode.CASE_BLOCK_NOT_TERMINATED, 35, 4),
- ]);
- }
-
test_terminated_break() async {
await assertNoErrorsInCode(r'''
void f(int a) {
@@ -108,3 +95,21 @@
''');
}
}
+
+@reflectiveTest
+class CaseBlockNotTerminatedWithoutNullSafetyTest
+ extends PubPackageResolutionTest with WithoutNullSafetyMixin {
+ test_notTerminated() async {
+ await assertErrorsInCode('''
+void f(int a) {
+ switch (a) {
+ case 0:
+ print(0);
+ default:
+ return;
+ }
+}''', [
+ error(CompileTimeErrorCode.CASE_BLOCK_NOT_TERMINATED, 35, 4),
+ ]);
+ }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/case_expression_type_implements_equals_test.dart b/pkg/analyzer/test/src/diagnostics/case_expression_type_implements_equals_test.dart
index bfec408..6d3f9a1 100644
--- a/pkg/analyzer/test/src/diagnostics/case_expression_type_implements_equals_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/case_expression_type_implements_equals_test.dart
@@ -15,7 +15,8 @@
}
@reflectiveTest
-class CaseExpressionTypeImplementsEqualsTest extends PubPackageResolutionTest {
+class CaseExpressionTypeImplementsEqualsTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_declares() async {
await assertNoErrorsInCode(r'''
abstract class A {
diff --git a/pkg/analyzer/test/src/diagnostics/concrete_class_with_abstract_member_test.dart b/pkg/analyzer/test/src/diagnostics/concrete_class_with_abstract_member_test.dart
index 73c8ee9..cfbabf8 100644
--- a/pkg/analyzer/test/src/diagnostics/concrete_class_with_abstract_member_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/concrete_class_with_abstract_member_test.dart
@@ -16,7 +16,7 @@
@reflectiveTest
class ConcreteClassWithAbstractMemberTest extends PubPackageResolutionTest
- with ConcreteClassWithAbstractMemberTestCases {}
+ with WithoutNullSafetyMixin, ConcreteClassWithAbstractMemberTestCases {}
mixin ConcreteClassWithAbstractMemberTestCases on PubPackageResolutionTest {
test_direct() async {
diff --git a/pkg/analyzer/test/src/diagnostics/conflicting_generic_interfaces_test.dart b/pkg/analyzer/test/src/diagnostics/conflicting_generic_interfaces_test.dart
index aa368bb..a893d8b 100644
--- a/pkg/analyzer/test/src/diagnostics/conflicting_generic_interfaces_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/conflicting_generic_interfaces_test.dart
@@ -15,7 +15,8 @@
}
@reflectiveTest
-class ConflictingGenericInterfacesTest extends PubPackageResolutionTest {
+class ConflictingGenericInterfacesTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_class_extends_implements() async {
await assertErrorsInCode('''
class I<T> {}
diff --git a/pkg/analyzer/test/src/diagnostics/const_constructor_param_type_mismatch_test.dart b/pkg/analyzer/test/src/diagnostics/const_constructor_param_type_mismatch_test.dart
index 24ad795..f9bcac1 100644
--- a/pkg/analyzer/test/src/diagnostics/const_constructor_param_type_mismatch_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_constructor_param_type_mismatch_test.dart
@@ -11,22 +11,13 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(ConstConstructorParamTypeMismatchTest);
+ defineReflectiveTests(
+ ConstConstructorParamTypeMismatchWithoutNullSafetyTest);
});
}
@reflectiveTest
class ConstConstructorParamTypeMismatchTest extends PubPackageResolutionTest {
- test_assignable_fieldFormal_null() async {
- // Null is assignable to anything (before null safety).
- await assertNoErrorsInCode(r'''
-class A {
- final int x;
- const A(this.x);
-}
-var v = const A(null);
-''');
- }
-
test_assignable_fieldFormal_omittedType() async {
// If a field is declared without a type, and no initializer, it's type is
// dynamic.
@@ -81,29 +72,6 @@
''');
}
- test_assignable_fieldFormal_unresolved_null() async {
- // Null always passes runtime type checks, even when the type is
- // unresolved.
- await assertErrorsInCode(r'''
-class A {
- final Unresolved x;
- const A(String this.x);
-}
-var v = const A(null);
-''', [
- error(CompileTimeErrorCode.UNDEFINED_CLASS, 18, 10),
- ]);
- }
-
- test_assignable_null() async {
- // Null is assignable to anything (before null safety).
- await assertNoErrorsInCode(r'''
-class A {
- const A(int x);
-}
-var v = const A(null);''');
- }
-
test_assignable_typeSubstitution() async {
await assertNoErrorsInCode(r'''
class A<T> {
@@ -249,7 +217,9 @@
const A u = const A();
var v = const C(u);
''', [
+ // TODO(srawlins): It would be best to report only the first one.
error(CompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH, 143, 1),
+ error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 143, 1),
]);
}
@@ -319,3 +289,41 @@
]);
}
}
+
+@reflectiveTest
+class ConstConstructorParamTypeMismatchWithoutNullSafetyTest
+ extends PubPackageResolutionTest with WithoutNullSafetyMixin {
+ test_assignable_fieldFormal_null() async {
+ // Null is assignable to anything (before null safety).
+ await assertNoErrorsInCode(r'''
+class A {
+ final int x;
+ const A(this.x);
+}
+var v = const A(null);
+''');
+ }
+
+ test_assignable_fieldFormal_unresolved_null() async {
+ // Null always passes runtime type checks, even when the type is
+ // unresolved.
+ await assertErrorsInCode(r'''
+class A {
+ final Unresolved x;
+ const A(String this.x);
+}
+var v = const A(null);
+''', [
+ error(CompileTimeErrorCode.UNDEFINED_CLASS, 18, 10),
+ ]);
+ }
+
+ test_assignable_null() async {
+ // Null is assignable to anything (before null safety).
+ await assertNoErrorsInCode(r'''
+class A {
+ const A(int x);
+}
+var v = const A(null);''');
+ }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/const_eval_throws_exception_test.dart b/pkg/analyzer/test/src/diagnostics/const_eval_throws_exception_test.dart
index 23be73a..b71deef 100644
--- a/pkg/analyzer/test/src/diagnostics/const_eval_throws_exception_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_eval_throws_exception_test.dart
@@ -17,7 +17,7 @@
@reflectiveTest
class ConstEvalThrowsExceptionTest extends PubPackageResolutionTest
- with ConstEvalThrowsExceptionTestCases {
+ with WithoutNullSafetyMixin, ConstEvalThrowsExceptionTestCases {
test_binaryMinus_null() async {
await assertErrorsInCode('''
const dynamic D = null;
diff --git a/pkg/analyzer/test/src/diagnostics/const_eval_type_bool_test.dart b/pkg/analyzer/test/src/diagnostics/const_eval_type_bool_test.dart
index dc91c13..db0701d 100644
--- a/pkg/analyzer/test/src/diagnostics/const_eval_type_bool_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_eval_type_bool_test.dart
@@ -58,7 +58,7 @@
test_logicalOr_trueLeftOperand() async {
await assertNoErrorsInCode(r'''
class C {
- final int x;
+ final int? x;
const C({this.x}) : assert(x == null || x >= 0);
}
const c = const C();
diff --git a/pkg/analyzer/test/src/diagnostics/const_initialized_with_non_constant_value_test.dart b/pkg/analyzer/test/src/diagnostics/const_initialized_with_non_constant_value_test.dart
index 79c1c58..6b2096d 100644
--- a/pkg/analyzer/test/src/diagnostics/const_initialized_with_non_constant_value_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_initialized_with_non_constant_value_test.dart
@@ -82,12 +82,12 @@
await assertErrorsInCode('''
class C<T> {
const C();
- T get t => null;
+ T? get t => null;
}
const x = const C().t;
''', [
- error(CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE, 58,
+ error(CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE, 59,
11),
]);
}
diff --git a/pkg/analyzer/test/src/diagnostics/const_not_initialized_test.dart b/pkg/analyzer/test/src/diagnostics/const_not_initialized_test.dart
index 786dfe7..f96bfde 100644
--- a/pkg/analyzer/test/src/diagnostics/const_not_initialized_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_not_initialized_test.dart
@@ -15,7 +15,8 @@
}
@reflectiveTest
-class ConstNotInitializedTest extends PubPackageResolutionTest {
+class ConstNotInitializedTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_extension_static() async {
await assertErrorsInCode('''
extension E on String {
diff --git a/pkg/analyzer/test/src/diagnostics/could_not_infer_test.dart b/pkg/analyzer/test/src/diagnostics/could_not_infer_test.dart
index 2f7f2c3..46783f7 100644
--- a/pkg/analyzer/test/src/diagnostics/could_not_infer_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/could_not_infer_test.dart
@@ -15,7 +15,8 @@
}
@reflectiveTest
-class CouldNotInferTest extends PubPackageResolutionTest {
+class CouldNotInferTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_constructors_inferenceFBounded() async {
await assertErrorsInCode('''
class C<T> {}
diff --git a/pkg/analyzer/test/src/diagnostics/dead_code_test.dart b/pkg/analyzer/test/src/diagnostics/dead_code_test.dart
index effa025..4b2098e 100644
--- a/pkg/analyzer/test/src/diagnostics/dead_code_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/dead_code_test.dart
@@ -15,7 +15,8 @@
}
@reflectiveTest
-class DeadCodeTest extends PubPackageResolutionTest {
+class DeadCodeTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
@override
void setUp() {
super.setUp();
diff --git a/pkg/analyzer/test/src/diagnostics/deprecated_member_use_test.dart b/pkg/analyzer/test/src/diagnostics/deprecated_member_use_test.dart
index 6a45253..20c8729 100644
--- a/pkg/analyzer/test/src/diagnostics/deprecated_member_use_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/deprecated_member_use_test.dart
@@ -109,7 +109,7 @@
@reflectiveTest
class DeprecatedMemberUse_BasicWorkspaceTest extends PubPackageResolutionTest
- with DeprecatedMemberUse_BasicWorkspaceTestCases {}
+ with WithoutNullSafetyMixin, DeprecatedMemberUse_BasicWorkspaceTestCases {}
mixin DeprecatedMemberUse_BasicWorkspaceTestCases on PubPackageResolutionTest {
@override
@@ -467,7 +467,7 @@
@reflectiveTest
class DeprecatedMemberUseFromSamePackage_BasicWorkspaceTest
- extends PubPackageResolutionTest {
+ extends PubPackageResolutionTest with WithoutNullSafetyMixin {
test_assignmentExpression_compound_deprecatedGetter() async {
await assertErrorsInCode(r'''
@deprecated
diff --git a/pkg/analyzer/test/src/diagnostics/duplicate_definition_test.dart b/pkg/analyzer/test/src/diagnostics/duplicate_definition_test.dart
index a05e934..72c03f2 100644
--- a/pkg/analyzer/test/src/diagnostics/duplicate_definition_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/duplicate_definition_test.dart
@@ -1051,11 +1051,11 @@
test_parameters_constructor_field_second() async {
await assertErrorsInCode(r'''
class A {
- int a;
+ int? a;
A(int a, this.a);
}
''', [
- error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 35, 1),
+ error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 36, 1),
]);
}
diff --git a/pkg/analyzer/test/src/diagnostics/extends_non_class_test.dart b/pkg/analyzer/test/src/diagnostics/extends_non_class_test.dart
index 5313441..95db122 100644
--- a/pkg/analyzer/test/src/diagnostics/extends_non_class_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/extends_non_class_test.dart
@@ -15,7 +15,8 @@
}
@reflectiveTest
-class ExtendsNonClassTest extends PubPackageResolutionTest {
+class ExtendsNonClassTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_undefined() async {
await assertErrorsInCode(r'''
class C extends A {}
diff --git a/pkg/analyzer/test/src/diagnostics/extension_declares_field_test.dart b/pkg/analyzer/test/src/diagnostics/extension_declares_field_test.dart
index ec4b005..9c51b66 100644
--- a/pkg/analyzer/test/src/diagnostics/extension_declares_field_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/extension_declares_field_test.dart
@@ -18,9 +18,9 @@
test_multiple() async {
await assertErrorsInCode('''
extension E on String {
- String one, two, three;
+ String? one, two, three;
}
-''', [error(ParserErrorCode.EXTENSION_DECLARES_INSTANCE_FIELD, 33, 3)]);
+''', [error(ParserErrorCode.EXTENSION_DECLARES_INSTANCE_FIELD, 34, 3)]);
}
test_none() async {
@@ -32,9 +32,9 @@
test_one() async {
await assertErrorsInCode('''
extension E on String {
- String s;
+ String? s;
}
-''', [error(ParserErrorCode.EXTENSION_DECLARES_INSTANCE_FIELD, 33, 1)]);
+''', [error(ParserErrorCode.EXTENSION_DECLARES_INSTANCE_FIELD, 34, 1)]);
}
test_static() async {
diff --git a/pkg/analyzer/test/src/diagnostics/extension_override_argument_not_assignable_test.dart b/pkg/analyzer/test/src/diagnostics/extension_override_argument_not_assignable_test.dart
index 6ee8f7b..540a822 100644
--- a/pkg/analyzer/test/src/diagnostics/extension_override_argument_not_assignable_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/extension_override_argument_not_assignable_test.dart
@@ -17,7 +17,7 @@
@reflectiveTest
class ExtensionOverrideArgumentNotAssignableTest
- extends PubPackageResolutionTest {
+ extends PubPackageResolutionTest with WithoutNullSafetyMixin {
test_subtype() async {
await assertNoErrorsInCode('''
class A {}
diff --git a/pkg/analyzer/test/src/diagnostics/field_in_struct_with_initializer_test.dart b/pkg/analyzer/test/src/diagnostics/field_in_struct_with_initializer_test.dart
index 9c908b5..5a32780 100644
--- a/pkg/analyzer/test/src/diagnostics/field_in_struct_with_initializer_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/field_in_struct_with_initializer_test.dart
@@ -19,10 +19,10 @@
await assertErrorsInCode(r'''
import 'dart:ffi';
class C extends Struct {
- Pointer p = null;
+ Pointer? p = null;
}
''', [
- error(FfiCode.FIELD_IN_STRUCT_WITH_INITIALIZER, 54, 1),
+ error(FfiCode.FIELD_IN_STRUCT_WITH_INITIALIZER, 55, 1),
]);
}
@@ -30,7 +30,7 @@
await assertNoErrorsInCode(r'''
import 'dart:ffi';
class C extends Struct {
- Pointer p;
+ Pointer? p;
}
''');
}
@@ -39,7 +39,7 @@
await assertNoErrorsInCode(r'''
import 'dart:ffi';
class C extends Struct {
- Pointer p;
+ Pointer? p;
static String str = '';
}
''');
diff --git a/pkg/analyzer/test/src/diagnostics/field_initializer_factory_constructor_test.dart b/pkg/analyzer/test/src/diagnostics/field_initializer_factory_constructor_test.dart
index 10a351a..eb9adaa 100644
--- a/pkg/analyzer/test/src/diagnostics/field_initializer_factory_constructor_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/field_initializer_factory_constructor_test.dart
@@ -30,14 +30,14 @@
test_functionTypedParameter() async {
await assertErrorsInCode(r'''
class A {
- int Function() x;
+ int Function()? x;
factory A(int this.x());
}
''', [
// TODO(srawlins): Only report one error. Theoretically change Fasta to
// report "Field initiailizer in factory constructor" as a parse error.
- error(CompileTimeErrorCode.FIELD_INITIALIZER_FACTORY_CONSTRUCTOR, 42, 12),
- error(ParserErrorCode.MISSING_FUNCTION_BODY, 55, 1),
+ error(CompileTimeErrorCode.FIELD_INITIALIZER_FACTORY_CONSTRUCTOR, 43, 12),
+ error(ParserErrorCode.MISSING_FUNCTION_BODY, 56, 1),
]);
}
}
diff --git a/pkg/analyzer/test/src/diagnostics/field_initializer_in_struct_test.dart b/pkg/analyzer/test/src/diagnostics/field_initializer_in_struct_test.dart
index f1e7575..e687a98 100644
--- a/pkg/analyzer/test/src/diagnostics/field_initializer_in_struct_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/field_initializer_in_struct_test.dart
@@ -19,11 +19,11 @@
await assertErrorsInCode('''
import 'dart:ffi';
class C extends Struct {
- @Int32() int f;
+ @Int32() int? f;
C() : f = 0;
}
''', [
- error(FfiCode.FIELD_INITIALIZER_IN_STRUCT, 70, 5),
+ error(FfiCode.FIELD_INITIALIZER_IN_STRUCT, 71, 5),
]);
}
@@ -31,7 +31,7 @@
await assertNoErrorsInCode('''
import 'dart:ffi';
class C extends Struct {
- @Int32() int f;
+ @Int32() int? f;
C() : super();
}
''');
diff --git a/pkg/analyzer/test/src/diagnostics/field_initializer_outside_constructor_test.dart b/pkg/analyzer/test/src/diagnostics/field_initializer_outside_constructor_test.dart
index e9367b1..138a984 100644
--- a/pkg/analyzer/test/src/diagnostics/field_initializer_outside_constructor_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/field_initializer_outside_constructor_test.dart
@@ -41,23 +41,23 @@
// TODO(srawlins) Fix the duplicate error messages.
await assertErrorsInCode(r'''
class A {
- int Function() x;
+ int Function()? x;
m(int this.x()) {}
}
''', [
- error(CompileTimeErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR, 34, 12),
- error(ParserErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR, 38, 4),
+ error(CompileTimeErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR, 35, 12),
+ error(ParserErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR, 39, 4),
]);
}
test_inFunctionTypedParameter() async {
await assertErrorsInCode(r'''
class A {
- int x;
+ int? x;
A(int p(this.x));
}
''', [
- error(CompileTimeErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR, 29, 6),
+ error(CompileTimeErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR, 30, 6),
]);
}
@@ -65,12 +65,12 @@
// TODO(brianwilkerson) Fix the duplicate error messages.
await assertErrorsInCode(r'''
class A {
- int x;
+ int? x;
m(this.x) {}
}
''', [
- error(ParserErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR, 23, 4),
- error(CompileTimeErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR, 23, 6),
+ error(ParserErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR, 24, 4),
+ error(CompileTimeErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR, 24, 6),
]);
}
diff --git a/pkg/analyzer/test/src/diagnostics/final_not_initialized_test.dart b/pkg/analyzer/test/src/diagnostics/final_not_initialized_test.dart
index f46212a..716b9d7 100644
--- a/pkg/analyzer/test/src/diagnostics/final_not_initialized_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/final_not_initialized_test.dart
@@ -15,7 +15,8 @@
}
@reflectiveTest
-class FinalNotInitializedTest extends PubPackageResolutionTest {
+class FinalNotInitializedTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_class_instanceField_final_factoryConstructor_only() async {
await assertNoErrorsInCode('''
class A {
diff --git a/pkg/analyzer/test/src/diagnostics/for_in_of_invalid_type_test.dart b/pkg/analyzer/test/src/diagnostics/for_in_of_invalid_type_test.dart
index 89baab4..f1ca1bd 100644
--- a/pkg/analyzer/test/src/diagnostics/for_in_of_invalid_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/for_in_of_invalid_type_test.dart
@@ -15,7 +15,8 @@
}
@reflectiveTest
-class ForInOfInvalidTypeTest extends PubPackageResolutionTest {
+class ForInOfInvalidTypeTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_awaitForIn_dynamic() async {
await assertNoErrorsInCode('''
f(dynamic e) async {
diff --git a/pkg/analyzer/test/src/diagnostics/generic_function_type_cannot_be_bound_test.dart b/pkg/analyzer/test/src/diagnostics/generic_function_type_cannot_be_bound_test.dart
index 72de5dc..89fde84 100644
--- a/pkg/analyzer/test/src/diagnostics/generic_function_type_cannot_be_bound_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/generic_function_type_cannot_be_bound_test.dart
@@ -26,9 +26,9 @@
test_genericFunction() async {
await assertErrorsInCode(r'''
-T Function<T extends S Function<S>(S)>(T) fun;
+late T Function<T extends S Function<S>(S)>(T) fun;
''', [
- error(CompileTimeErrorCode.GENERIC_FUNCTION_TYPE_CANNOT_BE_BOUND, 21, 16),
+ error(CompileTimeErrorCode.GENERIC_FUNCTION_TYPE_CANNOT_BE_BOUND, 26, 16),
]);
}
diff --git a/pkg/analyzer/test/src/diagnostics/getter_not_assignable_setter_types_test.dart b/pkg/analyzer/test/src/diagnostics/getter_not_assignable_setter_types_test.dart
index b4996d1..5e89733 100644
--- a/pkg/analyzer/test/src/diagnostics/getter_not_assignable_setter_types_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/getter_not_assignable_setter_types_test.dart
@@ -14,7 +14,10 @@
}
@reflectiveTest
-class GetterNotAssignableSetterTypesTest extends PubPackageResolutionTest {
+class GetterNotAssignableSetterTypesTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
+ // TODO(https://github.com/dart-lang/sdk/issues/44666): Use null safety in
+ // test cases.
test_class_instance_dynamicGetter() async {
await assertNoErrorsInCode(r'''
class C {
diff --git a/pkg/analyzer/test/src/diagnostics/implements_non_class_test.dart b/pkg/analyzer/test/src/diagnostics/implements_non_class_test.dart
index adcb2a3..7172e98 100644
--- a/pkg/analyzer/test/src/diagnostics/implements_non_class_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/implements_non_class_test.dart
@@ -15,7 +15,8 @@
}
@reflectiveTest
-class ImplementsNonClassTest extends PubPackageResolutionTest {
+class ImplementsNonClassTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_class() async {
await assertErrorsInCode(r'''
int A = 7;
diff --git a/pkg/analyzer/test/src/diagnostics/implicit_this_reference_in_initializer_test.dart b/pkg/analyzer/test/src/diagnostics/implicit_this_reference_in_initializer_test.dart
index 45493d4..c3b6d67 100644
--- a/pkg/analyzer/test/src/diagnostics/implicit_this_reference_in_initializer_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/implicit_this_reference_in_initializer_test.dart
@@ -15,7 +15,8 @@
}
@reflectiveTest
-class ImplicitThisReferenceInInitializerTest extends PubPackageResolutionTest {
+class ImplicitThisReferenceInInitializerTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_class_field_commentReference_prefixedIdentifier() async {
await assertNoErrorsInCode(r'''
class A {
diff --git a/pkg/analyzer/test/src/diagnostics/inconsistent_case_expression_types_test.dart b/pkg/analyzer/test/src/diagnostics/inconsistent_case_expression_types_test.dart
index 775c57b..28a4312 100644
--- a/pkg/analyzer/test/src/diagnostics/inconsistent_case_expression_types_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/inconsistent_case_expression_types_test.dart
@@ -15,7 +15,8 @@
}
@reflectiveTest
-class InconsistentCaseExpressionTypesTest extends PubPackageResolutionTest {
+class InconsistentCaseExpressionTypesTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_dynamic() async {
// Even though A.S and S have a static type of "dynamic", we should see
// that they match 'abc', because they are constant strings.
diff --git a/pkg/analyzer/test/src/diagnostics/inconsistent_language_version_override_test.dart b/pkg/analyzer/test/src/diagnostics/inconsistent_language_version_override_test.dart
index 66e52d0..617a0d2 100644
--- a/pkg/analyzer/test/src/diagnostics/inconsistent_language_version_override_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/inconsistent_language_version_override_test.dart
@@ -15,7 +15,11 @@
}
@reflectiveTest
-class InconsistentLanguageVersionOverrideTest extends PubPackageResolutionTest {
+class InconsistentLanguageVersionOverrideTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
+ // TODO(https://github.com/dart-lang/sdk/issues/44666): Use null safety in
+ // test cases.
+
CompileTimeErrorCode get _errorCode =>
CompileTimeErrorCode.INCONSISTENT_LANGUAGE_VERSION_OVERRIDE;
diff --git a/pkg/analyzer/test/src/diagnostics/inference_failure_on_collection_literal_test.dart b/pkg/analyzer/test/src/diagnostics/inference_failure_on_collection_literal_test.dart
index 0633063..6719677 100644
--- a/pkg/analyzer/test/src/diagnostics/inference_failure_on_collection_literal_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/inference_failure_on_collection_literal_test.dart
@@ -136,11 +136,11 @@
test_inferredFromNullAware() async {
await assertErrorsInCode(r'''
-void f(List<int> a) {
+void f(List<int>? a) {
var x = a ?? [];
}
''', [
- error(HintCode.UNUSED_LOCAL_VARIABLE, 28, 1),
+ error(HintCode.UNUSED_LOCAL_VARIABLE, 29, 1),
]);
}
diff --git a/pkg/analyzer/test/src/diagnostics/initializing_formal_for_static_field_test.dart b/pkg/analyzer/test/src/diagnostics/initializing_formal_for_static_field_test.dart
index 7b5b1dd..78471ac 100644
--- a/pkg/analyzer/test/src/diagnostics/initializing_formal_for_static_field_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/initializing_formal_for_static_field_test.dart
@@ -18,11 +18,11 @@
test_static() async {
await assertErrorsInCode(r'''
class A {
- static int x;
+ static int? x;
A([this.x = 0]) {}
}
''', [
- error(CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_STATIC_FIELD, 31, 6),
+ error(CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_STATIC_FIELD, 32, 6),
]);
}
}
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_assignment_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_assignment_test.dart
index f24a3ce..d984401 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_assignment_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_assignment_test.dart
@@ -93,7 +93,8 @@
}
@reflectiveTest
-class InvalidAssignmentTest extends PubPackageResolutionTest {
+class InvalidAssignmentTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_assignment_to_dynamic() async {
await assertErrorsInCode(r'''
f() {
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_cast_new_expr_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_cast_new_expr_test.dart
index fc1ce1e..80347bb 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_cast_new_expr_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_cast_new_expr_test.dart
@@ -14,7 +14,10 @@
}
@reflectiveTest
-class InvalidCastNewExprTest extends PubPackageResolutionTest {
+class InvalidCastNewExprTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
+ // TODO(https://github.com/dart-lang/sdk/issues/44666): Use null safety in
+ // test cases.
test_listLiteral_const() async {
await assertErrorsInCode(r'''
const c = <B>[A()];
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_constant_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_constant_test.dart
index a000c02..1eaf99d 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_constant_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_constant_test.dart
@@ -15,7 +15,8 @@
}
@reflectiveTest
-class InvalidConstantTest extends PubPackageResolutionTest {
+class InvalidConstantTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_in_initializer_assert_condition() async {
await assertErrorsInCode('''
class A {
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_field_type_in_struct_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_field_type_in_struct_test.dart
index 6fec555..4cdedd7 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_field_type_in_struct_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_field_type_in_struct_test.dart
@@ -20,12 +20,12 @@
await assertErrorsInCode(r'''
import 'dart:ffi';
class C extends Struct {
- String str;
+ String? str;
- Pointer notEmpty;
+ Pointer? notEmpty;
}
''', [
- error(FfiCode.INVALID_FIELD_TYPE_IN_STRUCT, 46, 6),
+ error(FfiCode.INVALID_FIELD_TYPE_IN_STRUCT, 46, 7),
]);
}
@@ -33,7 +33,7 @@
await assertNoErrorsInCode(r'''
import 'dart:ffi';
class C extends Struct {
- Pointer p;
+ Pointer? p;
}
''');
}
@@ -43,9 +43,9 @@
await assertNoErrorsInCode(r'''
import 'dart:ffi';
class C extends Struct {
- static String str;
+ static String? str;
- Pointer notEmpty;
+ Pointer? notEmpty;
}
''');
}
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_implementation_override_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_implementation_override_test.dart
index dba5d65..7e0de60 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_implementation_override_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_implementation_override_test.dart
@@ -15,7 +15,8 @@
}
@reflectiveTest
-class InvalidImplementationOverrideTest extends PubPackageResolutionTest {
+class InvalidImplementationOverrideTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_getter_abstractOverridesConcrete() async {
await assertErrorsInCode('''
class A {
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_language_override_greater_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_language_override_greater_test.dart
index b70e7b3..13338b4 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_language_override_greater_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_language_override_greater_test.dart
@@ -20,6 +20,9 @@
@reflectiveTest
class InvalidLanguageOverrideGreaterTest extends PubPackageResolutionTest
with WithNullSafetyMixin {
+ @override
+ String? get testPackageLanguageVersion => null;
+
test_greaterThanLatest() async {
var latestVersion = ExperimentStatus.currentVersion;
await assertErrorsInCode('''
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_override_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_override_test.dart
index 42afb2e..89b8221 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_override_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_override_test.dart
@@ -15,7 +15,8 @@
}
@reflectiveTest
-class InvalidOverrideTest extends PubPackageResolutionTest {
+class InvalidOverrideTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_getter_returnType() async {
await assertErrorsInCode('''
class A {
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_reference_to_this_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_reference_to_this_test.dart
index d565790..f58cb1a 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_reference_to_this_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_reference_to_this_test.dart
@@ -15,7 +15,8 @@
}
@reflectiveTest
-class InvalidReferenceToThisTest extends PubPackageResolutionTest {
+class InvalidReferenceToThisTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_class_constructor() async {
await assertErrorsInCode(r'''
class A {
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_super_invocation_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_super_invocation_test.dart
index 68f2839..078fecf 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_super_invocation_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_super_invocation_test.dart
@@ -18,10 +18,10 @@
test_superBeforeAssert() async {
await assertErrorsInCode(r'''
class A {
- A(int x) : super(), assert(x != null);
+ A(int? x) : super(), assert(x != null);
}
''', [
- error(CompileTimeErrorCode.INVALID_SUPER_INVOCATION, 23, 5),
+ error(CompileTimeErrorCode.INVALID_SUPER_INVOCATION, 24, 5),
]);
}
diff --git a/pkg/analyzer/test/src/diagnostics/invocation_of_extension_without_call_test.dart b/pkg/analyzer/test/src/diagnostics/invocation_of_extension_without_call_test.dart
index 780de76..a7e6924 100644
--- a/pkg/analyzer/test/src/diagnostics/invocation_of_extension_without_call_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invocation_of_extension_without_call_test.dart
@@ -14,7 +14,8 @@
}
@reflectiveTest
-class InvocationOfExtensionWithoutCallTest extends PubPackageResolutionTest {
+class InvocationOfExtensionWithoutCallTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_instance_differentKind() async {
await assertErrorsInCode('''
extension E on Object {}
diff --git a/pkg/analyzer/test/src/diagnostics/label_undefined_test.dart b/pkg/analyzer/test/src/diagnostics/label_undefined_test.dart
index c89d139..abe2d6a 100644
--- a/pkg/analyzer/test/src/diagnostics/label_undefined_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/label_undefined_test.dart
@@ -15,7 +15,8 @@
}
@reflectiveTest
-class LabelUndefinedTest extends PubPackageResolutionTest {
+class LabelUndefinedTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_break() async {
await assertErrorsInCode(r'''
f() {
diff --git a/pkg/analyzer/test/src/diagnostics/list_element_type_not_assignable_test.dart b/pkg/analyzer/test/src/diagnostics/list_element_type_not_assignable_test.dart
index 6c69432..54f519d 100644
--- a/pkg/analyzer/test/src/diagnostics/list_element_type_not_assignable_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/list_element_type_not_assignable_test.dart
@@ -92,7 +92,7 @@
test_const_stringNull() async {
await assertNoErrorsInCode('''
-var v = const <String>[null];
+var v = const <String?>[null];
''');
}
diff --git a/pkg/analyzer/test/src/diagnostics/main_first_positional_parameter_type_test.dart b/pkg/analyzer/test/src/diagnostics/main_first_positional_parameter_type_test.dart
index 43b7fa9..357315a 100644
--- a/pkg/analyzer/test/src/diagnostics/main_first_positional_parameter_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/main_first_positional_parameter_type_test.dart
@@ -16,7 +16,7 @@
@reflectiveTest
class MainFirstPositionalParameterTest extends PubPackageResolutionTest
- with MainFirstPositionalParameterTestCases {}
+ with WithoutNullSafetyMixin, MainFirstPositionalParameterTestCases {}
mixin MainFirstPositionalParameterTestCases on PubPackageResolutionTest {
test_positionalOptional_listOfInt() async {
diff --git a/pkg/analyzer/test/src/diagnostics/main_has_required_named_parameters_test.dart b/pkg/analyzer/test/src/diagnostics/main_has_required_named_parameters_test.dart
index dab48b2..5687f54 100644
--- a/pkg/analyzer/test/src/diagnostics/main_has_required_named_parameters_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/main_has_required_named_parameters_test.dart
@@ -16,7 +16,7 @@
@reflectiveTest
class MainHasRequiredNamedParametersTest extends PubPackageResolutionTest
- with MainHasRequiredNamedParametersTestCases {}
+ with WithoutNullSafetyMixin, MainHasRequiredNamedParametersTestCases {}
mixin MainHasRequiredNamedParametersTestCases on PubPackageResolutionTest {
test_namedOptional() async {
diff --git a/pkg/analyzer/test/src/diagnostics/main_has_too_many_required_positional_parameters_test.dart b/pkg/analyzer/test/src/diagnostics/main_has_too_many_required_positional_parameters_test.dart
index 6457de5..f9036ac 100644
--- a/pkg/analyzer/test/src/diagnostics/main_has_too_many_required_positional_parameters_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/main_has_too_many_required_positional_parameters_test.dart
@@ -19,7 +19,9 @@
@reflectiveTest
class MainHasTooManyRequiredPositionalParametersTest
extends PubPackageResolutionTest
- with MainHasTooManyRequiredPositionalParametersTestCases {}
+ with
+ WithoutNullSafetyMixin,
+ MainHasTooManyRequiredPositionalParametersTestCases {}
mixin MainHasTooManyRequiredPositionalParametersTestCases
on PubPackageResolutionTest {
diff --git a/pkg/analyzer/test/src/diagnostics/main_is_not_function_test.dart b/pkg/analyzer/test/src/diagnostics/main_is_not_function_test.dart
index 6b5921d..11ebf19 100644
--- a/pkg/analyzer/test/src/diagnostics/main_is_not_function_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/main_is_not_function_test.dart
@@ -16,7 +16,7 @@
@reflectiveTest
class MainIsNotFunctionTest extends PubPackageResolutionTest
- with MainIsNotFunctionTestCases {}
+ with WithoutNullSafetyMixin, MainIsNotFunctionTestCases {}
mixin MainIsNotFunctionTestCases on PubPackageResolutionTest {
test_class() async {
diff --git a/pkg/analyzer/test/src/diagnostics/map_key_type_not_assignable_test.dart b/pkg/analyzer/test/src/diagnostics/map_key_type_not_assignable_test.dart
index 55fcfd1..44ef7ef 100644
--- a/pkg/analyzer/test/src/diagnostics/map_key_type_not_assignable_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/map_key_type_not_assignable_test.dart
@@ -10,6 +10,7 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(MapKeyTypeNotAssignableTest);
+ defineReflectiveTests(MapKeyTypeNotAssignableWithoutNullSafetyTest);
});
}
@@ -187,12 +188,6 @@
''');
}
- test_nonConst_spread_intNum() async {
- await assertNoErrorsInCode('''
-var v = <int, int>{...<num, num>{1: 1}};
-''');
- }
-
test_nonConst_spread_intString() async {
await assertErrorsInCode('''
var v = <int, String>{...{'a': 'a'}};
@@ -208,3 +203,14 @@
''');
}
}
+
+@reflectiveTest
+class MapKeyTypeNotAssignableWithoutNullSafetyTest
+ extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin, MapKeyTypeNotAssignableTestCases {
+ test_nonConst_spread_intNum() async {
+ await assertNoErrorsInCode('''
+var v = <int, int>{...<num, num>{1: 1}};
+''');
+ }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/map_value_type_not_assignable_test.dart b/pkg/analyzer/test/src/diagnostics/map_value_type_not_assignable_test.dart
index 443ce2b..e5d6220 100644
--- a/pkg/analyzer/test/src/diagnostics/map_value_type_not_assignable_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/map_value_type_not_assignable_test.dart
@@ -10,6 +10,7 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(MapValueTypeNotAssignableTest);
+ defineReflectiveTests(MapValueTypeNotAssignableWithoutNullSafetyTest);
});
}
@@ -181,12 +182,6 @@
''');
}
- test_nonConst_spread_intNum() async {
- await assertNoErrorsInCode('''
-var v = <int, int>{...<num, num>{1: 1}};
-''');
- }
-
test_nonConst_spread_intString() async {
await assertErrorsInCode('''
var v = <bool, int>{...{true: 'a'}};
@@ -202,3 +197,14 @@
''');
}
}
+
+@reflectiveTest
+class MapValueTypeNotAssignableWithoutNullSafetyTest
+ extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin, MapValueTypeNotAssignableTestCases {
+ test_nonConst_spread_intNum() async {
+ await assertNoErrorsInCode('''
+var v = <int, int>{...<num, num>{1: 1}};
+''');
+ }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/missing_enum_constant_in_switch_test.dart b/pkg/analyzer/test/src/diagnostics/missing_enum_constant_in_switch_test.dart
index 86eee40..e3523e4 100644
--- a/pkg/analyzer/test/src/diagnostics/missing_enum_constant_in_switch_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/missing_enum_constant_in_switch_test.dart
@@ -15,7 +15,8 @@
}
@reflectiveTest
-class MissingEnumConstantInSwitchTest extends PubPackageResolutionTest {
+class MissingEnumConstantInSwitchTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_default() async {
await assertNoErrorsInCode('''
enum E { one, two, three }
diff --git a/pkg/analyzer/test/src/diagnostics/missing_js_lib_annotation_test.dart b/pkg/analyzer/test/src/diagnostics/missing_js_lib_annotation_test.dart
index 82c93cd..9f0346b 100644
--- a/pkg/analyzer/test/src/diagnostics/missing_js_lib_annotation_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/missing_js_lib_annotation_test.dart
@@ -11,6 +11,7 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(MissingJSLibAnnotationTest);
+ defineReflectiveTests(MissingJSLibAnnotationWithoutNullSafetyTest);
});
}
@@ -36,19 +37,6 @@
]);
}
- test_externalField() async {
- // https://github.com/dart-lang/sdk/issues/26987
- await assertErrorsInCode('''
-import 'package:js/js.dart';
-
-@JS()
-external dynamic exports;
-''', [
- error(HintCode.MISSING_JS_LIB_ANNOTATION, 30, 5),
- error(ParserErrorCode.EXTERNAL_FIELD, 36, 8),
- ]);
- }
-
test_function() async {
await assertErrorsInCode('''
library foo;
@@ -101,3 +89,27 @@
]);
}
}
+
+@reflectiveTest
+class MissingJSLibAnnotationWithoutNullSafetyTest
+ extends PubPackageResolutionTest with WithoutNullSafetyMixin {
+ @override
+ void setUp() {
+ super.setUp();
+
+ writeTestPackageConfig(PackageConfigFileBuilder(), js: true);
+ }
+
+ test_externalField() async {
+ // https://github.com/dart-lang/sdk/issues/26987
+ await assertErrorsInCode('''
+import 'package:js/js.dart';
+
+@JS()
+external dynamic exports;
+''', [
+ error(HintCode.MISSING_JS_LIB_ANNOTATION, 30, 5),
+ error(ParserErrorCode.EXTERNAL_FIELD, 36, 8),
+ ]);
+ }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/missing_required_param_test.dart b/pkg/analyzer/test/src/diagnostics/missing_required_param_test.dart
index 236e071..865ef42 100644
--- a/pkg/analyzer/test/src/diagnostics/missing_required_param_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/missing_required_param_test.dart
@@ -16,7 +16,8 @@
}
@reflectiveTest
-class MissingRequiredParamTest extends PubPackageResolutionTest {
+class MissingRequiredParamTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
@override
void setUp() {
super.setUp();
diff --git a/pkg/analyzer/test/src/diagnostics/missing_return_test.dart b/pkg/analyzer/test/src/diagnostics/missing_return_test.dart
index 4d9fec5..99e1950 100644
--- a/pkg/analyzer/test/src/diagnostics/missing_return_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/missing_return_test.dart
@@ -15,7 +15,8 @@
}
@reflectiveTest
-class MissingReturnTest extends PubPackageResolutionTest {
+class MissingReturnTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_alwaysThrows() async {
writeTestPackageConfigWithMeta();
await assertNoErrorsInCode(r'''
diff --git a/pkg/analyzer/test/src/diagnostics/mixin_inference_no_possible_substitution_test.dart b/pkg/analyzer/test/src/diagnostics/mixin_inference_no_possible_substitution_test.dart
index cdc0fde..f83053e 100644
--- a/pkg/analyzer/test/src/diagnostics/mixin_inference_no_possible_substitution_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/mixin_inference_no_possible_substitution_test.dart
@@ -18,7 +18,9 @@
@reflectiveTest
class MixinInferenceNoPossibleSubstitutionTest extends PubPackageResolutionTest
- with MixinInferenceNoPossibleSubstitutionTestCases {}
+ with
+ WithoutNullSafetyMixin,
+ MixinInferenceNoPossibleSubstitutionTestCases {}
mixin MixinInferenceNoPossibleSubstitutionTestCases on ResolutionTest {
test_valid_single() async {
diff --git a/pkg/analyzer/test/src/diagnostics/mixin_of_non_class_test.dart b/pkg/analyzer/test/src/diagnostics/mixin_of_non_class_test.dart
index 948a8dd..53935fa 100644
--- a/pkg/analyzer/test/src/diagnostics/mixin_of_non_class_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/mixin_of_non_class_test.dart
@@ -15,7 +15,8 @@
}
@reflectiveTest
-class MixinOfNonClassTest extends PubPackageResolutionTest {
+class MixinOfNonClassTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_class() async {
await assertErrorsInCode(r'''
int A = 7;
diff --git a/pkg/analyzer/test/src/diagnostics/mixin_super_class_constraint_non_interface_test.dart b/pkg/analyzer/test/src/diagnostics/mixin_super_class_constraint_non_interface_test.dart
index cec22cb..204e614 100644
--- a/pkg/analyzer/test/src/diagnostics/mixin_super_class_constraint_non_interface_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/mixin_super_class_constraint_non_interface_test.dart
@@ -16,8 +16,8 @@
}
@reflectiveTest
-class MixinSuperClassConstraintNonInterfaceTest
- extends PubPackageResolutionTest {}
+class MixinSuperClassConstraintNonInterfaceTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {}
@reflectiveTest
class MixinSuperClassConstraintNonInterfaceWithNullSafetyTest
diff --git a/pkg/analyzer/test/src/diagnostics/no_default_super_constructor_test.dart b/pkg/analyzer/test/src/diagnostics/no_default_super_constructor_test.dart
index 3643e02..3352f08 100644
--- a/pkg/analyzer/test/src/diagnostics/no_default_super_constructor_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/no_default_super_constructor_test.dart
@@ -16,7 +16,7 @@
@reflectiveTest
class NoDefaultSuperConstructorTest extends PubPackageResolutionTest
- with NoDefaultSuperConstructorTestCases {}
+ with WithoutNullSafetyMixin, NoDefaultSuperConstructorTestCases {}
mixin NoDefaultSuperConstructorTestCases on PubPackageResolutionTest {
test_explicitDefaultSuperConstructor() async {
diff --git a/pkg/analyzer/test/src/diagnostics/non_abstract_class_inherits_abstract_member_test.dart b/pkg/analyzer/test/src/diagnostics/non_abstract_class_inherits_abstract_member_test.dart
index ef8e5e6..8467c31 100644
--- a/pkg/analyzer/test/src/diagnostics/non_abstract_class_inherits_abstract_member_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_abstract_class_inherits_abstract_member_test.dart
@@ -18,7 +18,9 @@
@reflectiveTest
class NonAbstractClassInheritsAbstractMemberTest
extends PubPackageResolutionTest
- with NonAbstractClassInheritsAbstractMemberTestCases {}
+ with
+ WithoutNullSafetyMixin,
+ NonAbstractClassInheritsAbstractMemberTestCases {}
mixin NonAbstractClassInheritsAbstractMemberTestCases
on PubPackageResolutionTest {
diff --git a/pkg/analyzer/test/src/diagnostics/non_bool_condition_test.dart b/pkg/analyzer/test/src/diagnostics/non_bool_condition_test.dart
index f7aa310..4ba6bf1 100644
--- a/pkg/analyzer/test/src/diagnostics/non_bool_condition_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_bool_condition_test.dart
@@ -15,7 +15,8 @@
}
@reflectiveTest
-class NonBoolConditionTest extends PubPackageResolutionTest {
+class NonBoolConditionTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_conditional() async {
await assertErrorsInCode('''
f() { return 3 ? 2 : 1; }
diff --git a/pkg/analyzer/test/src/diagnostics/non_bool_negation_expression_test.dart b/pkg/analyzer/test/src/diagnostics/non_bool_negation_expression_test.dart
index 1fdb4eb..562e090 100644
--- a/pkg/analyzer/test/src/diagnostics/non_bool_negation_expression_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_bool_negation_expression_test.dart
@@ -15,7 +15,8 @@
}
@reflectiveTest
-class NonBoolNegationExpressionTest extends PubPackageResolutionTest {
+class NonBoolNegationExpressionTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_nonBool() async {
await assertErrorsInCode(r'''
f() {
diff --git a/pkg/analyzer/test/src/diagnostics/non_bool_operand_test.dart b/pkg/analyzer/test/src/diagnostics/non_bool_operand_test.dart
index 456e55c..da6767b 100644
--- a/pkg/analyzer/test/src/diagnostics/non_bool_operand_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_bool_operand_test.dart
@@ -15,7 +15,8 @@
}
@reflectiveTest
-class NonBoolOperandTest extends PubPackageResolutionTest {
+class NonBoolOperandTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_and_left() async {
await assertErrorsInCode(r'''
bool f(int left, bool right) {
diff --git a/pkg/analyzer/test/src/diagnostics/non_constant_case_expression_test.dart b/pkg/analyzer/test/src/diagnostics/non_constant_case_expression_test.dart
index 0140b9e..d36da75 100644
--- a/pkg/analyzer/test/src/diagnostics/non_constant_case_expression_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_constant_case_expression_test.dart
@@ -15,7 +15,8 @@
}
@reflectiveTest
-class NonConstantCaseExpressionTest extends PubPackageResolutionTest {
+class NonConstantCaseExpressionTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_constField() async {
await assertNoErrorsInCode(r'''
void f(C e) {
diff --git a/pkg/analyzer/test/src/diagnostics/non_type_in_catch_clause_test.dart b/pkg/analyzer/test/src/diagnostics/non_type_in_catch_clause_test.dart
index 17c3039..530ff4b 100644
--- a/pkg/analyzer/test/src/diagnostics/non_type_in_catch_clause_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_type_in_catch_clause_test.dart
@@ -62,6 +62,8 @@
}
}
''', [
+ // TODO(srawlins): Ideally the first error should not be reported.
+ error(HintCode.NULLABLE_TYPE_IN_CATCH_CLAUSE, 21, 1),
error(CompileTimeErrorCode.NON_TYPE_IN_CATCH_CLAUSE, 21, 1),
error(HintCode.UNUSED_CATCH_CLAUSE, 30, 1),
]);
@@ -76,6 +78,8 @@
}
}
''', [
+ // TODO(srawlins): Ideally the first error should not be reported.
+ error(HintCode.NULLABLE_TYPE_IN_CATCH_CLAUSE, 32, 1),
error(CompileTimeErrorCode.NON_TYPE_IN_CATCH_CLAUSE, 32, 1),
error(HintCode.UNUSED_CATCH_CLAUSE, 41, 1),
]);
diff --git a/pkg/analyzer/test/src/diagnostics/not_iterable_spread_test.dart b/pkg/analyzer/test/src/diagnostics/not_iterable_spread_test.dart
index 4be6794..a8b606c 100644
--- a/pkg/analyzer/test/src/diagnostics/not_iterable_spread_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/not_iterable_spread_test.dart
@@ -28,7 +28,8 @@
}
@reflectiveTest
-class NotIterableSpreadTest extends PubPackageResolutionTest {
+class NotIterableSpreadTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_iterable_list() async {
await assertNoErrorsInCode('''
var a = [0];
diff --git a/pkg/analyzer/test/src/diagnostics/not_map_spread_test.dart b/pkg/analyzer/test/src/diagnostics/not_map_spread_test.dart
index b95d6f8..c025714 100644
--- a/pkg/analyzer/test/src/diagnostics/not_map_spread_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/not_map_spread_test.dart
@@ -28,7 +28,8 @@
}
@reflectiveTest
-class NotMapSpreadTest extends PubPackageResolutionTest {
+class NotMapSpreadTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_map() async {
await assertNoErrorsInCode('''
var a = {0: 0};
diff --git a/pkg/analyzer/test/src/diagnostics/not_null_aware_null_spread_test.dart b/pkg/analyzer/test/src/diagnostics/not_null_aware_null_spread_test.dart
index f521be8..4fe91b3 100644
--- a/pkg/analyzer/test/src/diagnostics/not_null_aware_null_spread_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/not_null_aware_null_spread_test.dart
@@ -14,7 +14,10 @@
}
@reflectiveTest
-class NotNullAwareNullSpreadTest extends PubPackageResolutionTest {
+class NotNullAwareNullSpreadTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
+ // TODO(https://github.com/dart-lang/sdk/issues/44666): Use null safety in
+ // test cases.
test_listLiteral_notNullAware_nullLiteral() async {
await assertErrorsInCode('''
var v = [...null];
diff --git a/pkg/analyzer/test/src/diagnostics/null_aware_before_operator_test.dart b/pkg/analyzer/test/src/diagnostics/null_aware_before_operator_test.dart
index 2fb8510..0dc59fb 100644
--- a/pkg/analyzer/test/src/diagnostics/null_aware_before_operator_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/null_aware_before_operator_test.dart
@@ -14,7 +14,10 @@
}
@reflectiveTest
-class NullAwareBeforeOperatorTest extends PubPackageResolutionTest {
+class NullAwareBeforeOperatorTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
+ // TODO(https://github.com/dart-lang/sdk/issues/44666): Use null safety in
+ // test cases.
test_assignment() async {
await assertNoErrorsInCode(r'''
m(x) {
diff --git a/pkg/analyzer/test/src/diagnostics/null_aware_in_condition_test.dart b/pkg/analyzer/test/src/diagnostics/null_aware_in_condition_test.dart
index 94daa48..4c3a84ba 100644
--- a/pkg/analyzer/test/src/diagnostics/null_aware_in_condition_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/null_aware_in_condition_test.dart
@@ -14,7 +14,10 @@
}
@reflectiveTest
-class NullAwareInConditionTest extends PubPackageResolutionTest {
+class NullAwareInConditionTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
+ // TODO(https://github.com/dart-lang/sdk/issues/44666): Use null safety in
+ // test cases.
test_assert() async {
await assertErrorsInCode(r'''
m(x) {
diff --git a/pkg/analyzer/test/src/diagnostics/null_aware_in_logical_operator_test.dart b/pkg/analyzer/test/src/diagnostics/null_aware_in_logical_operator_test.dart
index a64628b..384de5c 100644
--- a/pkg/analyzer/test/src/diagnostics/null_aware_in_logical_operator_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/null_aware_in_logical_operator_test.dart
@@ -14,7 +14,10 @@
}
@reflectiveTest
-class NullAwareInLogicalOperatorTest extends PubPackageResolutionTest {
+class NullAwareInLogicalOperatorTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
+ // TODO(https://github.com/dart-lang/sdk/issues/44666): Use null safety in
+ // test cases.
test_conditionalAnd_first() async {
await assertErrorsInCode(r'''
m(x) {
diff --git a/pkg/analyzer/test/src/diagnostics/prefix_shadowed_by_local_declaration_test.dart b/pkg/analyzer/test/src/diagnostics/prefix_shadowed_by_local_declaration_test.dart
index 33c6cf1..b6b7e32 100644
--- a/pkg/analyzer/test/src/diagnostics/prefix_shadowed_by_local_declaration_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/prefix_shadowed_by_local_declaration_test.dart
@@ -18,7 +18,7 @@
test_function_return_type_not_shadowed_by_parameter() async {
await assertNoErrorsInCode('''
import 'dart:async' as a;
-a.Future f(int a) {
+a.Future? f(int a) {
return null;
}
''');
@@ -28,7 +28,7 @@
await assertErrorsInCode('''
import 'dart:async' as a;
f(int a) {
- a.Future x = null;
+ a.Future? x = null;
return x;
}
''', [
@@ -41,14 +41,14 @@
await assertErrorsInCode('''
import 'dart:async' as a;
f() {
- a.Future x = null;
+ a.Future? x = null;
int a = 0;
return [x, a];
}
''', [
error(HintCode.UNUSED_IMPORT, 7, 12),
error(CompileTimeErrorCode.REFERENCED_BEFORE_DECLARATION, 34, 1,
- contextMessages: [message('$testPackageLibPath/test.dart', 59, 1)]),
+ contextMessages: [message('$testPackageLibPath/test.dart', 60, 1)]),
error(CompileTimeErrorCode.PREFIX_SHADOWED_BY_LOCAL_DECLARATION, 34, 1),
]);
}
@@ -58,7 +58,7 @@
import 'dart:async' as a;
f() {
int a = 0;
- a.Future x = null;
+ a.Future? x = null;
return [x, a];
}
''', [
diff --git a/pkg/analyzer/test/src/diagnostics/receiver_of_type_never_test.dart b/pkg/analyzer/test/src/diagnostics/receiver_of_type_never_test.dart
index 411e564..60eeb58 100644
--- a/pkg/analyzer/test/src/diagnostics/receiver_of_type_never_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/receiver_of_type_never_test.dart
@@ -558,7 +558,8 @@
}
@reflectiveTest
-class InvalidUseOfNeverTest_Legacy extends PubPackageResolutionTest {
+class InvalidUseOfNeverTest_Legacy extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_binaryExpression_eqEq() async {
await assertNoErrorsInCode(r'''
void f() {
diff --git a/pkg/analyzer/test/src/diagnostics/return_of_do_not_store_test.dart b/pkg/analyzer/test/src/diagnostics/return_of_do_not_store_test.dart
index c8f61f5..ec72a74 100644
--- a/pkg/analyzer/test/src/diagnostics/return_of_do_not_store_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/return_of_do_not_store_test.dart
@@ -84,17 +84,15 @@
import 'package:meta/meta.dart';
@doNotStore
-String _v = '';
+String? _v = '';
@doNotStore
-String _v2 = '';
+String? _v2 = '';
-var b = true;
-
-String get v => _v ?? _v2;
+String? get v => _v ?? _v2;
''', [
- error(HintCode.RETURN_OF_DO_NOT_STORE, 124, 2, messageContains: '_v'),
- error(HintCode.RETURN_OF_DO_NOT_STORE, 130, 3, messageContains: '_v2'),
+ error(HintCode.RETURN_OF_DO_NOT_STORE, 112, 2, messageContains: '_v'),
+ error(HintCode.RETURN_OF_DO_NOT_STORE, 118, 3, messageContains: '_v2'),
]);
}
diff --git a/pkg/analyzer/test/src/diagnostics/return_of_invalid_type_from_catch_error_test.dart b/pkg/analyzer/test/src/diagnostics/return_of_invalid_type_from_catch_error_test.dart
index 51b7617..1e976ed 100644
--- a/pkg/analyzer/test/src/diagnostics/return_of_invalid_type_from_catch_error_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/return_of_invalid_type_from_catch_error_test.dart
@@ -15,7 +15,8 @@
}
@reflectiveTest
-class ReturnOfInvalidTypeForCatchErrorTest extends PubPackageResolutionTest {
+class ReturnOfInvalidTypeForCatchErrorTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_async_okReturnType() async {
await assertNoErrorsInCode('''
void f(Future<int> future) {
diff --git a/pkg/analyzer/test/src/diagnostics/return_of_invalid_type_test.dart b/pkg/analyzer/test/src/diagnostics/return_of_invalid_type_test.dart
index 986bd56..d1f7457 100644
--- a/pkg/analyzer/test/src/diagnostics/return_of_invalid_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/return_of_invalid_type_test.dart
@@ -15,7 +15,8 @@
}
@reflectiveTest
-class ReturnOfInvalidTypeTest extends PubPackageResolutionTest {
+class ReturnOfInvalidTypeTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_closure() async {
await assertErrorsInCode('''
typedef Td = int Function();
diff --git a/pkg/analyzer/test/src/diagnostics/return_type_invalid_for_catch_error_test.dart b/pkg/analyzer/test/src/diagnostics/return_type_invalid_for_catch_error_test.dart
index ddd5ed2..fd534d0 100644
--- a/pkg/analyzer/test/src/diagnostics/return_type_invalid_for_catch_error_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/return_type_invalid_for_catch_error_test.dart
@@ -15,7 +15,8 @@
}
@reflectiveTest
-class ReturnTypeInvalidForCatchErrorTest extends PubPackageResolutionTest {
+class ReturnTypeInvalidForCatchErrorTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_dynamic_returnTypeIsUnrelatedFuture() async {
await assertNoErrorsInCode('''
void f(
diff --git a/pkg/analyzer/test/src/diagnostics/return_without_value_test.dart b/pkg/analyzer/test/src/diagnostics/return_without_value_test.dart
index 9a31d66..f90e7e6 100644
--- a/pkg/analyzer/test/src/diagnostics/return_without_value_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/return_without_value_test.dart
@@ -15,7 +15,8 @@
}
@reflectiveTest
-class ReturnWithoutValueTest extends PubPackageResolutionTest {
+class ReturnWithoutValueTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_async_futureInt() async {
await assertErrorsInCode('''
Future<int> f() async {
diff --git a/pkg/analyzer/test/src/diagnostics/sdk_version_eq_eq_operator_test.dart b/pkg/analyzer/test/src/diagnostics/sdk_version_eq_eq_operator_test.dart
index dc8a974..34ff26a 100644
--- a/pkg/analyzer/test/src/diagnostics/sdk_version_eq_eq_operator_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/sdk_version_eq_eq_operator_test.dart
@@ -5,6 +5,7 @@
import 'package:analyzer/src/error/codes.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
+import '../dart/resolution/context_collection_resolution.dart';
import 'sdk_constraint_verifier_support.dart';
main() {
@@ -14,7 +15,10 @@
}
@reflectiveTest
-class SdkVersionEqEqOperatorTest extends SdkConstraintVerifierTest {
+class SdkVersionEqEqOperatorTest extends SdkConstraintVerifierTest
+ with WithoutNullSafetyMixin {
+ // TODO(https://github.com/dart-lang/sdk/issues/44666): Use null safety in
+ // test cases.
test_left_equals() async {
await verifyVersion('2.5.0', '''
class A {
diff --git a/pkg/analyzer/test/src/diagnostics/sdk_version_never_test.dart b/pkg/analyzer/test/src/diagnostics/sdk_version_never_test.dart
index 6601e17..4773eae 100644
--- a/pkg/analyzer/test/src/diagnostics/sdk_version_never_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/sdk_version_never_test.dart
@@ -16,7 +16,8 @@
}
@reflectiveTest
-class SdkVersionNeverTest extends SdkConstraintVerifierTest {
+class SdkVersionNeverTest extends SdkConstraintVerifierTest
+ with WithoutNullSafetyMixin {
test_languageVersionBeforeNullSafety() async {
await verifyVersion('2.7.0', r'''
Never foo;
diff --git a/pkg/analyzer/test/src/diagnostics/switch_expression_not_assignable_test.dart b/pkg/analyzer/test/src/diagnostics/switch_expression_not_assignable_test.dart
index 60f0a17..91b2978 100644
--- a/pkg/analyzer/test/src/diagnostics/switch_expression_not_assignable_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/switch_expression_not_assignable_test.dart
@@ -14,7 +14,10 @@
}
@reflectiveTest
-class SwitchExpressionNotAssignableTest extends PubPackageResolutionTest {
+class SwitchExpressionNotAssignableTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
+ // TODO(https://github.com/dart-lang/sdk/issues/44666): Use null safety in
+ // test cases.
test_simple() async {
await assertErrorsInCode('''
f(int p) {
diff --git a/pkg/analyzer/test/src/diagnostics/type_alias_cannot_reference_itself_test.dart b/pkg/analyzer/test/src/diagnostics/type_alias_cannot_reference_itself_test.dart
index 4c9ceb3..7b85a9e 100644
--- a/pkg/analyzer/test/src/diagnostics/type_alias_cannot_reference_itself_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/type_alias_cannot_reference_itself_test.dart
@@ -39,7 +39,7 @@
typedef F = void Function(List<G> l);
typedef G = void Function(List<F> l);
main() {
- F foo(G g) => g;
+ F? foo(G? g) => g;
foo(null);
}
''', [
@@ -69,7 +69,7 @@
typedef void F(List<G> l);
typedef void G(List<F> l);
main() {
- F foo(G g) => g;
+ F? foo(G? g) => g;
foo(null);
}
''', [
@@ -127,7 +127,7 @@
await assertNoErrorsInCode(r'''
typedef B A();
class B {
- A a;
+ A? a;
}
''');
}
@@ -138,7 +138,7 @@
typedef C A();
typedef A B();
class C {
- B a;
+ B? a;
}
''');
}
diff --git a/pkg/analyzer/test/src/diagnostics/type_annotation_deferred_class_test.dart b/pkg/analyzer/test/src/diagnostics/type_annotation_deferred_class_test.dart
index a82563a..1068226 100644
--- a/pkg/analyzer/test/src/diagnostics/type_annotation_deferred_class_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/type_annotation_deferred_class_test.dart
@@ -67,8 +67,9 @@
await assertErrorsInCode('''
library root;
import 'lib1.dart' deferred as a;
-a.A f() { return null; }''', [
- error(CompileTimeErrorCode.TYPE_ANNOTATION_DEFERRED_CLASS, 48, 3),
+a.A? f() { return null; }
+''', [
+ error(CompileTimeErrorCode.TYPE_ANNOTATION_DEFERRED_CLASS, 48, 4),
]);
}
@@ -107,9 +108,9 @@
library root;
import 'lib1.dart' deferred as a;
class C {
- a.A m() { return null; }
+ a.A? m() { return null; }
}''', [
- error(CompileTimeErrorCode.TYPE_ANNOTATION_DEFERRED_CLASS, 60, 3),
+ error(CompileTimeErrorCode.TYPE_ANNOTATION_DEFERRED_CLASS, 60, 4),
]);
}
diff --git a/pkg/analyzer/test/src/diagnostics/type_argument_not_matching_bounds_test.dart b/pkg/analyzer/test/src/diagnostics/type_argument_not_matching_bounds_test.dart
index fba1fe4..0a010bf 100644
--- a/pkg/analyzer/test/src/diagnostics/type_argument_not_matching_bounds_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/type_argument_not_matching_bounds_test.dart
@@ -21,7 +21,7 @@
@reflectiveTest
class TypeArgumentNotMatchingBoundsTest extends PubPackageResolutionTest
- with TypeArgumentNotMatchingBoundsTestCases {
+ with WithoutNullSafetyMixin, TypeArgumentNotMatchingBoundsTestCases {
test_regression_42196_Null() async {
await assertNoErrorsInCode(r'''
typedef G<X> = Function(X);
diff --git a/pkg/analyzer/test/src/diagnostics/type_parameter_referenced_by_static_test.dart b/pkg/analyzer/test/src/diagnostics/type_parameter_referenced_by_static_test.dart
index 96fb733..bdae863 100644
--- a/pkg/analyzer/test/src/diagnostics/type_parameter_referenced_by_static_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/type_parameter_referenced_by_static_test.dart
@@ -30,7 +30,7 @@
test_type_field() async {
await assertErrorsInCode('''
class A<T> {
- static T foo;
+ static T? foo;
}
''', [
error(CompileTimeErrorCode.TYPE_PARAMETER_REFERENCED_BY_STATIC, 22, 1),
@@ -40,7 +40,7 @@
test_type_getter() async {
await assertErrorsInCode('''
class A<T> {
- static T get foo => null;
+ static T? get foo => null;
}
''', [
error(CompileTimeErrorCode.TYPE_PARAMETER_REFERENCED_BY_STATIC, 22, 1),
diff --git a/pkg/analyzer/test/src/diagnostics/type_parameter_supertype_of_its_bound_test.dart b/pkg/analyzer/test/src/diagnostics/type_parameter_supertype_of_its_bound_test.dart
index 54192759..fea9303 100644
--- a/pkg/analyzer/test/src/diagnostics/type_parameter_supertype_of_its_bound_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/type_parameter_supertype_of_its_bound_test.dart
@@ -15,7 +15,8 @@
}
@reflectiveTest
-class TypeParameterSupertypeOfItsBoundTest extends PubPackageResolutionTest {
+class TypeParameterSupertypeOfItsBoundTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_1of1() async {
await assertErrorsInCode(r'''
class A<T extends T> {
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_getter_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_getter_test.dart
index 1c3e268..d02a26d 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_getter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_getter_test.dart
@@ -17,7 +17,7 @@
@reflectiveTest
class UndefinedGetterTest extends PubPackageResolutionTest
- with UndefinedGetterTestCases {}
+ with WithoutNullSafetyMixin, UndefinedGetterTestCases {}
mixin UndefinedGetterTestCases on PubPackageResolutionTest {
test_compoundAssignment_hasSetter_instance() async {
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_hidden_name_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_hidden_name_test.dart
index 57fbdfc..6fcfad3 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_hidden_name_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_hidden_name_test.dart
@@ -15,7 +15,8 @@
}
@reflectiveTest
-class UndefinedHiddenNameTest extends PubPackageResolutionTest {
+class UndefinedHiddenNameTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_export() async {
newFile('$testPackageLibPath/lib1.dart');
await assertErrorsInCode(r'''
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_identifier_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_identifier_test.dart
index 6195779..1c584a0 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_identifier_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_identifier_test.dart
@@ -16,7 +16,8 @@
}
@reflectiveTest
-class UndefinedIdentifierTest extends PubPackageResolutionTest {
+class UndefinedIdentifierTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
@failingTest
test_commentReference() async {
await assertErrorsInCode('''
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_operator_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_operator_test.dart
index 45bc660..fc6fd7c 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_operator_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_operator_test.dart
@@ -14,7 +14,10 @@
}
@reflectiveTest
-class UndefinedOperatorTest extends PubPackageResolutionTest {
+class UndefinedOperatorTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
+ // TODO(https://github.com/dart-lang/sdk/issues/44666): Use null safety in
+ // test cases.
test_assignmentExpression_undefined() async {
await assertErrorsInCode(r'''
class A {}
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_setter_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_setter_test.dart
index 3fbb7c1..858c519 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_setter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_setter_test.dart
@@ -16,7 +16,7 @@
@reflectiveTest
class UndefinedSetterTest extends PubPackageResolutionTest
- with UndefinedSetterTestCases {}
+ with WithoutNullSafetyMixin, UndefinedSetterTestCases {}
mixin UndefinedSetterTestCases on PubPackageResolutionTest {
test_importWithPrefix_defined() async {
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_shown_name_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_shown_name_test.dart
index 4fba9ed..ea89f9a 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_shown_name_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_shown_name_test.dart
@@ -15,7 +15,8 @@
}
@reflectiveTest
-class UndefinedShownNameTest extends PubPackageResolutionTest {
+class UndefinedShownNameTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_export() async {
newFile('$testPackageLibPath/lib1.dart');
await assertErrorsInCode(r'''
diff --git a/pkg/analyzer/test/src/diagnostics/unnecessary_cast_test.dart b/pkg/analyzer/test/src/diagnostics/unnecessary_cast_test.dart
index 4b9d36e..e0e6397 100644
--- a/pkg/analyzer/test/src/diagnostics/unnecessary_cast_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unnecessary_cast_test.dart
@@ -15,7 +15,8 @@
}
@reflectiveTest
-class UnnecessaryCastTest extends PubPackageResolutionTest {
+class UnnecessaryCastTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_conditionalExpression_changesResultType_left() async {
await assertNoErrorsInCode(r'''
class A {}
diff --git a/pkg/analyzer/test/src/diagnostics/unnecessary_type_check_test.dart b/pkg/analyzer/test/src/diagnostics/unnecessary_type_check_test.dart
index 4c277a3..65e5479 100644
--- a/pkg/analyzer/test/src/diagnostics/unnecessary_type_check_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unnecessary_type_check_test.dart
@@ -17,7 +17,8 @@
}
@reflectiveTest
-class UnnecessaryTypeCheckFalseTest extends PubPackageResolutionTest {
+class UnnecessaryTypeCheckFalseTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_null_not_Null() async {
await assertErrorsInCode(r'''
var b = null is! Null;
@@ -71,7 +72,8 @@
}
@reflectiveTest
-class UnnecessaryTypeCheckTrueTest extends PubPackageResolutionTest {
+class UnnecessaryTypeCheckTrueTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_null_is_Null() async {
await assertErrorsInCode(r'''
var b = null is Null;
diff --git a/pkg/analyzer/test/src/diagnostics/unused_element_test.dart b/pkg/analyzer/test/src/diagnostics/unused_element_test.dart
index 08e380a..de000a1 100644
--- a/pkg/analyzer/test/src/diagnostics/unused_element_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unused_element_test.dart
@@ -16,7 +16,8 @@
}
@reflectiveTest
-class UnusedElementTest extends PubPackageResolutionTest {
+class UnusedElementTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
@override
bool get enableUnusedElement => true;
diff --git a/pkg/analyzer/test/src/diagnostics/unused_import_test.dart b/pkg/analyzer/test/src/diagnostics/unused_import_test.dart
index db7bfb5..b9ac11a 100644
--- a/pkg/analyzer/test/src/diagnostics/unused_import_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unused_import_test.dart
@@ -172,7 +172,7 @@
''');
await assertNoErrorsInCode(r'''
import 'lib1.dart';
-Three three;
+Three? three;
''');
}
@@ -191,7 +191,7 @@
''');
await assertNoErrorsInCode(r'''
import 'lib1.dart';
-Two two;
+Two? two;
''');
}
@@ -365,7 +365,7 @@
await assertErrorsInCode(r'''
import 'lib1.dart';
import 'lib1.dart' hide A;
-A a;
+A? a;
''', [
error(HintCode.UNUSED_IMPORT, 27, 11),
]);
diff --git a/pkg/analyzer/test/src/diagnostics/use_of_void_result_test.dart b/pkg/analyzer/test/src/diagnostics/use_of_void_result_test.dart
index bb87ff3..e25c163 100644
--- a/pkg/analyzer/test/src/diagnostics/use_of_void_result_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/use_of_void_result_test.dart
@@ -16,7 +16,8 @@
}
@reflectiveTest
-class UseOfVoidResultTest extends PubPackageResolutionTest {
+class UseOfVoidResultTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_andVoidLhsError() async {
await assertErrorsInCode('''
void main() {
diff --git a/pkg/analyzer/test/src/diagnostics/variable_type_mismatch_test.dart b/pkg/analyzer/test/src/diagnostics/variable_type_mismatch_test.dart
index 155020e..0944903 100644
--- a/pkg/analyzer/test/src/diagnostics/variable_type_mismatch_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/variable_type_mismatch_test.dart
@@ -10,6 +10,7 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(VariableTypeMismatchTest);
+ defineReflectiveTests(VariableTypeMismatchWithoutNullSafetyTest);
});
}
@@ -17,7 +18,7 @@
class VariableTypeMismatchTest extends PubPackageResolutionTest {
test_assignNullToInt() async {
await assertNoErrorsInCode('''
-const int x = null;
+const int? x = null;
''');
}
@@ -45,7 +46,11 @@
error(CompileTimeErrorCode.UNDEFINED_CLASS, 6, 10),
]);
}
+}
+@reflectiveTest
+class VariableTypeMismatchWithoutNullSafetyTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_int_to_double_variable_reference_is_not_promoted() async {
// Note: in the following code, the declaration of `y` should produce an
// error because we should only promote literal ints to doubles; we
diff --git a/pkg/analyzer/test/src/diagnostics/wrong_number_of_type_arguments_test.dart b/pkg/analyzer/test/src/diagnostics/wrong_number_of_type_arguments_test.dart
index 3eb42b9..29e3eee 100644
--- a/pkg/analyzer/test/src/diagnostics/wrong_number_of_type_arguments_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/wrong_number_of_type_arguments_test.dart
@@ -18,18 +18,18 @@
test_class_tooFew() async {
await assertErrorsInCode(r'''
class A<E, F> {}
-A<A> a;
+A<A>? a;
''', [
- error(CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS, 17, 4),
+ error(CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS, 17, 5),
]);
}
test_class_tooMany() async {
await assertErrorsInCode(r'''
class A<E> {}
-A<A, A> a;
+A<A, A>? a;
''', [
- error(CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS, 14, 7),
+ error(CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS, 14, 8),
]);
}
@@ -132,36 +132,36 @@
test_type_tooFew() async {
await assertErrorsInCode(r'''
class A<K, V> {
- K element;
+ late K element;
}
f(A<int> a) {
a.element.anyGetterExistsInDynamic;
}
''', [
- error(CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS, 33, 6),
+ error(CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS, 38, 6),
]);
}
test_type_tooMany() async {
await assertErrorsInCode(r'''
class A<E> {
- E element;
+ late E element;
}
f(A<int, int> a) {
a.element.anyGetterExistsInDynamic;
}
''', [
- error(CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS, 30, 11),
+ error(CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS, 35, 11),
]);
}
test_typeParameter() async {
await assertErrorsInCode(r'''
class C<T> {
- T<int> f;
+ late T<int> f;
}
''', [
- error(CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS, 15, 6),
+ error(CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS, 20, 6),
]);
}
diff --git a/pkg/analyzer/test/src/diagnostics/yield_of_invalid_type_test.dart b/pkg/analyzer/test/src/diagnostics/yield_of_invalid_type_test.dart
index 2062598..a107230 100644
--- a/pkg/analyzer/test/src/diagnostics/yield_of_invalid_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/yield_of_invalid_type_test.dart
@@ -15,7 +15,8 @@
}
@reflectiveTest
-class YieldOfInvalidTypeTest extends PubPackageResolutionTest {
+class YieldOfInvalidTypeTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
test_none_asyncStar_dynamic_to_streamInt() async {
await assertErrorsInCode(
'''
diff --git a/pkg/analyzer/test/src/lint/linter/linter_context_impl_test.dart b/pkg/analyzer/test/src/lint/linter/linter_context_impl_test.dart
index d70792b..cf43a2a 100644
--- a/pkg/analyzer/test/src/lint/linter/linter_context_impl_test.dart
+++ b/pkg/analyzer/test/src/lint/linter/linter_context_impl_test.dart
@@ -23,7 +23,10 @@
}
@reflectiveTest
-abstract class AbstractLinterContextTest extends PubPackageResolutionTest {
+abstract class AbstractLinterContextTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
+ // TODO(https://github.com/dart-lang/sdk/issues/44666): Use null safety in
+ // test cases.
late final LinterContextImpl context;
Future<void> resolve(String content) async {
diff --git a/pkg/analyzer/test/src/task/strong/checker_test.dart b/pkg/analyzer/test/src/task/strong/checker_test.dart
index 777a8a1..5fa624c 100644
--- a/pkg/analyzer/test/src/task/strong/checker_test.dart
+++ b/pkg/analyzer/test/src/task/strong/checker_test.dart
@@ -15,7 +15,9 @@
}
@reflectiveTest
-class CheckerTest extends PubPackageResolutionTest {
+class CheckerTest extends PubPackageResolutionTest with WithoutNullSafetyMixin {
+ // TODO(https://github.com/dart-lang/sdk/issues/44666): Use null safety in
+ // test cases.
test_awaitForInCastsStreamElementToVariable() async {
await assertErrorsInCode('''
abstract class MyStream<T> extends Stream<T> {
diff --git a/pkg/analyzer/test/src/task/strong/dart2_inference_test.dart b/pkg/analyzer/test/src/task/strong/dart2_inference_test.dart
index 378090b..d2ec94b 100644
--- a/pkg/analyzer/test/src/task/strong/dart2_inference_test.dart
+++ b/pkg/analyzer/test/src/task/strong/dart2_inference_test.dart
@@ -22,7 +22,10 @@
///
/// https://github.com/dart-lang/sdk/issues/31638
@reflectiveTest
-class Dart2InferenceTest extends PubPackageResolutionTest {
+class Dart2InferenceTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
+ // TODO(https://github.com/dart-lang/sdk/issues/44666): Use null safety in
+ // test cases.
test_bool_assert() async {
var code = r'''
T f<T>(int _) => null;
diff --git a/pkg/analyzer/test/src/task/strong/inferred_type_test.dart b/pkg/analyzer/test/src/task/strong/inferred_type_test.dart
index f10a523..cc1d282 100644
--- a/pkg/analyzer/test/src/task/strong/inferred_type_test.dart
+++ b/pkg/analyzer/test/src/task/strong/inferred_type_test.dart
@@ -17,7 +17,10 @@
}
@reflectiveTest
-class InferredTypeTest extends PubPackageResolutionTest {
+class InferredTypeTest extends PubPackageResolutionTest
+ with WithoutNullSafetyMixin {
+ // TODO(https://github.com/dart-lang/sdk/issues/44666): Use null safety in
+ // test cases.
CompilationUnitElement get _resultUnitElement {
return result.unit!.declaredElement!;
}
diff --git a/pkg/analyzer/tool/experiments/experiments_test.dart b/pkg/analyzer/tool/experiments/experiments_test.dart
index 1b0e8ec..575c084 100644
--- a/pkg/analyzer/tool/experiments/experiments_test.dart
+++ b/pkg/analyzer/tool/experiments/experiments_test.dart
@@ -1,4 +1,3 @@
-// @dart = 2.9
// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
diff --git a/pkg/compiler/lib/src/inferrer/abstract_value_domain.dart b/pkg/compiler/lib/src/inferrer/abstract_value_domain.dart
index a034e30..024f6a2 100644
--- a/pkg/compiler/lib/src/inferrer/abstract_value_domain.dart
+++ b/pkg/compiler/lib/src/inferrer/abstract_value_domain.dart
@@ -391,14 +391,6 @@
/// number or `null` at runtime.
AbstractBool isNumberOrNull(covariant AbstractValue value);
- /// Returns an [AbstractBool] that describes whether [value] is a non-integer
- /// number at runtime.
- AbstractBool isDouble(covariant AbstractValue value);
-
- /// Returns an [AbstractBool] that describes whether [value] is a non-integer
- /// number or `null` at runtime.
- AbstractBool isDoubleOrNull(covariant AbstractValue value);
-
/// Returns an [AbstractBool] that describes whether [value] is a JavaScript
/// bool at runtime.
AbstractBool isBoolean(covariant AbstractValue value);
diff --git a/pkg/compiler/lib/src/inferrer/inferrer_engine.dart b/pkg/compiler/lib/src/inferrer/inferrer_engine.dart
index 39c1a06..02ae17c 100644
--- a/pkg/compiler/lib/src/inferrer/inferrer_engine.dart
+++ b/pkg/compiler/lib/src/inferrer/inferrer_engine.dart
@@ -671,7 +671,7 @@
/// Returns `true` if [cls] has a 'call' method.
bool _hasCallType(ClassEntity cls) {
- return closedWorld.elementMap.types
+ return closedWorld.dartTypes
.getCallType(closedWorld.elementEnvironment.getThisType(cls)) !=
null;
}
diff --git a/pkg/compiler/lib/src/inferrer/powersets/powerset_bits.dart b/pkg/compiler/lib/src/inferrer/powersets/powerset_bits.dart
index 946412a..15738f2 100644
--- a/pkg/compiler/lib/src/inferrer/powersets/powerset_bits.dart
+++ b/pkg/compiler/lib/src/inferrer/powersets/powerset_bits.dart
@@ -244,10 +244,6 @@
return AbstractBool.Maybe;
}
- AbstractBool isDoubleOrNull(int value) => isDouble(excludeNull(value));
-
- AbstractBool isDouble(int value) => isOther(value);
-
AbstractBool isNumberOrNull(int value) => isNumber(excludeNull(value));
AbstractBool isNumber(int value) => isOther(value);
diff --git a/pkg/compiler/lib/src/inferrer/powersets/powersets.dart b/pkg/compiler/lib/src/inferrer/powersets/powersets.dart
index 22dc603..0931fee 100644
--- a/pkg/compiler/lib/src/inferrer/powersets/powersets.dart
+++ b/pkg/compiler/lib/src/inferrer/powersets/powersets.dart
@@ -436,17 +436,6 @@
_abstractValueDomain.isTruthy(value._abstractValue));
@override
- AbstractBool isDoubleOrNull(covariant PowersetValue value) =>
- AbstractBool.strengthen(
- _powersetBitsDomain.isDoubleOrNull(value._powersetBits),
- _abstractValueDomain.isDoubleOrNull(value._abstractValue));
-
- @override
- AbstractBool isDouble(covariant PowersetValue value) =>
- AbstractBool.strengthen(_powersetBitsDomain.isDouble(value._powersetBits),
- _abstractValueDomain.isDouble(value._abstractValue));
-
- @override
AbstractBool isNumberOrNull(covariant PowersetValue value) =>
AbstractBool.strengthen(
_powersetBitsDomain.isNumberOrNull(value._powersetBits),
diff --git a/pkg/compiler/lib/src/inferrer/powersets/wrapped.dart b/pkg/compiler/lib/src/inferrer/powersets/wrapped.dart
index 977bef0..46a60ad 100644
--- a/pkg/compiler/lib/src/inferrer/powersets/wrapped.dart
+++ b/pkg/compiler/lib/src/inferrer/powersets/wrapped.dart
@@ -319,14 +319,6 @@
_abstractValueDomain.isTruthy(value._abstractValue);
@override
- AbstractBool isDoubleOrNull(covariant WrappedAbstractValue value) =>
- _abstractValueDomain.isDoubleOrNull(value._abstractValue);
-
- @override
- AbstractBool isDouble(covariant WrappedAbstractValue value) =>
- _abstractValueDomain.isDouble(value._abstractValue);
-
- @override
AbstractBool isNumberOrNull(covariant WrappedAbstractValue value) =>
_abstractValueDomain.isNumberOrNull(value._abstractValue);
diff --git a/pkg/compiler/lib/src/inferrer/trivial.dart b/pkg/compiler/lib/src/inferrer/trivial.dart
index 8ddb82b..8e176be 100644
--- a/pkg/compiler/lib/src/inferrer/trivial.dart
+++ b/pkg/compiler/lib/src/inferrer/trivial.dart
@@ -226,12 +226,6 @@
AbstractBool isTruthy(AbstractValue value) => AbstractBool.Maybe;
@override
- AbstractBool isDoubleOrNull(AbstractValue value) => AbstractBool.Maybe;
-
- @override
- AbstractBool isDouble(AbstractValue value) => AbstractBool.Maybe;
-
- @override
AbstractBool isNumberOrNull(AbstractValue value) => AbstractBool.Maybe;
@override
diff --git a/pkg/compiler/lib/src/inferrer/type_system.dart b/pkg/compiler/lib/src/inferrer/type_system.dart
index 32b3081..85f2de5 100644
--- a/pkg/compiler/lib/src/inferrer/type_system.dart
+++ b/pkg/compiler/lib/src/inferrer/type_system.dart
@@ -165,13 +165,6 @@
getConcreteTypeFor(_abstractValueDomain.positiveIntType);
}
- TypeInformation doubleTypeCache;
- TypeInformation get doubleType {
- if (doubleTypeCache != null) return doubleTypeCache;
- return doubleTypeCache =
- getConcreteTypeFor(_abstractValueDomain.doubleType);
- }
-
TypeInformation numTypeCache;
TypeInformation get numType {
if (numTypeCache != null) return numTypeCache;
diff --git a/pkg/compiler/lib/src/inferrer/typemasks/flat_type_mask.dart b/pkg/compiler/lib/src/inferrer/typemasks/flat_type_mask.dart
index deb7d88..649bc88 100644
--- a/pkg/compiler/lib/src/inferrer/typemasks/flat_type_mask.dart
+++ b/pkg/compiler/lib/src/inferrer/typemasks/flat_type_mask.dart
@@ -157,7 +157,7 @@
}
}
- bool isSingleImplementationOf(ClassEntity cls, JClosedWorld closedWorld) {
+ bool _isSingleImplementationOf(ClassEntity cls, JClosedWorld closedWorld) {
// Special case basic types so that, for example, JSString is the
// single implementation of String.
// The general optimization is to realize there is only one class that
@@ -179,10 +179,6 @@
cls == commonElements.jsUInt32Class ||
cls == commonElements.jsUInt31Class;
}
- if (containsOnlyDouble(closedWorld)) {
- return cls == closedWorld.commonElements.doubleClass ||
- cls == commonElements.jsDoubleClass;
- }
return false;
}
@@ -200,10 +196,10 @@
FlatTypeMask flatOther = other;
ClassEntity otherBase = flatOther.base;
// If other is exact, it only contains its base.
- // TODO(herhut): Get rid of isSingleImplementationOf.
+ // TODO(herhut): Get rid of _isSingleImplementationOf.
if (flatOther.isExact) {
return (isExact && base == otherBase) ||
- isSingleImplementationOf(otherBase, closedWorld);
+ _isSingleImplementationOf(otherBase, closedWorld);
}
// If other is subclass, this has to be subclass, as well. Unless
// flatOther.base covers all subtypes of this. Currently, we only
@@ -228,7 +224,7 @@
@override
bool containsOnlyInt(JClosedWorld closedWorld) {
CommonElements commonElements = closedWorld.commonElements;
- return base == closedWorld.commonElements.intClass ||
+ return base == commonElements.intClass ||
base == commonElements.jsIntClass ||
base == commonElements.jsPositiveIntClass ||
base == commonElements.jsUInt31Class ||
@@ -236,15 +232,10 @@
}
@override
- bool containsOnlyDouble(JClosedWorld closedWorld) {
- return base == closedWorld.commonElements.doubleClass ||
- base == closedWorld.commonElements.jsDoubleClass;
- }
-
- @override
bool containsOnlyNum(JClosedWorld closedWorld) {
return containsOnlyInt(closedWorld) ||
- containsOnlyDouble(closedWorld) ||
+ base == closedWorld.commonElements.doubleClass ||
+ base == closedWorld.commonElements.jsDoubleClass ||
base == closedWorld.commonElements.numClass ||
base == closedWorld.commonElements.jsNumberClass;
}
diff --git a/pkg/compiler/lib/src/inferrer/typemasks/forwarding_type_mask.dart b/pkg/compiler/lib/src/inferrer/typemasks/forwarding_type_mask.dart
index ca3910d..ec29cbe 100644
--- a/pkg/compiler/lib/src/inferrer/typemasks/forwarding_type_mask.dart
+++ b/pkg/compiler/lib/src/inferrer/typemasks/forwarding_type_mask.dart
@@ -53,11 +53,6 @@
}
@override
- bool containsOnlyDouble(JClosedWorld closedWorld) {
- return forwardTo.containsOnlyDouble(closedWorld);
- }
-
- @override
bool containsOnlyNum(JClosedWorld closedWorld) {
return forwardTo.containsOnlyNum(closedWorld);
}
diff --git a/pkg/compiler/lib/src/inferrer/typemasks/masks.dart b/pkg/compiler/lib/src/inferrer/typemasks/masks.dart
index b8840fb..50fa04f 100644
--- a/pkg/compiler/lib/src/inferrer/typemasks/masks.dart
+++ b/pkg/compiler/lib/src/inferrer/typemasks/masks.dart
@@ -628,17 +628,6 @@
}
@override
- AbstractBool isDouble(TypeMask value) {
- return AbstractBool.trueOrMaybe(
- value.containsOnlyDouble(_closedWorld) && !value.isNullable);
- }
-
- @override
- AbstractBool isDoubleOrNull(TypeMask value) {
- return AbstractBool.trueOrMaybe(value.containsOnlyDouble(_closedWorld));
- }
-
- @override
AbstractBool isBoolean(TypeMask value) {
return AbstractBool.trueOrMaybe(
value.containsOnlyBool(_closedWorld) && !value.isNullable);
diff --git a/pkg/compiler/lib/src/inferrer/typemasks/type_mask.dart b/pkg/compiler/lib/src/inferrer/typemasks/type_mask.dart
index f98ad55..7fd62a8 100644
--- a/pkg/compiler/lib/src/inferrer/typemasks/type_mask.dart
+++ b/pkg/compiler/lib/src/inferrer/typemasks/type_mask.dart
@@ -354,7 +354,6 @@
bool get isValue;
bool containsOnlyInt(JClosedWorld closedWorld);
- bool containsOnlyDouble(JClosedWorld closedWorld);
bool containsOnlyNum(JClosedWorld closedWorld);
bool containsOnlyBool(JClosedWorld closedWorld);
bool containsOnlyString(JClosedWorld closedWorld);
diff --git a/pkg/compiler/lib/src/inferrer/typemasks/union_type_mask.dart b/pkg/compiler/lib/src/inferrer/typemasks/union_type_mask.dart
index a4ffd6d..dddd0ed 100644
--- a/pkg/compiler/lib/src/inferrer/typemasks/union_type_mask.dart
+++ b/pkg/compiler/lib/src/inferrer/typemasks/union_type_mask.dart
@@ -359,11 +359,6 @@
}
@override
- bool containsOnlyDouble(JClosedWorld closedWorld) {
- return disjointMasks.every((mask) => mask.containsOnlyDouble(closedWorld));
- }
-
- @override
bool containsOnlyNum(JClosedWorld closedWorld) {
return disjointMasks.every((mask) {
return mask.containsOnlyNum(closedWorld);
diff --git a/pkg/compiler/lib/src/ir/element_map.dart b/pkg/compiler/lib/src/ir/element_map.dart
index 4a782ce..f2b9a66 100644
--- a/pkg/compiler/lib/src/ir/element_map.dart
+++ b/pkg/compiler/lib/src/ir/element_map.dart
@@ -61,7 +61,7 @@
Iterable<InterfaceType> getInterfaces(IndexedClass cls);
InterfaceType asInstanceOf(InterfaceType type, ClassEntity cls);
DartType substByContext(DartType type, InterfaceType context);
- DartType getCallType(InterfaceType type);
+ FunctionType getCallType(InterfaceType type);
int getHierarchyDepth(IndexedClass cls);
DartType getTypeVariableBound(IndexedTypeVariable typeVariable);
List<Variance> getTypeVariableVariances(IndexedClass cls);
diff --git a/pkg/compiler/lib/src/ir/types.dart b/pkg/compiler/lib/src/ir/types.dart
index 2d2d603..f725d34 100644
--- a/pkg/compiler/lib/src/ir/types.dart
+++ b/pkg/compiler/lib/src/ir/types.dart
@@ -50,10 +50,7 @@
}
@override
- FunctionType getCallType(InterfaceType type) {
- DartType callType = elementMap.getCallType(type);
- return callType is FunctionType ? callType : null;
- }
+ FunctionType getCallType(InterfaceType type) => elementMap.getCallType(type);
@override
void checkTypeVariableBounds<T>(
diff --git a/pkg/compiler/lib/src/js_backend/codegen_listener.dart b/pkg/compiler/lib/src/js_backend/codegen_listener.dart
index 46aa940..c85c14c 100644
--- a/pkg/compiler/lib/src/js_backend/codegen_listener.dart
+++ b/pkg/compiler/lib/src/js_backend/codegen_listener.dart
@@ -271,8 +271,7 @@
registerInstantiation(_commonElements.jsUInt32Class);
registerInstantiation(_commonElements.jsUInt31Class);
registerInstantiation(_commonElements.jsNumberClass);
- } else if (cls == _commonElements.doubleClass ||
- cls == _commonElements.jsDoubleClass) {
+ } else if (cls == _commonElements.jsDoubleClass) {
registerInstantiation(_commonElements.jsDoubleClass);
registerInstantiation(_commonElements.jsNumberClass);
} else if (cls == _commonElements.boolClass ||
@@ -281,7 +280,8 @@
} else if (cls == _commonElements.nullClass ||
cls == _commonElements.jsNullClass) {
registerInstantiation(_commonElements.jsNullClass);
- } else if (cls == _commonElements.numClass ||
+ } else if (cls == _commonElements.doubleClass ||
+ cls == _commonElements.numClass ||
cls == _commonElements.jsNumberClass) {
registerInstantiation(_commonElements.jsIntClass);
registerInstantiation(_commonElements.jsPositiveIntClass);
diff --git a/pkg/compiler/lib/src/js_backend/resolution_listener.dart b/pkg/compiler/lib/src/js_backend/resolution_listener.dart
index 9bd730b..a889fc8 100644
--- a/pkg/compiler/lib/src/js_backend/resolution_listener.dart
+++ b/pkg/compiler/lib/src/js_backend/resolution_listener.dart
@@ -373,8 +373,7 @@
_addInterceptors(_commonElements.jsUInt32Class, impactBuilder);
_addInterceptors(_commonElements.jsUInt31Class, impactBuilder);
_addInterceptors(_commonElements.jsNumberClass, impactBuilder);
- } else if (cls == _commonElements.doubleClass ||
- cls == _commonElements.jsDoubleClass) {
+ } else if (cls == _commonElements.jsDoubleClass) {
_addInterceptors(_commonElements.jsDoubleClass, impactBuilder);
_addInterceptors(_commonElements.jsNumberClass, impactBuilder);
} else if (cls == _commonElements.boolClass ||
@@ -383,7 +382,8 @@
} else if (cls == _commonElements.nullClass ||
cls == _commonElements.jsNullClass) {
_addInterceptors(_commonElements.jsNullClass, impactBuilder);
- } else if (cls == _commonElements.numClass ||
+ } else if (cls == _commonElements.doubleClass ||
+ cls == _commonElements.numClass ||
cls == _commonElements.jsNumberClass) {
_addInterceptors(_commonElements.jsIntClass, impactBuilder);
_addInterceptors(_commonElements.jsPositiveIntClass, impactBuilder);
diff --git a/pkg/compiler/lib/src/js_backend/runtime_types.dart b/pkg/compiler/lib/src/js_backend/runtime_types.dart
index c8084d5..c24e828 100644
--- a/pkg/compiler/lib/src/js_backend/runtime_types.dart
+++ b/pkg/compiler/lib/src/js_backend/runtime_types.dart
@@ -334,10 +334,6 @@
for (InterfaceType type in _types.getSupertypes(cls)) {
processSupertype(type);
}
- FunctionType callType = _types.getCallType(_types.getThisType(cls));
- if (callType != null) {
- processSupertype(_closedWorld.commonElements.functionType);
- }
return checks;
}
diff --git a/pkg/compiler/lib/src/js_backend/specialized_checks.dart b/pkg/compiler/lib/src/js_backend/specialized_checks.dart
index 5802406..dfaabfd 100644
--- a/pkg/compiler/lib/src/js_backend/specialized_checks.dart
+++ b/pkg/compiler/lib/src/js_backend/specialized_checks.dart
@@ -57,8 +57,7 @@
return IsTestSpecialization.bool;
}
- if (element == commonElements.jsDoubleClass ||
- element == commonElements.doubleClass ||
+ if (element == commonElements.doubleClass ||
element == commonElements.jsNumberClass ||
element == commonElements.numClass) {
return IsTestSpecialization.num;
@@ -166,8 +165,7 @@
return commonElements.specializedAsBool;
}
- if (element == commonElements.jsDoubleClass ||
- element == commonElements.doubleClass) {
+ if (element == commonElements.doubleClass) {
if (legacy) return commonElements.specializedAsDoubleLegacy;
if (nullable) return commonElements.specializedAsDoubleNullable;
return commonElements.specializedAsDouble;
diff --git a/pkg/compiler/lib/src/js_model/closure.dart b/pkg/compiler/lib/src/js_model/closure.dart
index cfdee0b..41f9170 100644
--- a/pkg/compiler/lib/src/js_model/closure.dart
+++ b/pkg/compiler/lib/src/js_model/closure.dart
@@ -998,7 +998,7 @@
bool get isEnumClass => false;
@override
- DartType get callType => null;
+ FunctionType get callType => null;
@override
List<InterfaceType> get interfaces => const <InterfaceType>[];
diff --git a/pkg/compiler/lib/src/js_model/element_map_impl.dart b/pkg/compiler/lib/src/js_model/element_map_impl.dart
index 1f4cd96..ba0057a 100644
--- a/pkg/compiler/lib/src/js_model/element_map_impl.dart
+++ b/pkg/compiler/lib/src/js_model/element_map_impl.dart
@@ -634,6 +634,20 @@
return data.supertype;
}
+ void _ensureCallType(ClassEntity cls, JClassData data) {
+ assert(checkFamily(cls));
+ if (data is JClassDataImpl && !data.isCallTypeComputed) {
+ MemberEntity callMember =
+ _elementEnvironment.lookupClassMember(cls, Identifiers.call);
+ if (callMember is FunctionEntity &&
+ callMember.isFunction &&
+ !callMember.isAbstract) {
+ data.callType = _elementEnvironment.getFunctionType(callMember);
+ }
+ data.isCallTypeComputed = true;
+ }
+ }
+
void _ensureThisAndRawType(ClassEntity cls, JClassData data) {
assert(checkFamily(cls));
if (data is JClassDataImpl && data.thisType == null) {
@@ -940,14 +954,14 @@
/// Returns the type of the `call` method on 'type'.
///
- /// If [type] doesn't have a `call` member `null` is returned. If [type] has
- /// an invalid `call` member (non-method or a synthesized method with both
- /// optional and named parameters) a [DynamicType] is returned.
+ /// If [type] doesn't have a `call` member or has a non-method `call` member,
+ /// `null` is returned.
@override
- DartType getCallType(InterfaceType type) {
+ FunctionType getCallType(InterfaceType type) {
IndexedClass cls = type.element;
assert(checkFamily(cls));
JClassData data = classes.getData(cls);
+ _ensureCallType(cls, data);
if (data.callType != null) {
return substByContext(data.callType, type);
}
diff --git a/pkg/compiler/lib/src/js_model/env.dart b/pkg/compiler/lib/src/js_model/env.dart
index 2e408ee..2dd5c12 100644
--- a/pkg/compiler/lib/src/js_model/env.dart
+++ b/pkg/compiler/lib/src/js_model/env.dart
@@ -446,7 +446,7 @@
InterfaceType get mixedInType;
List<InterfaceType> get interfaces;
OrderedTypeSet get orderedTypeSet;
- DartType get callType;
+ FunctionType get callType;
bool get isEnumClass;
bool get isMixinApplication;
@@ -464,7 +464,6 @@
final ClassDefinition definition;
@override
bool isMixinApplication;
- bool isCallTypeComputed = false;
@override
InterfaceType thisType;
@@ -508,7 +507,8 @@
bool get isEnumClass => cls != null && cls.isEnum;
@override
- DartType get callType => null;
+ FunctionType callType;
+ bool isCallTypeComputed = false;
@override
List<Variance> getVariances() =>
diff --git a/pkg/compiler/lib/src/kernel/element_map_impl.dart b/pkg/compiler/lib/src/kernel/element_map_impl.dart
index d7aa0c8..6f2ba5f 100644
--- a/pkg/compiler/lib/src/kernel/element_map_impl.dart
+++ b/pkg/compiler/lib/src/kernel/element_map_impl.dart
@@ -269,6 +269,20 @@
return data.supertype;
}
+ void _ensureCallType(ClassEntity cls, KClassData data) {
+ assert(checkFamily(cls));
+ if (data is KClassDataImpl && !data.isCallTypeComputed) {
+ MemberEntity callMember =
+ _elementEnvironment.lookupClassMember(cls, Identifiers.call);
+ if (callMember is FunctionEntity &&
+ callMember.isFunction &&
+ !callMember.isAbstract) {
+ data.callType = _elementEnvironment.getFunctionType(callMember);
+ }
+ data.isCallTypeComputed = true;
+ }
+ }
+
void _ensureThisAndRawType(ClassEntity cls, KClassData data) {
assert(checkFamily(cls));
if (data is KClassDataImpl && data.thisType == null) {
@@ -575,14 +589,14 @@
/// Returns the type of the `call` method on 'type'.
///
- /// If [type] doesn't have a `call` member `null` is returned. If [type] has
- /// an invalid `call` member (non-method or a synthesized method with both
- /// optional and named parameters) a [DynamicType] is returned.
+ /// If [type] doesn't have a `call` member or has a non-method `call` member,
+ /// `null` is returned.
@override
- DartType getCallType(InterfaceType type) {
+ FunctionType getCallType(InterfaceType type) {
IndexedClass cls = type.element;
assert(checkFamily(cls));
KClassData data = classes.getData(cls);
+ _ensureCallType(cls, data);
if (data.callType != null) {
return substByContext(data.callType, type);
}
diff --git a/pkg/compiler/lib/src/kernel/env.dart b/pkg/compiler/lib/src/kernel/env.dart
index 4393f84..7474592 100644
--- a/pkg/compiler/lib/src/kernel/env.dart
+++ b/pkg/compiler/lib/src/kernel/env.dart
@@ -615,7 +615,6 @@
final ir.Class node;
@override
bool isMixinApplication;
- bool isCallTypeComputed = false;
@override
InterfaceType thisType;
@@ -643,7 +642,8 @@
bool get isEnumClass => node.isEnum;
@override
- DartType get callType => null;
+ FunctionType callType;
+ bool isCallTypeComputed = false;
@override
Iterable<ConstantValue> getMetadata(
diff --git a/pkg/compiler/lib/src/kernel/kernel_world.dart b/pkg/compiler/lib/src/kernel/kernel_world.dart
index 2f25c0c..f1d295a 100644
--- a/pkg/compiler/lib/src/kernel/kernel_world.dart
+++ b/pkg/compiler/lib/src/kernel/kernel_world.dart
@@ -269,6 +269,15 @@
if (type == null) return;
if (dartTypes.canAssignGenericFunctionTo(type)) {
_genericCallablePropertiesCache[member] = type;
+ } else {
+ type = type.withoutNullability;
+ if (type is InterfaceType) {
+ FunctionType callType = dartTypes.getCallType(type);
+ if (callType != null &&
+ dartTypes.canAssignGenericFunctionTo(callType)) {
+ _genericCallablePropertiesCache[member] = callType;
+ }
+ }
}
}
});
diff --git a/pkg/compiler/lib/src/ssa/interceptor_simplifier.dart b/pkg/compiler/lib/src/ssa/interceptor_simplifier.dart
index f03685c..d54784a 100644
--- a/pkg/compiler/lib/src/ssa/interceptor_simplifier.dart
+++ b/pkg/compiler/lib/src/ssa/interceptor_simplifier.dart
@@ -133,8 +133,6 @@
}
} else if (_abstractValueDomain.isIntegerOrNull(type).isDefinitelyTrue) {
return _commonElements.jsIntClass;
- } else if (_abstractValueDomain.isDoubleOrNull(type).isDefinitelyTrue) {
- return _commonElements.jsDoubleClass;
} else if (_abstractValueDomain.isBooleanOrNull(type).isDefinitelyTrue) {
return _commonElements.jsBoolClass;
} else if (_abstractValueDomain.isStringOrNull(type).isDefinitelyTrue) {
diff --git a/pkg/compiler/lib/src/ssa/invoke_dynamic_specializers.dart b/pkg/compiler/lib/src/ssa/invoke_dynamic_specializers.dart
index 7311e2e..61d417fb 100644
--- a/pkg/compiler/lib/src/ssa/invoke_dynamic_specializers.dart
+++ b/pkg/compiler/lib/src/ssa/invoke_dynamic_specializers.dart
@@ -404,11 +404,6 @@
.isDefinitelyTrue) {
return closedWorld.abstractValueDomain.intType;
}
- if (operand
- .isDoubleOrNull(closedWorld.abstractValueDomain)
- .isDefinitelyTrue) {
- return closedWorld.abstractValueDomain.doubleType;
- }
return closedWorld.abstractValueDomain.numType;
}
return super.computeTypeFromInputTypes(instruction, results, closedWorld);
@@ -492,14 +487,6 @@
return closedWorld.abstractValueDomain.intType;
}
if (left.isNumberOrNull(closedWorld.abstractValueDomain).isDefinitelyTrue) {
- if (left
- .isDoubleOrNull(closedWorld.abstractValueDomain)
- .isDefinitelyTrue ||
- right
- .isDoubleOrNull(closedWorld.abstractValueDomain)
- .isDefinitelyTrue) {
- return closedWorld.abstractValueDomain.doubleType;
- }
return closedWorld.abstractValueDomain.numType;
}
return super.computeTypeFromInputTypes(instruction, results, closedWorld);
@@ -621,7 +608,7 @@
GlobalTypeInferenceResults results, JClosedWorld closedWorld) {
HInstruction left = instruction.inputs[1];
if (left.isNumberOrNull(closedWorld.abstractValueDomain).isDefinitelyTrue) {
- return closedWorld.abstractValueDomain.doubleType;
+ return closedWorld.abstractValueDomain.numType;
}
return super.computeTypeFromInputTypes(instruction, results, closedWorld);
}
@@ -630,7 +617,7 @@
HInstruction newBuiltinVariant(HInvokeDynamic instruction,
GlobalTypeInferenceResults results, JClosedWorld closedWorld) {
return new HDivide(instruction.inputs[1], instruction.inputs[2],
- closedWorld.abstractValueDomain.doubleType);
+ closedWorld.abstractValueDomain.numType);
}
@override
diff --git a/pkg/compiler/lib/src/ssa/nodes.dart b/pkg/compiler/lib/src/ssa/nodes.dart
index cf71f75..fee62dd 100644
--- a/pkg/compiler/lib/src/ssa/nodes.dart
+++ b/pkg/compiler/lib/src/ssa/nodes.dart
@@ -1207,12 +1207,6 @@
AbstractBool isNumberOrNull(AbstractValueDomain domain) =>
domain.isNumberOrNull(instructionType);
- AbstractBool isDouble(AbstractValueDomain domain) =>
- domain.isDouble(instructionType);
-
- AbstractBool isDoubleOrNull(AbstractValueDomain domain) =>
- domain.isDoubleOrNull(instructionType);
-
AbstractBool isBoolean(AbstractValueDomain domain) =>
domain.isBoolean(instructionType);
@@ -4223,19 +4217,6 @@
return AbstractBool.False;
}
- if (expression.isDouble(abstractValueDomain).isDefinitelyTrue) {
- if (dartTypes.isSubtype(commonElements.doubleType, interface)) {
- return AbstractBool.True;
- }
- if (interface == commonElements.intType) {
- // We let the JS semantics decide for that check. Currently the code we
- // emit will return true for a double that can be represented as a 31-bit
- // integer and for -0.0.
- return AbstractBool.Maybe;
- }
- return AbstractBool.False;
- }
-
if (expression.isNumber(abstractValueDomain).isDefinitelyTrue) {
if (dartTypes.isSubtype(commonElements.numType, interface)) {
return AbstractBool.True;
diff --git a/pkg/compiler/lib/src/ssa/ssa_tracer.dart b/pkg/compiler/lib/src/ssa/ssa_tracer.dart
index 3eb079b..f0fa679 100644
--- a/pkg/compiler/lib/src/ssa/ssa_tracer.dart
+++ b/pkg/compiler/lib/src/ssa/ssa_tracer.dart
@@ -154,8 +154,6 @@
prefix = 'b';
} else if (instruction.isInteger(_abstractValueDomain).isDefinitelyTrue) {
prefix = 'i';
- } else if (instruction.isDouble(_abstractValueDomain).isDefinitelyTrue) {
- prefix = 'd';
} else if (instruction.isNumber(_abstractValueDomain).isDefinitelyTrue) {
prefix = 'n';
} else if (_abstractValueDomain
diff --git a/pkg/compiler/lib/src/ssa/types_propagation.dart b/pkg/compiler/lib/src/ssa/types_propagation.dart
index a5a1581..92a35e1 100644
--- a/pkg/compiler/lib/src/ssa/types_propagation.dart
+++ b/pkg/compiler/lib/src/ssa/types_propagation.dart
@@ -138,9 +138,6 @@
right.isInteger(abstractValueDomain).isDefinitelyTrue) {
return abstractValueDomain.intType;
}
- if (left.isDouble(abstractValueDomain).isDefinitelyTrue) {
- return abstractValueDomain.doubleType;
- }
return abstractValueDomain.numType;
}
diff --git a/pkg/compiler/lib/src/universe/codegen_world_builder.dart b/pkg/compiler/lib/src/universe/codegen_world_builder.dart
index 21cc9f2..8b34788 100644
--- a/pkg/compiler/lib/src/universe/codegen_world_builder.dart
+++ b/pkg/compiler/lib/src/universe/codegen_world_builder.dart
@@ -805,6 +805,15 @@
if (type == null) return;
if (_closedWorld.dartTypes.canAssignGenericFunctionTo(type)) {
_genericCallablePropertiesCache[member] = type;
+ } else {
+ type = type.withoutNullability;
+ if (type is InterfaceType) {
+ FunctionType callType = _closedWorld.dartTypes.getCallType(type);
+ if (callType != null &&
+ _closedWorld.dartTypes.canAssignGenericFunctionTo(callType)) {
+ _genericCallablePropertiesCache[member] = callType;
+ }
+ }
}
}
});
diff --git a/pkg/compiler/lib/src/universe/use.dart b/pkg/compiler/lib/src/universe/use.dart
index e103bcd..3480869 100644
--- a/pkg/compiler/lib/src/universe/use.dart
+++ b/pkg/compiler/lib/src/universe/use.dart
@@ -44,14 +44,13 @@
final Object receiverConstraint;
final List<DartType> _typeArguments;
- DynamicUse(this.selector, this.receiverConstraint, this._typeArguments) {
- assert(
- selector.callStructure.typeArgumentCount ==
- (_typeArguments?.length ?? 0),
- "Type argument count mismatch. Selector has "
- "${selector.callStructure.typeArgumentCount} but "
- "${_typeArguments?.length ?? 0} were passed.");
- }
+ DynamicUse(this.selector, this.receiverConstraint, this._typeArguments)
+ : assert(
+ selector.callStructure.typeArgumentCount ==
+ (_typeArguments?.length ?? 0),
+ "Type argument count mismatch. Selector has "
+ "${selector.callStructure.typeArgumentCount} but "
+ "${_typeArguments?.length ?? 0} were passed.");
DynamicUse withReceiverConstraint(Object otherReceiverConstraint) {
if (otherReceiverConstraint == receiverConstraint) {
diff --git a/pkg/compiler/test/codegen/data/tdiv1.dart b/pkg/compiler/test/codegen/data/tdiv1.dart
index fb8d4d0b..89beb19 100644
--- a/pkg/compiler/test/codegen/data/tdiv1.dart
+++ b/pkg/compiler/test/codegen/data/tdiv1.dart
@@ -85,7 +85,7 @@
@pragma('dart2js:noInline')
/*member: foo_regress_37502:function(param1, param2) {
var a = param1 ? 1.2 : 12.3;
- return C.JSInt_methods.gcd$1(C.JSDouble_methods.$tdiv(a, param2 ? 3.14 : 2.81), 2);
+ return C.JSInt_methods.gcd$1(C.JSNumber_methods.$tdiv(a, param2 ? 3.14 : 2.81), 2);
}*/
foo_regress_37502(param1, param2) {
var a = param1 ? 1.2 : 12.3;
diff --git a/pkg/compiler/test/codegen/data_2/tdiv1.dart b/pkg/compiler/test/codegen/data_2/tdiv1.dart
index d180327..43eb113 100644
--- a/pkg/compiler/test/codegen/data_2/tdiv1.dart
+++ b/pkg/compiler/test/codegen/data_2/tdiv1.dart
@@ -101,11 +101,11 @@
@pragma('dart2js:noInline')
/*spec.member: foo_regress_37502:function(param1, param2) {
var a = H.boolConversionCheck(param1) ? 1.2 : 12.3;
- return C.JSInt_methods.gcd$1(C.JSDouble_methods.$tdiv(a, H.boolConversionCheck(param2) ? 3.14 : 2.81), 2);
+ return C.JSInt_methods.gcd$1(C.JSNumber_methods.$tdiv(a, H.boolConversionCheck(param2) ? 3.14 : 2.81), 2);
}*/
/*prod.member: foo_regress_37502:function(param1, param2) {
var a = param1 ? 1.2 : 12.3;
- return C.JSInt_methods.gcd$1(C.JSDouble_methods.$tdiv(a, param2 ? 3.14 : 2.81), 2);
+ return C.JSInt_methods.gcd$1(C.JSNumber_methods.$tdiv(a, param2 ? 3.14 : 2.81), 2);
}*/
foo_regress_37502(param1, param2) {
var a = param1 ? 1.2 : 12.3;
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index afe7438..6556e70 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -1498,12 +1498,12 @@
MetadataTypeArguments:
index: 91
- template: "An annotation (metadata) can't use type arguments."
+ template: "An annotation can't use type arguments."
analyzerCode: ParserErrorCode.ANNOTATION_WITH_TYPE_ARGUMENTS
MetadataTypeArgumentsUninstantiated:
index: 114
- template: "An annotation (metadata) with type arguments must be followed by an argument list."
+ template: "An annotation with type arguments must be followed by an argument list."
analyzerCode: ParserErrorCode.ANNOTATION_WITH_TYPE_ARGUMENTS_UNINSTANTIATED
script:
- "@deprecated<int> class C {}"
@@ -3189,7 +3189,7 @@
template: "Access error: '#name'."
ExpressionNotMetadata:
- template: "This can't be used as metadata; metadata should be a reference to a compile-time constant variable, or a call to a constant constructor."
+ template: "This can't be used as an annotation; an annotation should be a reference to a compile-time constant variable, or a call to a constant constructor."
ExpectedAnInitializer:
index: 36
diff --git a/pkg/front_end/testcases/general/type_literal_as_metadata.dart.outline.expect b/pkg/front_end/testcases/general/type_literal_as_metadata.dart.outline.expect
index 2add531..a2be08b 100644
--- a/pkg/front_end/testcases/general/type_literal_as_metadata.dart.outline.expect
+++ b/pkg/front_end/testcases/general/type_literal_as_metadata.dart.outline.expect
@@ -2,7 +2,7 @@
//
// Problems in library:
//
-// pkg/front_end/testcases/general/type_literal_as_metadata.dart:9:2: Error: This can't be used as metadata; metadata should be a reference to a compile-time constant variable, or a call to a constant constructor.
+// pkg/front_end/testcases/general/type_literal_as_metadata.dart:9:2: Error: This can't be used as an annotation; an annotation should be a reference to a compile-time constant variable, or a call to a constant constructor.
// @A
// ^
//
@@ -24,7 +24,7 @@
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
-@let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/general/type_literal_as_metadata.dart:9:2: Error: This can't be used as metadata; metadata should be a reference to a compile-time constant variable, or a call to a constant constructor.
+@let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/general/type_literal_as_metadata.dart:9:2: Error: This can't be used as an annotation; an annotation should be a reference to a compile-time constant variable, or a call to a constant constructor.
@A
^" in self::A*
class B extends core::Object {
diff --git a/pkg/front_end/testcases/general/type_literal_as_metadata.dart.strong.expect b/pkg/front_end/testcases/general/type_literal_as_metadata.dart.strong.expect
index d3a48a1..6039ee4 100644
--- a/pkg/front_end/testcases/general/type_literal_as_metadata.dart.strong.expect
+++ b/pkg/front_end/testcases/general/type_literal_as_metadata.dart.strong.expect
@@ -2,7 +2,7 @@
//
// Problems in library:
//
-// pkg/front_end/testcases/general/type_literal_as_metadata.dart:9:2: Error: This can't be used as metadata; metadata should be a reference to a compile-time constant variable, or a call to a constant constructor.
+// pkg/front_end/testcases/general/type_literal_as_metadata.dart:9:2: Error: This can't be used as an annotation; an annotation should be a reference to a compile-time constant variable, or a call to a constant constructor.
// @A
// ^
//
@@ -24,7 +24,7 @@
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
-@invalid-expression "pkg/front_end/testcases/general/type_literal_as_metadata.dart:9:2: Error: This can't be used as metadata; metadata should be a reference to a compile-time constant variable, or a call to a constant constructor.
+@invalid-expression "pkg/front_end/testcases/general/type_literal_as_metadata.dart:9:2: Error: This can't be used as an annotation; an annotation should be a reference to a compile-time constant variable, or a call to a constant constructor.
@A
^"
class B extends core::Object {
diff --git a/pkg/front_end/testcases/general/type_literal_as_metadata.dart.strong.transformed.expect b/pkg/front_end/testcases/general/type_literal_as_metadata.dart.strong.transformed.expect
index d3a48a1..6039ee4 100644
--- a/pkg/front_end/testcases/general/type_literal_as_metadata.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/type_literal_as_metadata.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
//
// Problems in library:
//
-// pkg/front_end/testcases/general/type_literal_as_metadata.dart:9:2: Error: This can't be used as metadata; metadata should be a reference to a compile-time constant variable, or a call to a constant constructor.
+// pkg/front_end/testcases/general/type_literal_as_metadata.dart:9:2: Error: This can't be used as an annotation; an annotation should be a reference to a compile-time constant variable, or a call to a constant constructor.
// @A
// ^
//
@@ -24,7 +24,7 @@
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
-@invalid-expression "pkg/front_end/testcases/general/type_literal_as_metadata.dart:9:2: Error: This can't be used as metadata; metadata should be a reference to a compile-time constant variable, or a call to a constant constructor.
+@invalid-expression "pkg/front_end/testcases/general/type_literal_as_metadata.dart:9:2: Error: This can't be used as an annotation; an annotation should be a reference to a compile-time constant variable, or a call to a constant constructor.
@A
^"
class B extends core::Object {
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/type_literal_as_metadata.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/type_literal_as_metadata.dart.weak.expect
index fa62aba..e1e789f 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/type_literal_as_metadata.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/type_literal_as_metadata.dart.weak.expect
@@ -2,7 +2,7 @@
//
// Problems in library:
//
-// pkg/front_end/testcases/general_nnbd_opt_out/type_literal_as_metadata.dart:11:2: Error: This can't be used as metadata; metadata should be a reference to a compile-time constant variable, or a call to a constant constructor.
+// pkg/front_end/testcases/general_nnbd_opt_out/type_literal_as_metadata.dart:11:2: Error: This can't be used as an annotation; an annotation should be a reference to a compile-time constant variable, or a call to a constant constructor.
// @A
// ^
//
@@ -24,7 +24,7 @@
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
-@invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/type_literal_as_metadata.dart:11:2: Error: This can't be used as metadata; metadata should be a reference to a compile-time constant variable, or a call to a constant constructor.
+@invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/type_literal_as_metadata.dart:11:2: Error: This can't be used as an annotation; an annotation should be a reference to a compile-time constant variable, or a call to a constant constructor.
@A
^"
class B extends core::Object {
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/type_literal_as_metadata.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/type_literal_as_metadata.dart.weak.transformed.expect
index fa62aba..e1e789f 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/type_literal_as_metadata.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/type_literal_as_metadata.dart.weak.transformed.expect
@@ -2,7 +2,7 @@
//
// Problems in library:
//
-// pkg/front_end/testcases/general_nnbd_opt_out/type_literal_as_metadata.dart:11:2: Error: This can't be used as metadata; metadata should be a reference to a compile-time constant variable, or a call to a constant constructor.
+// pkg/front_end/testcases/general_nnbd_opt_out/type_literal_as_metadata.dart:11:2: Error: This can't be used as an annotation; an annotation should be a reference to a compile-time constant variable, or a call to a constant constructor.
// @A
// ^
//
@@ -24,7 +24,7 @@
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
-@invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/type_literal_as_metadata.dart:11:2: Error: This can't be used as metadata; metadata should be a reference to a compile-time constant variable, or a call to a constant constructor.
+@invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/type_literal_as_metadata.dart:11:2: Error: This can't be used as an annotation; an annotation should be a reference to a compile-time constant variable, or a call to a constant constructor.
@A
^"
class B extends core::Object {
diff --git a/pkg/test_runner/tool/update_static_error_tests.dart b/pkg/test_runner/tool/update_static_error_tests.dart
index add8fe5..20ed7f5 100644
--- a/pkg/test_runner/tool/update_static_error_tests.dart
+++ b/pkg/test_runner/tool/update_static_error_tests.dart
@@ -13,6 +13,7 @@
import 'package:path/path.dart' as p;
import 'package:test_runner/src/command_output.dart';
+import 'package:test_runner/src/feature.dart' show Feature;
import 'package:test_runner/src/path.dart';
import 'package:test_runner/src/static_error.dart';
import 'package:test_runner/src/test_file.dart';
@@ -61,8 +62,6 @@
allowed: sources);
parser.addSeparator("Other flags:");
- parser.addFlag("null-safety",
- help: "Enable the 'non-nullable' experiment.", negatable: false);
var results = parser.parse(args);
@@ -76,7 +75,6 @@
}
var dryRun = results["dry-run"] as bool;
- var nullSafety = results["null-safety"] as bool;
var removeSources = <ErrorSource>{};
var insertSources = <ErrorSource>{};
@@ -134,10 +132,7 @@
if (entry is pkg_file.File) {
await _processFile(entry,
- dryRun: dryRun,
- remove: removeSources,
- insert: insertSources,
- nullSafety: nullSafety);
+ dryRun: dryRun, remove: removeSources, insert: insertSources);
}
}
}
@@ -151,16 +146,12 @@
}
Future<void> _processFile(File file,
- {bool dryRun,
- Set<ErrorSource> remove,
- Set<ErrorSource> insert,
- bool nullSafety}) async {
+ {bool dryRun, Set<ErrorSource> remove, Set<ErrorSource> insert}) async {
stdout.write("${file.path}...");
var source = file.readAsStringSync();
var testFile = TestFile.parse(Path("."), file.absolute.path, source);
var experiments = [
- if (nullSafety) "non-nullable",
if (testFile.experiments.isNotEmpty) ...testFile.experiments
];
@@ -184,10 +175,15 @@
// tell which web errors are web-specific.
List<StaticError> cfeErrors;
if (insert.contains(ErrorSource.cfe) || insert.contains(ErrorSource.web)) {
+ var cfeOptions = [
+ if (testFile.requirements.contains(Feature.nnbdWeak)) "--nnbd-weak",
+ if (testFile.requirements.contains(Feature.nnbdStrong)) "--nnbd-strong",
+ ...options
+ ];
// Clear the previous line.
stdout.write("\r${file.path} ");
stdout.write("\r${file.path} (Running CFE...)");
- cfeErrors = await runCfe(file.absolute.path, options);
+ cfeErrors = await runCfe(file.absolute.path, cfeOptions);
if (cfeErrors == null) {
print("Error: failed to update ${file.path}");
} else if (insert.contains(ErrorSource.cfe)) {
diff --git a/runtime/bin/security_context_macos.cc b/runtime/bin/security_context_macos.cc
index c56487d..1cba22d 100644
--- a/runtime/bin/security_context_macos.cc
+++ b/runtime/bin/security_context_macos.cc
@@ -79,6 +79,8 @@
typedef ScopedCFType<SecCertificateRef> ScopedSecCertificateRef;
typedef ScopedCFType<SecTrustRef> ScopedSecTrustRef;
+const int kNumTrustEvaluateRequestParams = 5;
+
static SecCertificateRef CreateSecCertificateFromX509(X509* cert) {
if (cert == NULL) {
return NULL;
@@ -206,11 +208,21 @@
return ssl_verify_invalid;
}
- // Handler should release trust and root_cert.
+ // TrustEvaluateHandler should release all handles.
Dart_CObject dart_cobject_trust;
dart_cobject_trust.type = Dart_CObject_kInt64;
dart_cobject_trust.value.as_int64 =
- reinterpret_cast<intptr_t>(CFRetain(trust.get()));
+ reinterpret_cast<intptr_t>(trust.release());
+
+ Dart_CObject dart_cobject_cert_chain;
+ dart_cobject_cert_chain.type = Dart_CObject_kInt64;
+ dart_cobject_cert_chain.value.as_int64 =
+ reinterpret_cast<intptr_t>(cert_chain.release());
+
+ Dart_CObject dart_cobject_trusted_certs;
+ dart_cobject_trusted_certs.type = Dart_CObject_kInt64;
+ dart_cobject_trusted_certs.value.as_int64 =
+ reinterpret_cast<intptr_t>(trusted_certs.release());
Dart_CObject dart_cobject_root_cert;
dart_cobject_root_cert.type = Dart_CObject_kInt64;
@@ -222,9 +234,10 @@
Dart_CObject array;
array.type = Dart_CObject_kArray;
- array.value.as_array.length = 3;
- Dart_CObject* values[] = {&dart_cobject_trust, &dart_cobject_root_cert,
- &reply_send_port};
+ array.value.as_array.length = kNumTrustEvaluateRequestParams;
+ Dart_CObject* values[] = {&dart_cobject_trust, &dart_cobject_cert_chain,
+ &dart_cobject_trusted_certs,
+ &dart_cobject_root_cert, &reply_send_port};
array.value.as_array.values = values;
Dart_PostCObject(filter->trust_evaluate_reply_port(), &array);
@@ -265,12 +278,23 @@
}
CObjectArray request(message);
- ASSERT(request.Length() == 3);
+ if (request.Length() != kNumTrustEvaluateRequestParams) {
+ FATAL2("Malformed trust evaluate message: got %" Pd
+ " parameters "
+ "expected %d\n",
+ request.Length(), kNumTrustEvaluateRequestParams);
+ }
CObjectIntptr trust_cobject(request[0]);
ScopedSecTrustRef trust(reinterpret_cast<SecTrustRef>(trust_cobject.Value()));
- CObjectIntptr root_cert_cobject(request[1]);
+ CObjectIntptr cert_chain_cobject(request[1]);
+ ScopedCFMutableArrayRef cert_chain(
+ reinterpret_cast<CFMutableArrayRef>(cert_chain_cobject.Value()));
+ CObjectIntptr trusted_certs_cobject(request[2]);
+ ScopedCFMutableArrayRef trusted_certs(
+ reinterpret_cast<CFMutableArrayRef>(trusted_certs_cobject.Value()));
+ CObjectIntptr root_cert_cobject(request[3]);
X509* root_cert = reinterpret_cast<X509*>(root_cert_cobject.Value());
- CObjectSendPort reply_port(request[2]);
+ CObjectSendPort reply_port(request[4]);
Dart_Port reply_port_id = reply_port.Value();
SecTrustResultType trust_result;
@@ -278,23 +302,20 @@
usleep(3000 * 1000 /* 3 s*/);
}
+ OSStatus status = noErr;
// Perform the certificate verification.
-#if ((defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && defined(__MAC_10_14_0) && \
- __MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_14_0) || \
- (defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && defined(__IPHONE_12_0) && \
- _IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_12_0))
- // SecTrustEvaluateWithError available as of OSX 10.14 and iOS 12.
- // The result is ignored as we get more information from the following call to
- // SecTrustGetTrustResult which also happens to match the information we get
- // from calling SecTrustEvaluate.
- bool res = SecTrustEvaluateWithError(trust.get(), NULL);
- USE(res);
- OSStatus status = SecTrustGetTrustResult(trust.get(), &trust_result);
-#else
-
- // SecTrustEvaluate is deprecated as of OSX 10.15 and iOS 13.
- OSStatus status = SecTrustEvaluate(trust.get(), &trust_result);
-#endif
+ if (__builtin_available(iOS 12.0, macOS 10.14, *)) {
+ // SecTrustEvaluateWithError available as of OSX 10.14 and iOS 12.
+ // The result is ignored as we get more information from the following call
+ // to SecTrustGetTrustResult which also happens to match the information we
+ // get from calling SecTrustEvaluate.
+ bool res = SecTrustEvaluateWithError(trust.get(), NULL);
+ USE(res);
+ status = SecTrustGetTrustResult(trust.get(), &trust_result);
+ } else {
+ // SecTrustEvaluate is deprecated as of OSX 10.15 and iOS 13.
+ status = SecTrustEvaluate(trust.get(), &trust_result);
+ }
postReply(reply_port_id,
status == noErr && (trust_result == kSecTrustResultProceed ||
diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc
index e5860d4b..50521d8 100644
--- a/runtime/vm/dart_api_impl.cc
+++ b/runtime/vm/dart_api_impl.cc
@@ -4401,6 +4401,17 @@
args.SetAt(arg_index++, argument);
}
+ const int kTypeArgsLen = 0;
+ Array& args_descriptor_array = Array::Handle(
+ Z, ArgumentsDescriptor::NewBoxed(kTypeArgsLen, args.Length()));
+
+ ArgumentsDescriptor args_descriptor(args_descriptor_array);
+ ObjectPtr type_error = constructor.DoArgumentTypesMatch(
+ args, args_descriptor, type_arguments, Object::empty_type_arguments());
+ if (type_error != Error::null()) {
+ return Api::NewHandle(T, type_error);
+ }
+
// Invoke the constructor and return the new object.
result = DartEntry::InvokeFunction(constructor, args);
if (result.IsError()) {
@@ -4451,7 +4462,17 @@
if (type_obj.IsNull()) {
RETURN_TYPE_ERROR(Z, type, Type);
}
+
+ if (!type_obj.IsFinalized()) {
+ return Api::NewError(
+ "%s expects argument 'type' to be a fully resolved type.",
+ CURRENT_FUNC);
+ }
+
const Class& cls = Class::Handle(Z, type_obj.type_class());
+ const TypeArguments& type_arguments =
+ TypeArguments::Handle(Z, type_obj.arguments());
+
CHECK_ERROR_HANDLE(cls.VerifyEntryPoint());
#if defined(DEBUG)
if (!cls.is_allocated() && (Dart::vm_snapshot_kind() == Snapshot::kFullAOT)) {
@@ -4459,7 +4480,11 @@
}
#endif
CHECK_ERROR_HANDLE(cls.EnsureIsAllocateFinalized(T));
- return Api::NewHandle(T, AllocateObject(T, cls));
+ const Instance& new_obj = Instance::Handle(Z, AllocateObject(T, cls));
+ if (!type_arguments.IsNull()) {
+ new_obj.SetTypeArguments(type_arguments);
+ }
+ return Api::NewHandle(T, new_obj.ptr());
}
DART_EXPORT Dart_Handle
@@ -4546,7 +4571,7 @@
// Construct name of the constructor to invoke.
const String& constructor_name = Api::UnwrapStringHandle(Z, name);
- const AbstractType& type_obj =
+ AbstractType& type_obj =
AbstractType::Handle(Z, instance.GetType(Heap::kNew));
const Class& cls = Class::Handle(Z, type_obj.type_class());
const String& class_name = String::Handle(Z, cls.Name());
@@ -4570,20 +4595,23 @@
kTypeArgsLen, number_of_arguments + extra_args, 0, NULL)) {
CHECK_ERROR_HANDLE(constructor.VerifyCallEntryPoint());
// Create the argument list.
- // Constructors get the uninitialized object.
- if (!type_arguments.IsNull()) {
- // The type arguments will be null if the class has no type
- // parameters, in which case the following call would fail
- // because there is no slot reserved in the object for the
- // type vector.
- instance.SetTypeArguments(type_arguments);
- }
Dart_Handle result;
Array& args = Array::Handle(Z);
result =
SetupArguments(T, number_of_arguments, arguments, extra_args, &args);
if (!Api::IsError(result)) {
args.SetAt(0, instance);
+
+ const int kTypeArgsLen = 0;
+ const Array& args_descriptor_array = Array::Handle(
+ Z, ArgumentsDescriptor::NewBoxed(kTypeArgsLen, args.Length()));
+ ArgumentsDescriptor args_descriptor(args_descriptor_array);
+ ObjectPtr type_error = constructor.DoArgumentTypesMatch(
+ args, args_descriptor, type_arguments);
+ if (type_error != Error::null()) {
+ return Api::NewHandle(T, type_error);
+ }
+
const Object& retval =
Object::Handle(Z, DartEntry::InvokeFunction(constructor, args));
if (retval.IsError()) {
diff --git a/runtime/vm/dart_api_impl_test.cc b/runtime/vm/dart_api_impl_test.cc
index a9fd5ba..fd10aaa 100644
--- a/runtime/vm/dart_api_impl_test.cc
+++ b/runtime/vm/dart_api_impl_test.cc
@@ -5792,6 +5792,130 @@
EXPECT(!instanceOf);
}
+TEST_CASE(DartAPI_New_Issue44205) {
+ const char* kScriptChars =
+ "class MyIntClass {\n"
+ " MyIntClass(this.value);\n"
+ " int value;\n"
+ "}\n"
+ "\n"
+ "class MyClass<T> {\n"
+ " T value;\n"
+ " MyClass(this.value);\n"
+ " factory MyClass.foo(T x) => MyClass<T>(x);\n"
+ "}\n"
+ "\n"
+ "Type getIntType() { return int; }\n"
+ "\n";
+
+ Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL);
+ Dart_Handle int_wrapper_type =
+ Dart_GetNonNullableType(lib, NewString("MyIntClass"), 0, NULL);
+
+ Dart_Handle args[1];
+ args[0] = Dart_EmptyString();
+
+ Dart_Handle result = Dart_New(int_wrapper_type, Dart_EmptyString(), 1, args);
+ EXPECT_ERROR(result,
+ "type 'String' is not a subtype of type 'int' of 'value'");
+
+ Dart_Handle int_type = Dart_Invoke(lib, NewString("getIntType"), 0, args);
+ EXPECT_VALID(int_type);
+ Dart_Handle type_args = Dart_NewList(1);
+ EXPECT_VALID(type_args);
+ EXPECT_VALID(Dart_ListSetAt(type_args, 0, int_type));
+ Dart_Handle my_class_type =
+ Dart_GetNonNullableType(lib, NewString("MyClass"), 1, &type_args);
+ EXPECT_VALID(my_class_type);
+
+ // Generic generative constructor
+ args[0] = Dart_EmptyString();
+ result = Dart_New(my_class_type, Dart_EmptyString(), 1, args);
+ EXPECT_ERROR(result,
+ "type 'String' is not a subtype of type 'int' of 'value'");
+
+ // Generic factory constructor
+ result = Dart_New(my_class_type, NewString("foo"), 1, args);
+ EXPECT_ERROR(result, "type 'String' is not a subtype of type 'int' of 'x'");
+}
+
+TEST_CASE(DartAPI_InvokeConstructor_Issue44205) {
+ const char* kScriptChars =
+ "class MyIntClass {\n"
+ " MyIntClass(this.value);\n"
+ " int value;\n"
+ "}\n"
+ "\n"
+ "class MyClass<T> {\n"
+ " T value;\n"
+ " MyClass(this.value);\n"
+ "}\n"
+ "\n"
+ "Type getIntType() { return int; }\n"
+ "\n";
+
+ Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL);
+ Dart_Handle int_wrapper_type =
+ Dart_GetNonNullableType(lib, NewString("MyIntClass"), 0, NULL);
+
+ Dart_Handle args[1];
+ args[0] = Dart_EmptyString();
+ Dart_Handle result = Dart_Allocate(int_wrapper_type);
+ EXPECT_VALID(result);
+
+ result = Dart_InvokeConstructor(result, Dart_EmptyString(), 1, args);
+ EXPECT_ERROR(result,
+ "type 'String' is not a subtype of type 'int' of 'value'");
+
+ Dart_Handle int_type = Dart_Invoke(lib, NewString("getIntType"), 0, args);
+ EXPECT_VALID(int_type);
+ Dart_Handle type_args = Dart_NewList(1);
+ EXPECT_VALID(type_args);
+ EXPECT_VALID(Dart_ListSetAt(type_args, 0, int_type));
+ Dart_Handle my_class_type =
+ Dart_GetNonNullableType(lib, NewString("MyClass"), 1, &type_args);
+ EXPECT_VALID(my_class_type);
+
+ result = Dart_Allocate(my_class_type);
+ EXPECT_VALID(result);
+ result = Dart_InvokeConstructor(result, Dart_EmptyString(), 1, args);
+ EXPECT_ERROR(result,
+ "type 'String' is not a subtype of type 'int' of 'value'");
+}
+
+TEST_CASE(DartAPI_InvokeClosure_Issue44205) {
+ const char* kScriptChars =
+ "class InvokeClosure {\n"
+ " InvokeClosure(int i, int j) : fld1 = i, fld2 = j {}\n"
+ " Function method1(int i) {\n"
+ " f(int j) => j + i + fld1 + fld2 + fld4; \n"
+ " return f;\n"
+ " }\n"
+ " int fld1;\n"
+ " final int fld2;\n"
+ " static const int fld4 = 10;\n"
+ "}\n"
+ "Function testMain1() {\n"
+ " InvokeClosure obj = new InvokeClosure(10, 20);\n"
+ " return obj.method1(10);\n"
+ "}\n";
+ Dart_Handle result;
+ CHECK_API_SCOPE(thread);
+
+ // Create a test library and Load up a test script in it.
+ Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL);
+
+ // Invoke a function which returns a closure.
+ Dart_Handle retobj = Dart_Invoke(lib, NewString("testMain1"), 0, NULL);
+ EXPECT_VALID(retobj);
+
+ // Now invoke the closure and check the result.
+ Dart_Handle dart_arguments[1];
+ dart_arguments[0] = Dart_EmptyString();
+ result = Dart_InvokeClosure(retobj, 1, dart_arguments);
+ EXPECT_ERROR(result, "type 'String' is not a subtype of type 'int' of 'j'");
+}
+
TEST_CASE(DartAPI_New_Issue2971) {
// Issue 2971: We were unable to use Dart_New to construct an
// instance of List, due to problems implementing interface
diff --git a/runtime/vm/dart_entry.cc b/runtime/vm/dart_entry.cc
index 4f201b3..691bd6c 100644
--- a/runtime/vm/dart_entry.cc
+++ b/runtime/vm/dart_entry.cc
@@ -276,7 +276,7 @@
const auto& result = Object::Handle(
zone, callable_function.DoArgumentTypesMatch(arguments, args_desc));
if (result.IsError()) {
- Exceptions::PropagateError(Error::Cast(result));
+ return result.ptr();
}
return InvokeFunction(callable_function, arguments, arguments_descriptor);
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 7ad3137..ec68b24 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -8138,10 +8138,14 @@
// Adjust for type arguments when they're present.
const intptr_t param_index = arg_index - arg_offset;
type = ParameterTypeAt(param_index);
-
if (!check_argument(argument, type, instantiator_type_arguments,
function_type_arguments)) {
auto& name = String::Handle(zone, ParameterNameAt(param_index));
+ if (!type.IsInstantiated()) {
+ type =
+ type.InstantiateFrom(instantiator_type_arguments,
+ function_type_arguments, kAllFree, Heap::kNew);
+ }
return ThrowTypeError(token_pos(), argument, type, name);
}
}
diff --git a/tests/language/generic/metadata_in_function_body_test.dart b/tests/language/generic/metadata_in_function_body_test.dart
index 40c8549..e6be65f 100644
--- a/tests/language/generic/metadata_in_function_body_test.dart
+++ b/tests/language/generic/metadata_in_function_body_test.dart
@@ -16,11 +16,11 @@
@C<dynamic>()
//^
// [analyzer] SYNTACTIC_ERROR.ANNOTATION_WITH_TYPE_ARGUMENTS
- // [cfe] An annotation (metadata) can't use type arguments.
+ // [cfe] An annotation can't use type arguments.
@C<int>()
//^
// [analyzer] SYNTACTIC_ERROR.ANNOTATION_WITH_TYPE_ARGUMENTS
- // [cfe] An annotation (metadata) can't use type arguments.
+ // [cfe] An annotation can't use type arguments.
int i = 0;
ignore(i);
}
diff --git a/tests/language/generic/metadata_test.dart b/tests/language/generic/metadata_test.dart
index 99c8fbc..a6a5ad8 100644
--- a/tests/language/generic/metadata_test.dart
+++ b/tests/language/generic/metadata_test.dart
@@ -12,9 +12,9 @@
@C<dynamic>()
//^
// [analyzer] SYNTACTIC_ERROR.ANNOTATION_WITH_TYPE_ARGUMENTS
-// [cfe] An annotation (metadata) can't use type arguments.
+// [cfe] An annotation can't use type arguments.
@C<int>()
//^
// [analyzer] SYNTACTIC_ERROR.ANNOTATION_WITH_TYPE_ARGUMENTS
-// [cfe] An annotation (metadata) can't use type arguments.
+// [cfe] An annotation can't use type arguments.
main() {}
diff --git a/tests/language_2/generic/metadata_in_function_body_test.dart b/tests/language_2/generic/metadata_in_function_body_test.dart
index 40c8549..e6be65f 100644
--- a/tests/language_2/generic/metadata_in_function_body_test.dart
+++ b/tests/language_2/generic/metadata_in_function_body_test.dart
@@ -16,11 +16,11 @@
@C<dynamic>()
//^
// [analyzer] SYNTACTIC_ERROR.ANNOTATION_WITH_TYPE_ARGUMENTS
- // [cfe] An annotation (metadata) can't use type arguments.
+ // [cfe] An annotation can't use type arguments.
@C<int>()
//^
// [analyzer] SYNTACTIC_ERROR.ANNOTATION_WITH_TYPE_ARGUMENTS
- // [cfe] An annotation (metadata) can't use type arguments.
+ // [cfe] An annotation can't use type arguments.
int i = 0;
ignore(i);
}
diff --git a/tests/language_2/generic/metadata_test.dart b/tests/language_2/generic/metadata_test.dart
index 99c8fbc..a6a5ad8 100644
--- a/tests/language_2/generic/metadata_test.dart
+++ b/tests/language_2/generic/metadata_test.dart
@@ -12,9 +12,9 @@
@C<dynamic>()
//^
// [analyzer] SYNTACTIC_ERROR.ANNOTATION_WITH_TYPE_ARGUMENTS
-// [cfe] An annotation (metadata) can't use type arguments.
+// [cfe] An annotation can't use type arguments.
@C<int>()
//^
// [analyzer] SYNTACTIC_ERROR.ANNOTATION_WITH_TYPE_ARGUMENTS
-// [cfe] An annotation (metadata) can't use type arguments.
+// [cfe] An annotation can't use type arguments.
main() {}
diff --git a/tests/web/41449d_test.dart b/tests/web/41449d_test.dart
new file mode 100644
index 0000000..0f0a460
--- /dev/null
+++ b/tests/web/41449d_test.dart
@@ -0,0 +1,21 @@
+// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+class Foo {
+ Bar get bar => const Bar();
+}
+
+class Bar {
+ const Bar();
+
+ int call<S>(void Function(S) f) => 42;
+}
+
+class NoticeMe {}
+
+void main() {
+ Expect.equals(42, Foo().bar<NoticeMe>((_) {}));
+}
diff --git a/tests/web/regress/44818_test.dart b/tests/web/regress/44818_test.dart
new file mode 100644
index 0000000..db3879e
--- /dev/null
+++ b/tests/web/regress/44818_test.dart
@@ -0,0 +1,21 @@
+// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+// Regression test for mis-optimized (a / b).runtimeType.
+
+void main() {
+ Type? t0;
+ Type? t1;
+ for (int i = 0; i < 2; i++) {
+ t0 = i.runtimeType;
+ t1 = ((i * 2) / 2).runtimeType;
+ }
+ final t2 = ((0 * 2) / 2).runtimeType;
+
+ Expect.equals('int', '$t0');
+ Expect.equals('int', '$t1');
+ Expect.equals('int', '$t2');
+}
diff --git a/tests/web_2/41449d_test.dart b/tests/web_2/41449d_test.dart
new file mode 100644
index 0000000..b41cb19
--- /dev/null
+++ b/tests/web_2/41449d_test.dart
@@ -0,0 +1,23 @@
+// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// @dart = 2.7
+
+import 'package:expect/expect.dart';
+
+class Foo {
+ Bar get bar => const Bar();
+}
+
+class Bar {
+ const Bar();
+
+ int call<S>(void Function(S) f) => 42;
+}
+
+class NoticeMe {}
+
+void main() {
+ Expect.equals(42, Foo().bar<NoticeMe>((_) {}));
+}
diff --git a/tests/web_2/regress/44818_test.dart b/tests/web_2/regress/44818_test.dart
new file mode 100644
index 0000000..22f2491
--- /dev/null
+++ b/tests/web_2/regress/44818_test.dart
@@ -0,0 +1,21 @@
+// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+// Regression test for mis-optimized (a / b).runtimeType.
+
+void main() {
+ Type t0;
+ Type t1;
+ for (int i = 0; i < 2; i++) {
+ t0 = i.runtimeType;
+ t1 = ((i * 2) / 2).runtimeType;
+ }
+ final t2 = ((0 * 2) / 2).runtimeType;
+
+ Expect.equals('int', '$t0');
+ Expect.equals('int', '$t1');
+ Expect.equals('int', '$t2');
+}
diff --git a/tools/VERSION b/tools/VERSION
index edab86b..e152219 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 13
PATCH 0
-PRERELEASE 16
+PRERELEASE 17
PRERELEASE_PATCH 0
\ No newline at end of file