#389. More NNBD static errors tests. Non-Nullable types tests added
diff --git a/LanguageFeatures/nnbd/static_errors_A22_t01.dart b/LanguageFeatures/nnbd/static_errors_A22_t01.dart
new file mode 100644
index 0000000..eaec70a
--- /dev/null
+++ b/LanguageFeatures/nnbd/static_errors_A22_t01.dart
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+ * for details. All rights reserved. Use of this source code is governed by a
+ * BSD-style license that can be found in the LICENSE file.
+ */
+/**
+ * @assertion We say that a type T is non-nullable if T <: Object. This is
+ * equivalent to the syntactic criterion that T is any of:
+ *  Never
+ *  Any function type (including Function)
+ *  Any interface type except Null.
+ *  S* for some S where S is non-nullable
+ *  FutureOr<S> where S is non-nullable
+ *  X extends S where S is non-nullable
+ *  X & S where S is non-nullable
+ *
+ * @description Check that null cannot be assigned to non-nullable type. Test
+ * Never
+ * @author sgrekhov@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable
+
+test() => Never;
+
+main() {
+  var v = test();
+  if (v is Never) {
+    v = null;
+//      ^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+  }
+}
diff --git a/LanguageFeatures/nnbd/static_errors_A22_t02.dart b/LanguageFeatures/nnbd/static_errors_A22_t02.dart
new file mode 100644
index 0000000..5a44058
--- /dev/null
+++ b/LanguageFeatures/nnbd/static_errors_A22_t02.dart
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+ * for details. All rights reserved. Use of this source code is governed by a
+ * BSD-style license that can be found in the LICENSE file.
+ */
+/**
+ * @assertion We say that a type T is non-nullable if T <: Object. This is
+ * equivalent to the syntactic criterion that T is any of:
+ *  Never
+ *  Any function type (including Function)
+ *  Any interface type except Null.
+ *  S* for some S where S is non-nullable
+ *  FutureOr<S> where S is non-nullable
+ *  X extends S where S is non-nullable
+ *  X & S where S is non-nullable
+ *
+ * @description Check that null cannot be assigned to non-nullable type. Test
+ * function type
+ * @author sgrekhov@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable
+
+void foo() {}
+typedef void bar(int i);
+
+main() {
+  var f1 = foo;
+  f1 = null;
+//     ^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  bar f2 = null;
+//        ^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  Function f3 = (int i) => i;
+  f3 = null;
+//     ^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+}
diff --git a/LanguageFeatures/nnbd/static_errors_A22_t03.dart b/LanguageFeatures/nnbd/static_errors_A22_t03.dart
new file mode 100644
index 0000000..a62c014
--- /dev/null
+++ b/LanguageFeatures/nnbd/static_errors_A22_t03.dart
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+ * for details. All rights reserved. Use of this source code is governed by a
+ * BSD-style license that can be found in the LICENSE file.
+ */
+/**
+ * @assertion We say that a type T is non-nullable if T <: Object. This is
+ * equivalent to the syntactic criterion that T is any of:
+ *  Never
+ *  Any function type (including Function)
+ *  Any interface type except Null.
+ *  S* for some S where S is non-nullable
+ *  FutureOr<S> where S is non-nullable
+ *  X extends S where S is non-nullable
+ *  X & S where S is non-nullable
+ *
+ * @description Check that null cannot be assigned to non-nullable type. Test
+ * interface type
+ * @author sgrekhov@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable
+
+abstract class A {
+  void foo(int i);
+}
+
+class C {
+  int bar(int i) => i;
+}
+
+main() {
+  A a = null;
+//      ^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  C v = null;
+//      ^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+}
diff --git a/LanguageFeatures/nnbd/static_errors_A22_t04.dart b/LanguageFeatures/nnbd/static_errors_A22_t04.dart
new file mode 100644
index 0000000..7e164bf
--- /dev/null
+++ b/LanguageFeatures/nnbd/static_errors_A22_t04.dart
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+ * for details. All rights reserved. Use of this source code is governed by a
+ * BSD-style license that can be found in the LICENSE file.
+ */
+/**
+ * @assertion We say that a type T is non-nullable if T <: Object. This is
+ * equivalent to the syntactic criterion that T is any of:
+ *  Never
+ *  Any function type (including Function)
+ *  Any interface type except Null.
+ *  S* for some S where S is non-nullable
+ *  FutureOr<S> where S is non-nullable
+ *  X extends S where S is non-nullable
+ *  X & S where S is non-nullable
+ *
+ * @description Check that null cannot be assigned to non-nullable type. Test
+ * S* for some S where S is non-nullable
+ * @author sgrekhov@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable
+
+class C {
+}
+
+main() {
+  C v = null;
+//      ^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+}
diff --git a/LanguageFeatures/nnbd/static_errors_A22_t05.dart b/LanguageFeatures/nnbd/static_errors_A22_t05.dart
new file mode 100644
index 0000000..a45ba63
--- /dev/null
+++ b/LanguageFeatures/nnbd/static_errors_A22_t05.dart
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+ * for details. All rights reserved. Use of this source code is governed by a
+ * BSD-style license that can be found in the LICENSE file.
+ */
+/**
+ * @assertion We say that a type T is non-nullable if T <: Object. This is
+ * equivalent to the syntactic criterion that T is any of:
+ *  Never
+ *  Any function type (including Function)
+ *  Any interface type except Null.
+ *  S* for some S where S is non-nullable
+ *  FutureOr<S> where S is non-nullable
+ *  X extends S where S is non-nullable
+ *  X & S where S is non-nullable
+ *
+ * @description Check that null cannot be assigned to non-nullable type. Test
+ * FutureOr<S> where S is non-nullable
+ * @author sgrekhov@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable,nonfunction-type-aliases
+class C {
+}
+
+typedef CAlias = C;
+
+main() {
+  CAlias c = null;
+//           ^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+}
diff --git a/LanguageFeatures/nnbd/static_errors_A22_t06.dart b/LanguageFeatures/nnbd/static_errors_A22_t06.dart
new file mode 100644
index 0000000..3520d69
--- /dev/null
+++ b/LanguageFeatures/nnbd/static_errors_A22_t06.dart
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+ * for details. All rights reserved. Use of this source code is governed by a
+ * BSD-style license that can be found in the LICENSE file.
+ */
+/**
+ * @assertion We say that a type T is non-nullable if T <: Object. This is
+ * equivalent to the syntactic criterion that T is any of:
+ *  Never
+ *  Any function type (including Function)
+ *  Any interface type except Null.
+ *  S* for some S where S is non-nullable
+ *  FutureOr<S> where S is non-nullable
+ *  X extends S where S is non-nullable
+ *  X & S where S is non-nullable
+ *
+ * @description Check that null cannot be assigned to non-nullable type. Test
+ * FutureOr<S> where S is non-nullable
+ * @author sgrekhov@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable
+import "dart:async";
+
+class C {
+}
+
+main() {
+  FutureOr<C> fo = null;
+//                 ^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+}
diff --git a/LanguageFeatures/nnbd/static_errors_A22_t07.dart b/LanguageFeatures/nnbd/static_errors_A22_t07.dart
new file mode 100644
index 0000000..2151fa0
--- /dev/null
+++ b/LanguageFeatures/nnbd/static_errors_A22_t07.dart
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+ * for details. All rights reserved. Use of this source code is governed by a
+ * BSD-style license that can be found in the LICENSE file.
+ */
+/**
+ * @assertion We say that a type T is non-nullable if T <: Object. This is
+ * equivalent to the syntactic criterion that T is any of:
+ *  Never
+ *  Any function type (including Function)
+ *  Any interface type except Null.
+ *  S* for some S where S is non-nullable
+ *  FutureOr<S> where S is non-nullable
+ *  X extends S where S is non-nullable
+ *  X & S where S is non-nullable
+ *
+ * @description Check that null cannot be assigned to non-nullable type. Test
+ * FutureOr<S> where S is non-nullable
+ * @author sgrekhov@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable,nonfunction-type-aliases
+import "dart:async";
+
+class C {
+}
+
+typedef CAlias = C;
+
+main() {
+  FutureOr<CAlias> fo = null;
+//                      ^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+}
diff --git a/LanguageFeatures/nnbd/static_errors_A22_t08.dart b/LanguageFeatures/nnbd/static_errors_A22_t08.dart
new file mode 100644
index 0000000..b248cd0
--- /dev/null
+++ b/LanguageFeatures/nnbd/static_errors_A22_t08.dart
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+ * for details. All rights reserved. Use of this source code is governed by a
+ * BSD-style license that can be found in the LICENSE file.
+ */
+/**
+ * @assertion We say that a type T is non-nullable if T <: Object. This is
+ * equivalent to the syntactic criterion that T is any of:
+ *  Never
+ *  Any function type (including Function)
+ *  Any interface type except Null.
+ *  S* for some S where S is non-nullable
+ *  FutureOr<S> where S is non-nullable
+ *  X extends S where S is non-nullable
+ *  X & S where S is non-nullable
+ *
+ * @description Check that null cannot be assigned to non-nullable type. Test
+ * X extends S where S is non-nullable
+ * @author sgrekhov@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable
+
+class A {
+}
+
+class C extends A {}
+
+main() {
+  C c = null;
+//      ^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+}
diff --git a/LanguageFeatures/nnbd/static_errors_A22_t09.dart b/LanguageFeatures/nnbd/static_errors_A22_t09.dart
new file mode 100644
index 0000000..b8d3542
--- /dev/null
+++ b/LanguageFeatures/nnbd/static_errors_A22_t09.dart
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+ * for details. All rights reserved. Use of this source code is governed by a
+ * BSD-style license that can be found in the LICENSE file.
+ */
+/**
+ * @assertion We say that a type T is non-nullable if T <: Object. This is
+ * equivalent to the syntactic criterion that T is any of:
+ *  Never
+ *  Any function type (including Function)
+ *  Any interface type except Null.
+ *  S* for some S where S is non-nullable
+ *  FutureOr<S> where S is non-nullable
+ *  X extends S where S is non-nullable
+ *  X & S where S is non-nullable
+ *
+ * @description Check that null cannot be assigned to non-nullable type. Test
+ * X extends S where S is non-nullable
+ * @author sgrekhov@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable,nonfunction-type-aliases
+
+class A {
+}
+
+typedef AAlias = A;
+
+class C extends AAlias {}
+
+main() {
+  C c = null;
+//      ^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+}
diff --git a/LanguageFeatures/nnbd/static_errors_A22_t10.dart b/LanguageFeatures/nnbd/static_errors_A22_t10.dart
new file mode 100644
index 0000000..ed13955
--- /dev/null
+++ b/LanguageFeatures/nnbd/static_errors_A22_t10.dart
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+ * for details. All rights reserved. Use of this source code is governed by a
+ * BSD-style license that can be found in the LICENSE file.
+ */
+/**
+ * @assertion We say that a type T is non-nullable if T <: Object. This is
+ * equivalent to the syntactic criterion that T is any of:
+ *  Never
+ *  Any function type (including Function)
+ *  Any interface type except Null.
+ *  S* for some S where S is non-nullable
+ *  FutureOr<S> where S is non-nullable
+ *  X extends S where S is non-nullable
+ *  X & S where S is non-nullable
+ *
+ * @description Check that null cannot be assigned to non-nullable type. Test
+ * X & S where S is non-nullable
+ * @author sgrekhov@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable
+
+class X {}
+
+class S {}
+
+class C = X? with S;
+
+main() {
+  C c = null;
+//      ^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+}
diff --git a/LanguageFeatures/nnbd/static_errors_A22_t11.dart b/LanguageFeatures/nnbd/static_errors_A22_t11.dart
new file mode 100644
index 0000000..bcda655
--- /dev/null
+++ b/LanguageFeatures/nnbd/static_errors_A22_t11.dart
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+ * for details. All rights reserved. Use of this source code is governed by a
+ * BSD-style license that can be found in the LICENSE file.
+ */
+/**
+ * @assertion We say that a type T is non-nullable if T <: Object. This is
+ * equivalent to the syntactic criterion that T is any of:
+ *  Never
+ *  Any function type (including Function)
+ *  Any interface type except Null.
+ *  S* for some S where S is non-nullable
+ *  FutureOr<S> where S is non-nullable
+ *  X extends S where S is non-nullable
+ *  X & S where S is non-nullable
+ *
+ * @description Check that null cannot be assigned to non-nullable type. Test
+ * X & S where S is non-nullable
+ * @author sgrekhov@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable,nonfunction-type-aliases
+
+class X {}
+
+class S {}
+
+typedef XAlias = X?;
+
+class C = XAlias with S;
+
+main() {
+  C c = null;
+//      ^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+}
diff --git a/LanguageFeatures/nnbd/static_errors_A22_t12.dart b/LanguageFeatures/nnbd/static_errors_A22_t12.dart
new file mode 100644
index 0000000..93ffa9c
--- /dev/null
+++ b/LanguageFeatures/nnbd/static_errors_A22_t12.dart
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+ * for details. All rights reserved. Use of this source code is governed by a
+ * BSD-style license that can be found in the LICENSE file.
+ */
+/**
+ * @assertion We say that a type T is non-nullable if T <: Object. This is
+ * equivalent to the syntactic criterion that T is any of:
+ *  Never
+ *  Any function type (including Function)
+ *  Any interface type except Null.
+ *  S* for some S where S is non-nullable
+ *  FutureOr<S> where S is non-nullable
+ *  X extends S where S is non-nullable
+ *  X & S where S is non-nullable
+ *
+ * @description Check that null cannot be assigned to non-nullable type. Test
+ * X & S where S is non-nullable
+ * @author sgrekhov@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable
+import "legacy_library_lib.dart";
+
+class S {}
+
+class C = A with S;
+
+main() {
+  C c = null;
+//      ^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+}
diff --git a/LanguageFeatures/nnbd/static_errors_A22_t13.dart b/LanguageFeatures/nnbd/static_errors_A22_t13.dart
new file mode 100644
index 0000000..651ded6
--- /dev/null
+++ b/LanguageFeatures/nnbd/static_errors_A22_t13.dart
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+ * for details. All rights reserved. Use of this source code is governed by a
+ * BSD-style license that can be found in the LICENSE file.
+ */
+/**
+ * @assertion We say that a type T is non-nullable if T <: Object. This is
+ * equivalent to the syntactic criterion that T is any of:
+ *  Never
+ *  Any function type (including Function)
+ *  Any interface type except Null.
+ *  S* for some S where S is non-nullable
+ *  FutureOr<S> where S is non-nullable
+ *  X extends S where S is non-nullable
+ *  X & S where S is non-nullable
+ *
+ * @description Check that null cannot be assigned to non-nullable type. Test
+ * X & S where S is non-nullable
+ * @author sgrekhov@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable,nonfunction-type-aliases
+import "legacy_library_lib.dart";
+
+typedef AAlias = A;
+
+class S {}
+
+class C = AAlias with S;
+
+main() {
+  C c = null;
+//      ^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+}