Fixed Issue #465: tests for Exports added updated.
diff --git a/LanguageFeatures/nnbd/exports_A01_t01.dart b/LanguageFeatures/nnbd/exports_A01_functions_t01.dart
similarity index 69%
copy from LanguageFeatures/nnbd/exports_A01_t01.dart
copy to LanguageFeatures/nnbd/exports_A01_functions_t01.dart
index 4bfd347..b25094e 100644
--- a/LanguageFeatures/nnbd/exports_A01_t01.dart
+++ b/LanguageFeatures/nnbd/exports_A01_functions_t01.dart
@@ -7,22 +7,18 @@
* @assertion If an unmigrated library re-exports a migrated library, the
* re-exported symbols retain their migrated status (that is, downstream
* migrated libraries will see their migrated types).
- * @description Check that opted-in library exported to legacy and then back to
- * opted in is still opted-in library.
+ * @description Check that [void.testme()] function exported from opted-in
+ * library to legacy library and then back to the opted in code, retains its
+ * status.
* @author iarkh@unipro.ru
*/
// SharedOptions=--enable-experiment=non-nullable
// Requirements=nnbd-strong
+import "../../Utils/expect.dart";
import "exports_legacy_A01_lib.dart";
main() {
- A? a1 = new A();
- A? a2 = null;
-
- A a3 = new A();
- A a4 = null;
-// ^^^^
-// [analyzer] unspecified
-// [cfe] unspecified
+ Expect.isTrue(testme is void Function());
+ testme();
}
diff --git a/LanguageFeatures/nnbd/exports_A01_t01.dart b/LanguageFeatures/nnbd/exports_A01_typedef_t01.dart
similarity index 69%
copy from LanguageFeatures/nnbd/exports_A01_t01.dart
copy to LanguageFeatures/nnbd/exports_A01_typedef_t01.dart
index 4bfd347..454a5a9 100644
--- a/LanguageFeatures/nnbd/exports_A01_t01.dart
+++ b/LanguageFeatures/nnbd/exports_A01_typedef_t01.dart
@@ -7,22 +7,19 @@
* @assertion If an unmigrated library re-exports a migrated library, the
* re-exported symbols retain their migrated status (that is, downstream
* migrated libraries will see their migrated types).
- * @description Check that opted-in library exported to legacy and then back to
- * opted in is still opted-in library.
+ * @description Check that [typedef void testme()] exported from opted-in
+ * library to legacy library and then back to the opted in code, retains its
+ * status.
* @author iarkh@unipro.ru
*/
// SharedOptions=--enable-experiment=non-nullable
// Requirements=nnbd-strong
+import "../../Utils/expect.dart";
import "exports_legacy_A01_lib.dart";
-main() {
- A? a1 = new A();
- A? a2 = null;
+typedef expected = void Function();
- A a3 = new A();
- A a4 = null;
-// ^^^^
-// [analyzer] unspecified
-// [cfe] unspecified
+main() {
+ Expect.equals(expected, def);
}
diff --git a/LanguageFeatures/nnbd/exports_A01_typedef_t02.dart b/LanguageFeatures/nnbd/exports_A01_typedef_t02.dart
new file mode 100644
index 0000000..01c7d1f
--- /dev/null
+++ b/LanguageFeatures/nnbd/exports_A01_typedef_t02.dart
@@ -0,0 +1,36 @@
+/*
+ * 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.
+ */
+/**
+ * @assertion If an unmigrated library re-exports a migrated library, the
+ * re-exported symbols retain their migrated status (that is, downstream
+ * migrated libraries will see their migrated types).
+ * @description Check that if function typedef with argument of nullable type is
+ * exported from opted-in library to legacy library and then back to the opted
+ * in code, it retains its status.
+ * @author iarkh@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable
+// Requirements=nnbd-strong
+
+import "dart:async";
+import "../../Utils/expect.dart";
+import "exports_legacy_A01_lib.dart";
+
+typedef exp_nullable_int_arg = void Function(int? i);
+typedef exp_nullable_object_arg = void Function(int? i);
+typedef exp_dynamic_arg = void Function(dynamic i);
+typedef exp_nullable_function_arg = void Function(Function? f);
+typedef exp_null_arg = void Function(Null n);
+typedef exp_futureOr_arg = void Function(FutureOr i);
+
+main() {
+ Expect.equals(exp_nullable_int_arg, def_nullable_int_arg);
+ Expect.equals(exp_nullable_object_arg, def_nullable_object_arg);
+ Expect.equals(exp_dynamic_arg, def_dynamic_arg);
+ Expect.equals(exp_nullable_function_arg, def_nullable_function_arg);
+ Expect.equals(exp_null_arg, def_null_arg);
+ Expect.equals(exp_futureOr_arg, def_futureOr_arg);
+}
diff --git a/LanguageFeatures/nnbd/exports_A01_typedef_t03.dart b/LanguageFeatures/nnbd/exports_A01_typedef_t03.dart
new file mode 100644
index 0000000..fe4ffc2
--- /dev/null
+++ b/LanguageFeatures/nnbd/exports_A01_typedef_t03.dart
@@ -0,0 +1,32 @@
+/*
+ * 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.
+ */
+/**
+ * @assertion If an unmigrated library re-exports a migrated library, the
+ * re-exported symbols retain their migrated status (that is, downstream
+ * migrated libraries will see their migrated types).
+ * @description Check that if function typedef with argument of non-nullable
+ * type is exported from opted-in library to legacy library and then back to the
+ * opted in code, it retains its status.
+ * @author iarkh@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable
+// Requirements=nnbd-strong
+
+import "dart:async";
+import "../../Utils/expect.dart";
+import "exports_legacy_A01_lib.dart";
+
+typedef exp_int_arg = void Function(int i);
+typedef exp_object_arg = void Function(Object o);
+typedef exp_function_arg = void Function(Function f);
+typedef exp_futureOrInt_arg = void Function(FutureOr<int> i);
+
+main() {
+ Expect.equals(exp_int_arg, def_int_arg);
+ Expect.equals(exp_object_arg, def_object_arg);
+ Expect.equals(exp_function_arg, def_function_arg);
+ Expect.equals(exp_futureOrInt_arg, def_futureOrInt_arg);
+}
diff --git a/LanguageFeatures/nnbd/exports_A01_t01.dart b/LanguageFeatures/nnbd/exports_A01_typedef_t04.dart
similarity index 65%
copy from LanguageFeatures/nnbd/exports_A01_t01.dart
copy to LanguageFeatures/nnbd/exports_A01_typedef_t04.dart
index 4bfd347..556fa70 100644
--- a/LanguageFeatures/nnbd/exports_A01_t01.dart
+++ b/LanguageFeatures/nnbd/exports_A01_typedef_t04.dart
@@ -7,22 +7,19 @@
* @assertion If an unmigrated library re-exports a migrated library, the
* re-exported symbols retain their migrated status (that is, downstream
* migrated libraries will see their migrated types).
- * @description Check that opted-in library exported to legacy and then back to
- * opted in is still opted-in library.
+ * @description Check that if function typedef with [Never] argument is exported
+ * from opted-in library to legacy library and then back to the opted in code,
+ * it retains its status.
* @author iarkh@unipro.ru
*/
// SharedOptions=--enable-experiment=non-nullable
// Requirements=nnbd-strong
+import "../../Utils/expect.dart";
import "exports_legacy_A01_lib.dart";
-main() {
- A? a1 = new A();
- A? a2 = null;
+typedef exp_never_arg = void Function(Never n);
- A a3 = new A();
- A a4 = null;
-// ^^^^
-// [analyzer] unspecified
-// [cfe] unspecified
+main() {
+ Expect.equals(exp_never_arg, def_never_arg);
}
diff --git a/LanguageFeatures/nnbd/exports_A01_t01.dart b/LanguageFeatures/nnbd/exports_A01_typedef_t05.dart
similarity index 63%
copy from LanguageFeatures/nnbd/exports_A01_t01.dart
copy to LanguageFeatures/nnbd/exports_A01_typedef_t05.dart
index 4bfd347..9ddf2ce 100644
--- a/LanguageFeatures/nnbd/exports_A01_t01.dart
+++ b/LanguageFeatures/nnbd/exports_A01_typedef_t05.dart
@@ -7,22 +7,19 @@
* @assertion If an unmigrated library re-exports a migrated library, the
* re-exported symbols retain their migrated status (that is, downstream
* migrated libraries will see their migrated types).
- * @description Check that opted-in library exported to legacy and then back to
- * opted in is still opted-in library.
+ * @description Check that if function typedef with required argument is
+ * exported from opted-in library to legacy library and then back to the opted
+ * in code, it retains its status.
* @author iarkh@unipro.ru
*/
// SharedOptions=--enable-experiment=non-nullable
// Requirements=nnbd-strong
+import "../../Utils/expect.dart";
import "exports_legacy_A01_lib.dart";
-main() {
- A? a1 = new A();
- A? a2 = null;
+typedef exp_required_arg = void Function({required int i});
- A a3 = new A();
- A a4 = null;
-// ^^^^
-// [analyzer] unspecified
-// [cfe] unspecified
+main() {
+ Expect.equals(exp_required_arg, def_required_arg);
}
diff --git a/LanguageFeatures/nnbd/exports_A01_typedef_t06.dart b/LanguageFeatures/nnbd/exports_A01_typedef_t06.dart
new file mode 100644
index 0000000..e04941c
--- /dev/null
+++ b/LanguageFeatures/nnbd/exports_A01_typedef_t06.dart
@@ -0,0 +1,36 @@
+/*
+ * 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.
+ */
+/**
+ * @assertion If an unmigrated library re-exports a migrated library, the
+ * re-exported symbols retain their migrated status (that is, downstream
+ * migrated libraries will see their migrated types).
+ * @description Check that if function typedef which returns nullable value is
+ * exported from opted-in library to legacy library and then back to the opted
+ * in code, it retains its status.
+ * @author iarkh@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable
+// Requirements=nnbd-strong
+
+import "dart:async";
+import "../../Utils/expect.dart";
+import "exports_legacy_A01_lib.dart";
+
+typedef exp_getNullableInt = int? Function();
+typedef exp_getNullableObject = Object? Function();
+typedef exp_getDynamic = dynamic Function();
+typedef exp_getNullableFunction = Function? Function();
+typedef exp_getNull = Null Function();
+typedef exp_getFutureOr = FutureOr Function();
+
+main() {
+ Expect.equals(exp_getNullableInt, def_getNullableInt);
+ Expect.equals(exp_getNullableObject, def_getNullableObject);
+ Expect.equals(exp_getDynamic, def_getDynamic);
+ Expect.equals(exp_getNullableFunction, def_getNullableFunction);
+ Expect.equals(exp_getNull, def_getNull);
+ Expect.equals(exp_getFutureOr, def_getFutureOr);
+}
diff --git a/LanguageFeatures/nnbd/exports_A01_typedef_t07.dart b/LanguageFeatures/nnbd/exports_A01_typedef_t07.dart
new file mode 100644
index 0000000..3411706
--- /dev/null
+++ b/LanguageFeatures/nnbd/exports_A01_typedef_t07.dart
@@ -0,0 +1,32 @@
+/*
+ * 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.
+ */
+/**
+ * @assertion If an unmigrated library re-exports a migrated library, the
+ * re-exported symbols retain their migrated status (that is, downstream
+ * migrated libraries will see their migrated types).
+ * @description Check that if function typedef which returns non-nullable value
+ * is exported from opted-in library to legacy library and then back to the
+ * opted in code, it retains its status.
+ * @author iarkh@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable
+// Requirements=nnbd-strong
+
+import "dart:async";
+import "../../Utils/expect.dart";
+import "exports_legacy_A01_lib.dart";
+
+typedef exp_getInt = int Function();
+typedef exp_getObject = Object Function();
+typedef exp_getFunction = Function Function();
+typedef exp_getFutureOrInt = FutureOr<int> Function();
+
+main() {
+ Expect.equals(exp_getInt, def_getInt);
+ Expect.equals(exp_getObject, def_getObject);
+ Expect.equals(exp_getFunction, def_getFunction);
+ Expect.equals(exp_getFutureOrInt, def_getFutureOrInt);
+}
diff --git a/LanguageFeatures/nnbd/exports_A01_t01.dart b/LanguageFeatures/nnbd/exports_A01_typedef_t08.dart
similarity index 65%
copy from LanguageFeatures/nnbd/exports_A01_t01.dart
copy to LanguageFeatures/nnbd/exports_A01_typedef_t08.dart
index 4bfd347..8af7bd4 100644
--- a/LanguageFeatures/nnbd/exports_A01_t01.dart
+++ b/LanguageFeatures/nnbd/exports_A01_typedef_t08.dart
@@ -7,22 +7,19 @@
* @assertion If an unmigrated library re-exports a migrated library, the
* re-exported symbols retain their migrated status (that is, downstream
* migrated libraries will see their migrated types).
- * @description Check that opted-in library exported to legacy and then back to
- * opted in is still opted-in library.
+ * @description Check that if function typedef which returns [Never] is exported
+ * from opted-in library to legacy library and then back to the opted in code,
+ * it retains its status.
* @author iarkh@unipro.ru
*/
// SharedOptions=--enable-experiment=non-nullable
// Requirements=nnbd-strong
+import "../../Utils/expect.dart";
import "exports_legacy_A01_lib.dart";
-main() {
- A? a1 = new A();
- A? a2 = null;
+typedef exp_getNever = Never Function();
- A a3 = new A();
- A a4 = null;
-// ^^^^
-// [analyzer] unspecified
-// [cfe] unspecified
+main() {
+ Expect.equals(exp_getNever, def_getNever);
}
diff --git a/LanguageFeatures/nnbd/exports_A01_var_t01.dart b/LanguageFeatures/nnbd/exports_A01_var_t01.dart
new file mode 100644
index 0000000..3d81ed6
--- /dev/null
+++ b/LanguageFeatures/nnbd/exports_A01_var_t01.dart
@@ -0,0 +1,29 @@
+/*
+ * 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.
+ */
+/**
+ * @assertion If an unmigrated library re-exports a migrated library, the
+ * re-exported symbols retain their migrated status (that is, downstream
+ * migrated libraries will see their migrated types).
+ * @description Check that if nullable unassigned variable in opted-in library
+ * is exported to legacy library and then back to the opted in code, it retains
+ * its status, i.e. its value is [null].
+ * @author iarkh@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable
+// Requirements=nnbd-strong
+
+import "../../Utils/expect.dart";
+import "exports_legacy_A01_lib.dart";
+
+main() {
+ Expect.isNull(nullable_i1);
+ Expect.isNull(nullable_o1);
+ Expect.isNull(d1);
+ Expect.isNull(f1);
+ Expect.isNull(n1);
+ Expect.isNull(fo1);
+ Expect.isNull(fofo1);
+}
diff --git a/LanguageFeatures/nnbd/exports_A01_var_t02.dart b/LanguageFeatures/nnbd/exports_A01_var_t02.dart
new file mode 100644
index 0000000..1524f5e
--- /dev/null
+++ b/LanguageFeatures/nnbd/exports_A01_var_t02.dart
@@ -0,0 +1,42 @@
+/*
+ * 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.
+ */
+/**
+ * @assertion If an unmigrated library re-exports a migrated library, the
+ * re-exported symbols retain their migrated status (that is, downstream
+ * migrated libraries will see their migrated types).
+ * @description Check that if [null] variable in opted-in library is exported to
+ * legacy library and then back to the opted in code, it retains its status and
+ * still its value is [null].
+ * @author iarkh@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable
+// Requirements=nnbd-strong
+
+import "../../Utils/expect.dart";
+import "exports_legacy_A01_lib.dart";
+
+main() {
+ Expect.isNull(nullable_i2);
+ Expect.isNull(nullable_o2);
+ Expect.isNull(d2);
+ Expect.isNull(f2);
+ Expect.isNull(n2);
+ Expect.isNull(fo2);
+ Expect.isNull(fofo2);
+
+ nullable_i2 = 1;
+ Expect.equals(1, nullable_i2);
+ nullable_o2 = 1;
+ Expect.equals(1, nullable_o2);
+ d2 = 1;
+ Expect.equals(1, d2);
+ f2 = testme;
+ Expect.equals(testme, f2);
+ fo2 = 1;
+ Expect.equals(1, fo2);
+ fofo2 = 1;
+ Expect.equals(1, fofo2);
+ }
diff --git a/LanguageFeatures/nnbd/exports_A01_var_t03.dart b/LanguageFeatures/nnbd/exports_A01_var_t03.dart
new file mode 100644
index 0000000..b7e7945
--- /dev/null
+++ b/LanguageFeatures/nnbd/exports_A01_var_t03.dart
@@ -0,0 +1,34 @@
+/*
+ * 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.
+ */
+/**
+ * @assertion If an unmigrated library re-exports a migrated library, the
+ * re-exported symbols retain their migrated status (that is, downstream
+ * migrated libraries will see their migrated types).
+ * @description Check that if non-null variable of nullable type from opted-in
+ * library is exported to legacy library and then back to the opted in code, it
+ * retains its status and so can be assigned to [null].
+ * @author iarkh@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable
+// Requirements=nnbd-strong
+
+import "../../Utils/expect.dart";
+import "exports_legacy_A01_lib.dart";
+
+main() {
+ nullable_i3 = null;
+ Expect.isNull(nullable_i3);
+ nullable_o3 = null;
+ Expect.isNull(nullable_o3);
+ d3 = null;
+ Expect.isNull(d3);
+ f3 = null;
+ Expect.isNull(f3);
+ fo3 = null;
+ Expect.isNull(fo3);
+ fofo3 = null;
+ Expect.isNull(fofo3);
+}
diff --git a/LanguageFeatures/nnbd/exports_A01_var_t04.dart b/LanguageFeatures/nnbd/exports_A01_var_t04.dart
new file mode 100644
index 0000000..7a2ff3d
--- /dev/null
+++ b/LanguageFeatures/nnbd/exports_A01_var_t04.dart
@@ -0,0 +1,40 @@
+/*
+ * 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.
+ */
+/**
+ * @assertion If an unmigrated library re-exports a migrated library, the
+ * re-exported symbols retain their migrated status (that is, downstream
+ * migrated libraries will see their migrated types).
+ * @description Check that if non-nullable unassigned in opted-in library is
+ * exported to legacy library and then back to the opted in code, it retains
+ * its status, i.e. still it cannot be assigned to [null].
+ * @author iarkh@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable
+// Requirements=nnbd-strong
+
+import "exports_legacy_A01_lib.dart";
+
+main() {
+ i = null;
+// ^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+ o = null;
+// ^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+ f = null;
+// ^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+ fi = null;
+// ^^^^
+// [analyzer] unspecified
+// [cfe] unspecified1
+}
diff --git a/LanguageFeatures/nnbd/exports_A01_t01.dart b/LanguageFeatures/nnbd/exports_A01_var_t05.dart
similarity index 70%
rename from LanguageFeatures/nnbd/exports_A01_t01.dart
rename to LanguageFeatures/nnbd/exports_A01_var_t05.dart
index 4bfd347..c0ab4f2 100644
--- a/LanguageFeatures/nnbd/exports_A01_t01.dart
+++ b/LanguageFeatures/nnbd/exports_A01_var_t05.dart
@@ -7,22 +7,17 @@
* @assertion If an unmigrated library re-exports a migrated library, the
* re-exported symbols retain their migrated status (that is, downstream
* migrated libraries will see their migrated types).
- * @description Check that opted-in library exported to legacy and then back to
- * opted in is still opted-in library.
+ * @description Check that if [Never] variable in opted-in library is exported
+ * to legacy library and then back to the opted in code, it is still [Never].
* @author iarkh@unipro.ru
*/
// SharedOptions=--enable-experiment=non-nullable
// Requirements=nnbd-strong
+import "../../Utils/expect.dart";
import "exports_legacy_A01_lib.dart";
main() {
- A? a1 = new A();
- A? a2 = null;
-
- A a3 = new A();
- A a4 = null;
-// ^^^^
-// [analyzer] unspecified
-// [cfe] unspecified
+ late Never n;
+ Expect.throws(() { n = aNever; } );
}
diff --git a/LanguageFeatures/nnbd/exports_A02_t01.dart b/LanguageFeatures/nnbd/exports_A02_t01.dart
index 4ef72f8..73a0dbb 100644
--- a/LanguageFeatures/nnbd/exports_A02_t01.dart
+++ b/LanguageFeatures/nnbd/exports_A02_t01.dart
@@ -13,10 +13,7 @@
// SharedOptions=--enable-experiment=non-nullable
// Requirements=nnbd-strong
-export "legacy_lib.dart";
+export "exports_legacy_lib.dart";
// ^^^^^^^^^^^^^^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
-
-main() {
-}
diff --git a/LanguageFeatures/nnbd/exports_legacy_A01_lib.dart b/LanguageFeatures/nnbd/exports_legacy_A01_lib.dart
index fbf4fff..b3334df 100644
--- a/LanguageFeatures/nnbd/exports_legacy_A01_lib.dart
+++ b/LanguageFeatures/nnbd/exports_legacy_A01_lib.dart
@@ -10,6 +10,6 @@
// @dart=2.6
library export_opted_lib;
-export "opted_in_lib.dart";
+export "exports_opted_in_lib.dart";
diff --git a/LanguageFeatures/nnbd/exports_legacy_lib.dart b/LanguageFeatures/nnbd/exports_legacy_lib.dart
new file mode 100644
index 0000000..aea81c2
--- /dev/null
+++ b/LanguageFeatures/nnbd/exports_legacy_lib.dart
@@ -0,0 +1,13 @@
+/*
+ * 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.
+ */
+/**
+ * @author iarkh@unipro.ru
+ */
+// @dart=2.6
+// SharedOptions=--enable-experiment=non-nullable
+library legacy_library_lib;
+
+class A {}
\ No newline at end of file
diff --git a/LanguageFeatures/nnbd/exports_opted_in_lib.dart b/LanguageFeatures/nnbd/exports_opted_in_lib.dart
new file mode 100644
index 0000000..2c54a63
--- /dev/null
+++ b/LanguageFeatures/nnbd/exports_opted_in_lib.dart
@@ -0,0 +1,139 @@
+/*
+ * 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.
+ */
+/**
+ * @author iarkh@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable
+// Requirements=nnbd-strong
+
+library override_opted_in_lib;
+
+import "dart:async";
+
+// Nullable variables:
+int? nullable_i1;
+Object? nullable_o1;
+dynamic d1;
+Function? f1;
+Null n1;
+FutureOr fo1;
+FutureOr<FutureOr> fofo1;
+
+int? nullable_i2 = null;
+Object? nullable_o2 = null;
+dynamic d2 = null;
+Function? f2 = null;
+Null n2 = null;
+FutureOr fo2 = null;
+FutureOr<FutureOr> fofo2 = null;
+
+int? nullable_i3 = 1;
+Object? nullable_o3 = 1;
+dynamic d3 = 1;
+Function? f3 = testme;
+FutureOr fo3 = 1;
+FutureOr<FutureOr> fofo3 = 1;
+
+// Non-nullable variables:
+int i = 0;
+Object o = 0;
+Function f = testme;
+FutureOr<int> fi = 0;
+
+Never aNever = throw "Should not reach here";
+
+// Generic classes:
+class GENERIC_NONNULLABLE_INT<T extends int> {}
+class GENERIC_NONNULLABLE_OBJECT<T extends Object> {}
+class GENERIC_NONNULLABLE_FUNCTION<T extends Function> {}
+
+class GENERIC_NULLABLE<T> {}
+class GENERIC_DYNAMIC<T> {}
+class GENERIC_NULLABLE_INT<T extends int?> {}
+class GENERIC_NULLABLE_OBJECT<T extends Object?> {}
+class GENERIC_NULLABLE_FUNCTION<T extends Function?> {}
+class GENERIC_NULL<T extends Null> {}
+
+class GENERIC_NEVER<T extends Never> {}
+
+// Function typedefs:
+typedef def = void Function();
+
+typedef def_nullable_int_arg = void Function(int? i);
+typedef def_nullable_object_arg = void Function(int? i);
+typedef def_dynamic_arg = void Function(dynamic i);
+typedef def_nullable_function_arg = void Function(Function? f);
+typedef def_null_arg = void Function(Null n);
+typedef def_futureOr_arg = void Function(FutureOr i);
+
+typedef def_int_arg = void Function(int i);
+typedef def_object_arg = void Function(Object o);
+typedef def_function_arg = void Function(Function f);
+typedef def_futureOrInt_arg = void Function(FutureOr<int> i);
+
+typedef def_never_arg = void Function(Never n);
+
+typedef def_required_arg = void Function({required int i});
+
+typedef def_getNullableInt = int? Function();
+typedef def_getNullableObject = Object? Function();
+typedef def_getDynamic = dynamic Function();
+typedef def_getNullableFunction = Function? Function();
+typedef def_getNull = Null Function();
+typedef def_getFutureOr = FutureOr Function();
+
+typedef def_getInt = int Function();
+typedef def_getObject = Object Function();
+typedef def_getFunction = Function Function();
+typedef def_getFutureOrInt = FutureOr<int> Function();
+
+typedef def_getNever = Never Function();
+
+
+// Functions:
+
+void testme() {}
+
+void test_nullable_int_arg(int? i) {}
+void test_nullable_Object_arg(int? i) {}
+void test_dynamic_arg(dynamic i) {}
+void test_nullable_function(Function? f) {}
+void test_null_arg(Null n) {}
+void test_futureOr_arg(FutureOr i) {}
+
+void test_int_arg(int i) {}
+void test_object_arg(Object o) {}
+void test_function_arg(Function f) {}
+void test_futureOrInt_arg(FutureOr<int> i) {}
+
+void test_never_arg(Never n) {}
+
+void test_required_arg({required int i}) {}
+
+int? getNullableInt() => null;
+Object? getNullableObject() => null;
+dynamic getDynamic() => null;
+Function? getNullableFunction() => null;
+Null getNull() => null;
+FutureOr getFutureOr() => null;
+
+int getInt() => 1;
+Object getObject() => 1;
+Function getFunction() => testme;
+FutureOr<int> getFutureOrInt() => 1;
+
+Never getNever() => throw("Should not reach here");
+
+void testMeDynamic<T>() {}
+void testMeNullableInt<T extends int?>() {}
+void testMeNullableFunction<T extends Function?>() {}
+void testMeNullableObject<T extends Object?>() {}
+void testMeNull<T extends Null>() {}
+void testMeFutureOr<T extends FutureOr>() {}
+
+void testMeInt<T extends int>() {}
+void testMeFunction<T extends Function>() {}
+void testMeObject<T extends Object>() {}
diff --git a/LanguageFeatures/nnbd/type_reification_legacy_lib.dart b/LanguageFeatures/nnbd/type_reification_legacy_lib.dart
index 1ddf2d9..3121991 100644
--- a/LanguageFeatures/nnbd/type_reification_legacy_lib.dart
+++ b/LanguageFeatures/nnbd/type_reification_legacy_lib.dart
@@ -22,12 +22,10 @@
typedef F3<T> = void Function(T);
typedef F4<T> = T Function();
-int test1(A1) { return 0; }
-int test2(A) { return 1; }
+int test1(A1) => 0;
+int test2(A) => 1;
void test3(A1) {}
-int test4<B1 extends B>(A1 a) { return 2; }
-int test5<T>(A a) { return 3; }
-dynamic test6<T>(a) { return ""; }
-int test7() { return 1; }
-
-
+int test4<B1 extends B>(A1 a) => 2;
+int test5<T>(A a) => 3;
+dynamic test6<T>(a) => "";
+int test7() => 1;