Issue #462: NNBD type-aliases tests for weak mode added.
diff --git a/LanguageFeatures/nnbd/type-aliases/assignability_A01_t02.dart b/LanguageFeatures/nnbd/type-aliases/assignability_A01_t02.dart
index 46640e7..f22d976 100644
--- a/LanguageFeatures/nnbd/type-aliases/assignability_A01_t02.dart
+++ b/LanguageFeatures/nnbd/type-aliases/assignability_A01_t02.dart
@@ -14,7 +14,6 @@
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
 
-import "../../../Utils/expect.dart";
 class A {}
 class B extends A {}
 class C extends A {}
diff --git a/LanguageFeatures/nnbd/weak/type-aliases/assignability_A01_t01.dart b/LanguageFeatures/nnbd/weak/type-aliases/assignability_A01_t01.dart
new file mode 100644
index 0000000..aaf70fe
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-aliases/assignability_A01_t01.dart
@@ -0,0 +1,37 @@
+/*
+ * 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.
+ */
+/**
+ * @assertion A type T is assignable to a type S if T is dynamic, or if T is a
+ * subtype of S.
+ *
+ * @description Checks that a type T is assignable to a type S if T is dynamic,
+ * or if T is a subtype of S. Test type aliases
+ *
+ * @author sgrekhov@unipro.ru
+ */
+// SharedOptions=--enable-experiment=nonfunction-type-aliases
+// Requirements=nnbd-weak
+import "../../../../Utils/expect.dart";
+class A {}
+class C extends A {}
+
+typedef AAlias = A;
+typedef CAlias = C;
+
+main() {
+  dynamic d = "Lily was here";
+  AAlias a1 = new A();
+  AAlias a2 = new C();
+  Expect.throws(() {
+    AAlias a3 = d;
+  });
+
+  AAlias? a4 = new A();
+  AAlias? a5 = new C();
+  Expect.throws(() {
+    AAlias? a6 = d;
+  });
+}
diff --git a/LanguageFeatures/nnbd/type-aliases/exports_A01_opted_in_aliases_lib.dart b/LanguageFeatures/nnbd/weak/type-aliases/exports_A01_opted_in_aliases_lib.dart
similarity index 100%
rename from LanguageFeatures/nnbd/type-aliases/exports_A01_opted_in_aliases_lib.dart
rename to LanguageFeatures/nnbd/weak/type-aliases/exports_A01_opted_in_aliases_lib.dart
diff --git a/LanguageFeatures/nnbd/type-aliases/exports_A01_opted_out_aliases_lib.dart b/LanguageFeatures/nnbd/weak/type-aliases/exports_A01_opted_out_aliases_lib.dart
similarity index 100%
rename from LanguageFeatures/nnbd/type-aliases/exports_A01_opted_out_aliases_lib.dart
rename to LanguageFeatures/nnbd/weak/type-aliases/exports_A01_opted_out_aliases_lib.dart
diff --git a/LanguageFeatures/nnbd/type-aliases/exports_A01_typedef2_t01.dart b/LanguageFeatures/nnbd/weak/type-aliases/exports_A01_typedef2_t01.dart
similarity index 97%
rename from LanguageFeatures/nnbd/type-aliases/exports_A01_typedef2_t01.dart
rename to LanguageFeatures/nnbd/weak/type-aliases/exports_A01_typedef2_t01.dart
index 24bc293..1b5d482 100644
--- a/LanguageFeatures/nnbd/type-aliases/exports_A01_typedef2_t01.dart
+++ b/LanguageFeatures/nnbd/weak/type-aliases/exports_A01_typedef2_t01.dart
@@ -15,7 +15,7 @@
 // Requirements=nnbd-weak
 
 import "dart:async";
-import "../../../Utils/expect.dart";
+import "../../../../Utils/expect.dart";
 import "exports_A01_opted_out_aliases_lib.dart";
 
 typedef exp_A                                              = A?         ;
diff --git a/LanguageFeatures/nnbd/type-aliases/exports_A01_typedef2_t02.dart b/LanguageFeatures/nnbd/weak/type-aliases/exports_A01_typedef2_t02.dart
similarity index 96%
rename from LanguageFeatures/nnbd/type-aliases/exports_A01_typedef2_t02.dart
rename to LanguageFeatures/nnbd/weak/type-aliases/exports_A01_typedef2_t02.dart
index 2431450..0367a92 100644
--- a/LanguageFeatures/nnbd/type-aliases/exports_A01_typedef2_t02.dart
+++ b/LanguageFeatures/nnbd/weak/type-aliases/exports_A01_typedef2_t02.dart
@@ -15,7 +15,7 @@
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
 // Requirements=nnbd-weak
 
-import "../../../Utils/expect.dart";
+import "../../../../Utils/expect.dart";
 import "exports_A01_opted_out_aliases_lib.dart";
 
 void testme() {}
diff --git a/LanguageFeatures/nnbd/type-aliases/exports_A01_typedef2_t03.dart b/LanguageFeatures/nnbd/weak/type-aliases/exports_A01_typedef2_t03.dart
similarity index 96%
rename from LanguageFeatures/nnbd/type-aliases/exports_A01_typedef2_t03.dart
rename to LanguageFeatures/nnbd/weak/type-aliases/exports_A01_typedef2_t03.dart
index f2c8dc8..53d0625 100644
--- a/LanguageFeatures/nnbd/type-aliases/exports_A01_typedef2_t03.dart
+++ b/LanguageFeatures/nnbd/weak/type-aliases/exports_A01_typedef2_t03.dart
@@ -15,7 +15,7 @@
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
 // Requirements=nnbd-weak
 
