diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_bottom_arguments_binding_A01_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_null_arguments_binding_A01_t01.dart
similarity index 97%
rename from LanguageFeatures/Subtyping/dynamic/generated/left_bottom_arguments_binding_A01_t01.dart
rename to LanguageFeatures/Subtyping/dynamic/generated/left_null_arguments_binding_A01_t01.dart
index 5a2978c..e71ac5e 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_bottom_arguments_binding_A01_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_null_arguments_binding_A01_t01.dart
@@ -6,9 +6,9 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Left Bottom: T0 is Null.
+ * Left Null: T0 is Null.
  * @description Check that if type T0 is Null then T0 is a subtype of a type T1.
- * @author ngl@unipro.ru
+ * @author sgrekhov@unipro.ru
  */
 /**
  * @description Check that if type T0 is a subtype of a type T1, then instance
@@ -16,7 +16,7 @@
  * @author sgrekhov@unipro.ru
  */
 /*
- * This test is generated from left_bottom_A01.dart and 
+ * This test is generated from left_null_A01.dart and 
  * arguments_binding_x01.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_bottom_arguments_binding_A01_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_null_arguments_binding_A01_t02.dart
similarity index 97%
rename from LanguageFeatures/Subtyping/dynamic/generated/left_bottom_arguments_binding_A01_t02.dart
rename to LanguageFeatures/Subtyping/dynamic/generated/left_null_arguments_binding_A01_t02.dart
index 2abade1..a5fb55e 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_bottom_arguments_binding_A01_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_null_arguments_binding_A01_t02.dart
@@ -6,9 +6,9 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Left Bottom: T0 is Null.
+ * Left Null: T0 is Null.
  * @description Check that if type T0 is Null then T0 is a subtype of a type T1.
- * @author ngl@unipro.ru
+ * @author sgrekhov@unipro.ru
  */
 /**
  * @description Check that if type T0 is a subtype of a type T1, then instance
@@ -16,7 +16,7 @@
  * @author sgrekhov@unipro.ru
  */
 /*
- * This test is generated from left_bottom_A01.dart and 
+ * This test is generated from left_null_A01.dart and 
  * arguments_binding_x02.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_bottom_arguments_binding_A01_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_null_arguments_binding_A01_t03.dart
similarity index 96%
rename from LanguageFeatures/Subtyping/dynamic/generated/left_bottom_arguments_binding_A01_t03.dart
rename to LanguageFeatures/Subtyping/dynamic/generated/left_null_arguments_binding_A01_t03.dart
index 61a0854..690cbfe 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_bottom_arguments_binding_A01_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_null_arguments_binding_A01_t03.dart
@@ -6,9 +6,9 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Left Bottom: T0 is Null.
+ * Left Null: T0 is Null.
  * @description Check that if type T0 is Null then T0 is a subtype of a type T1.
- * @author ngl@unipro.ru
+ * @author sgrekhov@unipro.ru
  */
 /**
  * @description Check that if type T0 is a subtype of a type T1, then instance
@@ -16,7 +16,7 @@
  * @author sgrekhov@unipro.ru
  */
 /*
- * This test is generated from left_bottom_A01.dart and 
+ * This test is generated from left_null_A01.dart and 
  * arguments_binding_x03.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_bottom_arguments_binding_A02_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_null_arguments_binding_A02_t01.dart
similarity index 97%
rename from LanguageFeatures/Subtyping/dynamic/generated/left_bottom_arguments_binding_A02_t01.dart
rename to LanguageFeatures/Subtyping/dynamic/generated/left_null_arguments_binding_A02_t01.dart
index a81272e..8543ed1 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_bottom_arguments_binding_A02_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_null_arguments_binding_A02_t01.dart
@@ -6,10 +6,10 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Left Bottom: T0 is Null.
+ * Left Null: T0 is Null.
  * @description Check that if type T0 is Null and T1 is dynamic then T0 is a
  * subtype of a type T1.
- * @author ngl@unipro.ru
+ * @author sgrekhov@unipro.ru
  */
 /**
  * @description Check that if type T0 is a subtype of a type T1, then instance
@@ -17,7 +17,7 @@
  * @author sgrekhov@unipro.ru
  */
 /*
- * This test is generated from left_bottom_A02.dart and 
+ * This test is generated from left_null_A02.dart and 
  * arguments_binding_x01.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_bottom_arguments_binding_A02_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_null_arguments_binding_A02_t02.dart
similarity index 97%
rename from LanguageFeatures/Subtyping/dynamic/generated/left_bottom_arguments_binding_A02_t02.dart
rename to LanguageFeatures/Subtyping/dynamic/generated/left_null_arguments_binding_A02_t02.dart
index ff3ac5a..6c3af2b 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_bottom_arguments_binding_A02_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_null_arguments_binding_A02_t02.dart
@@ -6,10 +6,10 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Left Bottom: T0 is Null.
+ * Left Null: T0 is Null.
  * @description Check that if type T0 is Null and T1 is dynamic then T0 is a
  * subtype of a type T1.
- * @author ngl@unipro.ru
+ * @author sgrekhov@unipro.ru
  */
 /**
  * @description Check that if type T0 is a subtype of a type T1, then instance
@@ -17,7 +17,7 @@
  * @author sgrekhov@unipro.ru
  */
 /*
- * This test is generated from left_bottom_A02.dart and 
+ * This test is generated from left_null_A02.dart and 
  * arguments_binding_x02.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_bottom_arguments_binding_A02_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_null_arguments_binding_A02_t03.dart
similarity index 96%
rename from LanguageFeatures/Subtyping/dynamic/generated/left_bottom_arguments_binding_A02_t03.dart
rename to LanguageFeatures/Subtyping/dynamic/generated/left_null_arguments_binding_A02_t03.dart
index 1855272..3f41e87 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_bottom_arguments_binding_A02_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_null_arguments_binding_A02_t03.dart
@@ -6,10 +6,10 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Left Bottom: T0 is Null.
+ * Left Null: T0 is Null.
  * @description Check that if type T0 is Null and T1 is dynamic then T0 is a
  * subtype of a type T1.
- * @author ngl@unipro.ru
+ * @author sgrekhov@unipro.ru
  */
 /**
  * @description Check that if type T0 is a subtype of a type T1, then instance
@@ -17,7 +17,7 @@
  * @author sgrekhov@unipro.ru
  */
 /*
- * This test is generated from left_bottom_A02.dart and 
+ * This test is generated from left_null_A02.dart and 
  * arguments_binding_x03.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_bottom_class_member_A01_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_null_class_member_A01_t01.dart
similarity index 96%
rename from LanguageFeatures/Subtyping/dynamic/generated/left_bottom_class_member_A01_t01.dart
rename to LanguageFeatures/Subtyping/dynamic/generated/left_null_class_member_A01_t01.dart
index 14bdca2..16ec846 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_bottom_class_member_A01_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_null_class_member_A01_t01.dart
@@ -6,9 +6,9 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Left Bottom: T0 is Null.
+ * Left Null: T0 is Null.
  * @description Check that if type T0 is Null then T0 is a subtype of a type T1.
- * @author ngl@unipro.ru
+ * @author sgrekhov@unipro.ru
  */
 /**
  * @description Check that if type T0 is a subtype of a type T1, then instance
@@ -16,7 +16,7 @@
  * @author sgrekhov@unipro.ru
  */
 /*
- * This test is generated from left_bottom_A01.dart and 
+ * This test is generated from left_null_A01.dart and 
  * class_member_x01.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_bottom_class_member_A01_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_null_class_member_A01_t02.dart
similarity index 95%
rename from LanguageFeatures/Subtyping/dynamic/generated/left_bottom_class_member_A01_t02.dart
rename to LanguageFeatures/Subtyping/dynamic/generated/left_null_class_member_A01_t02.dart
index a100691..0e1b615 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_bottom_class_member_A01_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_null_class_member_A01_t02.dart
@@ -6,9 +6,9 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Left Bottom: T0 is Null.
+ * Left Null: T0 is Null.
  * @description Check that if type T0 is Null then T0 is a subtype of a type T1.
- * @author ngl@unipro.ru
+ * @author sgrekhov@unipro.ru
  */
 /**
  * @description Check that if type T0 is a subtype of a type T1, then instance
@@ -16,7 +16,7 @@
  * @author sgrekhov@unipro.ru
  */
 /*
- * This test is generated from left_bottom_A01.dart and 
+ * This test is generated from left_null_A01.dart and 
  * class_member_x02.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_bottom_class_member_A01_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_null_class_member_A01_t03.dart
similarity index 93%
rename from LanguageFeatures/Subtyping/dynamic/generated/left_bottom_class_member_A01_t03.dart
rename to LanguageFeatures/Subtyping/dynamic/generated/left_null_class_member_A01_t03.dart
index 48468aa..48037eb 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_bottom_class_member_A01_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_null_class_member_A01_t03.dart
@@ -6,9 +6,9 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Left Bottom: T0 is Null.
+ * Left Null: T0 is Null.
  * @description Check that if type T0 is Null then T0 is a subtype of a type T1.
- * @author ngl@unipro.ru
+ * @author sgrekhov@unipro.ru
  */
 /**
  * @description Check that if type T0 is a subtype of a type T1, then instance
@@ -16,7 +16,7 @@
  * @author sgrekhov@unipro.ru
  */
 /*
- * This test is generated from left_bottom_A01.dart and 
+ * This test is generated from left_null_A01.dart and 
  * class_member_x03.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_bottom_class_member_A02_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_null_class_member_A02_t01.dart
similarity index 96%
rename from LanguageFeatures/Subtyping/dynamic/generated/left_bottom_class_member_A02_t01.dart
rename to LanguageFeatures/Subtyping/dynamic/generated/left_null_class_member_A02_t01.dart
index 72a1c08..295c6fc 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_bottom_class_member_A02_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_null_class_member_A02_t01.dart
@@ -6,10 +6,10 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Left Bottom: T0 is Null.
+ * Left Null: T0 is Null.
  * @description Check that if type T0 is Null and T1 is dynamic then T0 is a
  * subtype of a type T1.
- * @author ngl@unipro.ru
+ * @author sgrekhov@unipro.ru
  */
 /**
  * @description Check that if type T0 is a subtype of a type T1, then instance
@@ -17,7 +17,7 @@
  * @author sgrekhov@unipro.ru
  */
 /*
- * This test is generated from left_bottom_A02.dart and 
+ * This test is generated from left_null_A02.dart and 
  * class_member_x01.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_bottom_class_member_A02_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_null_class_member_A02_t02.dart
similarity index 95%
rename from LanguageFeatures/Subtyping/dynamic/generated/left_bottom_class_member_A02_t02.dart
rename to LanguageFeatures/Subtyping/dynamic/generated/left_null_class_member_A02_t02.dart
index fab2fd9..9a010d4 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_bottom_class_member_A02_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_null_class_member_A02_t02.dart
@@ -6,10 +6,10 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Left Bottom: T0 is Null.
+ * Left Null: T0 is Null.
  * @description Check that if type T0 is Null and T1 is dynamic then T0 is a
  * subtype of a type T1.
- * @author ngl@unipro.ru
+ * @author sgrekhov@unipro.ru
  */
 /**
  * @description Check that if type T0 is a subtype of a type T1, then instance
@@ -17,7 +17,7 @@
  * @author sgrekhov@unipro.ru
  */
 /*
- * This test is generated from left_bottom_A02.dart and 
+ * This test is generated from left_null_A02.dart and 
  * class_member_x02.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_bottom_class_member_A02_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_null_class_member_A02_t03.dart
similarity index 93%
rename from LanguageFeatures/Subtyping/dynamic/generated/left_bottom_class_member_A02_t03.dart
rename to LanguageFeatures/Subtyping/dynamic/generated/left_null_class_member_A02_t03.dart
index 6dad91a..6be23d3 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_bottom_class_member_A02_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_null_class_member_A02_t03.dart
@@ -6,10 +6,10 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Left Bottom: T0 is Null.
+ * Left Null: T0 is Null.
  * @description Check that if type T0 is Null and T1 is dynamic then T0 is a
  * subtype of a type T1.
- * @author ngl@unipro.ru
+ * @author sgrekhov@unipro.ru
  */
 /**
  * @description Check that if type T0 is a subtype of a type T1, then instance
@@ -17,7 +17,7 @@
  * @author sgrekhov@unipro.ru
  */
 /*
- * This test is generated from left_bottom_A02.dart and 
+ * This test is generated from left_null_A02.dart and 
  * class_member_x03.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_bottom_global_variable_A01_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_null_global_variable_A01_t01.dart
similarity index 92%
rename from LanguageFeatures/Subtyping/dynamic/generated/left_bottom_global_variable_A01_t01.dart
rename to LanguageFeatures/Subtyping/dynamic/generated/left_null_global_variable_A01_t01.dart
index 4f08085..c574a43 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_bottom_global_variable_A01_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_null_global_variable_A01_t01.dart
@@ -6,9 +6,9 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Left Bottom: T0 is Null.
+ * Left Null: T0 is Null.
  * @description Check that if type T0 is Null then T0 is a subtype of a type T1.
- * @author ngl@unipro.ru
+ * @author sgrekhov@unipro.ru
  */
 /**
  * @description Check that if type T0 is a subtype of a type T1, then instance
@@ -16,7 +16,7 @@
  * @author sgrekhov@unipro.ru
  */
 /*
- * This test is generated from left_bottom_A01.dart and 
+ * This test is generated from left_null_A01.dart and 
  * global_variable_x01.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_bottom_global_variable_A02_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_null_global_variable_A02_t01.dart
similarity index 92%
rename from LanguageFeatures/Subtyping/dynamic/generated/left_bottom_global_variable_A02_t01.dart
rename to LanguageFeatures/Subtyping/dynamic/generated/left_null_global_variable_A02_t01.dart
index 91bafe0..be0d015 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_bottom_global_variable_A02_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_null_global_variable_A02_t01.dart
@@ -6,10 +6,10 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Left Bottom: T0 is Null.
+ * Left Null: T0 is Null.
  * @description Check that if type T0 is Null and T1 is dynamic then T0 is a
  * subtype of a type T1.
- * @author ngl@unipro.ru
+ * @author sgrekhov@unipro.ru
  */
 /**
  * @description Check that if type T0 is a subtype of a type T1, then instance
@@ -17,7 +17,7 @@
  * @author sgrekhov@unipro.ru
  */
 /*
- * This test is generated from left_bottom_A02.dart and 
+ * This test is generated from left_null_A02.dart and 
  * global_variable_x01.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_bottom_local_variable_A01_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_null_local_variable_A01_t01.dart
similarity index 92%
rename from LanguageFeatures/Subtyping/dynamic/generated/left_bottom_local_variable_A01_t01.dart
rename to LanguageFeatures/Subtyping/dynamic/generated/left_null_local_variable_A01_t01.dart
index c889e72..469365e 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_bottom_local_variable_A01_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_null_local_variable_A01_t01.dart
@@ -6,9 +6,9 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Left Bottom: T0 is Null.
+ * Left Null: T0 is Null.
  * @description Check that if type T0 is Null then T0 is a subtype of a type T1.
- * @author ngl@unipro.ru
+ * @author sgrekhov@unipro.ru
  */
 /**
  * @description Check that if type T0 is a subtype of a type T1, then instance
@@ -16,7 +16,7 @@
  * @author sgrekhov@unipro.ru
  */
 /*
- * This test is generated from left_bottom_A01.dart and 
+ * This test is generated from left_null_A01.dart and 
  * local_variable_x01.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_bottom_local_variable_A02_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_null_local_variable_A02_t01.dart
similarity index 92%
rename from LanguageFeatures/Subtyping/dynamic/generated/left_bottom_local_variable_A02_t01.dart
rename to LanguageFeatures/Subtyping/dynamic/generated/left_null_local_variable_A02_t01.dart
index 1f27446..9f505a5 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_bottom_local_variable_A02_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_null_local_variable_A02_t01.dart
@@ -6,10 +6,10 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Left Bottom: T0 is Null.
+ * Left Null: T0 is Null.
  * @description Check that if type T0 is Null and T1 is dynamic then T0 is a
  * subtype of a type T1.
- * @author ngl@unipro.ru
+ * @author sgrekhov@unipro.ru
  */
 /**
  * @description Check that if type T0 is a subtype of a type T1, then instance
@@ -17,7 +17,7 @@
  * @author sgrekhov@unipro.ru
  */
 /*
- * This test is generated from left_bottom_A02.dart and 
+ * This test is generated from left_null_A02.dart and 
  * local_variable_x01.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_bottom_return_value_A01_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_null_return_value_A01_t01.dart
similarity index 93%
rename from LanguageFeatures/Subtyping/dynamic/generated/left_bottom_return_value_A01_t01.dart
rename to LanguageFeatures/Subtyping/dynamic/generated/left_null_return_value_A01_t01.dart
index 9b4cd37..fa2cb92 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_bottom_return_value_A01_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_null_return_value_A01_t01.dart
@@ -6,9 +6,9 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Left Bottom: T0 is Null.
+ * Left Null: T0 is Null.
  * @description Check that if type T0 is Null then T0 is a subtype of a type T1.
- * @author ngl@unipro.ru
+ * @author sgrekhov@unipro.ru
  */
 /**
  * @description Check that if type T0 is a subtype of a type T1, then instance
@@ -16,7 +16,7 @@
  * @author sgrekhov@unipro.ru
  */
 /*
- * This test is generated from left_bottom_A01.dart and 
+ * This test is generated from left_null_A01.dart and 
  * return_value_x01.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_bottom_return_value_A02_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_null_return_value_A02_t01.dart
similarity index 93%
rename from LanguageFeatures/Subtyping/dynamic/generated/left_bottom_return_value_A02_t01.dart
rename to LanguageFeatures/Subtyping/dynamic/generated/left_null_return_value_A02_t01.dart
index 0e9a954..102653f 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_bottom_return_value_A02_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_null_return_value_A02_t01.dart
@@ -6,10 +6,10 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Left Bottom: T0 is Null.
+ * Left Null: T0 is Null.
  * @description Check that if type T0 is Null and T1 is dynamic then T0 is a
  * subtype of a type T1.
- * @author ngl@unipro.ru
+ * @author sgrekhov@unipro.ru
  */
 /**
  * @description Check that if type T0 is a subtype of a type T1, then instance
@@ -17,7 +17,7 @@
  * @author sgrekhov@unipro.ru
  */
 /*
- * This test is generated from left_bottom_A02.dart and 
+ * This test is generated from left_null_A02.dart and 
  * return_value_x01.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_bottom_arguments_binding_A02_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_top_arguments_binding_A01_t01.dart
similarity index 69%
copy from LanguageFeatures/Subtyping/dynamic/generated/left_bottom_arguments_binding_A02_t01.dart
copy to LanguageFeatures/Subtyping/dynamic/generated/left_top_arguments_binding_A01_t01.dart
index a81272e..9b564d3 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_bottom_arguments_binding_A02_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_top_arguments_binding_A01_t01.dart
@@ -6,10 +6,10 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Left Bottom: T0 is Null.
- * @description Check that if type T0 is Null and T1 is dynamic then T0 is a
+ * Left Top: if T0 is dynamic or void then T0 <: T1 if Object? <: T1
+ * @description Check that if type T0 is dynamic and Object? <: T1 then T0 is a
  * subtype of a type T1.
- * @author ngl@unipro.ru
+ * @author sgrekhov@unipro.ru
  */
 /**
  * @description Check that if type T0 is a subtype of a type T1, then instance
@@ -17,7 +17,7 @@
  * @author sgrekhov@unipro.ru
  */
 /*
- * This test is generated from left_bottom_A02.dart and 
+ * This test is generated from left_top_A01.dart and 
  * arguments_binding_x01.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
@@ -25,41 +25,42 @@
 
 
 import '../../utils/common.dart';
+// SharedOptions=--enable-experiment=non-nullable
 
 class T1 {}
 
-Null t0Instance = null;
-dynamic t1Instance = new T1();
+dynamic t0Instance = "Show must go on";
+T1? t1Instance = new T1();
 
 
 
 
-namedArgumentsFunc1(dynamic t1, {dynamic t2}) {}
-positionalArgumentsFunc1(dynamic t1, [dynamic t2]) {}
+namedArgumentsFunc1(Object? t1, {Object? t2}) {}
+positionalArgumentsFunc1(Object? t1, [Object? t2]) {}
 
 namedArgumentsFunc2<X>(X t1, {X t2}) {}
 positionalArgumentsFunc2<X>(X t1, [X t2]) {}
 
 class ArgumentsBindingClass {
-  ArgumentsBindingClass(dynamic t1) {}
+  ArgumentsBindingClass(Object? t1) {}
 
-  ArgumentsBindingClass.named(dynamic t1, {dynamic t2}) {}
-  ArgumentsBindingClass.positional(dynamic t1, [dynamic t2]) {}
+  ArgumentsBindingClass.named(Object? t1, {Object? t2}) {}
+  ArgumentsBindingClass.positional(Object? t1, [Object? t2]) {}
 
-  factory ArgumentsBindingClass.fNamed(dynamic t1, {dynamic t2}) {
+  factory ArgumentsBindingClass.fNamed(Object? t1, {Object? t2}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(dynamic t1, [dynamic t2]) {
+  factory ArgumentsBindingClass.fPositional(Object? t1, [Object? t2]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(dynamic t1, {dynamic t2}) {}
-  static positionalArgumentsStaticMethod(dynamic t1, [dynamic t2]) {}
+  static namedArgumentsStaticMethod(Object? t1, {Object? t2}) {}
+  static positionalArgumentsStaticMethod(Object? t1, [Object? t2]) {}
 
-  namedArgumentsMethod(dynamic t1, {dynamic t2}) {}
-  positionalArgumentsMethod(dynamic t1, [dynamic t2]) {}
+  namedArgumentsMethod(Object? t1, {Object? t2}) {}
+  positionalArgumentsMethod(Object? t1, [Object? t2]) {}
 
-  set testSetter(dynamic val) {}
+  set testSetter(Object? val) {}
 }
 
 class ArgumentsBindingGen<X>  {
@@ -115,19 +116,19 @@
 
   //# <-- NotGenericFunctionType
   // test generic functions
-  namedArgumentsFunc2<dynamic>(forgetType(t0Instance), t2: forgetType(t0Instance));
-  positionalArgumentsFunc2<dynamic>(forgetType(t0Instance), forgetType(t0Instance));
+  namedArgumentsFunc2<Object?>(forgetType(t0Instance), t2: forgetType(t0Instance));
+  positionalArgumentsFunc2<Object?>(forgetType(t0Instance), forgetType(t0Instance));
 
   // test generic class constructors
-  ArgumentsBindingGen<dynamic> instance2 =
-      new ArgumentsBindingGen<dynamic>(forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<dynamic>.fNamed(forgetType(t0Instance),
+  ArgumentsBindingGen<Object?> instance2 =
+      new ArgumentsBindingGen<Object?>(forgetType(t0Instance));
+  instance2 = new ArgumentsBindingGen<Object?>.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<dynamic>.fPositional(forgetType(t0Instance),
+  instance2 = new ArgumentsBindingGen<Object?>.fPositional(forgetType(t0Instance),
       forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<dynamic>.named(forgetType(t0Instance),
+  instance2 = new ArgumentsBindingGen<Object?>.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<dynamic>.positional(forgetType(t0Instance),
+  instance2 = new ArgumentsBindingGen<Object?>.positional(forgetType(t0Instance),
       forgetType(t0Instance));
 
   // test generic class methods and setters
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_bottom_arguments_binding_A02_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_top_arguments_binding_A01_t02.dart
similarity index 76%
copy from LanguageFeatures/Subtyping/dynamic/generated/left_bottom_arguments_binding_A02_t02.dart
copy to LanguageFeatures/Subtyping/dynamic/generated/left_top_arguments_binding_A01_t02.dart
index ff3ac5a..3b5151e 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_bottom_arguments_binding_A02_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_top_arguments_binding_A01_t02.dart
@@ -6,10 +6,10 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Left Bottom: T0 is Null.
- * @description Check that if type T0 is Null and T1 is dynamic then T0 is a
+ * Left Top: if T0 is dynamic or void then T0 <: T1 if Object? <: T1
+ * @description Check that if type T0 is dynamic and Object? <: T1 then T0 is a
  * subtype of a type T1.
- * @author ngl@unipro.ru
+ * @author sgrekhov@unipro.ru
  */
 /**
  * @description Check that if type T0 is a subtype of a type T1, then instance
@@ -17,7 +17,7 @@
  * @author sgrekhov@unipro.ru
  */
 /*
- * This test is generated from left_bottom_A02.dart and 
+ * This test is generated from left_top_A01.dart and 
  * arguments_binding_x02.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
@@ -25,28 +25,29 @@
 
 
 import '../../utils/common.dart';
+// SharedOptions=--enable-experiment=non-nullable
 
 class T1 {}
 
-Null t0Instance = null;
-dynamic t1Instance = new T1();
+dynamic t0Instance = "Show must go on";
+T1? t1Instance = new T1();
 
 
 
 
 class ArgumentsBindingSuper1_t02 {
-  dynamic m;
+  Object? m;
 
-  ArgumentsBindingSuper1_t02(dynamic value) {}
-  ArgumentsBindingSuper1_t02.named(dynamic value, {dynamic val2}) {}
-  ArgumentsBindingSuper1_t02.positional(dynamic value, [dynamic val2]) {}
+  ArgumentsBindingSuper1_t02(Object? value) {}
+  ArgumentsBindingSuper1_t02.named(Object? value, {Object? val2}) {}
+  ArgumentsBindingSuper1_t02.positional(Object? value, [Object? val2]) {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
-  void superTest(dynamic val) {}
-  void superTestPositioned(dynamic val, [dynamic val2]) {}
-  void superTestNamed(dynamic val, {dynamic val2}) {}
-  dynamic get superGetter => m;
-  void set superSetter(dynamic val) {}
+  void superTest(Object? val) {}
+  void superTestPositioned(Object? val, [Object? val2]) {}
+  void superTestNamed(Object? val, {Object? val2}) {}
+  Object? get superGetter => m;
+  void set superSetter(Object? val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
@@ -124,13 +125,13 @@
   // Test type parameters
 
   //# <-- NotGenericFunctionType
-  ArgumentsBinding2_t02<dynamic> c2 =
-    new ArgumentsBinding2_t02<dynamic>(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<dynamic>.c1(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<dynamic>.c2(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<dynamic>.c3(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<dynamic>.c4(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<dynamic>.c5(forgetType(t0Instance));
+  ArgumentsBinding2_t02<Object?> c2 =
+    new ArgumentsBinding2_t02<Object?>(forgetType(t0Instance));
+  c2 = new ArgumentsBinding2_t02<Object?>.c1(forgetType(t0Instance));
+  c2 = new ArgumentsBinding2_t02<Object?>.c2(t1Instance, forgetType(t0Instance));
+  c2 = new ArgumentsBinding2_t02<Object?>.c3(forgetType(t0Instance));
+  c2 = new ArgumentsBinding2_t02<Object?>.c4(t1Instance, forgetType(t0Instance));
+  c2 = new ArgumentsBinding2_t02<Object?>.c5(forgetType(t0Instance));
 
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_bottom_arguments_binding_A02_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_top_arguments_binding_A01_t03.dart
similarity index 79%
copy from LanguageFeatures/Subtyping/dynamic/generated/left_bottom_arguments_binding_A02_t03.dart
copy to LanguageFeatures/Subtyping/dynamic/generated/left_top_arguments_binding_A01_t03.dart
index 1855272..8fdd27f 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_bottom_arguments_binding_A02_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_top_arguments_binding_A01_t03.dart
@@ -6,10 +6,10 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Left Bottom: T0 is Null.
- * @description Check that if type T0 is Null and T1 is dynamic then T0 is a
+ * Left Top: if T0 is dynamic or void then T0 <: T1 if Object? <: T1
+ * @description Check that if type T0 is dynamic and Object? <: T1 then T0 is a
  * subtype of a type T1.
- * @author ngl@unipro.ru
+ * @author sgrekhov@unipro.ru
  */
 /**
  * @description Check that if type T0 is a subtype of a type T1, then instance
@@ -17,7 +17,7 @@
  * @author sgrekhov@unipro.ru
  */
 /*
- * This test is generated from left_bottom_A02.dart and 
+ * This test is generated from left_top_A01.dart and 
  * arguments_binding_x03.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
@@ -25,23 +25,24 @@
 
 
 import '../../utils/common.dart';
+// SharedOptions=--enable-experiment=non-nullable
 
 class T1 {}
 
-Null t0Instance = null;
-dynamic t1Instance = new T1();
+dynamic t0Instance = "Show must go on";
+T1? t1Instance = new T1();
 
 
 
 
 class ArgumentsBindingMixin1_t03 {
-  dynamic m;
+  Object? m;
 
-  void superTest(dynamic val) {}
-  void superTestPositioned(dynamic val, [dynamic val2]) {}
-  void superTestNamed(dynamic val, {dynamic val2}) {}
-  dynamic get superGetter => m;
-  void set superSetter(dynamic val) {}
+  void superTest(Object? val) {}
+  void superTestPositioned(Object? val, [Object? val2]) {}
+  void superTestNamed(Object? val, {Object? val2}) {}
+  Object? get superGetter => m;
+  void set superSetter(Object? val) {}
 }
 
 class ArgumentsBinding1_t03 extends Object with ArgumentsBindingMixin1_t03 {
@@ -97,7 +98,7 @@
   // Test type parameters
 
   //# <-- NotGenericFunctionType
-  ArgumentsBinding2_t03<dynamic> c2 = new ArgumentsBinding2_t03<dynamic>();
+  ArgumentsBinding2_t03<Object?> c2 = new ArgumentsBinding2_t03<Object?>();
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
   c2.superTestPositioned(forgetType(t0Instance));
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_bottom_class_member_A02_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_top_class_member_A01_t01.dart
similarity index 70%
copy from LanguageFeatures/Subtyping/dynamic/generated/left_bottom_class_member_A02_t01.dart
copy to LanguageFeatures/Subtyping/dynamic/generated/left_top_class_member_A01_t01.dart
index 72a1c08..e7124f1 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_bottom_class_member_A02_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_top_class_member_A01_t01.dart
@@ -6,10 +6,10 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Left Bottom: T0 is Null.
- * @description Check that if type T0 is Null and T1 is dynamic then T0 is a
+ * Left Top: if T0 is dynamic or void then T0 <: T1 if Object? <: T1
+ * @description Check that if type T0 is dynamic and Object? <: T1 then T0 is a
  * subtype of a type T1.
- * @author ngl@unipro.ru
+ * @author sgrekhov@unipro.ru
  */
 /**
  * @description Check that if type T0 is a subtype of a type T1, then instance
@@ -17,7 +17,7 @@
  * @author sgrekhov@unipro.ru
  */
 /*
- * This test is generated from left_bottom_A02.dart and 
+ * This test is generated from left_top_A01.dart and 
  * class_member_x01.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
@@ -25,19 +25,20 @@
 
 
 import '../../utils/common.dart';
+// SharedOptions=--enable-experiment=non-nullable
 
 class T1 {}
 
-Null t0Instance = null;
-dynamic t1Instance = new T1();
+dynamic t0Instance = "Show must go on";
+T1? t1Instance = new T1();
 
 
 
 
 class ClassMember1_t01 {
-  static dynamic s = forgetType(t0Instance);
-  dynamic m = forgetType(t0Instance);
-  dynamic _p = forgetType(t0Instance);
+  static Object? s = forgetType(t0Instance);
+  Object? m = forgetType(t0Instance);
+  Object? _p = forgetType(t0Instance);
 
   ClassMember1_t01() {
     s = forgetType(t0Instance);
@@ -45,7 +46,7 @@
     _p = forgetType(t0Instance);
   }
 
-  ClassMember1_t01.named(dynamic value) {
+  ClassMember1_t01.named(Object? value) {
     s = value;
     m = value;
     _p = value;
@@ -59,21 +60,21 @@
     _p = forgetType(t0Instance);
   }
 
-  set setter(dynamic val) {
+  set setter(Object? val) {
     _p = val;
   }
 
-  dynamic get getter => forgetType(_p);
+  Object? get getter => forgetType(_p);
 
   static staticTest() {
     s = forgetType(t0Instance);
   }
 
-  static set staticSetter(dynamic val) {
+  static set staticSetter(Object? val) {
     s = val;
   }
 
-  static dynamic get staticGetter => forgetType(t0Instance);
+  static Object? get staticGetter => forgetType(t0Instance);
 }
 
 class ClassMember2_t01<X> {
@@ -101,7 +102,7 @@
     _p = val;
   }
 
-  dynamic get getter => forgetType(_p);
+  Object? get getter => forgetType(_p);
 }
 
 main() {
@@ -122,10 +123,10 @@
   // Test type parameters
 
   //# <-- NotGenericFunctionType
-  ClassMember2_t01<dynamic> c2 = new ClassMember2_t01<dynamic>();
-  c2 = new ClassMember2_t01<dynamic>.short(forgetType(t0Instance),
+  ClassMember2_t01<Object?> c2 = new ClassMember2_t01<Object?>();
+  c2 = new ClassMember2_t01<Object?>.short(forgetType(t0Instance),
   forgetType(t0Instance));
-  c2 = new ClassMember2_t01<dynamic>.named(forgetType(t0Instance));
+  c2 = new ClassMember2_t01<Object?>.named(forgetType(t0Instance));
   c2.m = forgetType(t0Instance);
   c2.test(forgetType(t0Instance));
   c2.getter;
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_bottom_class_member_A02_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_top_class_member_A01_t02.dart
similarity index 80%
copy from LanguageFeatures/Subtyping/dynamic/generated/left_bottom_class_member_A02_t02.dart
copy to LanguageFeatures/Subtyping/dynamic/generated/left_top_class_member_A01_t02.dart
index fab2fd9..a17abdc 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_bottom_class_member_A02_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_top_class_member_A01_t02.dart
@@ -6,10 +6,10 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Left Bottom: T0 is Null.
- * @description Check that if type T0 is Null and T1 is dynamic then T0 is a
+ * Left Top: if T0 is dynamic or void then T0 <: T1 if Object? <: T1
+ * @description Check that if type T0 is dynamic and Object? <: T1 then T0 is a
  * subtype of a type T1.
- * @author ngl@unipro.ru
+ * @author sgrekhov@unipro.ru
  */
 /**
  * @description Check that if type T0 is a subtype of a type T1, then instance
@@ -17,7 +17,7 @@
  * @author sgrekhov@unipro.ru
  */
 /*
- * This test is generated from left_bottom_A02.dart and 
+ * This test is generated from left_top_A01.dart and 
  * class_member_x02.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
@@ -25,17 +25,18 @@
 
 
 import '../../utils/common.dart';
+// SharedOptions=--enable-experiment=non-nullable
 
 class T1 {}
 
-Null t0Instance = null;
-dynamic t1Instance = new T1();
+dynamic t0Instance = "Show must go on";
+T1? t1Instance = new T1();
 
 
 
 
 class ClassMemberSuper1_t02 {
-  dynamic m;
+  Object? m;
 
   ClassMemberSuper1_t02(dynamic value) {
     m = value;
@@ -47,7 +48,7 @@
 
   ClassMemberSuper1_t02.short(this.m);
 
-  void set superSetter(dynamic val) {}
+  void set superSetter(Object? val) {}
 }
 
 class ClassMember1_t02 extends ClassMemberSuper1_t02 {
@@ -105,9 +106,9 @@
   // Test type parameters
 
   //# <-- NotGenericFunctionType
-  ClassMember2_t02<dynamic> c2 = new ClassMember2_t02<dynamic>();
-  c2 = new ClassMember2_t02<dynamic>.short();
-  c2 = new ClassMember2_t02<dynamic>.named();
+  ClassMember2_t02<Object?> c2 = new ClassMember2_t02<Object?>();
+  c2 = new ClassMember2_t02<Object?>.short();
+  c2 = new ClassMember2_t02<Object?>.named();
   c2.m = forgetType(t0Instance);
   c2.test();
   c2.superSetter = forgetType(t0Instance);
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_bottom_class_member_A02_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_top_class_member_A01_t03.dart
similarity index 78%
copy from LanguageFeatures/Subtyping/dynamic/generated/left_bottom_class_member_A02_t03.dart
copy to LanguageFeatures/Subtyping/dynamic/generated/left_top_class_member_A01_t03.dart
index 6dad91a..9de8731 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_bottom_class_member_A02_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_top_class_member_A01_t03.dart
@@ -6,10 +6,10 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Left Bottom: T0 is Null.
- * @description Check that if type T0 is Null and T1 is dynamic then T0 is a
+ * Left Top: if T0 is dynamic or void then T0 <: T1 if Object? <: T1
+ * @description Check that if type T0 is dynamic and Object? <: T1 then T0 is a
  * subtype of a type T1.
- * @author ngl@unipro.ru
+ * @author sgrekhov@unipro.ru
  */
 /**
  * @description Check that if type T0 is a subtype of a type T1, then instance
@@ -17,7 +17,7 @@
  * @author sgrekhov@unipro.ru
  */
 /*
- * This test is generated from left_bottom_A02.dart and 
+ * This test is generated from left_top_A01.dart and 
  * class_member_x03.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
@@ -25,17 +25,18 @@
 
 
 import '../../utils/common.dart';
+// SharedOptions=--enable-experiment=non-nullable
 
 class T1 {}
 
-Null t0Instance = null;
-dynamic t1Instance = new T1();
+dynamic t0Instance = "Show must go on";
+T1? t1Instance = new T1();
 
 
 
 
 class ClassMemberMixin1_t03 {
-  dynamic m;
+  Object? m;
 
   void set superSetter(dynamic val) {}
 }
@@ -68,7 +69,7 @@
   // Test type parameters
 
   //# <-- NotGenericFunctionType
-  ClassMember2_t03<dynamic> c2 = new ClassMember2_t03<dynamic>();
+  ClassMember2_t03<Object?> c2 = new ClassMember2_t03<Object?>();
   c2.m = forgetType(t0Instance);
   c2.test();
   c2.superSetter = forgetType(t0Instance);
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_bottom_global_variable_A02_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_top_global_variable_A01_t01.dart
similarity index 77%
copy from LanguageFeatures/Subtyping/dynamic/generated/left_bottom_global_variable_A02_t01.dart
copy to LanguageFeatures/Subtyping/dynamic/generated/left_top_global_variable_A01_t01.dart
index 91bafe0..daa5b45 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_bottom_global_variable_A02_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_top_global_variable_A01_t01.dart
@@ -6,10 +6,10 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Left Bottom: T0 is Null.
- * @description Check that if type T0 is Null and T1 is dynamic then T0 is a
+ * Left Top: if T0 is dynamic or void then T0 <: T1 if Object? <: T1
+ * @description Check that if type T0 is dynamic and Object? <: T1 then T0 is a
  * subtype of a type T1.
- * @author ngl@unipro.ru
+ * @author sgrekhov@unipro.ru
  */
 /**
  * @description Check that if type T0 is a subtype of a type T1, then instance
@@ -17,7 +17,7 @@
  * @author sgrekhov@unipro.ru
  */
 /*
- * This test is generated from left_bottom_A02.dart and 
+ * This test is generated from left_top_A01.dart and 
  * global_variable_x01.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
@@ -25,11 +25,12 @@
 
 
 import '../../utils/common.dart';
+// SharedOptions=--enable-experiment=non-nullable
 
 class T1 {}
 
-Null t0Instance = null;
-dynamic t1Instance = new T1();
+dynamic t0Instance = "Show must go on";
+T1? t1Instance = new T1();
 
 
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_bottom_local_variable_A02_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_top_local_variable_A01_t01.dart
similarity index 67%
copy from LanguageFeatures/Subtyping/dynamic/generated/left_bottom_local_variable_A02_t01.dart
copy to LanguageFeatures/Subtyping/dynamic/generated/left_top_local_variable_A01_t01.dart
index 1f27446..e82c2e7 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_bottom_local_variable_A02_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_top_local_variable_A01_t01.dart
@@ -6,10 +6,10 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Left Bottom: T0 is Null.
- * @description Check that if type T0 is Null and T1 is dynamic then T0 is a
+ * Left Top: if T0 is dynamic or void then T0 <: T1 if Object? <: T1
+ * @description Check that if type T0 is dynamic and Object? <: T1 then T0 is a
  * subtype of a type T1.
- * @author ngl@unipro.ru
+ * @author sgrekhov@unipro.ru
  */
 /**
  * @description Check that if type T0 is a subtype of a type T1, then instance
@@ -17,7 +17,7 @@
  * @author sgrekhov@unipro.ru
  */
 /*
- * This test is generated from left_bottom_A02.dart and 
+ * This test is generated from left_top_A01.dart and 
  * local_variable_x01.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
@@ -25,11 +25,12 @@
 
 
 import '../../utils/common.dart';
+// SharedOptions=--enable-experiment=non-nullable
 
 class T1 {}
 
-Null t0Instance = null;
-dynamic t1Instance = new T1();
+dynamic t0Instance = "Show must go on";
+T1? t1Instance = new T1();
 
 
 
@@ -37,28 +38,28 @@
 class LocalVariableTest {
 
   LocalVariableTest() {
-    dynamic t1 = forgetType(t0Instance);
+    Object? t1 = forgetType(t0Instance);
     t1 = forgetType(t0Instance);
   }
 
   static staticTest() {
-    dynamic t1 = forgetType(t0Instance);
+    Object? t1 = forgetType(t0Instance);
     t1 = forgetType(t0Instance);
   }
 
   test() {
-    dynamic t1 = forgetType(t0Instance);
+    Object? t1 = forgetType(t0Instance);
     t1 = forgetType(t0Instance);
   }
 }
 
 main() {
   foo() {
-    dynamic t1 = forgetType(t0Instance);
+    Object? t1 = forgetType(t0Instance);
     t1 = forgetType(t0Instance);
   }
 
-  dynamic t1 = forgetType(t0Instance);
+  Object? t1 = forgetType(t0Instance);
   t1 = forgetType(t0Instance);
   foo();
   LocalVariableTest x = new LocalVariableTest();
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/left_bottom_return_value_A02_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/left_top_return_value_A01_t01.dart
similarity index 61%
copy from LanguageFeatures/Subtyping/dynamic/generated/left_bottom_return_value_A02_t01.dart
copy to LanguageFeatures/Subtyping/dynamic/generated/left_top_return_value_A01_t01.dart
index 0e9a954..5ff8736 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/left_bottom_return_value_A02_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/left_top_return_value_A01_t01.dart
@@ -6,10 +6,10 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Left Bottom: T0 is Null.
- * @description Check that if type T0 is Null and T1 is dynamic then T0 is a
+ * Left Top: if T0 is dynamic or void then T0 <: T1 if Object? <: T1
+ * @description Check that if type T0 is dynamic and Object? <: T1 then T0 is a
  * subtype of a type T1.
- * @author ngl@unipro.ru
+ * @author sgrekhov@unipro.ru
  */
 /**
  * @description Check that if type T0 is a subtype of a type T1, then instance
@@ -17,7 +17,7 @@
  * @author sgrekhov@unipro.ru
  */
 /*
- * This test is generated from left_bottom_A02.dart and 
+ * This test is generated from left_top_A01.dart and 
  * return_value_x01.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
@@ -25,23 +25,24 @@
 
 
 import '../../utils/common.dart';
+// SharedOptions=--enable-experiment=non-nullable
 
 class T1 {}
 
-Null t0Instance = null;
-dynamic t1Instance = new T1();
+dynamic t0Instance = "Show must go on";
+T1? t1Instance = new T1();
 
 
 
 
-dynamic returnValueFunc() => forgetType(t0Instance);
+Object? returnValueFunc() => forgetType(t0Instance);
 
 class ReturnValueTest {
-  static dynamic staticTestMethod() => forgetType(t0Instance);
+  static Object? staticTestMethod() => forgetType(t0Instance);
 
-  dynamic testMethod() => forgetType(t0Instance);
+  Object? testMethod() => forgetType(t0Instance);
 
-  dynamic get testGetter => forgetType(t0Instance);
+  Object? get testGetter => forgetType(t0Instance);
 }
 
 class ReturnValueGen<X> {
@@ -51,7 +52,7 @@
 
 
 main() {
-  dynamic returnValueLocalFunc() => forgetType(t0Instance);
+  Object? returnValueLocalFunc() => forgetType(t0Instance);
 
   returnValueFunc();
   returnValueLocalFunc();
@@ -64,7 +65,7 @@
   // Test type parameters
 
   //# <-- NotGenericFunctionType
-  new ReturnValueGen<dynamic>().testMethod();
-  new ReturnValueGen<dynamic>().testGetter;
+  new ReturnValueGen<Object?>().testMethod();
+  new ReturnValueGen<Object?>().testGetter;
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A01_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A01_t01.dart
index 2ea5758..67e803d 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A01_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A01_t01.dart
@@ -6,7 +6,7 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Right Top: T1 is a top type (i.e. Object, dynamic, or void)
+ * Right Top: T1 is a top type (i.e. Object?, dynamic, or void)
  * @description Check that if type T1 is an Object then T0 is a subtype of a
  * type T1
  * @author sgrekhov@unipro.ru
@@ -25,41 +25,41 @@
 
 
 import '../../utils/common.dart';
-
+// SharedOptions=--enable-experiment=non-nullable
 class T0 {}
 
 T0 t0Instance = new T0();
-Object t1Instance = new Object();
+Object? t1Instance = new Object();
 
 
 
 
-namedArgumentsFunc1(Object t1, {Object t2}) {}
-positionalArgumentsFunc1(Object t1, [Object t2]) {}
+namedArgumentsFunc1(Object? t1, {Object? t2}) {}
+positionalArgumentsFunc1(Object? t1, [Object? t2]) {}
 
 namedArgumentsFunc2<X>(X t1, {X t2}) {}
 positionalArgumentsFunc2<X>(X t1, [X t2]) {}
 
 class ArgumentsBindingClass {
-  ArgumentsBindingClass(Object t1) {}
+  ArgumentsBindingClass(Object? t1) {}
 
-  ArgumentsBindingClass.named(Object t1, {Object t2}) {}
-  ArgumentsBindingClass.positional(Object t1, [Object t2]) {}
+  ArgumentsBindingClass.named(Object? t1, {Object? t2}) {}
+  ArgumentsBindingClass.positional(Object? t1, [Object? t2]) {}
 
-  factory ArgumentsBindingClass.fNamed(Object t1, {Object t2}) {
+  factory ArgumentsBindingClass.fNamed(Object? t1, {Object? t2}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(Object t1, [Object t2]) {
+  factory ArgumentsBindingClass.fPositional(Object? t1, [Object? t2]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(Object t1, {Object t2}) {}
-  static positionalArgumentsStaticMethod(Object t1, [Object t2]) {}
+  static namedArgumentsStaticMethod(Object? t1, {Object? t2}) {}
+  static positionalArgumentsStaticMethod(Object? t1, [Object? t2]) {}
 
-  namedArgumentsMethod(Object t1, {Object t2}) {}
-  positionalArgumentsMethod(Object t1, [Object t2]) {}
+  namedArgumentsMethod(Object? t1, {Object? t2}) {}
+  positionalArgumentsMethod(Object? t1, [Object? t2]) {}
 
-  set testSetter(Object val) {}
+  set testSetter(Object? val) {}
 }
 
 class ArgumentsBindingGen<X>  {
@@ -115,19 +115,19 @@
 
   //# <-- NotGenericFunctionType
   // test generic functions
-  namedArgumentsFunc2<Object>(forgetType(t0Instance), t2: forgetType(t0Instance));
-  positionalArgumentsFunc2<Object>(forgetType(t0Instance), forgetType(t0Instance));
+  namedArgumentsFunc2<Object?>(forgetType(t0Instance), t2: forgetType(t0Instance));
+  positionalArgumentsFunc2<Object?>(forgetType(t0Instance), forgetType(t0Instance));
 
   // test generic class constructors
-  ArgumentsBindingGen<Object> instance2 =
-      new ArgumentsBindingGen<Object>(forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Object>.fNamed(forgetType(t0Instance),
+  ArgumentsBindingGen<Object?> instance2 =
+      new ArgumentsBindingGen<Object?>(forgetType(t0Instance));
+  instance2 = new ArgumentsBindingGen<Object?>.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Object>.fPositional(forgetType(t0Instance),
+  instance2 = new ArgumentsBindingGen<Object?>.fPositional(forgetType(t0Instance),
       forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Object>.named(forgetType(t0Instance),
+  instance2 = new ArgumentsBindingGen<Object?>.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Object>.positional(forgetType(t0Instance),
+  instance2 = new ArgumentsBindingGen<Object?>.positional(forgetType(t0Instance),
       forgetType(t0Instance));
 
   // test generic class methods and setters
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A01_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A01_t02.dart
index 82baa63..46bceca 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A01_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A01_t02.dart
@@ -6,7 +6,7 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Right Top: T1 is a top type (i.e. Object, dynamic, or void)
+ * Right Top: T1 is a top type (i.e. Object?, dynamic, or void)
  * @description Check that if type T1 is an Object then T0 is a subtype of a
  * type T1
  * @author sgrekhov@unipro.ru
@@ -25,28 +25,28 @@
 
 
 import '../../utils/common.dart';
-
+// SharedOptions=--enable-experiment=non-nullable
 class T0 {}
 
 T0 t0Instance = new T0();
-Object t1Instance = new Object();
+Object? t1Instance = new Object();
 
 
 
 
 class ArgumentsBindingSuper1_t02 {
-  Object m;
+  Object? m;
 
-  ArgumentsBindingSuper1_t02(Object value) {}
-  ArgumentsBindingSuper1_t02.named(Object value, {Object val2}) {}
-  ArgumentsBindingSuper1_t02.positional(Object value, [Object val2]) {}
+  ArgumentsBindingSuper1_t02(Object? value) {}
+  ArgumentsBindingSuper1_t02.named(Object? value, {Object? val2}) {}
+  ArgumentsBindingSuper1_t02.positional(Object? value, [Object? val2]) {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
-  void superTest(Object val) {}
-  void superTestPositioned(Object val, [Object val2]) {}
-  void superTestNamed(Object val, {Object val2}) {}
-  Object get superGetter => m;
-  void set superSetter(Object val) {}
+  void superTest(Object? val) {}
+  void superTestPositioned(Object? val, [Object? val2]) {}
+  void superTestNamed(Object? val, {Object? val2}) {}
+  Object? get superGetter => m;
+  void set superSetter(Object? val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
@@ -124,13 +124,13 @@
   // Test type parameters
 
   //# <-- NotGenericFunctionType
-  ArgumentsBinding2_t02<Object> c2 =
-    new ArgumentsBinding2_t02<Object>(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Object>.c1(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Object>.c2(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Object>.c3(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Object>.c4(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Object>.c5(forgetType(t0Instance));
+  ArgumentsBinding2_t02<Object?> c2 =
+    new ArgumentsBinding2_t02<Object?>(forgetType(t0Instance));
+  c2 = new ArgumentsBinding2_t02<Object?>.c1(forgetType(t0Instance));
+  c2 = new ArgumentsBinding2_t02<Object?>.c2(t1Instance, forgetType(t0Instance));
+  c2 = new ArgumentsBinding2_t02<Object?>.c3(forgetType(t0Instance));
+  c2 = new ArgumentsBinding2_t02<Object?>.c4(t1Instance, forgetType(t0Instance));
+  c2 = new ArgumentsBinding2_t02<Object?>.c5(forgetType(t0Instance));
 
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A01_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A01_t03.dart
index 128e2fa..e5ea43e 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A01_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A01_t03.dart
@@ -6,7 +6,7 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Right Top: T1 is a top type (i.e. Object, dynamic, or void)
+ * Right Top: T1 is a top type (i.e. Object?, dynamic, or void)
  * @description Check that if type T1 is an Object then T0 is a subtype of a
  * type T1
  * @author sgrekhov@unipro.ru
@@ -25,23 +25,23 @@
 
 
 import '../../utils/common.dart';
-
+// SharedOptions=--enable-experiment=non-nullable
 class T0 {}
 
 T0 t0Instance = new T0();
-Object t1Instance = new Object();
+Object? t1Instance = new Object();
 
 
 
 
 class ArgumentsBindingMixin1_t03 {
-  Object m;
+  Object? m;
 
-  void superTest(Object val) {}
-  void superTestPositioned(Object val, [Object val2]) {}
-  void superTestNamed(Object val, {Object val2}) {}
-  Object get superGetter => m;
-  void set superSetter(Object val) {}
+  void superTest(Object? val) {}
+  void superTestPositioned(Object? val, [Object? val2]) {}
+  void superTestNamed(Object? val, {Object? val2}) {}
+  Object? get superGetter => m;
+  void set superSetter(Object? val) {}
 }
 
 class ArgumentsBinding1_t03 extends Object with ArgumentsBindingMixin1_t03 {
@@ -97,7 +97,7 @@
   // Test type parameters
 
   //# <-- NotGenericFunctionType
-  ArgumentsBinding2_t03<Object> c2 = new ArgumentsBinding2_t03<Object>();
+  ArgumentsBinding2_t03<Object?> c2 = new ArgumentsBinding2_t03<Object?>();
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
   c2.superTestPositioned(forgetType(t0Instance));
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A03_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A03_t01.dart
index 49cf4bd..528c1aa 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A03_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A03_t01.dart
@@ -25,39 +25,39 @@
 
 
 import '../../utils/common.dart';
-
+// SharedOptions=--enable-experiment=non-nullable
 dynamic t0Instance = "";
-Object t1Instance = new Object();
+Object? t1Instance = new Object();
 
 
 
 
-namedArgumentsFunc1(Object t1, {Object t2}) {}
-positionalArgumentsFunc1(Object t1, [Object t2]) {}
+namedArgumentsFunc1(Object? t1, {Object? t2}) {}
+positionalArgumentsFunc1(Object? t1, [Object? t2]) {}
 
 namedArgumentsFunc2<X>(X t1, {X t2}) {}
 positionalArgumentsFunc2<X>(X t1, [X t2]) {}
 
 class ArgumentsBindingClass {
-  ArgumentsBindingClass(Object t1) {}
+  ArgumentsBindingClass(Object? t1) {}
 
-  ArgumentsBindingClass.named(Object t1, {Object t2}) {}
-  ArgumentsBindingClass.positional(Object t1, [Object t2]) {}
+  ArgumentsBindingClass.named(Object? t1, {Object? t2}) {}
+  ArgumentsBindingClass.positional(Object? t1, [Object? t2]) {}
 
-  factory ArgumentsBindingClass.fNamed(Object t1, {Object t2}) {
+  factory ArgumentsBindingClass.fNamed(Object? t1, {Object? t2}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(Object t1, [Object t2]) {
+  factory ArgumentsBindingClass.fPositional(Object? t1, [Object? t2]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(Object t1, {Object t2}) {}
-  static positionalArgumentsStaticMethod(Object t1, [Object t2]) {}
+  static namedArgumentsStaticMethod(Object? t1, {Object? t2}) {}
+  static positionalArgumentsStaticMethod(Object? t1, [Object? t2]) {}
 
-  namedArgumentsMethod(Object t1, {Object t2}) {}
-  positionalArgumentsMethod(Object t1, [Object t2]) {}
+  namedArgumentsMethod(Object? t1, {Object? t2}) {}
+  positionalArgumentsMethod(Object? t1, [Object? t2]) {}
 
-  set testSetter(Object val) {}
+  set testSetter(Object? val) {}
 }
 
 class ArgumentsBindingGen<X>  {
@@ -113,19 +113,19 @@
 
   //# <-- NotGenericFunctionType
   // test generic functions
-  namedArgumentsFunc2<Object>(forgetType(t0Instance), t2: forgetType(t0Instance));
-  positionalArgumentsFunc2<Object>(forgetType(t0Instance), forgetType(t0Instance));
+  namedArgumentsFunc2<Object?>(forgetType(t0Instance), t2: forgetType(t0Instance));
+  positionalArgumentsFunc2<Object?>(forgetType(t0Instance), forgetType(t0Instance));
 
   // test generic class constructors
-  ArgumentsBindingGen<Object> instance2 =
-      new ArgumentsBindingGen<Object>(forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Object>.fNamed(forgetType(t0Instance),
+  ArgumentsBindingGen<Object?> instance2 =
+      new ArgumentsBindingGen<Object?>(forgetType(t0Instance));
+  instance2 = new ArgumentsBindingGen<Object?>.fNamed(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Object>.fPositional(forgetType(t0Instance),
+  instance2 = new ArgumentsBindingGen<Object?>.fPositional(forgetType(t0Instance),
       forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Object>.named(forgetType(t0Instance),
+  instance2 = new ArgumentsBindingGen<Object?>.named(forgetType(t0Instance),
       t2: forgetType(t0Instance));
-  instance2 = new ArgumentsBindingGen<Object>.positional(forgetType(t0Instance),
+  instance2 = new ArgumentsBindingGen<Object?>.positional(forgetType(t0Instance),
       forgetType(t0Instance));
 
   // test generic class methods and setters
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A03_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A03_t02.dart
index 8d0feb2..cc88e19 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A03_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A03_t02.dart
@@ -25,26 +25,26 @@
 
 
 import '../../utils/common.dart';
-
+// SharedOptions=--enable-experiment=non-nullable
 dynamic t0Instance = "";
-Object t1Instance = new Object();
+Object? t1Instance = new Object();
 
 
 
 
 class ArgumentsBindingSuper1_t02 {
-  Object m;
+  Object? m;
 
-  ArgumentsBindingSuper1_t02(Object value) {}
-  ArgumentsBindingSuper1_t02.named(Object value, {Object val2}) {}
-  ArgumentsBindingSuper1_t02.positional(Object value, [Object val2]) {}
+  ArgumentsBindingSuper1_t02(Object? value) {}
+  ArgumentsBindingSuper1_t02.named(Object? value, {Object? val2}) {}
+  ArgumentsBindingSuper1_t02.positional(Object? value, [Object? val2]) {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
-  void superTest(Object val) {}
-  void superTestPositioned(Object val, [Object val2]) {}
-  void superTestNamed(Object val, {Object val2}) {}
-  Object get superGetter => m;
-  void set superSetter(Object val) {}
+  void superTest(Object? val) {}
+  void superTestPositioned(Object? val, [Object? val2]) {}
+  void superTestNamed(Object? val, {Object? val2}) {}
+  Object? get superGetter => m;
+  void set superSetter(Object? val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
@@ -122,13 +122,13 @@
   // Test type parameters
 
   //# <-- NotGenericFunctionType
-  ArgumentsBinding2_t02<Object> c2 =
-    new ArgumentsBinding2_t02<Object>(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Object>.c1(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Object>.c2(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Object>.c3(forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Object>.c4(t1Instance, forgetType(t0Instance));
-  c2 = new ArgumentsBinding2_t02<Object>.c5(forgetType(t0Instance));
+  ArgumentsBinding2_t02<Object?> c2 =
+    new ArgumentsBinding2_t02<Object?>(forgetType(t0Instance));
+  c2 = new ArgumentsBinding2_t02<Object?>.c1(forgetType(t0Instance));
+  c2 = new ArgumentsBinding2_t02<Object?>.c2(t1Instance, forgetType(t0Instance));
+  c2 = new ArgumentsBinding2_t02<Object?>.c3(forgetType(t0Instance));
+  c2 = new ArgumentsBinding2_t02<Object?>.c4(t1Instance, forgetType(t0Instance));
+  c2 = new ArgumentsBinding2_t02<Object?>.c5(forgetType(t0Instance));
 
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A03_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A03_t03.dart
index a43c433..87ef11a 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A03_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_top_arguments_binding_A03_t03.dart
@@ -25,21 +25,21 @@
 
 
 import '../../utils/common.dart';
-
+// SharedOptions=--enable-experiment=non-nullable
 dynamic t0Instance = "";
-Object t1Instance = new Object();
+Object? t1Instance = new Object();
 
 
 
 
 class ArgumentsBindingMixin1_t03 {
-  Object m;
+  Object? m;
 
-  void superTest(Object val) {}
-  void superTestPositioned(Object val, [Object val2]) {}
-  void superTestNamed(Object val, {Object val2}) {}
-  Object get superGetter => m;
-  void set superSetter(Object val) {}
+  void superTest(Object? val) {}
+  void superTestPositioned(Object? val, [Object? val2]) {}
+  void superTestNamed(Object? val, {Object? val2}) {}
+  Object? get superGetter => m;
+  void set superSetter(Object? val) {}
 }
 
 class ArgumentsBinding1_t03 extends Object with ArgumentsBindingMixin1_t03 {
@@ -95,7 +95,7 @@
   // Test type parameters
 
   //# <-- NotGenericFunctionType
-  ArgumentsBinding2_t03<Object> c2 = new ArgumentsBinding2_t03<Object>();
+  ArgumentsBinding2_t03<Object?> c2 = new ArgumentsBinding2_t03<Object?>();
   c2.test(forgetType(t0Instance), t1Instance);
   c2.superTest(forgetType(t0Instance));
   c2.superTestPositioned(forgetType(t0Instance));
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_top_class_member_A01_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_top_class_member_A01_t01.dart
index 49e9189..35e7ae8 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_top_class_member_A01_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_top_class_member_A01_t01.dart
@@ -6,7 +6,7 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Right Top: T1 is a top type (i.e. Object, dynamic, or void)
+ * Right Top: T1 is a top type (i.e. Object?, dynamic, or void)
  * @description Check that if type T1 is an Object then T0 is a subtype of a
  * type T1
  * @author sgrekhov@unipro.ru
@@ -25,19 +25,19 @@
 
 
 import '../../utils/common.dart';
-
+// SharedOptions=--enable-experiment=non-nullable
 class T0 {}
 
 T0 t0Instance = new T0();
-Object t1Instance = new Object();
+Object? t1Instance = new Object();
 
 
 
 
 class ClassMember1_t01 {
-  static Object s = forgetType(t0Instance);
-  Object m = forgetType(t0Instance);
-  Object _p = forgetType(t0Instance);
+  static Object? s = forgetType(t0Instance);
+  Object? m = forgetType(t0Instance);
+  Object? _p = forgetType(t0Instance);
 
   ClassMember1_t01() {
     s = forgetType(t0Instance);
@@ -45,7 +45,7 @@
     _p = forgetType(t0Instance);
   }
 
-  ClassMember1_t01.named(Object value) {
+  ClassMember1_t01.named(Object? value) {
     s = value;
     m = value;
     _p = value;
@@ -59,21 +59,21 @@
     _p = forgetType(t0Instance);
   }
 
-  set setter(Object val) {
+  set setter(Object? val) {
     _p = val;
   }
 
-  Object get getter => forgetType(_p);
+  Object? get getter => forgetType(_p);
 
   static staticTest() {
     s = forgetType(t0Instance);
   }
 
-  static set staticSetter(Object val) {
+  static set staticSetter(Object? val) {
     s = val;
   }
 
-  static Object get staticGetter => forgetType(t0Instance);
+  static Object? get staticGetter => forgetType(t0Instance);
 }
 
 class ClassMember2_t01<X> {
@@ -101,7 +101,7 @@
     _p = val;
   }
 
-  Object get getter => forgetType(_p);
+  Object? get getter => forgetType(_p);
 }
 
 main() {
@@ -122,10 +122,10 @@
   // Test type parameters
 
   //# <-- NotGenericFunctionType
-  ClassMember2_t01<Object> c2 = new ClassMember2_t01<Object>();
-  c2 = new ClassMember2_t01<Object>.short(forgetType(t0Instance),
+  ClassMember2_t01<Object?> c2 = new ClassMember2_t01<Object?>();
+  c2 = new ClassMember2_t01<Object?>.short(forgetType(t0Instance),
   forgetType(t0Instance));
-  c2 = new ClassMember2_t01<Object>.named(forgetType(t0Instance));
+  c2 = new ClassMember2_t01<Object?>.named(forgetType(t0Instance));
   c2.m = forgetType(t0Instance);
   c2.test(forgetType(t0Instance));
   c2.getter;
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_top_class_member_A01_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_top_class_member_A01_t02.dart
index 1bef6bc..ec738e3 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_top_class_member_A01_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_top_class_member_A01_t02.dart
@@ -6,7 +6,7 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Right Top: T1 is a top type (i.e. Object, dynamic, or void)
+ * Right Top: T1 is a top type (i.e. Object?, dynamic, or void)
  * @description Check that if type T1 is an Object then T0 is a subtype of a
  * type T1
  * @author sgrekhov@unipro.ru
@@ -25,17 +25,17 @@
 
 
 import '../../utils/common.dart';
-
+// SharedOptions=--enable-experiment=non-nullable
 class T0 {}
 
 T0 t0Instance = new T0();
-Object t1Instance = new Object();
+Object? t1Instance = new Object();
 
 
 
 
 class ClassMemberSuper1_t02 {
-  Object m;
+  Object? m;
 
   ClassMemberSuper1_t02(dynamic value) {
     m = value;
@@ -47,7 +47,7 @@
 
   ClassMemberSuper1_t02.short(this.m);
 
-  void set superSetter(Object val) {}
+  void set superSetter(Object? val) {}
 }
 
 class ClassMember1_t02 extends ClassMemberSuper1_t02 {
@@ -105,9 +105,9 @@
   // Test type parameters
 
   //# <-- NotGenericFunctionType
-  ClassMember2_t02<Object> c2 = new ClassMember2_t02<Object>();
-  c2 = new ClassMember2_t02<Object>.short();
-  c2 = new ClassMember2_t02<Object>.named();
+  ClassMember2_t02<Object?> c2 = new ClassMember2_t02<Object?>();
+  c2 = new ClassMember2_t02<Object?>.short();
+  c2 = new ClassMember2_t02<Object?>.named();
   c2.m = forgetType(t0Instance);
   c2.test();
   c2.superSetter = forgetType(t0Instance);
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_top_class_member_A01_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_top_class_member_A01_t03.dart
index 56854ed..2dea859 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_top_class_member_A01_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_top_class_member_A01_t03.dart
@@ -6,7 +6,7 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Right Top: T1 is a top type (i.e. Object, dynamic, or void)
+ * Right Top: T1 is a top type (i.e. Object?, dynamic, or void)
  * @description Check that if type T1 is an Object then T0 is a subtype of a
  * type T1
  * @author sgrekhov@unipro.ru
@@ -25,17 +25,17 @@
 
 
 import '../../utils/common.dart';
-
+// SharedOptions=--enable-experiment=non-nullable
 class T0 {}
 
 T0 t0Instance = new T0();
-Object t1Instance = new Object();
+Object? t1Instance = new Object();
 
 
 
 
 class ClassMemberMixin1_t03 {
-  Object m;
+  Object? m;
 
   void set superSetter(dynamic val) {}
 }
@@ -68,7 +68,7 @@
   // Test type parameters
 
   //# <-- NotGenericFunctionType
-  ClassMember2_t03<Object> c2 = new ClassMember2_t03<Object>();
+  ClassMember2_t03<Object?> c2 = new ClassMember2_t03<Object?>();
   c2.m = forgetType(t0Instance);
   c2.test();
   c2.superSetter = forgetType(t0Instance);
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_top_class_member_A03_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_top_class_member_A03_t01.dart
index 2544cd3..04af640 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_top_class_member_A03_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_top_class_member_A03_t01.dart
@@ -25,17 +25,17 @@
 
 
 import '../../utils/common.dart';
-
+// SharedOptions=--enable-experiment=non-nullable
 dynamic t0Instance = "";
-Object t1Instance = new Object();
+Object? t1Instance = new Object();
 
 
 
 
 class ClassMember1_t01 {
-  static Object s = forgetType(t0Instance);
-  Object m = forgetType(t0Instance);
-  Object _p = forgetType(t0Instance);
+  static Object? s = forgetType(t0Instance);
+  Object? m = forgetType(t0Instance);
+  Object? _p = forgetType(t0Instance);
 
   ClassMember1_t01() {
     s = forgetType(t0Instance);
@@ -43,7 +43,7 @@
     _p = forgetType(t0Instance);
   }
 
-  ClassMember1_t01.named(Object value) {
+  ClassMember1_t01.named(Object? value) {
     s = value;
     m = value;
     _p = value;
@@ -57,21 +57,21 @@
     _p = forgetType(t0Instance);
   }
 
-  set setter(Object val) {
+  set setter(Object? val) {
     _p = val;
   }
 
-  Object get getter => forgetType(_p);
+  Object? get getter => forgetType(_p);
 
   static staticTest() {
     s = forgetType(t0Instance);
   }
 
-  static set staticSetter(Object val) {
+  static set staticSetter(Object? val) {
     s = val;
   }
 
-  static Object get staticGetter => forgetType(t0Instance);
+  static Object? get staticGetter => forgetType(t0Instance);
 }
 
 class ClassMember2_t01<X> {
@@ -99,7 +99,7 @@
     _p = val;
   }
 
-  Object get getter => forgetType(_p);
+  Object? get getter => forgetType(_p);
 }
 
 main() {
@@ -120,10 +120,10 @@
   // Test type parameters
 
   //# <-- NotGenericFunctionType
-  ClassMember2_t01<Object> c2 = new ClassMember2_t01<Object>();
-  c2 = new ClassMember2_t01<Object>.short(forgetType(t0Instance),
+  ClassMember2_t01<Object?> c2 = new ClassMember2_t01<Object?>();
+  c2 = new ClassMember2_t01<Object?>.short(forgetType(t0Instance),
   forgetType(t0Instance));
-  c2 = new ClassMember2_t01<Object>.named(forgetType(t0Instance));
+  c2 = new ClassMember2_t01<Object?>.named(forgetType(t0Instance));
   c2.m = forgetType(t0Instance);
   c2.test(forgetType(t0Instance));
   c2.getter;
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_top_class_member_A03_t02.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_top_class_member_A03_t02.dart
index 1cf463e..32ea7f5 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_top_class_member_A03_t02.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_top_class_member_A03_t02.dart
@@ -25,15 +25,15 @@
 
 
 import '../../utils/common.dart';
-
+// SharedOptions=--enable-experiment=non-nullable
 dynamic t0Instance = "";
-Object t1Instance = new Object();
+Object? t1Instance = new Object();
 
 
 
 
 class ClassMemberSuper1_t02 {
-  Object m;
+  Object? m;
 
   ClassMemberSuper1_t02(dynamic value) {
     m = value;
@@ -45,7 +45,7 @@
 
   ClassMemberSuper1_t02.short(this.m);
 
-  void set superSetter(Object val) {}
+  void set superSetter(Object? val) {}
 }
 
 class ClassMember1_t02 extends ClassMemberSuper1_t02 {
@@ -103,9 +103,9 @@
   // Test type parameters
 
   //# <-- NotGenericFunctionType
-  ClassMember2_t02<Object> c2 = new ClassMember2_t02<Object>();
-  c2 = new ClassMember2_t02<Object>.short();
-  c2 = new ClassMember2_t02<Object>.named();
+  ClassMember2_t02<Object?> c2 = new ClassMember2_t02<Object?>();
+  c2 = new ClassMember2_t02<Object?>.short();
+  c2 = new ClassMember2_t02<Object?>.named();
   c2.m = forgetType(t0Instance);
   c2.test();
   c2.superSetter = forgetType(t0Instance);
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_top_class_member_A03_t03.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_top_class_member_A03_t03.dart
index cee9a77..6f3d9bd 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_top_class_member_A03_t03.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_top_class_member_A03_t03.dart
@@ -25,15 +25,15 @@
 
 
 import '../../utils/common.dart';
-
+// SharedOptions=--enable-experiment=non-nullable
 dynamic t0Instance = "";
-Object t1Instance = new Object();
+Object? t1Instance = new Object();
 
 
 
 
 class ClassMemberMixin1_t03 {
-  Object m;
+  Object? m;
 
   void set superSetter(dynamic val) {}
 }
@@ -66,7 +66,7 @@
   // Test type parameters
 
   //# <-- NotGenericFunctionType
-  ClassMember2_t03<Object> c2 = new ClassMember2_t03<Object>();
+  ClassMember2_t03<Object?> c2 = new ClassMember2_t03<Object?>();
   c2.m = forgetType(t0Instance);
   c2.test();
   c2.superSetter = forgetType(t0Instance);
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_top_global_variable_A01_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_top_global_variable_A01_t01.dart
index 61a82f1..1a6b58b 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_top_global_variable_A01_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_top_global_variable_A01_t01.dart
@@ -6,7 +6,7 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Right Top: T1 is a top type (i.e. Object, dynamic, or void)
+ * Right Top: T1 is a top type (i.e. Object?, dynamic, or void)
  * @description Check that if type T1 is an Object then T0 is a subtype of a
  * type T1
  * @author sgrekhov@unipro.ru
@@ -25,11 +25,11 @@
 
 
 import '../../utils/common.dart';
-
+// SharedOptions=--enable-experiment=non-nullable
 class T0 {}
 
 T0 t0Instance = new T0();
-Object t1Instance = new Object();
+Object? t1Instance = new Object();
 
 
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_top_global_variable_A03_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_top_global_variable_A03_t01.dart
index ffdccb9..60ed957 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_top_global_variable_A03_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_top_global_variable_A03_t01.dart
@@ -25,9 +25,9 @@
 
 
 import '../../utils/common.dart';
-
+// SharedOptions=--enable-experiment=non-nullable
 dynamic t0Instance = "";
-Object t1Instance = new Object();
+Object? t1Instance = new Object();
 
 
 
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_top_local_variable_A01_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_top_local_variable_A01_t01.dart
index ef34fee..c7a79b2 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_top_local_variable_A01_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_top_local_variable_A01_t01.dart
@@ -6,7 +6,7 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Right Top: T1 is a top type (i.e. Object, dynamic, or void)
+ * Right Top: T1 is a top type (i.e. Object?, dynamic, or void)
  * @description Check that if type T1 is an Object then T0 is a subtype of a
  * type T1
  * @author sgrekhov@unipro.ru
@@ -25,11 +25,11 @@
 
 
 import '../../utils/common.dart';
-
+// SharedOptions=--enable-experiment=non-nullable
 class T0 {}
 
 T0 t0Instance = new T0();
-Object t1Instance = new Object();
+Object? t1Instance = new Object();
 
 
 
@@ -37,28 +37,28 @@
 class LocalVariableTest {
 
   LocalVariableTest() {
-    Object t1 = forgetType(t0Instance);
+    Object? t1 = forgetType(t0Instance);
     t1 = forgetType(t0Instance);
   }
 
   static staticTest() {
-    Object t1 = forgetType(t0Instance);
+    Object? t1 = forgetType(t0Instance);
     t1 = forgetType(t0Instance);
   }
 
   test() {
-    Object t1 = forgetType(t0Instance);
+    Object? t1 = forgetType(t0Instance);
     t1 = forgetType(t0Instance);
   }
 }
 
 main() {
   foo() {
-    Object t1 = forgetType(t0Instance);
+    Object? t1 = forgetType(t0Instance);
     t1 = forgetType(t0Instance);
   }
 
-  Object t1 = forgetType(t0Instance);
+  Object? t1 = forgetType(t0Instance);
   t1 = forgetType(t0Instance);
   foo();
   LocalVariableTest x = new LocalVariableTest();
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_top_local_variable_A03_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_top_local_variable_A03_t01.dart
index 0446b9e..1fcade2 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_top_local_variable_A03_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_top_local_variable_A03_t01.dart
@@ -25,9 +25,9 @@
 
 
 import '../../utils/common.dart';
-
+// SharedOptions=--enable-experiment=non-nullable
 dynamic t0Instance = "";
-Object t1Instance = new Object();
+Object? t1Instance = new Object();
 
 
 
@@ -35,28 +35,28 @@
 class LocalVariableTest {
 
   LocalVariableTest() {
-    Object t1 = forgetType(t0Instance);
+    Object? t1 = forgetType(t0Instance);
     t1 = forgetType(t0Instance);
   }
 
   static staticTest() {
-    Object t1 = forgetType(t0Instance);
+    Object? t1 = forgetType(t0Instance);
     t1 = forgetType(t0Instance);
   }
 
   test() {
-    Object t1 = forgetType(t0Instance);
+    Object? t1 = forgetType(t0Instance);
     t1 = forgetType(t0Instance);
   }
 }
 
 main() {
   foo() {
-    Object t1 = forgetType(t0Instance);
+    Object? t1 = forgetType(t0Instance);
     t1 = forgetType(t0Instance);
   }
 
-  Object t1 = forgetType(t0Instance);
+  Object? t1 = forgetType(t0Instance);
   t1 = forgetType(t0Instance);
   foo();
   LocalVariableTest x = new LocalVariableTest();
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_top_return_value_A01_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_top_return_value_A01_t01.dart
index 790688a..0f27820 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_top_return_value_A01_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_top_return_value_A01_t01.dart
@@ -6,7 +6,7 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Right Top: T1 is a top type (i.e. Object, dynamic, or void)
+ * Right Top: T1 is a top type (i.e. Object?, dynamic, or void)
  * @description Check that if type T1 is an Object then T0 is a subtype of a
  * type T1
  * @author sgrekhov@unipro.ru
@@ -25,23 +25,23 @@
 
 
 import '../../utils/common.dart';
-
+// SharedOptions=--enable-experiment=non-nullable
 class T0 {}
 
 T0 t0Instance = new T0();
-Object t1Instance = new Object();
+Object? t1Instance = new Object();
 
 
 
 
-Object returnValueFunc() => forgetType(t0Instance);
+Object? returnValueFunc() => forgetType(t0Instance);
 
 class ReturnValueTest {
-  static Object staticTestMethod() => forgetType(t0Instance);
+  static Object? staticTestMethod() => forgetType(t0Instance);
 
-  Object testMethod() => forgetType(t0Instance);
+  Object? testMethod() => forgetType(t0Instance);
 
-  Object get testGetter => forgetType(t0Instance);
+  Object? get testGetter => forgetType(t0Instance);
 }
 
 class ReturnValueGen<X> {
@@ -51,7 +51,7 @@
 
 
 main() {
-  Object returnValueLocalFunc() => forgetType(t0Instance);
+  Object? returnValueLocalFunc() => forgetType(t0Instance);
 
   returnValueFunc();
   returnValueLocalFunc();
@@ -64,7 +64,7 @@
   // Test type parameters
 
   //# <-- NotGenericFunctionType
-  new ReturnValueGen<Object>().testMethod();
-  new ReturnValueGen<Object>().testGetter;
+  new ReturnValueGen<Object?>().testMethod();
+  new ReturnValueGen<Object?>().testGetter;
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/dynamic/generated/right_top_return_value_A03_t01.dart b/LanguageFeatures/Subtyping/dynamic/generated/right_top_return_value_A03_t01.dart
index 64633b4..73a517a 100644
--- a/LanguageFeatures/Subtyping/dynamic/generated/right_top_return_value_A03_t01.dart
+++ b/LanguageFeatures/Subtyping/dynamic/generated/right_top_return_value_A03_t01.dart
@@ -25,21 +25,21 @@
 
 
 import '../../utils/common.dart';
-
+// SharedOptions=--enable-experiment=non-nullable
 dynamic t0Instance = "";
-Object t1Instance = new Object();
+Object? t1Instance = new Object();
 
 
 
 
-Object returnValueFunc() => forgetType(t0Instance);
+Object? returnValueFunc() => forgetType(t0Instance);
 
 class ReturnValueTest {
-  static Object staticTestMethod() => forgetType(t0Instance);
+  static Object? staticTestMethod() => forgetType(t0Instance);
 
-  Object testMethod() => forgetType(t0Instance);
+  Object? testMethod() => forgetType(t0Instance);
 
-  Object get testGetter => forgetType(t0Instance);
+  Object? get testGetter => forgetType(t0Instance);
 }
 
 class ReturnValueGen<X> {
@@ -49,7 +49,7 @@
 
 
 main() {
-  Object returnValueLocalFunc() => forgetType(t0Instance);
+  Object? returnValueLocalFunc() => forgetType(t0Instance);
 
   returnValueFunc();
   returnValueLocalFunc();
@@ -62,7 +62,7 @@
   // Test type parameters
 
   //# <-- NotGenericFunctionType
-  new ReturnValueGen<Object>().testMethod();
-  new ReturnValueGen<Object>().testGetter;
+  new ReturnValueGen<Object?>().testMethod();
+  new ReturnValueGen<Object?>().testGetter;
   //# -->
 }
diff --git a/LanguageFeatures/Subtyping/static/generated/left_bottom_arguments_binding_A01_t01.dart b/LanguageFeatures/Subtyping/static/generated/left_null_arguments_binding_A01_t01.dart
similarity index 97%
rename from LanguageFeatures/Subtyping/static/generated/left_bottom_arguments_binding_A01_t01.dart
rename to LanguageFeatures/Subtyping/static/generated/left_null_arguments_binding_A01_t01.dart
index 50974d5..1688ddb 100644
--- a/LanguageFeatures/Subtyping/static/generated/left_bottom_arguments_binding_A01_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/left_null_arguments_binding_A01_t01.dart
@@ -6,9 +6,9 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Left Bottom: T0 is Null.
+ * Left Null: T0 is Null.
  * @description Check that if type T0 is Null then T0 is a subtype of a type T1.
- * @author ngl@unipro.ru
+ * @author sgrekhov@unipro.ru
  */
 /**
  * @description Check that if type T0 is a subtype of a type T1, then instance
@@ -16,7 +16,7 @@
  * @author sgrekhov@unipro.ru
  */
 /*
- * This test is generated from left_bottom_A01.dart and 
+ * This test is generated from left_null_A01.dart and 
  * arguments_binding_x01.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
diff --git a/LanguageFeatures/Subtyping/static/generated/left_bottom_arguments_binding_A01_t02.dart b/LanguageFeatures/Subtyping/static/generated/left_null_arguments_binding_A01_t02.dart
similarity index 97%
rename from LanguageFeatures/Subtyping/static/generated/left_bottom_arguments_binding_A01_t02.dart
rename to LanguageFeatures/Subtyping/static/generated/left_null_arguments_binding_A01_t02.dart
index 4ec277f..8abbef8 100644
--- a/LanguageFeatures/Subtyping/static/generated/left_bottom_arguments_binding_A01_t02.dart
+++ b/LanguageFeatures/Subtyping/static/generated/left_null_arguments_binding_A01_t02.dart
@@ -6,9 +6,9 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Left Bottom: T0 is Null.
+ * Left Null: T0 is Null.
  * @description Check that if type T0 is Null then T0 is a subtype of a type T1.
- * @author ngl@unipro.ru
+ * @author sgrekhov@unipro.ru
  */
 /**
  * @description Check that if type T0 is a subtype of a type T1, then instance
@@ -16,7 +16,7 @@
  * @author sgrekhov@unipro.ru
  */
 /*
- * This test is generated from left_bottom_A01.dart and 
+ * This test is generated from left_null_A01.dart and 
  * arguments_binding_x02.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
diff --git a/LanguageFeatures/Subtyping/static/generated/left_bottom_arguments_binding_A01_t03.dart b/LanguageFeatures/Subtyping/static/generated/left_null_arguments_binding_A01_t03.dart
similarity index 95%
rename from LanguageFeatures/Subtyping/static/generated/left_bottom_arguments_binding_A01_t03.dart
rename to LanguageFeatures/Subtyping/static/generated/left_null_arguments_binding_A01_t03.dart
index f46833e..3dec242 100644
--- a/LanguageFeatures/Subtyping/static/generated/left_bottom_arguments_binding_A01_t03.dart
+++ b/LanguageFeatures/Subtyping/static/generated/left_null_arguments_binding_A01_t03.dart
@@ -6,9 +6,9 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Left Bottom: T0 is Null.
+ * Left Null: T0 is Null.
  * @description Check that if type T0 is Null then T0 is a subtype of a type T1.
- * @author ngl@unipro.ru
+ * @author sgrekhov@unipro.ru
  */
 /**
  * @description Check that if type T0 is a subtype of a type T1, then instance
@@ -16,7 +16,7 @@
  * @author sgrekhov@unipro.ru
  */
 /*
- * This test is generated from left_bottom_A01.dart and 
+ * This test is generated from left_null_A01.dart and 
  * arguments_binding_x03.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
diff --git a/LanguageFeatures/Subtyping/static/generated/left_bottom_arguments_binding_A02_t01.dart b/LanguageFeatures/Subtyping/static/generated/left_null_arguments_binding_A02_t01.dart
similarity index 97%
rename from LanguageFeatures/Subtyping/static/generated/left_bottom_arguments_binding_A02_t01.dart
rename to LanguageFeatures/Subtyping/static/generated/left_null_arguments_binding_A02_t01.dart
index 9e3fdd8..1ec33c3 100644
--- a/LanguageFeatures/Subtyping/static/generated/left_bottom_arguments_binding_A02_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/left_null_arguments_binding_A02_t01.dart
@@ -6,10 +6,10 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Left Bottom: T0 is Null.
+ * Left Null: T0 is Null.
  * @description Check that if type T0 is Null and T1 is dynamic then T0 is a
  * subtype of a type T1.
- * @author ngl@unipro.ru
+ * @author sgrekhov@unipro.ru
  */
 /**
  * @description Check that if type T0 is a subtype of a type T1, then instance
@@ -17,7 +17,7 @@
  * @author sgrekhov@unipro.ru
  */
 /*
- * This test is generated from left_bottom_A02.dart and 
+ * This test is generated from left_null_A02.dart and 
  * arguments_binding_x01.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
diff --git a/LanguageFeatures/Subtyping/static/generated/left_bottom_arguments_binding_A02_t02.dart b/LanguageFeatures/Subtyping/static/generated/left_null_arguments_binding_A02_t02.dart
similarity index 97%
rename from LanguageFeatures/Subtyping/static/generated/left_bottom_arguments_binding_A02_t02.dart
rename to LanguageFeatures/Subtyping/static/generated/left_null_arguments_binding_A02_t02.dart
index 7259daa..50aa374 100644
--- a/LanguageFeatures/Subtyping/static/generated/left_bottom_arguments_binding_A02_t02.dart
+++ b/LanguageFeatures/Subtyping/static/generated/left_null_arguments_binding_A02_t02.dart
@@ -6,10 +6,10 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Left Bottom: T0 is Null.
+ * Left Null: T0 is Null.
  * @description Check that if type T0 is Null and T1 is dynamic then T0 is a
  * subtype of a type T1.
- * @author ngl@unipro.ru
+ * @author sgrekhov@unipro.ru
  */
 /**
  * @description Check that if type T0 is a subtype of a type T1, then instance
@@ -17,7 +17,7 @@
  * @author sgrekhov@unipro.ru
  */
 /*
- * This test is generated from left_bottom_A02.dart and 
+ * This test is generated from left_null_A02.dart and 
  * arguments_binding_x02.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
diff --git a/LanguageFeatures/Subtyping/static/generated/left_bottom_arguments_binding_A02_t03.dart b/LanguageFeatures/Subtyping/static/generated/left_null_arguments_binding_A02_t03.dart
similarity index 96%
rename from LanguageFeatures/Subtyping/static/generated/left_bottom_arguments_binding_A02_t03.dart
rename to LanguageFeatures/Subtyping/static/generated/left_null_arguments_binding_A02_t03.dart
index f57b1c5..999153d 100644
--- a/LanguageFeatures/Subtyping/static/generated/left_bottom_arguments_binding_A02_t03.dart
+++ b/LanguageFeatures/Subtyping/static/generated/left_null_arguments_binding_A02_t03.dart
@@ -6,10 +6,10 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Left Bottom: T0 is Null.
+ * Left Null: T0 is Null.
  * @description Check that if type T0 is Null and T1 is dynamic then T0 is a
  * subtype of a type T1.
- * @author ngl@unipro.ru
+ * @author sgrekhov@unipro.ru
  */
 /**
  * @description Check that if type T0 is a subtype of a type T1, then instance
@@ -17,7 +17,7 @@
  * @author sgrekhov@unipro.ru
  */
 /*
- * This test is generated from left_bottom_A02.dart and 
+ * This test is generated from left_null_A02.dart and 
  * arguments_binding_x03.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
diff --git a/LanguageFeatures/Subtyping/static/generated/left_bottom_class_member_A01_t01.dart b/LanguageFeatures/Subtyping/static/generated/left_null_class_member_A01_t01.dart
similarity index 94%
rename from LanguageFeatures/Subtyping/static/generated/left_bottom_class_member_A01_t01.dart
rename to LanguageFeatures/Subtyping/static/generated/left_null_class_member_A01_t01.dart
index 19d3178..c3d287d 100644
--- a/LanguageFeatures/Subtyping/static/generated/left_bottom_class_member_A01_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/left_null_class_member_A01_t01.dart
@@ -6,9 +6,9 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Left Bottom: T0 is Null.
+ * Left Null: T0 is Null.
  * @description Check that if type T0 is Null then T0 is a subtype of a type T1.
- * @author ngl@unipro.ru
+ * @author sgrekhov@unipro.ru
  */
 /**
  * @description Check that if type T0 is a subtype of a type T1, then instance
@@ -16,7 +16,7 @@
  * @author sgrekhov@unipro.ru
  */
 /*
- * This test is generated from left_bottom_A01.dart and 
+ * This test is generated from left_null_A01.dart and 
  * class_member_x01.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
diff --git a/LanguageFeatures/Subtyping/static/generated/left_bottom_class_member_A01_t02.dart b/LanguageFeatures/Subtyping/static/generated/left_null_class_member_A01_t02.dart
similarity index 93%
rename from LanguageFeatures/Subtyping/static/generated/left_bottom_class_member_A01_t02.dart
rename to LanguageFeatures/Subtyping/static/generated/left_null_class_member_A01_t02.dart
index 19e66e6..26ff348 100644
--- a/LanguageFeatures/Subtyping/static/generated/left_bottom_class_member_A01_t02.dart
+++ b/LanguageFeatures/Subtyping/static/generated/left_null_class_member_A01_t02.dart
@@ -6,9 +6,9 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Left Bottom: T0 is Null.
+ * Left Null: T0 is Null.
  * @description Check that if type T0 is Null then T0 is a subtype of a type T1.
- * @author ngl@unipro.ru
+ * @author sgrekhov@unipro.ru
  */
 /**
  * @description Check that if type T0 is a subtype of a type T1, then instance
@@ -16,7 +16,7 @@
  * @author sgrekhov@unipro.ru
  */
 /*
- * This test is generated from left_bottom_A01.dart and 
+ * This test is generated from left_null_A01.dart and 
  * class_member_x02.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
diff --git a/LanguageFeatures/Subtyping/static/generated/left_bottom_class_member_A01_t03.dart b/LanguageFeatures/Subtyping/static/generated/left_null_class_member_A01_t03.dart
similarity index 91%
rename from LanguageFeatures/Subtyping/static/generated/left_bottom_class_member_A01_t03.dart
rename to LanguageFeatures/Subtyping/static/generated/left_null_class_member_A01_t03.dart
index e06e3b9..e4990d6 100644
--- a/LanguageFeatures/Subtyping/static/generated/left_bottom_class_member_A01_t03.dart
+++ b/LanguageFeatures/Subtyping/static/generated/left_null_class_member_A01_t03.dart
@@ -6,9 +6,9 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Left Bottom: T0 is Null.
+ * Left Null: T0 is Null.
  * @description Check that if type T0 is Null then T0 is a subtype of a type T1.
- * @author ngl@unipro.ru
+ * @author sgrekhov@unipro.ru
  */
 /**
  * @description Check that if type T0 is a subtype of a type T1, then instance
@@ -16,7 +16,7 @@
  * @author sgrekhov@unipro.ru
  */
 /*
- * This test is generated from left_bottom_A01.dart and 
+ * This test is generated from left_null_A01.dart and 
  * class_member_x03.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
diff --git a/LanguageFeatures/Subtyping/static/generated/left_bottom_class_member_A02_t01.dart b/LanguageFeatures/Subtyping/static/generated/left_null_class_member_A02_t01.dart
similarity index 94%
rename from LanguageFeatures/Subtyping/static/generated/left_bottom_class_member_A02_t01.dart
rename to LanguageFeatures/Subtyping/static/generated/left_null_class_member_A02_t01.dart
index b2c19ee..7db0324 100644
--- a/LanguageFeatures/Subtyping/static/generated/left_bottom_class_member_A02_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/left_null_class_member_A02_t01.dart
@@ -6,10 +6,10 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Left Bottom: T0 is Null.
+ * Left Null: T0 is Null.
  * @description Check that if type T0 is Null and T1 is dynamic then T0 is a
  * subtype of a type T1.
- * @author ngl@unipro.ru
+ * @author sgrekhov@unipro.ru
  */
 /**
  * @description Check that if type T0 is a subtype of a type T1, then instance
@@ -17,7 +17,7 @@
  * @author sgrekhov@unipro.ru
  */
 /*
- * This test is generated from left_bottom_A02.dart and 
+ * This test is generated from left_null_A02.dart and 
  * class_member_x01.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
diff --git a/LanguageFeatures/Subtyping/static/generated/left_bottom_class_member_A02_t02.dart b/LanguageFeatures/Subtyping/static/generated/left_null_class_member_A02_t02.dart
similarity index 93%
rename from LanguageFeatures/Subtyping/static/generated/left_bottom_class_member_A02_t02.dart
rename to LanguageFeatures/Subtyping/static/generated/left_null_class_member_A02_t02.dart
index b5dfce6..42f7119 100644
--- a/LanguageFeatures/Subtyping/static/generated/left_bottom_class_member_A02_t02.dart
+++ b/LanguageFeatures/Subtyping/static/generated/left_null_class_member_A02_t02.dart
@@ -6,10 +6,10 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Left Bottom: T0 is Null.
+ * Left Null: T0 is Null.
  * @description Check that if type T0 is Null and T1 is dynamic then T0 is a
  * subtype of a type T1.
- * @author ngl@unipro.ru
+ * @author sgrekhov@unipro.ru
  */
 /**
  * @description Check that if type T0 is a subtype of a type T1, then instance
@@ -17,7 +17,7 @@
  * @author sgrekhov@unipro.ru
  */
 /*
- * This test is generated from left_bottom_A02.dart and 
+ * This test is generated from left_null_A02.dart and 
  * class_member_x02.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
diff --git a/LanguageFeatures/Subtyping/static/generated/left_bottom_class_member_A02_t03.dart b/LanguageFeatures/Subtyping/static/generated/left_null_class_member_A02_t03.dart
similarity index 91%
rename from LanguageFeatures/Subtyping/static/generated/left_bottom_class_member_A02_t03.dart
rename to LanguageFeatures/Subtyping/static/generated/left_null_class_member_A02_t03.dart
index 57c216e..221e1b3 100644
--- a/LanguageFeatures/Subtyping/static/generated/left_bottom_class_member_A02_t03.dart
+++ b/LanguageFeatures/Subtyping/static/generated/left_null_class_member_A02_t03.dart
@@ -6,10 +6,10 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Left Bottom: T0 is Null.
+ * Left Null: T0 is Null.
  * @description Check that if type T0 is Null and T1 is dynamic then T0 is a
  * subtype of a type T1.
- * @author ngl@unipro.ru
+ * @author sgrekhov@unipro.ru
  */
 /**
  * @description Check that if type T0 is a subtype of a type T1, then instance
@@ -17,7 +17,7 @@
  * @author sgrekhov@unipro.ru
  */
 /*
- * This test is generated from left_bottom_A02.dart and 
+ * This test is generated from left_null_A02.dart and 
  * class_member_x03.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
diff --git a/LanguageFeatures/Subtyping/static/generated/left_bottom_global_variable_A01_t01.dart b/LanguageFeatures/Subtyping/static/generated/left_null_global_variable_A01_t01.dart
similarity index 91%
rename from LanguageFeatures/Subtyping/static/generated/left_bottom_global_variable_A01_t01.dart
rename to LanguageFeatures/Subtyping/static/generated/left_null_global_variable_A01_t01.dart
index 3d7f642..3b2347c 100644
--- a/LanguageFeatures/Subtyping/static/generated/left_bottom_global_variable_A01_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/left_null_global_variable_A01_t01.dart
@@ -6,9 +6,9 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Left Bottom: T0 is Null.
+ * Left Null: T0 is Null.
  * @description Check that if type T0 is Null then T0 is a subtype of a type T1.
- * @author ngl@unipro.ru
+ * @author sgrekhov@unipro.ru
  */
 /**
  * @description Check that if type T0 is a subtype of a type T1, then instance
@@ -16,7 +16,7 @@
  * @author sgrekhov@unipro.ru
  */
 /*
- * This test is generated from left_bottom_A01.dart and 
+ * This test is generated from left_null_A01.dart and 
  * global_variable_x01.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
diff --git a/LanguageFeatures/Subtyping/static/generated/left_bottom_global_variable_A02_t01.dart b/LanguageFeatures/Subtyping/static/generated/left_null_global_variable_A02_t01.dart
similarity index 91%
rename from LanguageFeatures/Subtyping/static/generated/left_bottom_global_variable_A02_t01.dart
rename to LanguageFeatures/Subtyping/static/generated/left_null_global_variable_A02_t01.dart
index a7a05b5..60dd1f8 100644
--- a/LanguageFeatures/Subtyping/static/generated/left_bottom_global_variable_A02_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/left_null_global_variable_A02_t01.dart
@@ -6,10 +6,10 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Left Bottom: T0 is Null.
+ * Left Null: T0 is Null.
  * @description Check that if type T0 is Null and T1 is dynamic then T0 is a
  * subtype of a type T1.
- * @author ngl@unipro.ru
+ * @author sgrekhov@unipro.ru
  */
 /**
  * @description Check that if type T0 is a subtype of a type T1, then instance
@@ -17,7 +17,7 @@
  * @author sgrekhov@unipro.ru
  */
 /*
- * This test is generated from left_bottom_A02.dart and 
+ * This test is generated from left_null_A02.dart and 
  * global_variable_x01.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
diff --git a/LanguageFeatures/Subtyping/static/generated/left_bottom_local_variable_A01_t01.dart b/LanguageFeatures/Subtyping/static/generated/left_null_local_variable_A01_t01.dart
similarity index 91%
rename from LanguageFeatures/Subtyping/static/generated/left_bottom_local_variable_A01_t01.dart
rename to LanguageFeatures/Subtyping/static/generated/left_null_local_variable_A01_t01.dart
index adb45e5..0f16c62 100644
--- a/LanguageFeatures/Subtyping/static/generated/left_bottom_local_variable_A01_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/left_null_local_variable_A01_t01.dart
@@ -6,9 +6,9 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Left Bottom: T0 is Null.
+ * Left Null: T0 is Null.
  * @description Check that if type T0 is Null then T0 is a subtype of a type T1.
- * @author ngl@unipro.ru
+ * @author sgrekhov@unipro.ru
  */
 /**
  * @description Check that if type T0 is a subtype of a type T1, then instance
@@ -16,7 +16,7 @@
  * @author sgrekhov@unipro.ru
  */
 /*
- * This test is generated from left_bottom_A01.dart and 
+ * This test is generated from left_null_A01.dart and 
  * local_variable_x01.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
diff --git a/LanguageFeatures/Subtyping/static/generated/left_bottom_local_variable_A02_t01.dart b/LanguageFeatures/Subtyping/static/generated/left_null_local_variable_A02_t01.dart
similarity index 92%
rename from LanguageFeatures/Subtyping/static/generated/left_bottom_local_variable_A02_t01.dart
rename to LanguageFeatures/Subtyping/static/generated/left_null_local_variable_A02_t01.dart
index 8878438..d6e03ae 100644
--- a/LanguageFeatures/Subtyping/static/generated/left_bottom_local_variable_A02_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/left_null_local_variable_A02_t01.dart
@@ -6,10 +6,10 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Left Bottom: T0 is Null.
+ * Left Null: T0 is Null.
  * @description Check that if type T0 is Null and T1 is dynamic then T0 is a
  * subtype of a type T1.
- * @author ngl@unipro.ru
+ * @author sgrekhov@unipro.ru
  */
 /**
  * @description Check that if type T0 is a subtype of a type T1, then instance
@@ -17,7 +17,7 @@
  * @author sgrekhov@unipro.ru
  */
 /*
- * This test is generated from left_bottom_A02.dart and 
+ * This test is generated from left_null_A02.dart and 
  * local_variable_x01.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
diff --git a/LanguageFeatures/Subtyping/static/generated/left_bottom_return_value_A01_t01.dart b/LanguageFeatures/Subtyping/static/generated/left_null_return_value_A01_t01.dart
similarity index 91%
rename from LanguageFeatures/Subtyping/static/generated/left_bottom_return_value_A01_t01.dart
rename to LanguageFeatures/Subtyping/static/generated/left_null_return_value_A01_t01.dart
index 7682568..e3a3963 100644
--- a/LanguageFeatures/Subtyping/static/generated/left_bottom_return_value_A01_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/left_null_return_value_A01_t01.dart
@@ -6,9 +6,9 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Left Bottom: T0 is Null.
+ * Left Null: T0 is Null.
  * @description Check that if type T0 is Null then T0 is a subtype of a type T1.
- * @author ngl@unipro.ru
+ * @author sgrekhov@unipro.ru
  */
 /**
  * @description Check that if type T0 is a subtype of a type T1, then instance
@@ -16,7 +16,7 @@
  * @author sgrekhov@unipro.ru
  */
 /*
- * This test is generated from left_bottom_A01.dart and 
+ * This test is generated from left_null_A01.dart and 
  * return_value_x01.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
diff --git a/LanguageFeatures/Subtyping/static/generated/left_bottom_return_value_A02_t01.dart b/LanguageFeatures/Subtyping/static/generated/left_null_return_value_A02_t01.dart
similarity index 91%
rename from LanguageFeatures/Subtyping/static/generated/left_bottom_return_value_A02_t01.dart
rename to LanguageFeatures/Subtyping/static/generated/left_null_return_value_A02_t01.dart
index c92959f..a586f8f 100644
--- a/LanguageFeatures/Subtyping/static/generated/left_bottom_return_value_A02_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/left_null_return_value_A02_t01.dart
@@ -6,10 +6,10 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Left Bottom: T0 is Null.
+ * Left Null: T0 is Null.
  * @description Check that if type T0 is Null and T1 is dynamic then T0 is a
  * subtype of a type T1.
- * @author ngl@unipro.ru
+ * @author sgrekhov@unipro.ru
  */
 /**
  * @description Check that if type T0 is a subtype of a type T1, then instance
@@ -17,7 +17,7 @@
  * @author sgrekhov@unipro.ru
  */
 /*
- * This test is generated from left_bottom_A02.dart and 
+ * This test is generated from left_null_A02.dart and 
  * return_value_x01.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
diff --git a/LanguageFeatures/Subtyping/static/generated/left_bottom_arguments_binding_A02_t01.dart b/LanguageFeatures/Subtyping/static/generated/left_top_arguments_binding_A01_t01.dart
similarity index 65%
copy from LanguageFeatures/Subtyping/static/generated/left_bottom_arguments_binding_A02_t01.dart
copy to LanguageFeatures/Subtyping/static/generated/left_top_arguments_binding_A01_t01.dart
index 9e3fdd8..9b738e4 100644
--- a/LanguageFeatures/Subtyping/static/generated/left_bottom_arguments_binding_A02_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/left_top_arguments_binding_A01_t01.dart
@@ -6,10 +6,10 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Left Bottom: T0 is Null.
- * @description Check that if type T0 is Null and T1 is dynamic then T0 is a
+ * Left Top: if T0 is dynamic or void then T0 <: T1 if Object? <: T1
+ * @description Check that if type T0 is dynamic and Object? <: T1 then T0 is a
  * subtype of a type T1.
- * @author ngl@unipro.ru
+ * @author sgrekhov@unipro.ru
  */
 /**
  * @description Check that if type T0 is a subtype of a type T1, then instance
@@ -17,48 +17,49 @@
  * @author sgrekhov@unipro.ru
  */
 /*
- * This test is generated from left_bottom_A02.dart and 
+ * This test is generated from left_top_A01.dart and 
  * arguments_binding_x01.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
  */
 
 