-import "../../../Utils/expect.dart";
+import "../../../../Utils/expect.dart";
 import "exports_A01_opted_out_aliases_lib.dart";
 
 main() {
diff --git a/LanguageFeatures/nnbd/type-aliases/exports_A01_typedef2_t04.dart b/LanguageFeatures/nnbd/weak/type-aliases/exports_A01_typedef2_t04.dart
similarity index 97%
rename from LanguageFeatures/nnbd/type-aliases/exports_A01_typedef2_t04.dart
rename to LanguageFeatures/nnbd/weak/type-aliases/exports_A01_typedef2_t04.dart
index 230427f..e1b1c7a 100644
--- a/LanguageFeatures/nnbd/type-aliases/exports_A01_typedef2_t04.dart
+++ b/LanguageFeatures/nnbd/weak/type-aliases/exports_A01_typedef2_t04.dart
@@ -16,7 +16,7 @@
 // Requirements=nnbd-weak
 
 import "dart:async";
-import "../../../Utils/expect.dart";
+import "../../../../Utils/expect.dart";
 import "exports_A01_opted_out_aliases_lib.dart";
 
 typedef exp_A                          = A          ;
diff --git a/LanguageFeatures/nnbd/type-aliases/exports_A01_typedef2_t05.dart b/LanguageFeatures/nnbd/weak/type-aliases/exports_A01_typedef2_t05.dart
similarity index 96%
rename from LanguageFeatures/nnbd/type-aliases/exports_A01_typedef2_t05.dart
rename to LanguageFeatures/nnbd/weak/type-aliases/exports_A01_typedef2_t05.dart
index 3af5a87..1740f65 100644
--- a/LanguageFeatures/nnbd/type-aliases/exports_A01_typedef2_t05.dart
+++ b/LanguageFeatures/nnbd/weak/type-aliases/exports_A01_typedef2_t05.dart
@@ -15,7 +15,7 @@
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
 // Requirements=nnbd-weak
 
-import "../../../Utils/expect.dart";
+import "../../../../Utils/expect.dart";
 import "exports_A01_opted_out_aliases_lib.dart";
 
 void testme() {}
diff --git a/LanguageFeatures/nnbd/type-aliases/exports_A01_typedef2_t06.dart b/LanguageFeatures/nnbd/weak/type-aliases/exports_A01_typedef2_t06.dart
similarity index 100%
rename from LanguageFeatures/nnbd/type-aliases/exports_A01_typedef2_t06.dart
rename to LanguageFeatures/nnbd/weak/type-aliases/exports_A01_typedef2_t06.dart
diff --git a/LanguageFeatures/nnbd/type-aliases/exports_A01_typedef2_t07.dart b/LanguageFeatures/nnbd/weak/type-aliases/exports_A01_typedef2_t07.dart
similarity index 95%
rename from LanguageFeatures/nnbd/type-aliases/exports_A01_typedef2_t07.dart
rename to LanguageFeatures/nnbd/weak/type-aliases/exports_A01_typedef2_t07.dart
index 3f9f631..bb4522a 100644
--- a/LanguageFeatures/nnbd/type-aliases/exports_A01_typedef2_t07.dart
+++ b/LanguageFeatures/nnbd/weak/type-aliases/exports_A01_typedef2_t07.dart
@@ -15,7 +15,7 @@
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
 // Requirements=nnbd-weak
 
-import "../../../Utils/expect.dart";
+import "../../../../Utils/expect.dart";
 import "exports_A01_opted_out_aliases_lib.dart";
 
 main() {
diff --git a/LanguageFeatures/nnbd/type-aliases/exports_A01_typedef2_t08.dart b/LanguageFeatures/nnbd/weak/type-aliases/exports_A01_typedef2_t08.dart
similarity index 100%
rename from LanguageFeatures/nnbd/type-aliases/exports_A01_typedef2_t08.dart
rename to LanguageFeatures/nnbd/weak/type-aliases/exports_A01_typedef2_t08.dart
diff --git a/LanguageFeatures/nnbd/type-aliases/exports_A01_typedef2_t09.dart b/LanguageFeatures/nnbd/weak/type-aliases/exports_A01_typedef2_t09.dart
similarity index 100%
rename from LanguageFeatures/nnbd/type-aliases/exports_A01_typedef2_t09.dart
rename to LanguageFeatures/nnbd/weak/type-aliases/exports_A01_typedef2_t09.dart
diff --git a/LanguageFeatures/nnbd/weak/type-aliases/extension_method_resolution_A01_t05.dart b/LanguageFeatures/nnbd/weak/type-aliases/extension_method_resolution_A01_t05.dart
new file mode 100644
index 0000000..dc512da
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-aliases/extension_method_resolution_A01_t05.dart
@@ -0,0 +1,32 @@
+/*
+ * 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.
+ */
+/**
+ * @assertion For the purposes of extension method resolution, there is no
+ * special treatment of nullable types with respect to what members are
+ * considered accessible. That is, the only members of a nullable type that are
+ * considered accessible (and hence which take precedence over extensions) are
+ * the members on Object.
+ *
+ * @description Check that extension method resolution is applicable to the
+ * nullable type. Test type alias for A?
+ * @author sgrekhov@unipro.ru
+ * @issue 41349
+ */
+// SharedOptions=--enable-experiment=nonfunction-type-aliases
+// Requirements=nnbd-weak
+
+import "../../../../Utils/expect.dart";
+
+typedef IntAlias = int?;
+
+extension on IntAlias {
+  bool get isEven => this?.isEven ?? true;
+}
+
+void main() {
+  IntAlias i = null;
+  Expect.isTrue(i.isEven);
+}
diff --git a/LanguageFeatures/nnbd/weak/type-aliases/extension_method_resolution_A01_t06.dart b/LanguageFeatures/nnbd/weak/type-aliases/extension_method_resolution_A01_t06.dart
new file mode 100644
index 0000000..19913ad
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-aliases/extension_method_resolution_A01_t06.dart
@@ -0,0 +1,30 @@
+/*
+ * 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.
+ */
+/**
+ * @assertion For the purposes of extension method resolution, there is no
+ * special treatment of nullable types with respect to what members are
+ * considered accessible. That is, the only members of a nullable type that are
+ * considered accessible (and hence which take precedence over extensions) are
+ * the members on Object.
+ *
+ * @description Check that extension method resolution is applicable to the
+ * nullable type. Test type aliases
+ * @author sgrekhov@unipro.ru
+ */
+// SharedOptions=--enable-experiment=nonfunction-type-aliases
+// Requirements=nnbd-weak
+
+import "../../../../Utils/expect.dart";
+
+typedef IntAlias = int;
+
+extension on IntAlias {
+  bool get isEven => false;
+}
+main() {
+  IntAlias? i = 42;
+  Expect.isTrue(i?.isEven);
+}
\ No newline at end of file
diff --git a/LanguageFeatures/nnbd/type-aliases/generics_A01_t03.dart b/LanguageFeatures/nnbd/weak/type-aliases/generics_A01_t03.dart
similarity index 93%
rename from LanguageFeatures/nnbd/type-aliases/generics_A01_t03.dart
rename to LanguageFeatures/nnbd/weak/type-aliases/generics_A01_t03.dart
index ecd08b3..2495df0 100644
--- a/LanguageFeatures/nnbd/type-aliases/generics_A01_t03.dart
+++ b/LanguageFeatures/nnbd/weak/type-aliases/generics_A01_t03.dart
@@ -15,9 +15,9 @@
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
-// Requirements=nnbd-strong
+// Requirements=nnbd-weak
 
-import "../../../Utils/expect.dart";
+import "../../../../Utils/expect.dart";
 
 class A<T> {}
 typedef AAlias<T> = A<T>;
diff --git a/LanguageFeatures/nnbd/type-aliases/generics_A01_t04.dart b/LanguageFeatures/nnbd/weak/type-aliases/generics_A01_t04.dart
similarity index 93%
rename from LanguageFeatures/nnbd/type-aliases/generics_A01_t04.dart
rename to LanguageFeatures/nnbd/weak/type-aliases/generics_A01_t04.dart
index 4f05375..7e5f715 100644
--- a/LanguageFeatures/nnbd/type-aliases/generics_A01_t04.dart
+++ b/LanguageFeatures/nnbd/weak/type-aliases/generics_A01_t04.dart
@@ -13,9 +13,9 @@
  * @author iarkh@unipro.ru
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
-// Requirements=nnbd-strong
+// Requirements=nnbd-weak
 
-import "../../../Utils/expect.dart";
+import "../../../../Utils/expect.dart";
 
 class A<T> {}
 typedef AAlias<T> = A<T>;
diff --git a/LanguageFeatures/nnbd/type-aliases/legacy_libraries_A01_t03.dart b/LanguageFeatures/nnbd/weak/type-aliases/legacy_libraries_A01_t03.dart
similarity index 96%
rename from LanguageFeatures/nnbd/type-aliases/legacy_libraries_A01_t03.dart
rename to LanguageFeatures/nnbd/weak/type-aliases/legacy_libraries_A01_t03.dart
index 2646ec5..3ad2171 100644
--- a/LanguageFeatures/nnbd/type-aliases/legacy_libraries_A01_t03.dart
+++ b/LanguageFeatures/nnbd/weak/type-aliases/legacy_libraries_A01_t03.dart
@@ -18,7 +18,7 @@
 // @dart=2.6
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
 // Requirements=nnbd-weak
-import "../../../Utils/expect.dart";
+import "../../../../Utils/expect.dart";
 import "opted_in_aliases_lib.dart";
 
 main() {
diff --git a/LanguageFeatures/nnbd/type-aliases/legacy_libraries_A01_t04.dart b/LanguageFeatures/nnbd/weak/type-aliases/legacy_libraries_A01_t04.dart
similarity index 96%
rename from LanguageFeatures/nnbd/type-aliases/legacy_libraries_A01_t04.dart
rename to LanguageFeatures/nnbd/weak/type-aliases/legacy_libraries_A01_t04.dart
index b974c14..eae4193 100644
--- a/LanguageFeatures/nnbd/type-aliases/legacy_libraries_A01_t04.dart
+++ b/LanguageFeatures/nnbd/weak/type-aliases/legacy_libraries_A01_t04.dart
@@ -18,7 +18,7 @@
 // @dart=2.6
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
 // Requirements=nnbd-weak
-import "../../../Utils/expect.dart";
+import "../../../../Utils/expect.dart";
 import "../opted_in_lib.dart";
 
 typedef AAlias = A;
diff --git a/LanguageFeatures/nnbd/type-aliases/legacy_libraries_A03_t02.dart b/LanguageFeatures/nnbd/weak/type-aliases/legacy_libraries_A03_t02.dart
similarity index 95%
rename from LanguageFeatures/nnbd/type-aliases/legacy_libraries_A03_t02.dart
rename to LanguageFeatures/nnbd/weak/type-aliases/legacy_libraries_A03_t02.dart
index 68fa42c..0a4354e 100644
--- a/LanguageFeatures/nnbd/type-aliases/legacy_libraries_A03_t02.dart
+++ b/LanguageFeatures/nnbd/weak/type-aliases/legacy_libraries_A03_t02.dart
@@ -17,7 +17,7 @@
 // @dart=2.6
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
 // Requirements=nnbd-weak
-import "../../../Utils/expect.dart";
+import "../../../../Utils/expect.dart";
 import "opted_in_aliases_lib.dart";
 
 main() {
diff --git a/LanguageFeatures/nnbd/type-aliases/legacy_library_aliases_lib.dart b/LanguageFeatures/nnbd/weak/type-aliases/legacy_library_aliases_lib.dart
similarity index 100%
rename from LanguageFeatures/nnbd/type-aliases/legacy_library_aliases_lib.dart
rename to LanguageFeatures/nnbd/weak/type-aliases/legacy_library_aliases_lib.dart
diff --git a/LanguageFeatures/nnbd/weak/type-aliases/null_aware_operator_A01_t02.dart b/LanguageFeatures/nnbd/weak/type-aliases/null_aware_operator_A01_t02.dart
new file mode 100644
index 0000000..7f34d69
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-aliases/null_aware_operator_A01_t02.dart
@@ -0,0 +1,55 @@
+/*
+ * 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.
+ */
+/**
+ * @assertion A property access e?.f translates to:
+ *  SHORT[EXP(e), fn[x] => x.f]
+ *
+ * @description Check that a property access e?.f translates to:
+ *  SHORT[EXP(e), fn[x] => x.f]. Test type aliases
+ * @author sgrekhov@unipro.ru
+ */
+// SharedOptions=--enable-experiment=nonfunction-type-aliases
+// Requirements=nnbd-weak
+import "../../../../Utils/expect.dart";
+
+class C {
+  String test1 = "Lily was here";
+  String get test2 => "Show must go on";
+}
+
+void testShort(C? x) {
+  var actual = x?.test1;
+  var n0 = x;
+  var expected = n0 == null ? null : n0.test1;
+  Expect.equals(expected, actual);
+
+  var actual2 = x?.test2;
+  var expected2 = n0 == null ? null : n0.test2;
+  Expect.equals(expected2, actual2);
+}
+
+typedef CAlias1 = C?;
+typedef CAlias2 = C;
+
+main() {
+  CAlias1 c1 = null;
+  testShort(c1);
+  c1 = new C();
+  testShort(c1);
+
+  CAlias1? c2 = null;
+  testShort(c2);
+  c2 = new C();
+  testShort(c2);
+
+  CAlias2? c3 = null;
+  testShort(c3);
+  c3 = new C();
+  testShort(c3);
+
+  CAlias2 c4 = new C();
+  testShort(c4);
+}
diff --git a/LanguageFeatures/nnbd/weak/type-aliases/null_aware_operator_A02_t02.dart b/LanguageFeatures/nnbd/weak/type-aliases/null_aware_operator_A02_t02.dart
new file mode 100644
index 0000000..7c0e49a
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-aliases/null_aware_operator_A02_t02.dart
@@ -0,0 +1,48 @@
+/*
+ * 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.
+ */
+/**
+ * @assertion If e translates to F then e.f translates to:
+ *  PASSTHRU[F, fn[x] => x.f]
+ *
+ * @description Check that if e translates to F then e.f translates to:
+ *  PASSTHRU[F, fn[x] => x.f]. Test type aliases
+ * @author sgrekhov@unipro.ru
+ */
+// SharedOptions=--enable-experiment=nonfunction-type-aliases
+// Requirements=nnbd-weak
+import "../../../../Utils/expect.dart";
+
+class C {
+  String test = "Lily was here";
+  String get test2 => "Show must go on";
+}
+
+typedef CAlias1 = C;
+typedef CAlias2 = C?;
+
+main() {
+  CAlias1 c1 = new C();
+  Expect.equals("Lily was here", c1.test);
+  Expect.equals("Show must go on", c1.test2);
+
+  CAlias1? c2 = new C();
+  if (c2 != null) {
+    Expect.equals("Lily was here", c2.test);
+    Expect.equals("Show must go on", c2.test2);
+  }
+
+  CAlias2 c3 = new C();
+  if (c3 != null) {
+    Expect.equals("Lily was here", c3.test);
+    Expect.equals("Show must go on", c3.test2);
+  }
+
+  CAlias2? c4 = new C();
+  if (c4 != null) {
+    Expect.equals("Lily was here", c4.test);
+    Expect.equals("Show must go on", c4.test2);
+  }
+}
diff --git a/LanguageFeatures/nnbd/weak/type-aliases/null_aware_operator_A03_t02.dart b/LanguageFeatures/nnbd/weak/type-aliases/null_aware_operator_A03_t02.dart
new file mode 100644
index 0000000..f053c2e
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-aliases/null_aware_operator_A03_t02.dart
@@ -0,0 +1,56 @@
+/*
+ * 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.
+ */
+/**
+ * @assertion A null aware method call e?.m(args) translates to:
+ *  SHORT[EXP(e), fn[x] => x.m(ARGS(args))]
+ *
+ * @description Check that a null aware method call e?.m(args) translates to:
+ *  SHORT[EXP(e), fn[x] => x.m(ARGS(args))]
+ * @author sgrekhov@unipro.ru
+ */
+// SharedOptions=--enable-experiment=nonfunction-type-aliases
+// Requirements=nnbd-weak
+import "../../../../Utils/expect.dart";
+
+class C {
+  String test1() => "Lily was here";
+  String test2(String arg) => arg;
+}
+
+typedef CAlias1 = C?;
+typedef CAlias2 = C;
+
+void testShort(C? x) {
+  var actual1 = x?.test1();
+  var n1 = x;
+  var expected1 = n1 == null ? null : n1.test1();
+  Expect.equals(expected1, actual1);
+
+  var actual2 = x?.test2("Show must go on");
+  var n2 = x;
+  var expected2 = n2 == null ? null : n2.test2("Show must go on");
+  Expect.equals(expected2, actual2);
+}
+
+main() {
+  CAlias1 c1 = null;
+  testShort(c1);
+  c1 = new C();
+  testShort(c1);
+
+  CAlias1? c2 = null;
+  testShort(c2);
+  c2 = new C();
+  testShort(c2);
+
+  CAlias2? c3 = null;
+  testShort(c3);
+  c3 = new C();
+  testShort(c3);
+
+  CAlias2 c4 = new C();
+  testShort(c4);
+}
diff --git a/LanguageFeatures/nnbd/weak/type-aliases/null_aware_operator_A04_t02.dart b/LanguageFeatures/nnbd/weak/type-aliases/null_aware_operator_A04_t02.dart
new file mode 100644
index 0000000..0a77597
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-aliases/null_aware_operator_A04_t02.dart
@@ -0,0 +1,48 @@
+/*
+ * 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.
+ */
+/**
+ * @assertion If e translates to F then e.m(args) translates to:
+ *  PASSTHRU[F, fn[x] => x.m(ARGS(args))]
+ *
+ * @description Check that if e translates to F then e.m(args) translates to:
+ *  PASSTHRU[F, fn[x] => x.m(ARGS(args))]. Test type aliases
+ * @author sgrekhov@unipro.ru
+ */
+// SharedOptions=--enable-experiment=nonfunction-type-aliases
+// Requirements=nnbd-weak
+import "../../../../Utils/expect.dart";
+
+class C {
+  String test1() => "Lily was here";
+  String test2(String arg) => arg;
+}
+
+typedef CAlias1 = C;
+typedef CAlias2 = C?;
+
+main() {
+  CAlias1 c1 = new C();
+  Expect.equals("Lily was here", c1.test1());
+  Expect.equals("Show must go on", c1.test2("Show must go on"));
+
+  CAlias1? c2 = new C();
+  if (c2 != null) {
+    Expect.equals("Lily was here", c2.test1());
+    Expect.equals("Show must go on", c2.test2("Show must go on"));
+  }
+
+  CAlias2 c3 = new C();
+  if (c3 != null) {
+    Expect.equals("Lily was here", c3.test1());
+    Expect.equals("Show must go on", c3.test2("Show must go on"));
+  }
+
+  CAlias2? c4 = new C();
+  if (c4 != null) {
+    Expect.equals("Lily was here", c4.test1());
+    Expect.equals("Show must go on", c4.test2("Show must go on"));
+  }
+}
diff --git a/LanguageFeatures/nnbd/weak/type-aliases/null_aware_operator_A06_t02.dart b/LanguageFeatures/nnbd/weak/type-aliases/null_aware_operator_A06_t02.dart
new file mode 100644
index 0000000..0b67935
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-aliases/null_aware_operator_A06_t02.dart
@@ -0,0 +1,50 @@
+/*
+ * 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.
+ */
+/**
+ * @assertion If e1 translates to F then e1?[e2] translates to:
+ *  SHORT[EXP(e1), fn[x] => x[EXP(e2)]]
+ *
+ * @description Check that if e1 translates to F then e1?[e2] translates to:
+ *  SHORT[EXP(e1), fn[x] => x[EXP(e2)]]. Test type aliases
+ * @author sgrekhov@unipro.ru
+ */
+// SharedOptions=--enable-experiment=nonfunction-type-aliases
+// Requirements=nnbd-weak
+import "../../../../Utils/expect.dart";
+
+class C {
+  int operator[](int index) => index;
+}
+
+typedef CAlias1 = C?;
+typedef CAlias2 = C;
+
+void testShort(C? x) {
+  var actual1 = x?[42];
+  var n0 = x;
+  var expected1 = n0 == null ? null : n0[42];
+  Expect.equals(expected1, actual1);
+}
+
+main() {
+  CAlias1 c1 = null;
+  testShort(c1);
+  c1 = new C();
+  testShort(c1);
+
+  CAlias1? c2 = null;
+  testShort(c2);
+  c2 = new C();
+  testShort(c2);
+
+  CAlias2? c3 = null;
+  testShort(c3);
+  c3 = new C();
+  testShort(c3);
+
+  CAlias2 c4 = new C();
+  testShort(c4);
+}
diff --git a/LanguageFeatures/nnbd/weak/type-aliases/null_aware_operator_A07_t02.dart b/LanguageFeatures/nnbd/weak/type-aliases/null_aware_operator_A07_t02.dart
new file mode 100644
index 0000000..e5d2e17
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-aliases/null_aware_operator_A07_t02.dart
@@ -0,0 +1,43 @@
+/*
+ * 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.
+ */
+/**
+ * @assertion If e1 translates to F then e1[e2] translates to:
+ *  PASSTHRU[F, fn[x] => x[EXP(e2)]]
+ *
+ * @description If e1 translates to F then e1[e2] translates to:
+ *  PASSTHRU[F, fn[x] => x[EXP(e2)]]. Test type aliases
+ * @author sgrekhov@unipro.ru
+ */
+// SharedOptions=--enable-experiment=nonfunction-type-aliases
+// Requirements=nnbd-weak
+import "../../../../Utils/expect.dart";
+
+class C {
+  int operator[](int index) => index;
+}
+
+typedef CAlias1 = C;
+typedef CAlias2 = C?;
+
+main() {
+  CAlias1 c1 = new C();
+  Expect.equals(42, c1[42]);
+
+  CAlias1? c2 = new C();
+  if (c2 != null) {
+    Expect.equals(42, c2[42]);
+  }
+
+  CAlias2 c3 = new C();
+  if (c3 != null) {
+    Expect.equals(42, c3[42]);
+  }
+
+  CAlias2? c4 = new C();
+  if (c4 != null) {
+    Expect.equals(42, c4[42]);
+  }
+}
diff --git a/LanguageFeatures/nnbd/weak/type-aliases/null_aware_operator_A08_t02.dart b/LanguageFeatures/nnbd/weak/type-aliases/null_aware_operator_A08_t02.dart
new file mode 100644
index 0000000..c0889cf
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-aliases/null_aware_operator_A08_t02.dart
@@ -0,0 +1,57 @@
+/*
+ * 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.
+ */
+/**
+ * @assertion The assignment e1?.f = e2 translates to:
+ *  SHORT[EXP(e1), fn[x] => x.f = EXP(e2)]
+ *
+ * @description Check that the assignment e1?.f = e2 translates to:
+ *  SHORT[EXP(e1), fn[x] => x.f = EXP(e2)]. Test type aliases
+ * @author sgrekhov@unipro.ru
+ */
+// SharedOptions=--enable-experiment=nonfunction-type-aliases
+// Requirements=nnbd-weak
+import "../../../../Utils/expect.dart";
+
+class C {
+  String test1 = "Lily was here";
+  void set test2(String v) {
+    this.test1 = v;
+  }
+}
+
+typedef CAlias1 = C?;
+typedef CAlias2 = C;
+
+void testShort(C? x, String e2) {
+  var actual1 = x?.test1 = e2;
+  var n0 = x;
+  var expected1 = n0 == null ? null : n0.test1 = e2;
+  Expect.equals(expected1, actual1);
+
+  var actual2 = x?.test2 = e2;
+  var expected2 = n0 == null ? null : n0.test2 = e2;
+  Expect.equals(expected2, actual2);
+}
+
+main() {
+  CAlias1 c1 = null;
+  testShort(c1, "Show must go on");
+  c1 = new C();
+  testShort(c1, "Show must go on");
+
+  CAlias1? c2 = null;
+  testShort(c2, "Show must go on");
+  c2 = new C();
+  testShort(c2, "Show must go on");
+
+  CAlias2? c3 = null;
+  testShort(c3, "Show must go on");
+  c3 = new C();
+  testShort(c3, "Show must go on");
+
+  CAlias2 c4 = new C();
+  testShort(c4, "Show must go on");
+}
diff --git a/LanguageFeatures/nnbd/weak/type-aliases/null_aware_operator_A10_t02.dart b/LanguageFeatures/nnbd/weak/type-aliases/null_aware_operator_A10_t02.dart
new file mode 100644
index 0000000..8aab582
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-aliases/null_aware_operator_A10_t02.dart
@@ -0,0 +1,50 @@
+/*
+ * 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.
+ */
+/**
+ * @assertion If e1 translates to F then e1.f = e2 translates to:
+ *  PASSTHRU[F, fn[x] => x.f = EXP(e2)]
+ *
+ * @description Check that If e1 translates to F then e1.f = e2 translates to:
+ *  PASSTHRU[F, fn[x] => x.f = EXP(e2)]. Test type aliases
+ * @author sgrekhov@unipro.ru
+ */
+// SharedOptions=--enable-experiment=nonfunction-type-aliases
+// Requirements=nnbd-weak
+import "../../../../Utils/expect.dart";
+
+class C {
+  String test1 = "Lily was here";
+  void set test2(String v) {
+    this.test1 = v;
+  }
+}
+
+typedef CAlias1 = C?;
+typedef CAlias2 = C;
+
+main() {
+  CAlias1 c1 = new C();
+  if (c1 != null) {
+    Expect.equals("Show must go on", c1.test1 = "Show must go on");
+    Expect.equals("No woman no cry", c1.test2 = "No woman no cry");
+  }
+
+  CAlias1? c2 = new C();
+  if (c2 != null) {
+    Expect.equals("Show must go on", c2.test1 = "Show must go on");
+    Expect.equals("No woman no cry", c2.test2 = "No woman no cry");
+  }
+
+  CAlias2? c3 = new C();
+  if (c3 != null) {
+    Expect.equals("Show must go on", c3.test1 = "Show must go on");
+    Expect.equals("No woman no cry", c3.test2 = "No woman no cry");
+  }
+
+  CAlias2 c4 = new C();
+  Expect.equals("Show must go on", c4.test1 = "Show must go on");
+  Expect.equals("No woman no cry", c4.test2 = "No woman no cry");
+}
diff --git a/LanguageFeatures/nnbd/weak/type-aliases/null_aware_operator_A12_t02.dart b/LanguageFeatures/nnbd/weak/type-aliases/null_aware_operator_A12_t02.dart
new file mode 100644
index 0000000..e574b92
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-aliases/null_aware_operator_A12_t02.dart
@@ -0,0 +1,54 @@
+/*
+ * 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.
+ */
+/**
+ * @assertion If e1 translates to F then e1?[e2] = e3 translates to:
+ *  SHORT[EXP(e1), fn[x] => x[EXP(e2)] = EXP(e3)]
+ *
+ * @description Check that if e1 translates to F then e1?[e2] = e3 translates
+ * to: SHORT[EXP(e1), fn[x] => x[EXP(e2)] = EXP(e3)]. Test type aliases
+ * @author sgrekhov@unipro.ru
+ */
+// SharedOptions=--enable-experiment=nonfunction-type-aliases
+// Requirements=nnbd-weak
+import "../../../../Utils/expect.dart";
+
+class C {
+  List _list;
+  void operator[]=(int index, dynamic value) => _list[index] = value;
+
+  C(int length) :  _list = new List.filled(length, null);
+}
+
+typedef CAlias1 = C?;
+typedef CAlias2 = C;
+
+void testShort(C? x, int index, dynamic value) {
+  var actual = x?[index] = value;
+  var n0 = x;
+  var expected = n0 == null ? null : n0[index] = value;
+  Expect.equals(expected, actual);
+}
+
+
+main() {
+  CAlias1 c1 = null;
+  testShort(c1, 42, "Lily was here");
+  c1 = new C(3);
+  testShort(c1, 2, "Show must go on");
+
+  CAlias1? c2 = null;
+  testShort(c2, 42, "Lily was here");
+  c2 = new C(3);
+  testShort(c2, 2, "Show must go on");
+
+  CAlias2? c3 = null;
+  testShort(c3, 42, "Lily was here");
+  c3 = new C(3);
+  testShort(c3, 2, "Show must go on");
+
+  CAlias2 c4 = new C(3);
+  testShort(c4, 2, "Show must go on");
+}
\ No newline at end of file
diff --git a/LanguageFeatures/nnbd/weak/type-aliases/null_aware_operator_A14_t02.dart b/LanguageFeatures/nnbd/weak/type-aliases/null_aware_operator_A14_t02.dart
new file mode 100644
index 0000000..467378c
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-aliases/null_aware_operator_A14_t02.dart
@@ -0,0 +1,45 @@
+/*
+ * 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.
+ */
+/**
+ * @assertion If e1 translates to F then e1[e2] = e3 translates to:
+ *  PASSTHRU[F, fn[x] => x[EXP(e2)] = EXP(e3)]
+ *
+ * @description Check that if e1 translates to F then e1[e2] = e3 translates to:
+ *  PASSTHRU[F, fn[x] => x[EXP(e2)] = EXP(e3)]. Test type aliases
+ * @author sgrekhov@unipro.ru
+ */
+// SharedOptions=--enable-experiment=nonfunction-type-aliases
+// Requirements=nnbd-weak
+import "../../../../Utils/expect.dart";
+
+class C {
+  List<int> _list = [3, 1, 4];
+  int operator[](int index) => _list[index];
+  void operator[]=(int index, dynamic value) => _list[index] = value;
+}
+
+typedef CAlias1 = C?;
+typedef CAlias2 = C;
+
+main() {
+  CAlias1 c1 = new C();
+  if (c1 != null) {
+    Expect.equals(42, c1[0] = 42);
+  }
+
+  CAlias1? c2 = new C();
+  if (c2 != null) {
+    Expect.equals(42, c2[0] = 42);
+  }
+
+  CAlias2? c3 = new C();
+  if (c3 != null) {
+    Expect.equals(42, c3[0] = 42);
+  }
+
+  CAlias2 c4 = new C();
+  Expect.equals(42, c4[0] = 42);
+}
diff --git a/LanguageFeatures/nnbd/weak/type-aliases/null_aware_operator_A16_t02.dart b/LanguageFeatures/nnbd/weak/type-aliases/null_aware_operator_A16_t02.dart
new file mode 100644
index 0000000..4d3681e
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-aliases/null_aware_operator_A16_t02.dart
@@ -0,0 +1,116 @@
+/*
+ * 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.
+ */
+/**
+ * @assertion A cascade expression e..s translates as follows, where F is the
+ * translation of e and x and y are fresh object level variables:
+ *  fn[k : Exp -> Exp] : Exp =>
+ *      F[fn[r : Exp] : Exp => let x = r in
+ *                             let y = EXP(x.s)
+ *                             in k[x]
+ *  ]
+ *
+ * @description Check that a cascade expression e..s translates as follows,
+ * where F is the translation of e and x and y are fresh object level variables:
+ *  fn[k : Exp -> Exp] : Exp =>
+ *      F[fn[r : Exp] : Exp => let x = r in
+ *                             let y = EXP(x.s)
+ *                             in k[x]
+ *  ]
+ *  Test type aliases
+ * @author sgrekhov@unipro.ru
+ */
+// SharedOptions=--enable-experiment=nonfunction-type-aliases
+// Requirements=nnbd-weak
+import "../../../../Utils/expect.dart";
+
+class C {
+  int c1 = 0, c2 = 0;
+  String get log => "test1 called $c1 times, test2() called $c2 times";
+
+  String get test1 {
+    c1++;
+    return "Show must go on";
+  }
+
+  String test2() {
+    c2++;
+    return "Let it be";
+  }
+}
+
+typedef CAlias1 = C;
+typedef CAlias2 = C?;
+
+main() {
+  CAlias1 c1 = new C();
+
+  var actual1 = c1 .. test1;
+  var expected = c1;
+  Expect.equals(expected, actual1);
+  Expect.equals("test1 called 1 times, test2() called 0 times", c1.log);
+
+  var actual2 = c1 .. test2();
+  Expect.equals(expected, actual2);
+  Expect.equals("test1 called 1 times, test2() called 1 times", c1.log);
+
+  var actual3 = c1
+    .. test1
+    .. test2();
+  Expect.equals(expected, actual3);
+  Expect.equals("test1 called 2 times, test2() called 2 times", c1.log);
+
+  CAlias1? c2 = new C();
+  if (c2 != null) {
+    var actual4 = c2 .. test1;
+    var expected2 = c2;
+    Expect.equals(expected2, actual4);
+    Expect.equals("test1 called 1 times, test2() called 0 times", c2.log);
+
+    var actual5 = c2 .. test2();
+    Expect.equals(expected2, actual5);
+    Expect.equals("test1 called 1 times, test2() called 1 times", c2.log);
+
+    var actual6 = c2 .. test1 .. test2();
+    Expect.equals(expected2, actual6);
+    Expect.equals("test1 called 2 times, test2() called 2 times", c2.log);
+  }
+
+  CAlias2 c3 = new C();
+  if (c3 != null) {
+    var actual7 = c3 .. test1;
+    var expected3 = c3;
+    Expect.equals(expected3, actual7);
+    Expect.equals("test1 called 1 times, test2() called 0 times", c3.log);
+
+    var actual8 = c3.. test2();
+    Expect.equals(expected3, actual8);
+    Expect.equals("test1 called 1 times, test2() called 1 times", c3.log);
+
+    var actual9 = c3
+      .. test1
+      .. test2();
+    Expect.equals(expected3, actual9);
+    Expect.equals("test1 called 2 times, test2() called 2 times", c3.log);
+  }
+
+  CAlias2? c4 = new C();
+  if (c4 != null) {
+    var actual10 = c4 .. test1;
+    var expected4 = c4;
+    Expect.equals(expected4, actual10);
+    Expect.equals("test1 called 1 times, test2() called 0 times", c4.log);
+
+    var actual5 = c4 .. test2();
+    Expect.equals(expected4, actual10);
+    Expect.equals("test1 called 1 times, test2() called 1 times", c4.log);
+
+    var actual6 = c4
+      .. test1
+      .. test2();
+    Expect.equals(expected4, actual10);
+    Expect.equals("test1 called 2 times, test2() called 2 times", c4.log);
+  }
+}
diff --git a/LanguageFeatures/nnbd/weak/type-aliases/null_aware_operator_A17_t02.dart b/LanguageFeatures/nnbd/weak/type-aliases/null_aware_operator_A17_t02.dart
new file mode 100644
index 0000000..096d4e4
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-aliases/null_aware_operator_A17_t02.dart
@@ -0,0 +1,136 @@
+/*
+ * 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.
+ */
+/**
+ * @assertion A null-shorting cascade expression e?..s translates as follows,
+ * where x and y are fresh object level variables.
+ *  fn[k : Exp -> Exp] : Exp =>
+ *  let x = EXP(e) in x == null ? null : let y = EXP(x.s) in k(x)
+ *
+ * @description Check that a null-shorting cascade expression e?..s translates
+ * as follows, where x and y are fresh object level variables.
+ *  fn[k : Exp -> Exp] : Exp =>
+ *  let x = EXP(e) in x == null ? null : let y = EXP(x.s) in k(x)
+ * Test type aliases
+ * @author sgrekhov@unipro.ru
+ * @issue 39141
+ */
+// SharedOptions=--enable-experiment=nonfunction-type-aliases
+// Requirements=nnbd-weak
+import "../../../../Utils/expect.dart";
+
+class C {
+  int c1 = 0, c2 = 0;
+  String get log => "test1 called $c1 times, test2() called $c2 times";
+
+  String get test1 {
+    c1++;
+    return "Show must go on";
+  }
+
+  String test2() {
+    c2++;
+    return "Let it be";
+  }
+}
+
+typedef CAlias1 = C;
+typedef CAlias2 = C?;
+
+main() {
+  CAlias1 c1 = new C();
+  var actual1 = c1 ?.. test1;           /// static type warning
+  var expected = c1;
+  Expect.equals(expected, actual1);
+  Expect.equals("test1 called 1 times, test2() called 0 times", c1.log);
+
+  var actual2 = c1 ?.. test2();         /// static type warning
+  Expect.equals(expected, actual2);
+  Expect.equals("test1 called 1 times, test2() called 1 times", c1.log);
+
+  var actual3 = c1                      /// static type warning
+    ?.. test1
+    .. test2();
+  Expect.equals(expected, actual3);
+  Expect.equals("test1 called 2 times, test2() called 2 times", c1.log);
+
+  CAlias1? c2 = null;
+  var actual4 = c2 ?.. test1;
+  Expect.isNull(actual4);
+
+  var actual5 = c2 ?.. test2();
+  Expect.isNull(actual5);
+
+  var actual6 = c2
+    ?.. test1
+    .. test2();
+  Expect.isNull(actual6);
+
+  c2 = new C();
+  var actual7 = c2 ?.. test1;             /// static type warning
+  var expected2 = c2;
+  Expect.equals(expected2, actual7);
+  Expect.equals("test1 called 1 times, test2() called 0 times", c2?.log);   /// static type warning
+
+  var actual8 = c2 ?.. test2();           /// static type warning
+  Expect.equals(expected2, actual8);
+  Expect.equals("test1 called 1 times, test2() called 1 times", c2?.log);   /// static type warning
+
+  var actual9 = c2                        /// static type warning
+      ?.. test1
+      .. test2();
+  Expect.equals(expected2, actual9);
+  Expect.equals("test1 called 2 times, test2() called 2 times", c2?.log);   /// static type warning
+
+  CAlias2 c3 = new C();
+  var actual10 = c3 ?.. test1;
+  var expected3 = c3;
+  Expect.equals(expected3, actual10);
+  if (c3 != null) {
+    Expect.equals("test1 called 1 times, test2() called 0 times", c3.log);
+  }
+
+  var actual11 = c3 ?.. test2();
+  Expect.equals(expected3, actual11);
+  if (c3 != null) {
+    Expect.equals("test1 called 1 times, test2() called 1 times", c3.log);
+  }
+
+  var actual12 = c3
+      ?.. test1
+  .. test2();
+  Expect.equals(expected3, actual12);
+  if (c3 != null) {
+    Expect.equals("test1 called 2 times, test2() called 2 times", c3.log);
+  }
+
+  CAlias2? c4 = null;
+  var actual13 = c4 ?.. test1;
+  Expect.isNull(actual13);
+
+  var actual14 = c4 ?.. test2();
+  Expect.isNull(actual14);
+
+  var actual15 = c4
+      ?.. test1
+  .. test2();
+  Expect.isNull(actual15);
+
+  c4 = new C();
+  var actual16 = c4 ?.. test1;          /// static type warning
+  var expected4 = c4;
+  Expect.equals(expected4, actual16);
+  Expect.equals("test1 called 1 times, test2() called 0 times", c4?.log);   /// static type warning
+
+  var actual17 = c4 ?.. test2();        /// static type warning
+  Expect.equals(expected4, actual17);
+  Expect.equals("test1 called 1 times, test2() called 1 times", c4?.log);   /// static type warning
+
+  var actual18 = c4                     /// static type warning
+      ?.. test1
+  .. test2();
+  Expect.equals(expected4, actual18);
+  Expect.equals("test1 called 2 times, test2() called 2 times", c4?.log);   /// static type warning
+}
diff --git a/LanguageFeatures/nnbd/type-aliases/null_promotion_A01_t05.dart b/LanguageFeatures/nnbd/weak/type-aliases/null_promotion_A01_t05.dart
similarity index 100%
rename from LanguageFeatures/nnbd/type-aliases/null_promotion_A01_t05.dart
rename to LanguageFeatures/nnbd/weak/type-aliases/null_promotion_A01_t05.dart
diff --git a/LanguageFeatures/nnbd/weak/type-aliases/null_promotion_A01_t08.dart b/LanguageFeatures/nnbd/weak/type-aliases/null_promotion_A01_t08.dart
new file mode 100644
index 0000000..9e9adfe
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-aliases/null_promotion_A01_t08.dart
@@ -0,0 +1,54 @@
+/*
+ * 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.
+ */
+/**
+ * @assertion A check of the form [e == null] or of the form [e is Null] where
+ * [e] has static type [T] promotes the type of [e] to [Null] in the [true]
+ * continuation, and to [NonNull(T)] in the [false] continuation.
+ *
+ * @description Check that [e] is promoted to [NonNull(T)] in the [false]
+ * condition. Test type aliases.
+ * @author iarkh@unipro.ru
+ */
+// SharedOptions=--enable-experiment=nonfunction-type-aliases
+// Requirements=nnbd-weak
+
+class A {
+  foo() {}
+}
+
+typedef AAlias1 = A?;
+typedef AAlias2 = AAlias1?;
+
+dynamic init(x) => x;
+
+main() {
+  AAlias1 a1 = init(A());
+  if (a1 is Null) {
+  } else {
+    a1.foo();
+    AAlias1 a11 = a1;
+    a11.foo();
+  }
+
+  if (a1 == null) {
+  } else {
+    a1.foo();
+    AAlias1 a11 = a1;
+  }
+
+  AAlias2? a2 = init(A());
+  if (a2 is Null) {
+  } else {
+    a2.foo();
+    AAlias1 a22 = a1;
+  }
+
+  if (a2 == null) {
+  } else {
+    a2.foo();
+    AAlias1 a22 = a1;
+  }
+}
diff --git a/LanguageFeatures/nnbd/type-aliases/null_promotion_A01_t10.dart b/LanguageFeatures/nnbd/weak/type-aliases/null_promotion_A01_t10.dart
similarity index 100%
rename from LanguageFeatures/nnbd/type-aliases/null_promotion_A01_t10.dart
rename to LanguageFeatures/nnbd/weak/type-aliases/null_promotion_A01_t10.dart
diff --git a/LanguageFeatures/nnbd/weak/type-aliases/null_promotion_A02_t04.dart b/LanguageFeatures/nnbd/weak/type-aliases/null_promotion_A02_t04.dart
new file mode 100644
index 0000000..a37829e
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-aliases/null_promotion_A02_t04.dart
@@ -0,0 +1,56 @@
+/*
+ * 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.
+ */
+/**
+ * @assertion A check of the form [e != null] or of the form [e is T] where [e]
+ * has static type [T?] promotes the type of [e] to [T] in the [true]
+ * continuation, and to [Null] in the [false] continuation.
+ *
+ * @description Check that type of [e] is promoted to [T] in the [true]
+ * condition. Test [e is T] expression. Test type aliases
+ * @author iarkh@unipro.ru
+ * @author sgrekhov@unipro.ru
+ */
+// SharedOptions=--enable-experiment=nonfunction-type-aliases
+// Requirements=nnbd-weak
+
+class A {
+  foo() {}
+}
+
+class B<T> {
+  bar() {}
+}
+
+typedef AAlias = A?;
+typedef BAlias1 = B?;
+typedef BAlias2 = B<int>?;
+typedef IntAlias = int?;
+
+main() {
+  AAlias a = new A();
+  if (a is A) {
+    a.foo();
+    A a1 = a;
+  }
+
+  BAlias1 b1 = new B();
+  if (b1 is B) {
+    b1.bar();
+    B b11 = b1;
+  }
+
+  BAlias2 b2 = new B<int>();
+  if (b2 is B<int>) {
+    b2.bar();
+    B b22 = b2;
+  }
+
+  IntAlias i = 42;
+  if (i is int) {
+    i.isOdd;
+    int j = i + 10;
+  }
+}
diff --git a/LanguageFeatures/nnbd/type-aliases/null_promotion_A02_t06.dart b/LanguageFeatures/nnbd/weak/type-aliases/null_promotion_A02_t06.dart
similarity index 100%
rename from LanguageFeatures/nnbd/type-aliases/null_promotion_A02_t06.dart
rename to LanguageFeatures/nnbd/weak/type-aliases/null_promotion_A02_t06.dart
diff --git a/LanguageFeatures/nnbd/type-aliases/null_promotion_A02_t08.dart b/LanguageFeatures/nnbd/weak/type-aliases/null_promotion_A02_t08.dart
similarity index 100%
rename from LanguageFeatures/nnbd/type-aliases/null_promotion_A02_t08.dart
rename to LanguageFeatures/nnbd/weak/type-aliases/null_promotion_A02_t08.dart
diff --git a/LanguageFeatures/nnbd/weak/type-aliases/nullability_definitions_A01_t03.dart b/LanguageFeatures/nnbd/weak/type-aliases/nullability_definitions_A01_t03.dart
new file mode 100644
index 0000000..66b78ae
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-aliases/nullability_definitions_A01_t03.dart
@@ -0,0 +1,36 @@
+/*
+ * 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.
+ */
+/**
+ * @assertion We say that a type T is nullable if Null <: T and not T <: Object.
+ * This is equivalent to the syntactic criterion that T is any of:
+ *  Null
+ *  S? for some S
+ *  S* for some S where S is nullable
+ *  FutureOr<S> for some S where S is nullable
+ *  dynamic
+ *  void
+ *
+ * @description Check that null can be assigned to nullable type. Test S? for
+ * some S. Test type aliases
+ * @author sgrekhov@unipro.ru
+ */
+// SharedOptions=--enable-experiment=nonfunction-type-aliases
+// Requirements=nnbd-weak
+class C {}
+
+typedef CAlias = C?;
+typedef IntAlias = int?;
+typedef StringAlias = String?;
+
+main() {
+  CAlias c = C();
+  c = null;
+
+  IntAlias i = null;
+
+  StringAlias s = "";
+  s = null;
+}
diff --git a/LanguageFeatures/nnbd/weak/type-aliases/nullability_definitions_A01_t07.dart b/LanguageFeatures/nnbd/weak/type-aliases/nullability_definitions_A01_t07.dart
new file mode 100644
index 0000000..a083591
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-aliases/nullability_definitions_A01_t07.dart
@@ -0,0 +1,30 @@
+/*
+ * 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.
+ */
+/**
+ * @assertion We say that a type T is nullable if Null <: T and not T <: Object.
+ * This is equivalent to the syntactic criterion that T is any of:
+ *  Null
+ *  S? for some S
+ *  S* for some S where S is nullable
+ *  FutureOr<S> for some S where S is nullable
+ *  dynamic
+ *  void
+ *
+ * @description Check that null can be assigned to nullable type. Test
+ * FutureOr<S> for some S where S is nullable
+ * @author sgrekhov@unipro.ru
+ */
+// SharedOptions=--enable-experiment=nonfunction-type-aliases
+// Requirements=nnbd-weak
+import "dart:async";
+
+class C {}
+
+typedef CAlias = C?;
+
+main() {
+  FutureOr<CAlias> fo  = null;
+}
diff --git a/LanguageFeatures/nnbd/type-aliases/nullability_definitions_A02_t06.dart b/LanguageFeatures/nnbd/weak/type-aliases/nullability_definitions_A02_t06.dart
similarity index 100%
rename from LanguageFeatures/nnbd/type-aliases/nullability_definitions_A02_t06.dart
rename to LanguageFeatures/nnbd/weak/type-aliases/nullability_definitions_A02_t06.dart
diff --git a/LanguageFeatures/nnbd/type-aliases/nullability_definitions_A02_t12.dart b/LanguageFeatures/nnbd/weak/type-aliases/nullability_definitions_A02_t12.dart
similarity index 100%
rename from LanguageFeatures/nnbd/type-aliases/nullability_definitions_A02_t12.dart
rename to LanguageFeatures/nnbd/weak/type-aliases/nullability_definitions_A02_t12.dart
diff --git a/LanguageFeatures/nnbd/type-aliases/nullability_definitions_A02_t19.dart b/LanguageFeatures/nnbd/weak/type-aliases/nullability_definitions_A02_t19.dart
similarity index 100%
rename from LanguageFeatures/nnbd/type-aliases/nullability_definitions_A02_t19.dart
rename to LanguageFeatures/nnbd/weak/type-aliases/nullability_definitions_A02_t19.dart
diff --git a/LanguageFeatures/nnbd/weak/type-aliases/opted_in_aliases_lib.dart b/LanguageFeatures/nnbd/weak/type-aliases/opted_in_aliases_lib.dart
new file mode 100644
index 0000000..c9e8ee3
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-aliases/opted_in_aliases_lib.dart
@@ -0,0 +1,20 @@
+/*
+ * 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 sgrekhov@unipro.ru
+ */
+library opted_in_aliases_lib;
+
+class A {
+}
+
+typedef AAliasNonNullable = A;
+typedef AAliasNullable = A?;
+typedef StringAliasNonNullable = String;
+typedef StringAliasNullable = String?;
+typedef IntAliasNonNullable = int;
+typedef IntAliasNullable = int?;
+typedef NeverAlias = Never;
diff --git a/LanguageFeatures/nnbd/weak/type-aliases/static_errors_A01_t05.dart b/LanguageFeatures/nnbd/weak/type-aliases/static_errors_A01_t05.dart
new file mode 100644
index 0000000..7e5bef9
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-aliases/static_errors_A01_t05.dart
@@ -0,0 +1,32 @@
+/*
+ * 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.
+ */
+/**
+ * @assertion It is an error to call a method, setter, getter or operator on
+ * an expression whose type is potentially nullable and not dynamic, except for
+ * the methods, setters, getters, and operators on Object.
+ *
+ * @description Check that it is no compile-time error to call a method, setter,
+ * getter or operator on an expression whose type is potentially nullable if
+ * they are  methods, setters, getters, and operators on Object. Test type
+ * aliases
+ * @author sgrekhov@unipro.ru
+ */
+// SharedOptions=--enable-experiment=nonfunction-type-aliases
+// Requirements=nnbd-weak
+import "../../../../Utils/expect.dart";
+
+class A {
+}
+
+typedef AAlias = A?;
+
+main() {
+  AAlias x = A();
+  Expect.isNotNull(x.hashCode);
+  Expect.isNotNull(x.toString());
+  Expect.isNotNull(x.runtimeType);
+  Expect.isFalse(x == A());
+}
diff --git a/LanguageFeatures/nnbd/weak/type-aliases/static_errors_A02_t05.dart b/LanguageFeatures/nnbd/weak/type-aliases/static_errors_A02_t05.dart
new file mode 100644
index 0000000..fee6532
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-aliases/static_errors_A02_t05.dart
@@ -0,0 +1,28 @@
+/*
+ * 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.
+ */
+/**
+ * @assertion It is an error to read a field or tear off a method from an
+ * expression whose type is potentially nullable and not dynamic, except for the
+ * methods and fields on Object.
+ *
+ * @description Check that it is no compile-time error to tear off a method
+ * from an expression if this is a method or field on Object. Test type
+ * aliases
+ * @author sgrekhov@unipro.ru
+ */
+// SharedOptions=--enable-experiment=nonfunction-type-aliases
+// Requirements=nnbd-weak
+import "../../../../Utils/expect.dart";
+
+class A {
+}
+
+typedef AAlias = A?;
+
+main() {
+  AAlias a = new A();
+  Expect.isNotNull(a.toString);
+}
diff --git a/LanguageFeatures/nnbd/weak/type-aliases/static_errors_A14_t11.dart b/LanguageFeatures/nnbd/weak/type-aliases/static_errors_A14_t11.dart
new file mode 100644
index 0000000..a38ca7d
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-aliases/static_errors_A14_t11.dart
@@ -0,0 +1,31 @@
+/*
+ * 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.
+ */
+/**
+ * @assertion For the purposes of errors and warnings, the null aware operators
+ * ?., ?.., and ?[] are checked as if the receiver of the operator had
+ * non-nullable type. More specifically, if the type of the receiver of a null
+ * aware operator is T, then the operator is checked as if the receiver had type
+ * NonNull(T).
+ *
+ * @description Check that it is no error if receiver has nullable type. Test
+ * type alias
+ * @author sgrekhov@unipro.ru
+ */
+// SharedOptions=--enable-experiment=nonfunction-type-aliases
+// Requirements=nnbd-weak
+class A {
+  void test() {}
+  int operator[](int index) => 0;
+}
+
+typedef AAlias = A?;
+
+main() {
+  AAlias a = null;
+  a?.test();
+  a ?.. test();
+  a?[0];
+}
diff --git a/LanguageFeatures/nnbd/type-aliases/static_errors_A15_t04.dart b/LanguageFeatures/nnbd/weak/type-aliases/static_errors_A15_t04.dart
similarity index 100%
rename from LanguageFeatures/nnbd/type-aliases/static_errors_A15_t04.dart
rename to LanguageFeatures/nnbd/weak/type-aliases/static_errors_A15_t04.dart
diff --git a/LanguageFeatures/nnbd/weak/type-aliases/static_errors_A17_t02.dart b/LanguageFeatures/nnbd/weak/type-aliases/static_errors_A17_t02.dart
new file mode 100644
index 0000000..0110403
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-aliases/static_errors_A17_t02.dart
@@ -0,0 +1,31 @@
+/*
+ * 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.
+ */
+/**
+ * @assertion It is not an error to call or tear-off a method, setter, or
+ * getter, or to read or write a field, on a receiver of static type Never.
+ * Implementations that provide feedback about dead or unreachable code are
+ * encouraged to indicate that any arguments to the invocation are unreachable.
+ *
+ * @description Check that it is an error to call a method, setter, or getter on
+ * a receiver of static type Never. Test type aliases
+ * @author sgrekhov@unipro.ru
+ * @issue 39866
+ */
+// SharedOptions=--enable-experiment=nonfunction-type-aliases
+// Requirements=nnbd-weak
+typedef Neverland = Never;
+
+void test(var x) {
+  if (x is Neverland) {
+    x.toString();
+    x.runtimeType;
+    x.s = 1;
+  }
+}
+
+main() {
+  test(null);
+}
diff --git a/LanguageFeatures/nnbd/weak/type-aliases/static_errors_A17_t04.dart b/LanguageFeatures/nnbd/weak/type-aliases/static_errors_A17_t04.dart
new file mode 100644
index 0000000..a9f9c11
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-aliases/static_errors_A17_t04.dart
@@ -0,0 +1,36 @@
+/*
+ * 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.
+ */
+/**
+ * @assertion It is not an error to call or tear-off a method, setter, or
+ * getter, or to read or write a field, on a receiver of static type Never.
+ * Implementations that provide feedback about dead or unreachable code are
+ * encouraged to indicate that any arguments to the invocation are unreachable.
+ *
+ * @description Check that it is a warning to call a method, setter, or
+ * getter on a receiver of static type Never via a null aware operator. Test
+ * type aliases
+ * @author sgrekhov@unipro.ru
+ * @issue 39866
+ * @static-warning
+ */
+// SharedOptions=--enable-experiment=nonfunction-type-aliases
+// Requirements=nnbd-weak
+typedef Neverland = Never;
+
+void test(var x) {
+  if (x is Neverland) {
+    x?.toString();      /// static type warning
+    x?.runtimeType;     /// static type warning
+    x?.s = 1;           /// static type warning
+    x?..toString();     /// static type warning
+    x?..runtimeType;    /// static type warning
+    x?..s = 1;          /// static type warning
+  }
+}
+
+main() {
+  test(null);
+}
diff --git a/LanguageFeatures/nnbd/weak/type-aliases/static_errors_A18_t02.dart b/LanguageFeatures/nnbd/weak/type-aliases/static_errors_A18_t02.dart
new file mode 100644
index 0000000..a0d29c8
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-aliases/static_errors_A18_t02.dart
@@ -0,0 +1,29 @@
+/*
+ * 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.
+ */
+/**
+ * @assertion It is not an error to apply an expression of type Never in the
+ * function position of a function call
+ *
+ * @description Check that it is not  an error to apply an expression of type
+ * Never in the function position of a function call. Test type aliases
+ * @author sgrekhov@unipro.ru
+ * @issue 39866
+ */
+// SharedOptions=--enable-experiment=nonfunction-type-aliases
+// Requirements=nnbd-weak
+typedef Neverland = Never;
+
+void test(var x) {
+  if (x is Neverland) {
+    x();
+    x(1);
+    x("1");
+  }
+}
+
+main() {
+  test(null);
+}
diff --git a/LanguageFeatures/nnbd/type-aliases/static_errors_A19_t03.dart b/LanguageFeatures/nnbd/weak/type-aliases/static_errors_A19_t03.dart
similarity index 100%
rename from LanguageFeatures/nnbd/type-aliases/static_errors_A19_t03.dart
rename to LanguageFeatures/nnbd/weak/type-aliases/static_errors_A19_t03.dart
diff --git a/LanguageFeatures/nnbd/weak/type-aliases/static_errors_A32_t03.dart b/LanguageFeatures/nnbd/weak/type-aliases/static_errors_A32_t03.dart
new file mode 100644
index 0000000..a42105a
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-aliases/static_errors_A32_t03.dart
@@ -0,0 +1,35 @@
+/*
+ * 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.
+ */
+/**
+ * @assertion It is a warning to use a null aware operator (?., ?.., ??, ??=,
+ * or ...?) on an expression of type T if T is strictly non-nullable.
+ *
+ * @description Check it is a warning to use a null aware operator (?., ?.., ??,
+ * ??=, or ...?) on a strictly non-nullable receiver. Test type aliases
+ * @author sgrekhov@unipro.ru
+ * @issue 39598
+ */
+// SharedOptions=--enable-experiment=nonfunction-type-aliases
+// Requirements=nnbd-weak
+class A {
+  test() {}
+}
+
+class C extends A {}
+
+typedef AAlias = A;
+typedef CAlias = C;
+
+main() {
+  AAlias a = A();
+  CAlias c = C();
+  a?.test();                                //# 01: static type warning
+  a?..test();                               //# 02: static type warning
+  a ?? c;                                   //# 03: static type warning
+  a ??= c;                                  //# 04: static type warning
+  List<CAlias> clist = [C(), C()];
+  List<A> alist = [A(), C(), ...? clist];   //# 05: static type warning
+}
diff --git a/LanguageFeatures/nnbd/weak/type-aliases/syntax_A01_t04.dart b/LanguageFeatures/nnbd/weak/type-aliases/syntax_A01_t04.dart
new file mode 100644
index 0000000..19d2db4
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-aliases/syntax_A01_t04.dart
@@ -0,0 +1,54 @@
+/*
+ * 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.
+ */
+/**
+ * @assertion The grammar of types is extended to allow any type to be suffixed
+ * with a ? (e.g. int?) indicating the nullable version of that type.
+ *
+ * @description Check that any type can be suffixed with a ? indicating the
+ * nullable version of that type. Test type aliases
+ * @author sgrekhov@unipro.ru
+ */
+// SharedOptions=--enable-experiment=nonfunction-type-aliases
+// Requirements=nnbd-weak
+class A {}
+
+class C<X extends A?> {
+  X x;
+  C(this.x);
+}
+
+A? testA(A? a) => a;
+
+C<X>? testC<X extends A?>(C<X>? c) => c;
+
+int? testInt(int? i) => i;
+
+String? testString(String? s) => s;
+
+Object? testObject(Object? o) => o;
+
+typedef AAlias = A?;
+typedef CAlias = C<A?>?;
+typedef IntAlias = int?;
+typedef StringAlias = String?;
+typedef ObjectAlias = Object?;
+
+main() {
+  AAlias a = null;
+  a = testA(a);
+
+  CAlias c = null;
+  c = testC(c);
+
+  IntAlias i = null;
+  i = testInt(i);
+
+  ObjectAlias o = null;
+  o = testObject(o);
+
+  StringAlias s = null;
+  s = testString(s);
+}
diff --git a/LanguageFeatures/nnbd/weak/type-aliases/syntax_A02_t02.dart b/LanguageFeatures/nnbd/weak/type-aliases/syntax_A02_t02.dart
new file mode 100644
index 0000000..3f7ea3d
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-aliases/syntax_A02_t02.dart
@@ -0,0 +1,25 @@
+/*
+ * 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.
+ */
+/**
+ * @assertion A new primitive type Never. This type is denoted by the built-in
+ * type declaration Never declared in dart:core.
+ *
+ * @description Check new primitive type Never. Test type alias
+ * @author sgrekhov@unipro.ru
+ */
+// SharedOptions=--enable-experiment=nonfunction-type-aliases
+// Requirements=nnbd-weak
+typedef Neverland = Never;
+
+Neverland fail() {
+  throw new Exception();
+}
+
+main() {
+  try {
+    fail();
+  } on Exception catch(_) {}
+}
diff --git a/LanguageFeatures/nnbd/weak/type-aliases/syntax_A02_t04.dart b/LanguageFeatures/nnbd/weak/type-aliases/syntax_A02_t04.dart
new file mode 100644
index 0000000..cb4479f
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-aliases/syntax_A02_t04.dart
@@ -0,0 +1,22 @@
+/*
+ * 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.
+ */
+/**
+ * @assertion A new primitive type Never. This type is denoted by the built-in
+ * type declaration Never declared in dart:core.
+ *
+ * @description Check new primitive type Never
+ * @author sgrekhov@unipro.ru
+ */
+// SharedOptions=--enable-experiment=nonfunction-type-aliases
+// Requirements=nnbd-weak
+import "../../../../Utils/expect.dart";
+
+typedef Neverland = Never;
+
+main() {
+  Object? o;
+  Expect.isFalse(o is Neverland);
+}
diff --git a/LanguageFeatures/nnbd/weak/type-aliases/syntax_A03_t02.dart b/LanguageFeatures/nnbd/weak/type-aliases/syntax_A03_t02.dart
new file mode 100644
index 0000000..dc064e0
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-aliases/syntax_A03_t02.dart
@@ -0,0 +1,25 @@
+/*
+ * 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.
+ */
+/**
+ * @assertion The grammar of expressions is extended to allow any expression to
+ * be suffixed with a !.
+ *
+ * @description Check that any expression can be suffixed with a !. Test type
+ * aliases
+ * @author sgrekhov@unipro.ru
+ */
+// SharedOptions=--enable-experiment=nonfunction-type-aliases
+// Requirements=nnbd-weak
+class C {}
+
+typedef CAlias = C?;
+
+test(C c) {}
+
+main() {
+  CAlias c = new C();
+  test(c!);
+}
diff --git a/LanguageFeatures/nnbd/weak/type-aliases/syntax_A06_t02.dart b/LanguageFeatures/nnbd/weak/type-aliases/syntax_A06_t02.dart
new file mode 100644
index 0000000..f89e2c4
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-aliases/syntax_A06_t02.dart
@@ -0,0 +1,31 @@
+/*
+ * 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.
+ */
+/**
+ * @assertion The grammar of selectors is extended to allow null-aware
+ * subscripting using the syntax e1?[e2] which evaluates to null if e1
+ * evaluates to null and otherwise evaluates as e1[e2].
+ *
+ * @description Check that the grammar of selectors is extended to allow
+ * null-aware subscripting using the syntax e1?[e2] which evaluates to null if
+ * e1 evaluates to null and otherwise evaluates as e1[e2]. Test type aliases
+ * @author sgrekhov@unipro.ru
+ */
+// SharedOptions=--enable-experiment=nonfunction-type-aliases
+// Requirements=nnbd-weak
+import "../../../../Utils/expect.dart";
+
+class C {
+  int operator[](int index) => index * 2;
+}
+
+typedef CAlias = C?;
+
+main() {
+  CAlias c = null;
+  Expect.isNull(c?[42]);
+  c = new C();
+  Expect.equals(4, c?[2]);
+}
diff --git a/LanguageFeatures/nnbd/type-aliases/syntax_A06_t04.dart b/LanguageFeatures/nnbd/weak/type-aliases/syntax_A06_t04.dart
similarity index 96%
rename from LanguageFeatures/nnbd/type-aliases/syntax_A06_t04.dart
rename to LanguageFeatures/nnbd/weak/type-aliases/syntax_A06_t04.dart
index c833b33..90611e4 100644
--- a/LanguageFeatures/nnbd/type-aliases/syntax_A06_t04.dart
+++ b/LanguageFeatures/nnbd/weak/type-aliases/syntax_A06_t04.dart
@@ -16,7 +16,7 @@
  */
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
 // Requirements=nnbd-weak
-import "../../../Utils/expect.dart";
+import "../../../../Utils/expect.dart";
 import "legacy_library_aliases_lib.dart";
 
 typedef AAlias2 = A?;
diff --git a/LanguageFeatures/nnbd/type-aliases/syntax_A07_t04.dart b/LanguageFeatures/nnbd/weak/type-aliases/syntax_A07_t04.dart
similarity index 100%
rename from LanguageFeatures/nnbd/type-aliases/syntax_A07_t04.dart
rename to LanguageFeatures/nnbd/weak/type-aliases/syntax_A07_t04.dart
diff --git a/LanguageFeatures/nnbd/weak/type-aliases/syntax_A07_t06.dart b/LanguageFeatures/nnbd/weak/type-aliases/syntax_A07_t06.dart
new file mode 100644
index 0000000..f676c5d
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-aliases/syntax_A07_t06.dart
@@ -0,0 +1,28 @@
+/*
+ * 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.
+ */
+/**
+ * @assertion The grammar for types does not allow multiple successive ?
+ * operators on a type. That is, the grammar for types is nominally equivalent
+ * to:
+ *  type' ::= functionType
+ *  | qualified typeArguments?
+ *  type ::= type' `?`?
+ *
+ * @description Check that it is no error to have multiple ? but not in the type
+ * declaration. Test type aliases
+ * @author sgrekhov@unipro.ru
+ */
+// SharedOptions=--enable-experiment=nonfunction-type-aliases
+// Requirements=nnbd-weak
+class A {}
+
+typedef AAlias1 = A?;
+typedef AAlias2 = AAlias1?;
+
+main() {
+  AAlias1 a1 = null;
+  AAlias2 a2 = null;
+}
diff --git a/LanguageFeatures/nnbd/type-aliases/type_reification_A01_t05.dart b/LanguageFeatures/nnbd/weak/type-aliases/type_reification_A01_t05.dart
similarity index 95%
rename from LanguageFeatures/nnbd/type-aliases/type_reification_A01_t05.dart
rename to LanguageFeatures/nnbd/weak/type-aliases/type_reification_A01_t05.dart
index 21d8630..92da035 100644
--- a/LanguageFeatures/nnbd/type-aliases/type_reification_A01_t05.dart
+++ b/LanguageFeatures/nnbd/weak/type-aliases/type_reification_A01_t05.dart
@@ -12,7 +12,7 @@
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
 // Requirements=nnbd-weak
 
-import "../../../Utils/expect.dart";
+import "../../../../Utils/expect.dart";
 import "type_reification_legacy_aliases_lib.dart";
 
 main() {
diff --git a/LanguageFeatures/nnbd/type-aliases/type_reification_A01_t06.dart b/LanguageFeatures/nnbd/weak/type-aliases/type_reification_A01_t06.dart
similarity index 94%
rename from LanguageFeatures/nnbd/type-aliases/type_reification_A01_t06.dart
rename to LanguageFeatures/nnbd/weak/type-aliases/type_reification_A01_t06.dart
index 41065ef..2524a2e 100644
--- a/LanguageFeatures/nnbd/type-aliases/type_reification_A01_t06.dart
+++ b/LanguageFeatures/nnbd/weak/type-aliases/type_reification_A01_t06.dart
@@ -12,7 +12,7 @@
 // SharedOptions=--enable-experiment=nonfunction-type-aliases
 // Requirements=nnbd-weak
 
-import "../../../Utils/expect.dart";
+import "../../../../Utils/expect.dart";
 import "type_reification_legacy_aliases_lib.dart";
 
 main() {
diff --git a/LanguageFeatures/nnbd/type-aliases/type_reification_legacy_aliases_lib.dart b/LanguageFeatures/nnbd/weak/type-aliases/type_reification_legacy_aliases_lib.dart
similarity index 100%
rename from LanguageFeatures/nnbd/type-aliases/type_reification_legacy_aliases_lib.dart
rename to LanguageFeatures/nnbd/weak/type-aliases/type_reification_legacy_aliases_lib.dart