+// SharedOptions=--enable-experiment=non-nullable
 
 class T1 {}
 
-Null t0Instance = null;
-dynamic t1Instance = new T1();
+dynamic t0Instance = "Show must go on";
+T1? t1Instance = new T1();
 
 
 
 
-namedArgumentsFunc1(dynamic t1, {dynamic t2}) {}
-positionalArgumentsFunc1(dynamic t1, [dynamic t2]) {}
+namedArgumentsFunc1(Object? t1, {Object? t2}) {}
+positionalArgumentsFunc1(Object? t1, [Object? t2]) {}
 
 namedArgumentsFunc2<X>(X t1, {X t2}) {}
 positionalArgumentsFunc2<X>(X t1, [X t2]) {}
 
 class ArgumentsBindingClass {
-  ArgumentsBindingClass(dynamic t1) {}
+  ArgumentsBindingClass(Object? t1) {}
 
-  ArgumentsBindingClass.named(dynamic t1, {dynamic t2}) {}
-  ArgumentsBindingClass.positional(dynamic t1, [dynamic t2]) {}
+  ArgumentsBindingClass.named(Object? t1, {Object? t2}) {}
+  ArgumentsBindingClass.positional(Object? t1, [Object? t2]) {}
 
-  factory ArgumentsBindingClass.fNamed(dynamic t1, {dynamic t2}) {
+  factory ArgumentsBindingClass.fNamed(Object? t1, {Object? t2}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(dynamic t1, [dynamic t2]) {
+  factory ArgumentsBindingClass.fPositional(Object? t1, [Object? t2]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(dynamic t1, {dynamic t2}) {}
-  static positionalArgumentsStaticMethod(dynamic t1, [dynamic t2]) {}
+  static namedArgumentsStaticMethod(Object? t1, {Object? t2}) {}
+  static positionalArgumentsStaticMethod(Object? t1, [Object? t2]) {}
 
-  namedArgumentsMethod(dynamic t1, {dynamic t2}) {}
-  positionalArgumentsMethod(dynamic t1, [dynamic t2]) {}
+  namedArgumentsMethod(Object? t1, {Object? t2}) {}
+  positionalArgumentsMethod(Object? t1, [Object? t2]) {}
 
-  set testSetter(dynamic val) {}
+  set testSetter(Object? val) {}
 }
 
 class ArgumentsBindingGen<X>  {
@@ -105,15 +106,15 @@
 
   //# <-- NotGenericFunctionType
   // test generic functions
-  namedArgumentsFunc2<dynamic>(t0Instance, t2: t0Instance);
-  positionalArgumentsFunc2<dynamic>(t0Instance, t0Instance);
+  namedArgumentsFunc2<Object?>(t0Instance, t2: t0Instance);
+  positionalArgumentsFunc2<Object?>(t0Instance, t0Instance);
 
   // test generic class constructors
-  ArgumentsBindingGen<dynamic> instance2 = new ArgumentsBindingGen<dynamic>(t0Instance);
-  instance2 = new ArgumentsBindingGen<dynamic>.fNamed(t0Instance, t2: t0Instance);
-  instance2 = new ArgumentsBindingGen<dynamic>.fPositional(t0Instance, t0Instance);
-  instance2 = new ArgumentsBindingGen<dynamic>.named(t0Instance, t2: t0Instance);
-  instance2 = new ArgumentsBindingGen<dynamic>.positional(t0Instance, t0Instance);
+  ArgumentsBindingGen<Object?> instance2 = new ArgumentsBindingGen<Object?>(t0Instance);
+  instance2 = new ArgumentsBindingGen<Object?>.fNamed(t0Instance, t2: t0Instance);
+  instance2 = new ArgumentsBindingGen<Object?>.fPositional(t0Instance, t0Instance);
+  instance2 = new ArgumentsBindingGen<Object?>.named(t0Instance, t2: t0Instance);
+  instance2 = new ArgumentsBindingGen<Object?>.positional(t0Instance, t0Instance);
 
   // test generic class methods and setters
   instance2.namedArgumentsMethod(t0Instance, t2: t0Instance);
diff --git a/LanguageFeatures/Subtyping/static/generated/left_bottom_arguments_binding_A02_t02.dart b/LanguageFeatures/Subtyping/static/generated/left_top_arguments_binding_A01_t02.dart
similarity index 75%
copy from LanguageFeatures/Subtyping/static/generated/left_bottom_arguments_binding_A02_t02.dart
copy to LanguageFeatures/Subtyping/static/generated/left_top_arguments_binding_A01_t02.dart
index 7259daa..05f78b9 100644
--- a/LanguageFeatures/Subtyping/static/generated/left_bottom_arguments_binding_A02_t02.dart
+++ b/LanguageFeatures/Subtyping/static/generated/left_top_arguments_binding_A01_t02.dart
@@ -6,10 +6,10 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Left Bottom: T0 is Null.
- * @description Check that if type T0 is Null and T1 is dynamic then T0 is a
+ * Left Top: if T0 is dynamic or void then T0 <: T1 if Object? <: T1
+ * @description Check that if type T0 is dynamic and Object? <: T1 then T0 is a
  * subtype of a type T1.
- * @author ngl@unipro.ru
+ * @author sgrekhov@unipro.ru
  */
 /**
  * @description Check that if type T0 is a subtype of a type T1, then instance
@@ -17,35 +17,36 @@
  * @author sgrekhov@unipro.ru
  */
 /*
- * This test is generated from left_bottom_A02.dart and 
+ * This test is generated from left_top_A01.dart and 
  * arguments_binding_x02.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
  */
 
 
+// SharedOptions=--enable-experiment=non-nullable
 
 class T1 {}
 
-Null t0Instance = null;
-dynamic t1Instance = new T1();
+dynamic t0Instance = "Show must go on";
+T1? t1Instance = new T1();
 
 
 
 
 class ArgumentsBindingSuper1_t02 {
-  dynamic m;
+  Object? m;
 
-  ArgumentsBindingSuper1_t02(dynamic value) {}
-  ArgumentsBindingSuper1_t02.named(dynamic value, {dynamic val2}) {}
-  ArgumentsBindingSuper1_t02.positional(dynamic value, [dynamic val2]) {}
+  ArgumentsBindingSuper1_t02(Object? value) {}
+  ArgumentsBindingSuper1_t02.named(Object? value, {Object? val2}) {}
+  ArgumentsBindingSuper1_t02.positional(Object? value, [Object? val2]) {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
-  void superTest(dynamic val) {}
-  void superTestPositioned(dynamic val, [dynamic val2]) {}
-  void superTestNamed(dynamic val, {dynamic val2}) {}
-  dynamic get superGetter => m;
-  void set superSetter(dynamic val) {}
+  void superTest(Object? val) {}
+  void superTestPositioned(Object? val, [Object? val2]) {}
+  void superTestNamed(Object? val, {Object? val2}) {}
+  Object? get superGetter => m;
+  void set superSetter(Object? val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
@@ -123,13 +124,13 @@
   // Test type parameters
 
   //# <-- NotGenericFunctionType
-  ArgumentsBinding2_t02<dynamic> c2 =
-    new ArgumentsBinding2_t02<dynamic>(t0Instance);
-  c2 = new ArgumentsBinding2_t02<dynamic>.c1(t0Instance);
-  c2 = new ArgumentsBinding2_t02<dynamic>.c2(t1Instance, t0Instance);
-  c2 = new ArgumentsBinding2_t02<dynamic>.c3(t0Instance);
-  c2 = new ArgumentsBinding2_t02<dynamic>.c4(t1Instance, t0Instance);
-  c2 = new ArgumentsBinding2_t02<dynamic>.c5(t0Instance);
+  ArgumentsBinding2_t02<Object?> c2 =
+    new ArgumentsBinding2_t02<Object?>(t0Instance);
+  c2 = new ArgumentsBinding2_t02<Object?>.c1(t0Instance);
+  c2 = new ArgumentsBinding2_t02<Object?>.c2(t1Instance, t0Instance);
+  c2 = new ArgumentsBinding2_t02<Object?>.c3(t0Instance);
+  c2 = new ArgumentsBinding2_t02<Object?>.c4(t1Instance, t0Instance);
+  c2 = new ArgumentsBinding2_t02<Object?>.c5(t0Instance);
 
   c2.test(t0Instance, t1Instance);
   c2.superTest(t0Instance);
diff --git a/LanguageFeatures/Subtyping/static/generated/left_bottom_arguments_binding_A01_t03.dart b/LanguageFeatures/Subtyping/static/generated/left_top_arguments_binding_A01_t03.dart
similarity index 77%
copy from LanguageFeatures/Subtyping/static/generated/left_bottom_arguments_binding_A01_t03.dart
copy to LanguageFeatures/Subtyping/static/generated/left_top_arguments_binding_A01_t03.dart
index f46833e..b5a591d 100644
--- a/LanguageFeatures/Subtyping/static/generated/left_bottom_arguments_binding_A01_t03.dart
+++ b/LanguageFeatures/Subtyping/static/generated/left_top_arguments_binding_A01_t03.dart
@@ -6,9 +6,10 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Left Bottom: T0 is Null.
- * @description Check that if type T0 is Null then T0 is a subtype of a type T1.
- * @author ngl@unipro.ru
+ * Left Top: if T0 is dynamic or void then T0 <: T1 if Object? <: T1
+ * @description Check that if type T0 is dynamic and Object? <: T1 then T0 is a
+ * subtype of a type T1.
+ * @author sgrekhov@unipro.ru
  */
 /**
  * @description Check that if type T0 is a subtype of a type T1, then instance
@@ -16,30 +17,31 @@
  * @author sgrekhov@unipro.ru
  */
 /*
- * This test is generated from left_bottom_A01.dart and 
+ * This test is generated from left_top_A01.dart and 
  * arguments_binding_x03.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
  */
 
 
+// SharedOptions=--enable-experiment=non-nullable
 
 class T1 {}
 
-Null t0Instance = null;
-T1 t1Instance = new T1();
+dynamic t0Instance = "Show must go on";
+T1? t1Instance = new T1();
 
 
 
 
 class ArgumentsBindingMixin1_t03 {
-  T1 m;
+  Object? m;
 
-  void superTest(T1 val) {}
-  void superTestPositioned(T1 val, [T1 val2]) {}
-  void superTestNamed(T1 val, {T1 val2}) {}
-  T1 get superGetter => m;
-  void set superSetter(T1 val) {}
+  void superTest(Object? val) {}
+  void superTestPositioned(Object? val, [Object? val2]) {}
+  void superTestNamed(Object? val, {Object? val2}) {}
+  Object? get superGetter => m;
+  void set superSetter(Object? val) {}
 }
 
 class ArgumentsBinding1_t03 extends Object with ArgumentsBindingMixin1_t03 {
@@ -95,7 +97,7 @@
   // Test type parameters
 
   //# <-- NotGenericFunctionType
-  ArgumentsBinding2_t03<T1> c2 = new ArgumentsBinding2_t03<T1>();
+  ArgumentsBinding2_t03<Object?> c2 = new ArgumentsBinding2_t03<Object?>();
   c2.test(t0Instance, t1Instance);
   c2.superTest(t0Instance);
   c2.superTestPositioned(t0Instance);
diff --git a/LanguageFeatures/Subtyping/static/generated/left_bottom_class_member_A02_t01.dart b/LanguageFeatures/Subtyping/static/generated/left_top_class_member_A01_t01.dart
similarity index 70%
copy from LanguageFeatures/Subtyping/static/generated/left_bottom_class_member_A02_t01.dart
copy to LanguageFeatures/Subtyping/static/generated/left_top_class_member_A01_t01.dart
index b2c19ee..858db98 100644
--- a/LanguageFeatures/Subtyping/static/generated/left_bottom_class_member_A02_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/left_top_class_member_A01_t01.dart
@@ -6,10 +6,10 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Left Bottom: T0 is Null.
- * @description Check that if type T0 is Null and T1 is dynamic then T0 is a
+ * Left Top: if T0 is dynamic or void then T0 <: T1 if Object? <: T1
+ * @description Check that if type T0 is dynamic and Object? <: T1 then T0 is a
  * subtype of a type T1.
- * @author ngl@unipro.ru
+ * @author sgrekhov@unipro.ru
  */
 /**
  * @description Check that if type T0 is a subtype of a type T1, then instance
@@ -17,26 +17,27 @@
  * @author sgrekhov@unipro.ru
  */
 /*
- * This test is generated from left_bottom_A02.dart and 
+ * This test is generated from left_top_A01.dart and 
  * class_member_x01.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
  */
 
 
+// SharedOptions=--enable-experiment=non-nullable
 
 class T1 {}
 
-Null t0Instance = null;
-dynamic t1Instance = new T1();
+dynamic t0Instance = "Show must go on";
+T1? t1Instance = new T1();
 
 
 
 
 class ClassMember1_t01 {
-  static dynamic s = t0Instance;
-  dynamic m = t0Instance;
-  dynamic _p = t0Instance;
+  static Object? s = t0Instance;
+  Object? m = t0Instance;
+  Object? _p = t0Instance;
 
   ClassMember1_t01() {
     s = t0Instance;
@@ -44,7 +45,7 @@
     _p = t0Instance;
   }
 
-  ClassMember1_t01.named(dynamic value) {
+  ClassMember1_t01.named(Object? value) {
     s = value;
     m = value;
     _p = value;
@@ -58,21 +59,21 @@
     _p = t0Instance;
   }
 
-  set setter(dynamic val) {
+  set setter(Object? val) {
     _p = val;
   }
 
-  dynamic get getter => _p;
+  Object? get getter => _p;
 
   static staticTest() {
     s = t0Instance;
   }
 
-  static set staticSetter(dynamic val) {
+  static set staticSetter(Object? val) {
     s = val;
   }
 
-  static dynamic get staticGetter => t0Instance;
+  static Object? get staticGetter => t0Instance;
 }
 
 main() {
diff --git a/LanguageFeatures/Subtyping/static/generated/left_bottom_class_member_A02_t02.dart b/LanguageFeatures/Subtyping/static/generated/left_top_class_member_A01_t02.dart
similarity index 77%
copy from LanguageFeatures/Subtyping/static/generated/left_bottom_class_member_A02_t02.dart
copy to LanguageFeatures/Subtyping/static/generated/left_top_class_member_A01_t02.dart
index b5dfce6..a194fc1 100644
--- a/LanguageFeatures/Subtyping/static/generated/left_bottom_class_member_A02_t02.dart
+++ b/LanguageFeatures/Subtyping/static/generated/left_top_class_member_A01_t02.dart
@@ -6,10 +6,10 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Left Bottom: T0 is Null.
- * @description Check that if type T0 is Null and T1 is dynamic then T0 is a
+ * Left Top: if T0 is dynamic or void then T0 <: T1 if Object? <: T1
+ * @description Check that if type T0 is dynamic and Object? <: T1 then T0 is a
  * subtype of a type T1.
- * @author ngl@unipro.ru
+ * @author sgrekhov@unipro.ru
  */
 /**
  * @description Check that if type T0 is a subtype of a type T1, then instance
@@ -17,24 +17,25 @@
  * @author sgrekhov@unipro.ru
  */
 /*
- * This test is generated from left_bottom_A02.dart and 
+ * This test is generated from left_top_A01.dart and 
  * class_member_x02.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
  */
 
 
+// SharedOptions=--enable-experiment=non-nullable
 
 class T1 {}
 
-Null t0Instance = null;
-dynamic t1Instance = new T1();
+dynamic t0Instance = "Show must go on";
+T1? t1Instance = new T1();
 
 
 
 
 class ClassMemberSuper1_t02 {
-  dynamic m;
+  Object? m;
 
   ClassMemberSuper1_t02(dynamic value) {
     m = value;
@@ -46,7 +47,7 @@
 
   ClassMemberSuper1_t02.short(this.m);
 
-  void set superSetter(dynamic val) {}
+  void set superSetter(Object? val) {}
 }
 
 class ClassMember1_t02 extends ClassMemberSuper1_t02 {
diff --git a/LanguageFeatures/Subtyping/static/generated/left_bottom_class_member_A02_t03.dart b/LanguageFeatures/Subtyping/static/generated/left_top_class_member_A01_t03.dart
similarity index 74%
copy from LanguageFeatures/Subtyping/static/generated/left_bottom_class_member_A02_t03.dart
copy to LanguageFeatures/Subtyping/static/generated/left_top_class_member_A01_t03.dart
index 57c216e..d181500 100644
--- a/LanguageFeatures/Subtyping/static/generated/left_bottom_class_member_A02_t03.dart
+++ b/LanguageFeatures/Subtyping/static/generated/left_top_class_member_A01_t03.dart
@@ -6,10 +6,10 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Left Bottom: T0 is Null.
- * @description Check that if type T0 is Null and T1 is dynamic then T0 is a
+ * Left Top: if T0 is dynamic or void then T0 <: T1 if Object? <: T1
+ * @description Check that if type T0 is dynamic and Object? <: T1 then T0 is a
  * subtype of a type T1.
- * @author ngl@unipro.ru
+ * @author sgrekhov@unipro.ru
  */
 /**
  * @description Check that if type T0 is a subtype of a type T1, then instance
@@ -17,24 +17,25 @@
  * @author sgrekhov@unipro.ru
  */
 /*
- * This test is generated from left_bottom_A02.dart and 
+ * This test is generated from left_top_A01.dart and 
  * class_member_x03.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
  */
 
 
+// SharedOptions=--enable-experiment=non-nullable
 
 class T1 {}
 
-Null t0Instance = null;
-dynamic t1Instance = new T1();
+dynamic t0Instance = "Show must go on";
+T1? t1Instance = new T1();
 
 
 
 
 class ClassMemberMixin1_t03 {
-  dynamic m;
+  Object? m;
 
   void set superSetter(dynamic val) {}
 }
diff --git a/LanguageFeatures/Subtyping/static/generated/left_bottom_global_variable_A02_t01.dart b/LanguageFeatures/Subtyping/static/generated/left_top_global_variable_A01_t01.dart
similarity index 75%
copy from LanguageFeatures/Subtyping/static/generated/left_bottom_global_variable_A02_t01.dart
copy to LanguageFeatures/Subtyping/static/generated/left_top_global_variable_A01_t01.dart
index a7a05b5..e35ab1c 100644
--- a/LanguageFeatures/Subtyping/static/generated/left_bottom_global_variable_A02_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/left_top_global_variable_A01_t01.dart
@@ -6,10 +6,10 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Left Bottom: T0 is Null.
- * @description Check that if type T0 is Null and T1 is dynamic then T0 is a
+ * Left Top: if T0 is dynamic or void then T0 <: T1 if Object? <: T1
+ * @description Check that if type T0 is dynamic and Object? <: T1 then T0 is a
  * subtype of a type T1.
- * @author ngl@unipro.ru
+ * @author sgrekhov@unipro.ru
  */
 /**
  * @description Check that if type T0 is a subtype of a type T1, then instance
@@ -17,18 +17,19 @@
  * @author sgrekhov@unipro.ru
  */
 /*
- * This test is generated from left_bottom_A02.dart and 
+ * This test is generated from left_top_A01.dart and 
  * global_variable_x01.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
  */
 
 
+// SharedOptions=--enable-experiment=non-nullable
 
 class T1 {}
 
-Null t0Instance = null;
-dynamic t1Instance = new T1();
+dynamic t0Instance = "Show must go on";
+T1? t1Instance = new T1();
 
 
 
diff --git a/LanguageFeatures/Subtyping/static/generated/left_bottom_local_variable_A02_t01.dart b/LanguageFeatures/Subtyping/static/generated/left_top_local_variable_A01_t01.dart
similarity index 68%
copy from LanguageFeatures/Subtyping/static/generated/left_bottom_local_variable_A02_t01.dart
copy to LanguageFeatures/Subtyping/static/generated/left_top_local_variable_A01_t01.dart
index 8878438..753eb68 100644
--- a/LanguageFeatures/Subtyping/static/generated/left_bottom_local_variable_A02_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/left_top_local_variable_A01_t01.dart
@@ -6,10 +6,10 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Left Bottom: T0 is Null.
- * @description Check that if type T0 is Null and T1 is dynamic then T0 is a
+ * Left Top: if T0 is dynamic or void then T0 <: T1 if Object? <: T1
+ * @description Check that if type T0 is dynamic and Object? <: T1 then T0 is a
  * subtype of a type T1.
- * @author ngl@unipro.ru
+ * @author sgrekhov@unipro.ru
  */
 /**
  * @description Check that if type T0 is a subtype of a type T1, then instance
@@ -17,18 +17,19 @@
  * @author sgrekhov@unipro.ru
  */
 /*
- * This test is generated from left_bottom_A02.dart and 
+ * This test is generated from left_top_A01.dart and 
  * local_variable_x01.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
  */
 
 
+// SharedOptions=--enable-experiment=non-nullable
 
 class T1 {}
 
-Null t0Instance = null;
-dynamic t1Instance = new T1();
+dynamic t0Instance = "Show must go on";
+T1? t1Instance = new T1();
 
 
 
@@ -36,28 +37,28 @@
 class LocalVariableTest {
 
   LocalVariableTest() {
-    dynamic t1 = t0Instance;
+    Object? t1 = t0Instance;
     t1 = t0Instance;
   }
 
   static staticTest() {
-    dynamic t1 = t0Instance;
+    Object? t1 = t0Instance;
     t1 = t0Instance;
   }
 
   test() {
-    dynamic t1 = t0Instance;
+    Object? t1 = t0Instance;
     t1 = t0Instance;
   }
 }
 
 main() {
   foo() {
-    dynamic t1 = t0Instance;
+    Object? t1 = t0Instance;
     t1 = t0Instance;
   }
 
-  dynamic t1 = t0Instance;
+  Object? t1 = t0Instance;
   t1 = t0Instance;
   foo();
   LocalVariableTest x = new LocalVariableTest();
diff --git a/LanguageFeatures/Subtyping/static/generated/left_bottom_return_value_A02_t01.dart b/LanguageFeatures/Subtyping/static/generated/left_top_return_value_A01_t01.dart
similarity index 61%
copy from LanguageFeatures/Subtyping/static/generated/left_bottom_return_value_A02_t01.dart
copy to LanguageFeatures/Subtyping/static/generated/left_top_return_value_A01_t01.dart
index c92959f..54ad7a3 100644
--- a/LanguageFeatures/Subtyping/static/generated/left_bottom_return_value_A02_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/left_top_return_value_A01_t01.dart
@@ -6,10 +6,10 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Left Bottom: T0 is Null.
- * @description Check that if type T0 is Null and T1 is dynamic then T0 is a
+ * Left Top: if T0 is dynamic or void then T0 <: T1 if Object? <: T1
+ * @description Check that if type T0 is dynamic and Object? <: T1 then T0 is a
  * subtype of a type T1.
- * @author ngl@unipro.ru
+ * @author sgrekhov@unipro.ru
  */
 /**
  * @description Check that if type T0 is a subtype of a type T1, then instance
@@ -17,34 +17,35 @@
  * @author sgrekhov@unipro.ru
  */
 /*
- * This test is generated from left_bottom_A02.dart and 
+ * This test is generated from left_top_A01.dart and 
  * return_value_x01.dart.
  * Don't modify it. If you want to change this file, change one of the files 
  * above and then run generator.dart to regenerate the tests.
  */
 
 
+// SharedOptions=--enable-experiment=non-nullable
 
 class T1 {}
 
-Null t0Instance = null;
-dynamic t1Instance = new T1();
+dynamic t0Instance = "Show must go on";
+T1? t1Instance = new T1();
 
 
 
 
-dynamic returnValueFunc() => t0Instance;
+Object? returnValueFunc() => t0Instance;
 
 class ReturnValueTest {
-  static dynamic staticTestMethod() => t0Instance;
+  static Object? staticTestMethod() => t0Instance;
 
-  dynamic testMethod() => t0Instance;
+  Object? testMethod() => t0Instance;
 
-  dynamic get testGetter => t0Instance;
+  Object? get testGetter => t0Instance;
 }
 
 main() {
-  dynamic returnValueLocalFunc() => t0Instance;
+  Object? returnValueLocalFunc() => t0Instance;
 
   returnValueFunc();
   returnValueLocalFunc();
diff --git a/LanguageFeatures/Subtyping/static/generated/right_top_arguments_binding_A01_t01.dart b/LanguageFeatures/Subtyping/static/generated/right_top_arguments_binding_A01_t01.dart
index b7dec66..a242d1c 100644
--- a/LanguageFeatures/Subtyping/static/generated/right_top_arguments_binding_A01_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/right_top_arguments_binding_A01_t01.dart
@@ -6,7 +6,7 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Right Top: T1 is a top type (i.e. Object, dynamic, or void)
+ * Right Top: T1 is a top type (i.e. Object?, dynamic, or void)
  * @description Check that if type T1 is an Object then T0 is a subtype of a
  * type T1
  * @author sgrekhov@unipro.ru
@@ -24,41 +24,41 @@
  */
 
 
-
+// SharedOptions=--enable-experiment=non-nullable
 class T0 {}
 
 T0 t0Instance = new T0();
-Object t1Instance = new Object();
+Object? t1Instance = new Object();
 
 
 
 
-namedArgumentsFunc1(Object t1, {Object t2}) {}
-positionalArgumentsFunc1(Object t1, [Object t2]) {}
+namedArgumentsFunc1(Object? t1, {Object? t2}) {}
+positionalArgumentsFunc1(Object? t1, [Object? t2]) {}
 
 namedArgumentsFunc2<X>(X t1, {X t2}) {}
 positionalArgumentsFunc2<X>(X t1, [X t2]) {}
 
 class ArgumentsBindingClass {
-  ArgumentsBindingClass(Object t1) {}
+  ArgumentsBindingClass(Object? t1) {}
 
-  ArgumentsBindingClass.named(Object t1, {Object t2}) {}
-  ArgumentsBindingClass.positional(Object t1, [Object t2]) {}
+  ArgumentsBindingClass.named(Object? t1, {Object? t2}) {}
+  ArgumentsBindingClass.positional(Object? t1, [Object? t2]) {}
 
-  factory ArgumentsBindingClass.fNamed(Object t1, {Object t2}) {
+  factory ArgumentsBindingClass.fNamed(Object? t1, {Object? t2}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(Object t1, [Object t2]) {
+  factory ArgumentsBindingClass.fPositional(Object? t1, [Object? t2]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(Object t1, {Object t2}) {}
-  static positionalArgumentsStaticMethod(Object t1, [Object t2]) {}
+  static namedArgumentsStaticMethod(Object? t1, {Object? t2}) {}
+  static positionalArgumentsStaticMethod(Object? t1, [Object? t2]) {}
 
-  namedArgumentsMethod(Object t1, {Object t2}) {}
-  positionalArgumentsMethod(Object t1, [Object t2]) {}
+  namedArgumentsMethod(Object? t1, {Object? t2}) {}
+  positionalArgumentsMethod(Object? t1, [Object? t2]) {}
 
-  set testSetter(Object val) {}
+  set testSetter(Object? val) {}
 }
 
 class ArgumentsBindingGen<X>  {
@@ -105,15 +105,15 @@
 
   //# <-- NotGenericFunctionType
   // test generic functions
-  namedArgumentsFunc2<Object>(t0Instance, t2: t0Instance);
-  positionalArgumentsFunc2<Object>(t0Instance, t0Instance);
+  namedArgumentsFunc2<Object?>(t0Instance, t2: t0Instance);
+  positionalArgumentsFunc2<Object?>(t0Instance, t0Instance);
 
   // test generic class constructors
-  ArgumentsBindingGen<Object> instance2 = new ArgumentsBindingGen<Object>(t0Instance);
-  instance2 = new ArgumentsBindingGen<Object>.fNamed(t0Instance, t2: t0Instance);
-  instance2 = new ArgumentsBindingGen<Object>.fPositional(t0Instance, t0Instance);
-  instance2 = new ArgumentsBindingGen<Object>.named(t0Instance, t2: t0Instance);
-  instance2 = new ArgumentsBindingGen<Object>.positional(t0Instance, t0Instance);
+  ArgumentsBindingGen<Object?> instance2 = new ArgumentsBindingGen<Object?>(t0Instance);
+  instance2 = new ArgumentsBindingGen<Object?>.fNamed(t0Instance, t2: t0Instance);
+  instance2 = new ArgumentsBindingGen<Object?>.fPositional(t0Instance, t0Instance);
+  instance2 = new ArgumentsBindingGen<Object?>.named(t0Instance, t2: t0Instance);
+  instance2 = new ArgumentsBindingGen<Object?>.positional(t0Instance, t0Instance);
 
   // test generic class methods and setters
   instance2.namedArgumentsMethod(t0Instance, t2: t0Instance);
diff --git a/LanguageFeatures/Subtyping/static/generated/right_top_arguments_binding_A01_t02.dart b/LanguageFeatures/Subtyping/static/generated/right_top_arguments_binding_A01_t02.dart
index b241a7f..0064a6c 100644
--- a/LanguageFeatures/Subtyping/static/generated/right_top_arguments_binding_A01_t02.dart
+++ b/LanguageFeatures/Subtyping/static/generated/right_top_arguments_binding_A01_t02.dart
@@ -6,7 +6,7 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Right Top: T1 is a top type (i.e. Object, dynamic, or void)
+ * Right Top: T1 is a top type (i.e. Object?, dynamic, or void)
  * @description Check that if type T1 is an Object then T0 is a subtype of a
  * type T1
  * @author sgrekhov@unipro.ru
@@ -24,28 +24,28 @@
  */
 
 
-
+// SharedOptions=--enable-experiment=non-nullable
 class T0 {}
 
 T0 t0Instance = new T0();
-Object t1Instance = new Object();
+Object? t1Instance = new Object();
 
 
 
 
 class ArgumentsBindingSuper1_t02 {
-  Object m;
+  Object? m;
 
-  ArgumentsBindingSuper1_t02(Object value) {}
-  ArgumentsBindingSuper1_t02.named(Object value, {Object val2}) {}
-  ArgumentsBindingSuper1_t02.positional(Object value, [Object val2]) {}
+  ArgumentsBindingSuper1_t02(Object? value) {}
+  ArgumentsBindingSuper1_t02.named(Object? value, {Object? val2}) {}
+  ArgumentsBindingSuper1_t02.positional(Object? value, [Object? val2]) {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
-  void superTest(Object val) {}
-  void superTestPositioned(Object val, [Object val2]) {}
-  void superTestNamed(Object val, {Object val2}) {}
-  Object get superGetter => m;
-  void set superSetter(Object val) {}
+  void superTest(Object? val) {}
+  void superTestPositioned(Object? val, [Object? val2]) {}
+  void superTestNamed(Object? val, {Object? val2}) {}
+  Object? get superGetter => m;
+  void set superSetter(Object? val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
@@ -123,13 +123,13 @@
   // Test type parameters
 
   //# <-- NotGenericFunctionType
-  ArgumentsBinding2_t02<Object> c2 =
-    new ArgumentsBinding2_t02<Object>(t0Instance);
-  c2 = new ArgumentsBinding2_t02<Object>.c1(t0Instance);
-  c2 = new ArgumentsBinding2_t02<Object>.c2(t1Instance, t0Instance);
-  c2 = new ArgumentsBinding2_t02<Object>.c3(t0Instance);
-  c2 = new ArgumentsBinding2_t02<Object>.c4(t1Instance, t0Instance);
-  c2 = new ArgumentsBinding2_t02<Object>.c5(t0Instance);
+  ArgumentsBinding2_t02<Object?> c2 =
+    new ArgumentsBinding2_t02<Object?>(t0Instance);
+  c2 = new ArgumentsBinding2_t02<Object?>.c1(t0Instance);
+  c2 = new ArgumentsBinding2_t02<Object?>.c2(t1Instance, t0Instance);
+  c2 = new ArgumentsBinding2_t02<Object?>.c3(t0Instance);
+  c2 = new ArgumentsBinding2_t02<Object?>.c4(t1Instance, t0Instance);
+  c2 = new ArgumentsBinding2_t02<Object?>.c5(t0Instance);
 
   c2.test(t0Instance, t1Instance);
   c2.superTest(t0Instance);
diff --git a/LanguageFeatures/Subtyping/static/generated/right_top_arguments_binding_A01_t03.dart b/LanguageFeatures/Subtyping/static/generated/right_top_arguments_binding_A01_t03.dart
index 21c94be..3d22b45 100644
--- a/LanguageFeatures/Subtyping/static/generated/right_top_arguments_binding_A01_t03.dart
+++ b/LanguageFeatures/Subtyping/static/generated/right_top_arguments_binding_A01_t03.dart
@@ -6,7 +6,7 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Right Top: T1 is a top type (i.e. Object, dynamic, or void)
+ * Right Top: T1 is a top type (i.e. Object?, dynamic, or void)
  * @description Check that if type T1 is an Object then T0 is a subtype of a
  * type T1
  * @author sgrekhov@unipro.ru
@@ -24,23 +24,23 @@
  */
 
 
-
+// SharedOptions=--enable-experiment=non-nullable
 class T0 {}
 
 T0 t0Instance = new T0();
-Object t1Instance = new Object();
+Object? t1Instance = new Object();
 
 
 
 
 class ArgumentsBindingMixin1_t03 {
-  Object m;
+  Object? m;
 
-  void superTest(Object val) {}
-  void superTestPositioned(Object val, [Object val2]) {}
-  void superTestNamed(Object val, {Object val2}) {}
-  Object get superGetter => m;
-  void set superSetter(Object val) {}
+  void superTest(Object? val) {}
+  void superTestPositioned(Object? val, [Object? val2]) {}
+  void superTestNamed(Object? val, {Object? val2}) {}
+  Object? get superGetter => m;
+  void set superSetter(Object? val) {}
 }
 
 class ArgumentsBinding1_t03 extends Object with ArgumentsBindingMixin1_t03 {
@@ -96,7 +96,7 @@
   // Test type parameters
 
   //# <-- NotGenericFunctionType
-  ArgumentsBinding2_t03<Object> c2 = new ArgumentsBinding2_t03<Object>();
+  ArgumentsBinding2_t03<Object?> c2 = new ArgumentsBinding2_t03<Object?>();
   c2.test(t0Instance, t1Instance);
   c2.superTest(t0Instance);
   c2.superTestPositioned(t0Instance);
diff --git a/LanguageFeatures/Subtyping/static/generated/right_top_arguments_binding_A03_t01.dart b/LanguageFeatures/Subtyping/static/generated/right_top_arguments_binding_A03_t01.dart
index 9ccdbe2..bc0612d 100644
--- a/LanguageFeatures/Subtyping/static/generated/right_top_arguments_binding_A03_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/right_top_arguments_binding_A03_t01.dart
@@ -24,39 +24,39 @@
  */
 
 
-
+// SharedOptions=--enable-experiment=non-nullable
 dynamic t0Instance = "";
-Object t1Instance = new Object();
+Object? t1Instance = new Object();
 
 
 
 
-namedArgumentsFunc1(Object t1, {Object t2}) {}
-positionalArgumentsFunc1(Object t1, [Object t2]) {}
+namedArgumentsFunc1(Object? t1, {Object? t2}) {}
+positionalArgumentsFunc1(Object? t1, [Object? t2]) {}
 
 namedArgumentsFunc2<X>(X t1, {X t2}) {}
 positionalArgumentsFunc2<X>(X t1, [X t2]) {}
 
 class ArgumentsBindingClass {
-  ArgumentsBindingClass(Object t1) {}
+  ArgumentsBindingClass(Object? t1) {}
 
-  ArgumentsBindingClass.named(Object t1, {Object t2}) {}
-  ArgumentsBindingClass.positional(Object t1, [Object t2]) {}
+  ArgumentsBindingClass.named(Object? t1, {Object? t2}) {}
+  ArgumentsBindingClass.positional(Object? t1, [Object? t2]) {}
 
-  factory ArgumentsBindingClass.fNamed(Object t1, {Object t2}) {
+  factory ArgumentsBindingClass.fNamed(Object? t1, {Object? t2}) {
     return new ArgumentsBindingClass.named(t1, t2: t2);
   }
-  factory ArgumentsBindingClass.fPositional(Object t1, [Object t2]) {
+  factory ArgumentsBindingClass.fPositional(Object? t1, [Object? t2]) {
     return new ArgumentsBindingClass.positional(t1, t2);
   }
 
-  static namedArgumentsStaticMethod(Object t1, {Object t2}) {}
-  static positionalArgumentsStaticMethod(Object t1, [Object t2]) {}
+  static namedArgumentsStaticMethod(Object? t1, {Object? t2}) {}
+  static positionalArgumentsStaticMethod(Object? t1, [Object? t2]) {}
 
-  namedArgumentsMethod(Object t1, {Object t2}) {}
-  positionalArgumentsMethod(Object t1, [Object t2]) {}
+  namedArgumentsMethod(Object? t1, {Object? t2}) {}
+  positionalArgumentsMethod(Object? t1, [Object? t2]) {}
 
-  set testSetter(Object val) {}
+  set testSetter(Object? val) {}
 }
 
 class ArgumentsBindingGen<X>  {
@@ -103,15 +103,15 @@
 
   //# <-- NotGenericFunctionType
   // test generic functions
-  namedArgumentsFunc2<Object>(t0Instance, t2: t0Instance);
-  positionalArgumentsFunc2<Object>(t0Instance, t0Instance);
+  namedArgumentsFunc2<Object?>(t0Instance, t2: t0Instance);
+  positionalArgumentsFunc2<Object?>(t0Instance, t0Instance);
 
   // test generic class constructors
-  ArgumentsBindingGen<Object> instance2 = new ArgumentsBindingGen<Object>(t0Instance);
-  instance2 = new ArgumentsBindingGen<Object>.fNamed(t0Instance, t2: t0Instance);
-  instance2 = new ArgumentsBindingGen<Object>.fPositional(t0Instance, t0Instance);
-  instance2 = new ArgumentsBindingGen<Object>.named(t0Instance, t2: t0Instance);
-  instance2 = new ArgumentsBindingGen<Object>.positional(t0Instance, t0Instance);
+  ArgumentsBindingGen<Object?> instance2 = new ArgumentsBindingGen<Object?>(t0Instance);
+  instance2 = new ArgumentsBindingGen<Object?>.fNamed(t0Instance, t2: t0Instance);
+  instance2 = new ArgumentsBindingGen<Object?>.fPositional(t0Instance, t0Instance);
+  instance2 = new ArgumentsBindingGen<Object?>.named(t0Instance, t2: t0Instance);
+  instance2 = new ArgumentsBindingGen<Object?>.positional(t0Instance, t0Instance);
 
   // test generic class methods and setters
   instance2.namedArgumentsMethod(t0Instance, t2: t0Instance);
diff --git a/LanguageFeatures/Subtyping/static/generated/right_top_arguments_binding_A03_t02.dart b/LanguageFeatures/Subtyping/static/generated/right_top_arguments_binding_A03_t02.dart
index a858113..4a4fdd6 100644
--- a/LanguageFeatures/Subtyping/static/generated/right_top_arguments_binding_A03_t02.dart
+++ b/LanguageFeatures/Subtyping/static/generated/right_top_arguments_binding_A03_t02.dart
@@ -24,26 +24,26 @@
  */
 
 
-
+// SharedOptions=--enable-experiment=non-nullable
 dynamic t0Instance = "";
-Object t1Instance = new Object();
+Object? t1Instance = new Object();
 
 
 
 
 class ArgumentsBindingSuper1_t02 {
-  Object m;
+  Object? m;
 
-  ArgumentsBindingSuper1_t02(Object value) {}
-  ArgumentsBindingSuper1_t02.named(Object value, {Object val2}) {}
-  ArgumentsBindingSuper1_t02.positional(Object value, [Object val2]) {}
+  ArgumentsBindingSuper1_t02(Object? value) {}
+  ArgumentsBindingSuper1_t02.named(Object? value, {Object? val2}) {}
+  ArgumentsBindingSuper1_t02.positional(Object? value, [Object? val2]) {}
   ArgumentsBindingSuper1_t02.short(this.m);
 
-  void superTest(Object val) {}
-  void superTestPositioned(Object val, [Object val2]) {}
-  void superTestNamed(Object val, {Object val2}) {}
-  Object get superGetter => m;
-  void set superSetter(Object val) {}
+  void superTest(Object? val) {}
+  void superTestPositioned(Object? val, [Object? val2]) {}
+  void superTestNamed(Object? val, {Object? val2}) {}
+  Object? get superGetter => m;
+  void set superSetter(Object? val) {}
 }
 
 class ArgumentsBinding1_t02 extends ArgumentsBindingSuper1_t02 {
@@ -121,13 +121,13 @@
   // Test type parameters
 
   //# <-- NotGenericFunctionType
-  ArgumentsBinding2_t02<Object> c2 =
-    new ArgumentsBinding2_t02<Object>(t0Instance);
-  c2 = new ArgumentsBinding2_t02<Object>.c1(t0Instance);
-  c2 = new ArgumentsBinding2_t02<Object>.c2(t1Instance, t0Instance);
-  c2 = new ArgumentsBinding2_t02<Object>.c3(t0Instance);
-  c2 = new ArgumentsBinding2_t02<Object>.c4(t1Instance, t0Instance);
-  c2 = new ArgumentsBinding2_t02<Object>.c5(t0Instance);
+  ArgumentsBinding2_t02<Object?> c2 =
+    new ArgumentsBinding2_t02<Object?>(t0Instance);
+  c2 = new ArgumentsBinding2_t02<Object?>.c1(t0Instance);
+  c2 = new ArgumentsBinding2_t02<Object?>.c2(t1Instance, t0Instance);
+  c2 = new ArgumentsBinding2_t02<Object?>.c3(t0Instance);
+  c2 = new ArgumentsBinding2_t02<Object?>.c4(t1Instance, t0Instance);
+  c2 = new ArgumentsBinding2_t02<Object?>.c5(t0Instance);
 
   c2.test(t0Instance, t1Instance);
   c2.superTest(t0Instance);
diff --git a/LanguageFeatures/Subtyping/static/generated/right_top_arguments_binding_A03_t03.dart b/LanguageFeatures/Subtyping/static/generated/right_top_arguments_binding_A03_t03.dart
index e67bb0b..cc4f641 100644
--- a/LanguageFeatures/Subtyping/static/generated/right_top_arguments_binding_A03_t03.dart
+++ b/LanguageFeatures/Subtyping/static/generated/right_top_arguments_binding_A03_t03.dart
@@ -24,21 +24,21 @@
  */
 
 
-
+// SharedOptions=--enable-experiment=non-nullable
 dynamic t0Instance = "";
-Object t1Instance = new Object();
+Object? t1Instance = new Object();
 
 
 
 
 class ArgumentsBindingMixin1_t03 {
-  Object m;
+  Object? m;
 
-  void superTest(Object val) {}
-  void superTestPositioned(Object val, [Object val2]) {}
-  void superTestNamed(Object val, {Object val2}) {}
-  Object get superGetter => m;
-  void set superSetter(Object val) {}
+  void superTest(Object? val) {}
+  void superTestPositioned(Object? val, [Object? val2]) {}
+  void superTestNamed(Object? val, {Object? val2}) {}
+  Object? get superGetter => m;
+  void set superSetter(Object? val) {}
 }
 
 class ArgumentsBinding1_t03 extends Object with ArgumentsBindingMixin1_t03 {
@@ -94,7 +94,7 @@
   // Test type parameters
 
   //# <-- NotGenericFunctionType
-  ArgumentsBinding2_t03<Object> c2 = new ArgumentsBinding2_t03<Object>();
+  ArgumentsBinding2_t03<Object?> c2 = new ArgumentsBinding2_t03<Object?>();
   c2.test(t0Instance, t1Instance);
   c2.superTest(t0Instance);
   c2.superTestPositioned(t0Instance);
diff --git a/LanguageFeatures/Subtyping/static/generated/right_top_class_member_A01_t01.dart b/LanguageFeatures/Subtyping/static/generated/right_top_class_member_A01_t01.dart
index b966642..588808a 100644
--- a/LanguageFeatures/Subtyping/static/generated/right_top_class_member_A01_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/right_top_class_member_A01_t01.dart
@@ -6,7 +6,7 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Right Top: T1 is a top type (i.e. Object, dynamic, or void)
+ * Right Top: T1 is a top type (i.e. Object?, dynamic, or void)
  * @description Check that if type T1 is an Object then T0 is a subtype of a
  * type T1
  * @author sgrekhov@unipro.ru
@@ -24,19 +24,19 @@
  */
 
 
-
+// SharedOptions=--enable-experiment=non-nullable
 class T0 {}
 
 T0 t0Instance = new T0();
-Object t1Instance = new Object();
+Object? t1Instance = new Object();
 
 
 
 
 class ClassMember1_t01 {
-  static Object s = t0Instance;
-  Object m = t0Instance;
-  Object _p = t0Instance;
+  static Object? s = t0Instance;
+  Object? m = t0Instance;
+  Object? _p = t0Instance;
 
   ClassMember1_t01() {
     s = t0Instance;
@@ -44,7 +44,7 @@
     _p = t0Instance;
   }
 
-  ClassMember1_t01.named(Object value) {
+  ClassMember1_t01.named(Object? value) {
     s = value;
     m = value;
     _p = value;
@@ -58,21 +58,21 @@
     _p = t0Instance;
   }
 
-  set setter(Object val) {
+  set setter(Object? val) {
     _p = val;
   }
 
-  Object get getter => _p;
+  Object? get getter => _p;
 
   static staticTest() {
     s = t0Instance;
   }
 
-  static set staticSetter(Object val) {
+  static set staticSetter(Object? val) {
     s = val;
   }
 
-  static Object get staticGetter => t0Instance;
+  static Object? get staticGetter => t0Instance;
 }
 
 main() {
diff --git a/LanguageFeatures/Subtyping/static/generated/right_top_class_member_A01_t02.dart b/LanguageFeatures/Subtyping/static/generated/right_top_class_member_A01_t02.dart
index f338019..aafc528 100644
--- a/LanguageFeatures/Subtyping/static/generated/right_top_class_member_A01_t02.dart
+++ b/LanguageFeatures/Subtyping/static/generated/right_top_class_member_A01_t02.dart
@@ -6,7 +6,7 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Right Top: T1 is a top type (i.e. Object, dynamic, or void)
+ * Right Top: T1 is a top type (i.e. Object?, dynamic, or void)
  * @description Check that if type T1 is an Object then T0 is a subtype of a
  * type T1
  * @author sgrekhov@unipro.ru
@@ -24,17 +24,17 @@
  */
 
 
-
+// SharedOptions=--enable-experiment=non-nullable
 class T0 {}
 
 T0 t0Instance = new T0();
-Object t1Instance = new Object();
+Object? t1Instance = new Object();
 
 
 
 
 class ClassMemberSuper1_t02 {
-  Object m;
+  Object? m;
 
   ClassMemberSuper1_t02(dynamic value) {
     m = value;
@@ -46,7 +46,7 @@
 
   ClassMemberSuper1_t02.short(this.m);
 
-  void set superSetter(Object val) {}
+  void set superSetter(Object? val) {}
 }
 
 class ClassMember1_t02 extends ClassMemberSuper1_t02 {
diff --git a/LanguageFeatures/Subtyping/static/generated/right_top_class_member_A01_t03.dart b/LanguageFeatures/Subtyping/static/generated/right_top_class_member_A01_t03.dart
index f6d2b4c..77215ce 100644
--- a/LanguageFeatures/Subtyping/static/generated/right_top_class_member_A01_t03.dart
+++ b/LanguageFeatures/Subtyping/static/generated/right_top_class_member_A01_t03.dart
@@ -6,7 +6,7 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Right Top: T1 is a top type (i.e. Object, dynamic, or void)
+ * Right Top: T1 is a top type (i.e. Object?, dynamic, or void)
  * @description Check that if type T1 is an Object then T0 is a subtype of a
  * type T1
  * @author sgrekhov@unipro.ru
@@ -24,17 +24,17 @@
  */
 
 
-
+// SharedOptions=--enable-experiment=non-nullable
 class T0 {}
 
 T0 t0Instance = new T0();
-Object t1Instance = new Object();
+Object? t1Instance = new Object();
 
 
 
 
 class ClassMemberMixin1_t03 {
-  Object m;
+  Object? m;
 
   void set superSetter(dynamic val) {}
 }
diff --git a/LanguageFeatures/Subtyping/static/generated/right_top_class_member_A03_t01.dart b/LanguageFeatures/Subtyping/static/generated/right_top_class_member_A03_t01.dart
index 846c2e0..9e78f92 100644
--- a/LanguageFeatures/Subtyping/static/generated/right_top_class_member_A03_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/right_top_class_member_A03_t01.dart
@@ -24,17 +24,17 @@
  */
 
 
-
+// SharedOptions=--enable-experiment=non-nullable
 dynamic t0Instance = "";
-Object t1Instance = new Object();
+Object? t1Instance = new Object();
 
 
 
 
 class ClassMember1_t01 {
-  static Object s = t0Instance;
-  Object m = t0Instance;
-  Object _p = t0Instance;
+  static Object? s = t0Instance;
+  Object? m = t0Instance;
+  Object? _p = t0Instance;
 
   ClassMember1_t01() {
     s = t0Instance;
@@ -42,7 +42,7 @@
     _p = t0Instance;
   }
 
-  ClassMember1_t01.named(Object value) {
+  ClassMember1_t01.named(Object? value) {
     s = value;
     m = value;
     _p = value;
@@ -56,21 +56,21 @@
     _p = t0Instance;
   }
 
-  set setter(Object val) {
+  set setter(Object? val) {
     _p = val;
   }
 
-  Object get getter => _p;
+  Object? get getter => _p;
 
   static staticTest() {
     s = t0Instance;
   }
 
-  static set staticSetter(Object val) {
+  static set staticSetter(Object? val) {
     s = val;
   }
 
-  static Object get staticGetter => t0Instance;
+  static Object? get staticGetter => t0Instance;
 }
 
 main() {
diff --git a/LanguageFeatures/Subtyping/static/generated/right_top_class_member_A03_t02.dart b/LanguageFeatures/Subtyping/static/generated/right_top_class_member_A03_t02.dart
index 84212df..f70da26 100644
--- a/LanguageFeatures/Subtyping/static/generated/right_top_class_member_A03_t02.dart
+++ b/LanguageFeatures/Subtyping/static/generated/right_top_class_member_A03_t02.dart
@@ -24,15 +24,15 @@
  */
 
 
-
+// SharedOptions=--enable-experiment=non-nullable
 dynamic t0Instance = "";
-Object t1Instance = new Object();
+Object? t1Instance = new Object();
 
 
 
 
 class ClassMemberSuper1_t02 {
-  Object m;
+  Object? m;
 
   ClassMemberSuper1_t02(dynamic value) {
     m = value;
@@ -44,7 +44,7 @@
 
   ClassMemberSuper1_t02.short(this.m);
 
-  void set superSetter(Object val) {}
+  void set superSetter(Object? val) {}
 }
 
 class ClassMember1_t02 extends ClassMemberSuper1_t02 {
diff --git a/LanguageFeatures/Subtyping/static/generated/right_top_class_member_A03_t03.dart b/LanguageFeatures/Subtyping/static/generated/right_top_class_member_A03_t03.dart
index e26e70b..1744a80 100644
--- a/LanguageFeatures/Subtyping/static/generated/right_top_class_member_A03_t03.dart
+++ b/LanguageFeatures/Subtyping/static/generated/right_top_class_member_A03_t03.dart
@@ -24,15 +24,15 @@
  */
 
 
-
+// SharedOptions=--enable-experiment=non-nullable
 dynamic t0Instance = "";
-Object t1Instance = new Object();
+Object? t1Instance = new Object();
 
 
 
 
 class ClassMemberMixin1_t03 {
-  Object m;
+  Object? m;
 
   void set superSetter(dynamic val) {}
 }
diff --git a/LanguageFeatures/Subtyping/static/generated/right_top_global_variable_A01_t01.dart b/LanguageFeatures/Subtyping/static/generated/right_top_global_variable_A01_t01.dart
index d6d3f4b..0e8bef1 100644
--- a/LanguageFeatures/Subtyping/static/generated/right_top_global_variable_A01_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/right_top_global_variable_A01_t01.dart
@@ -6,7 +6,7 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Right Top: T1 is a top type (i.e. Object, dynamic, or void)
+ * Right Top: T1 is a top type (i.e. Object?, dynamic, or void)
  * @description Check that if type T1 is an Object then T0 is a subtype of a
  * type T1
  * @author sgrekhov@unipro.ru
@@ -24,11 +24,11 @@
  */
 
 
-
+// SharedOptions=--enable-experiment=non-nullable
 class T0 {}
 
 T0 t0Instance = new T0();
-Object t1Instance = new Object();
+Object? t1Instance = new Object();
 
 
 
diff --git a/LanguageFeatures/Subtyping/static/generated/right_top_global_variable_A03_t01.dart b/LanguageFeatures/Subtyping/static/generated/right_top_global_variable_A03_t01.dart
index c89ece2..fa73647 100644
--- a/LanguageFeatures/Subtyping/static/generated/right_top_global_variable_A03_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/right_top_global_variable_A03_t01.dart
@@ -24,9 +24,9 @@
  */
 
 
-
+// SharedOptions=--enable-experiment=non-nullable
 dynamic t0Instance = "";
-Object t1Instance = new Object();
+Object? t1Instance = new Object();
 
 
 
diff --git a/LanguageFeatures/Subtyping/static/generated/right_top_local_variable_A01_t01.dart b/LanguageFeatures/Subtyping/static/generated/right_top_local_variable_A01_t01.dart
index d65917d..e47ffd2 100644
--- a/LanguageFeatures/Subtyping/static/generated/right_top_local_variable_A01_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/right_top_local_variable_A01_t01.dart
@@ -6,7 +6,7 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Right Top: T1 is a top type (i.e. Object, dynamic, or void)
+ * Right Top: T1 is a top type (i.e. Object?, dynamic, or void)
  * @description Check that if type T1 is an Object then T0 is a subtype of a
  * type T1
  * @author sgrekhov@unipro.ru
@@ -24,11 +24,11 @@
  */
 
 
-
+// SharedOptions=--enable-experiment=non-nullable
 class T0 {}
 
 T0 t0Instance = new T0();
-Object t1Instance = new Object();
+Object? t1Instance = new Object();
 
 
 
@@ -36,28 +36,28 @@
 class LocalVariableTest {
 
   LocalVariableTest() {
-    Object t1 = t0Instance;
+    Object? t1 = t0Instance;
     t1 = t0Instance;
   }
 
   static staticTest() {
-    Object t1 = t0Instance;
+    Object? t1 = t0Instance;
     t1 = t0Instance;
   }
 
   test() {
-    Object t1 = t0Instance;
+    Object? t1 = t0Instance;
     t1 = t0Instance;
   }
 }
 
 main() {
   foo() {
-    Object t1 = t0Instance;
+    Object? t1 = t0Instance;
     t1 = t0Instance;
   }
 
-  Object t1 = t0Instance;
+  Object? t1 = t0Instance;
   t1 = t0Instance;
   foo();
   LocalVariableTest x = new LocalVariableTest();
diff --git a/LanguageFeatures/Subtyping/static/generated/right_top_local_variable_A03_t01.dart b/LanguageFeatures/Subtyping/static/generated/right_top_local_variable_A03_t01.dart
index 23f1d23..1cb37b4 100644
--- a/LanguageFeatures/Subtyping/static/generated/right_top_local_variable_A03_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/right_top_local_variable_A03_t01.dart
@@ -24,9 +24,9 @@
  */
 
 
-
+// SharedOptions=--enable-experiment=non-nullable
 dynamic t0Instance = "";
-Object t1Instance = new Object();
+Object? t1Instance = new Object();
 
 
 
@@ -34,28 +34,28 @@
 class LocalVariableTest {
 
   LocalVariableTest() {
-    Object t1 = t0Instance;
+    Object? t1 = t0Instance;
     t1 = t0Instance;
   }
 
   static staticTest() {
-    Object t1 = t0Instance;
+    Object? t1 = t0Instance;
     t1 = t0Instance;
   }
 
   test() {
-    Object t1 = t0Instance;
+    Object? t1 = t0Instance;
     t1 = t0Instance;
   }
 }
 
 main() {
   foo() {
-    Object t1 = t0Instance;
+    Object? t1 = t0Instance;
     t1 = t0Instance;
   }
 
-  Object t1 = t0Instance;
+  Object? t1 = t0Instance;
   t1 = t0Instance;
   foo();
   LocalVariableTest x = new LocalVariableTest();
diff --git a/LanguageFeatures/Subtyping/static/generated/right_top_return_value_A01_t01.dart b/LanguageFeatures/Subtyping/static/generated/right_top_return_value_A01_t01.dart
index b425565..1caf460 100644
--- a/LanguageFeatures/Subtyping/static/generated/right_top_return_value_A01_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/right_top_return_value_A01_t01.dart
@@ -6,7 +6,7 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Right Top: T1 is a top type (i.e. Object, dynamic, or void)
+ * Right Top: T1 is a top type (i.e. Object?, dynamic, or void)
  * @description Check that if type T1 is an Object then T0 is a subtype of a
  * type T1
  * @author sgrekhov@unipro.ru
@@ -24,27 +24,27 @@
  */
 
 
-
+// SharedOptions=--enable-experiment=non-nullable
 class T0 {}
 
 T0 t0Instance = new T0();
-Object t1Instance = new Object();
+Object? t1Instance = new Object();
 
 
 
 
-Object returnValueFunc() => t0Instance;
+Object? returnValueFunc() => t0Instance;
 
 class ReturnValueTest {
-  static Object staticTestMethod() => t0Instance;
+  static Object? staticTestMethod() => t0Instance;
 
-  Object testMethod() => t0Instance;
+  Object? testMethod() => t0Instance;
 
-  Object get testGetter => t0Instance;
+  Object? get testGetter => t0Instance;
 }
 
 main() {
-  Object returnValueLocalFunc() => t0Instance;
+  Object? returnValueLocalFunc() => t0Instance;
 
   returnValueFunc();
   returnValueLocalFunc();
diff --git a/LanguageFeatures/Subtyping/static/generated/right_top_return_value_A03_t01.dart b/LanguageFeatures/Subtyping/static/generated/right_top_return_value_A03_t01.dart
index 652d4ac..09cc57e 100644
--- a/LanguageFeatures/Subtyping/static/generated/right_top_return_value_A03_t01.dart
+++ b/LanguageFeatures/Subtyping/static/generated/right_top_return_value_A03_t01.dart
@@ -24,25 +24,25 @@
  */
 
 
-
+// SharedOptions=--enable-experiment=non-nullable
 dynamic t0Instance = "";
-Object t1Instance = new Object();
+Object? t1Instance = new Object();
 
 
 
 
-Object returnValueFunc() => t0Instance;
+Object? returnValueFunc() => t0Instance;
 
 class ReturnValueTest {
-  static Object staticTestMethod() => t0Instance;
+  static Object? staticTestMethod() => t0Instance;
 
-  Object testMethod() => t0Instance;
+  Object? testMethod() => t0Instance;
 
-  Object get testGetter => t0Instance;
+  Object? get testGetter => t0Instance;
 }
 
 main() {
-  Object returnValueLocalFunc() => t0Instance;
+  Object? returnValueLocalFunc() => t0Instance;
 
   returnValueFunc();
   returnValueLocalFunc();
diff --git a/LanguageFeatures/Subtyping/static/tests/left_top_A01_t01.dart b/LanguageFeatures/Subtyping/static/tests/left_top_A01_t01.dart
new file mode 100644
index 0000000..bbd6b84
--- /dev/null
+++ b/LanguageFeatures/Subtyping/static/tests/left_top_A01_t01.dart
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2018, 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 T0 is a subtype of a type T1 (written T0 <: T1)
+ * when:
+ * Left Bottom: if T0 is Never then T0 <: T1
+ * @description Check that if type T0 is Never then T0 is a subtype of T1
+ * @author sgrekhov@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable
+
+class T1 {}
+
+test(Never n) {
+  T1 t1 = n;
+  (T1 t){}(n);
+  foo(n);
+}
+
+foo(T1 t) {}
+
+main() {
+}
diff --git a/LanguageFeatures/Subtyping/static/tests/left_top_A01_t02.dart b/LanguageFeatures/Subtyping/static/tests/left_top_A01_t02.dart
new file mode 100644
index 0000000..e12043b
--- /dev/null
+++ b/LanguageFeatures/Subtyping/static/tests/left_top_A01_t02.dart
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2018, 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 T0 is a subtype of a type T1 (written T0 <: T1)
+ * when:
+ * Left Bottom: if T0 is Never then T0 <: T1
+ * @description Check that if type T0 is Never then T0 is a subtype of T1. Test
+ * type aliases
+ * @author sgrekhov@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable,nonfunction-type-aliases
+
+class T1 {}
+
+typedef Neverland = Never;
+
+test(Neverland n) {
+  T1 t1 = n;
+  (T1 t){}(n);
+  foo(n);
+}
+
+foo(T1 t) {}
+
+main() {
+}
diff --git a/LanguageFeatures/Subtyping/static/tests/left_top_A01_t03.dart b/LanguageFeatures/Subtyping/static/tests/left_top_A01_t03.dart
new file mode 100644
index 0000000..7610fd1
--- /dev/null
+++ b/LanguageFeatures/Subtyping/static/tests/left_top_A01_t03.dart
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2018, 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 T0 is a subtype of a type T1 (written T0 <: T1)
+ * when:
+ * Left Bottom: if T0 is Never then T0 <: T1
+ * @description Check that if type T0 is Never then T0 is a subtype of T1
+ * @author sgrekhov@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable
+import "../../../../Utils/expect.dart";
+class T1 {}
+
+class C<X extends T1> {}
+void foo<X extends T1>() {}
+
+main() {
+  Expect.isTrue(C<Never>() is C<Never>);
+  void x2 = foo<Never>();
+}
diff --git a/LanguageFeatures/Subtyping/static/tests/left_top_A01_t04.dart b/LanguageFeatures/Subtyping/static/tests/left_top_A01_t04.dart
new file mode 100644
index 0000000..8a0e046
--- /dev/null
+++ b/LanguageFeatures/Subtyping/static/tests/left_top_A01_t04.dart
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2018, 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 T0 is a subtype of a type T1 (written T0 <: T1)
+ * when:
+ * Left Bottom: if T0 is Never then T0 <: T1
+ * @description Check that if type T0 is Never then T0 is a subtype of T1
+ * @author sgrekhov@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable,nonfunction-type-aliases
+import "../../../../Utils/expect.dart";
+class T1 {}
+
+class C<X extends T1> {}
+void foo<X extends T1>() {}
+
+typedef Neverland = Never;
+
+main() {
+  Expect.isTrue(C<Neverland>() is C<Never>);
+  void x2 = foo<Neverland>();
+}
diff --git a/LanguageFeatures/Subtyping/test_types/left_bottom_A01.dart b/LanguageFeatures/Subtyping/test_types/left_null_A01.dart
similarity index 89%
rename from LanguageFeatures/Subtyping/test_types/left_bottom_A01.dart
rename to LanguageFeatures/Subtyping/test_types/left_null_A01.dart
index c3ea21a..5f537bd 100644
--- a/LanguageFeatures/Subtyping/test_types/left_bottom_A01.dart
+++ b/LanguageFeatures/Subtyping/test_types/left_null_A01.dart
@@ -6,9 +6,9 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Left Bottom: T0 is Null.
+ * Left Null: T0 is Null.
  * @description Check that if type T0 is Null then T0 is a subtype of a type T1.
- * @author ngl@unipro.ru
+ * @author sgrekhov@unipro.ru
  */
 
 class T1 {}
diff --git a/LanguageFeatures/Subtyping/test_types/left_bottom_A02.dart b/LanguageFeatures/Subtyping/test_types/left_null_A02.dart
similarity index 90%
rename from LanguageFeatures/Subtyping/test_types/left_bottom_A02.dart
rename to LanguageFeatures/Subtyping/test_types/left_null_A02.dart
index 6904aa6..2c506f2 100644
--- a/LanguageFeatures/Subtyping/test_types/left_bottom_A02.dart
+++ b/LanguageFeatures/Subtyping/test_types/left_null_A02.dart
@@ -6,10 +6,10 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Left Bottom: T0 is Null.
+ * Left Null: T0 is Null.
  * @description Check that if type T0 is Null and T1 is dynamic then T0 is a
  * subtype of a type T1.
- * @author ngl@unipro.ru
+ * @author sgrekhov@unipro.ru
  */
 
 class T1 {}
diff --git a/LanguageFeatures/Subtyping/test_types/left_top_A01.dart b/LanguageFeatures/Subtyping/test_types/left_top_A01.dart
new file mode 100644
index 0000000..022f5a8
--- /dev/null
+++ b/LanguageFeatures/Subtyping/test_types/left_top_A01.dart
@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) 2018, 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 T0 is a subtype of a type T1 (written T0 <: T1)
+ * when:
+ * Left Top: if T0 is dynamic or void then T0 <: T1 if Object? <: T1
+ * @description Check that if type T0 is dynamic and Object? <: T1 then T0 is a
+ * subtype of a type T1.
+ * @author sgrekhov@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable
+
+class T1 {}
+
+dynamic t0Instance = "Show must go on";
+T1? t1Instance = new T1();
+
+//# @T0 = dynamic
+//# @T1 = Object?
diff --git a/LanguageFeatures/Subtyping/test_types/right_top_A01.dart b/LanguageFeatures/Subtyping/test_types/right_top_A01.dart
index 061944d..c96c39d 100644
--- a/LanguageFeatures/Subtyping/test_types/right_top_A01.dart
+++ b/LanguageFeatures/Subtyping/test_types/right_top_A01.dart
@@ -6,16 +6,16 @@
 /**
  * @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
  * when:
- * Right Top: T1 is a top type (i.e. Object, dynamic, or void)
+ * Right Top: T1 is a top type (i.e. Object?, dynamic, or void)
  * @description Check that if type T1 is an Object then T0 is a subtype of a
  * type T1
  * @author sgrekhov@unipro.ru
  */
-
+// SharedOptions=--enable-experiment=non-nullable
 class T0 {}
 
 T0 t0Instance = new T0();
-Object t1Instance = new Object();
+Object? t1Instance = new Object();
 
 //# @T0 = T0
-//# @T1 = Object
+//# @T1 = Object?
diff --git a/LanguageFeatures/Subtyping/test_types/right_top_A03.dart b/LanguageFeatures/Subtyping/test_types/right_top_A03.dart
index 710815d..ab31e4d 100644
--- a/LanguageFeatures/Subtyping/test_types/right_top_A03.dart
+++ b/LanguageFeatures/Subtyping/test_types/right_top_A03.dart
@@ -11,9 +11,9 @@
  * T0 is a subtype of a type T1.
  * @author sgrekhov@unipro.ru
  */
-
+// SharedOptions=--enable-experiment=non-nullable
 dynamic t0Instance = "";
-Object t1Instance = new Object();
+Object? t1Instance = new Object();
 
 //# @T0 = dynamic
-//# @T1 = Object
+//# @T1 = Object?
