Version 2.12.0-146.0.dev

Merge commit 'e8b0f38ccda1a2b6ac17c4d2f8727268106325e7' into 'dev'
diff --git a/tests/language_2/nonfunction_type_aliases/generic_usage_class_test.dart b/tests/language_2/nonfunction_type_aliases/generic_usage_class_test.dart
index 5ed9e00..e3a6a6e 100644
--- a/tests/language_2/nonfunction_type_aliases/generic_usage_class_test.dart
+++ b/tests/language_2/nonfunction_type_aliases/generic_usage_class_test.dart
@@ -36,7 +36,7 @@
 
   C(): v7 = T<Null>();
   C.name1(this.v5, this.v7);
-  factory C.name2(T<C> arg1, T<Null> arg2) = C.name1;
+  factory C.name2(T<C> arg1, T<Null> arg2) = C1.name1;
 
   T<double> operator +(T<double> other);
   T<FutureOr<FutureOr<void>>> get g;
@@ -45,6 +45,11 @@
   void m2({T arg1, Map<T, T> arg2(T Function(T) arg21, T arg22)});
 }
 
+class C1 implements C {
+  C1.name1(T<C> arg1, T<Null> arg2);
+  noSuchMethod(Invocation invocation) => throw 0;
+}
+
 class D1<X> extends T<X> {}
 abstract class D3<X, Y> implements T<T> {}
 
diff --git a/tests/language_2/nonfunction_type_aliases/generic_usage_dynamic_test.dart b/tests/language_2/nonfunction_type_aliases/generic_usage_dynamic_test.dart
index c1208a5..46a21d8 100644
--- a/tests/language_2/nonfunction_type_aliases/generic_usage_dynamic_test.dart
+++ b/tests/language_2/nonfunction_type_aliases/generic_usage_dynamic_test.dart
@@ -29,7 +29,7 @@
   final T<Null> v7;
 
   C.name1(this.v5, this.v7);
-  factory C.name2(T<C> arg1, T<Null> arg2) = C.name1;
+  factory C.name2(T<C> arg1, T<Null> arg2) = C1.name1;
 
   T<double> operator +(T<double> other);
   T<FutureOr<FutureOr<void>>> get g;
@@ -38,6 +38,11 @@
   void m2({T arg1, Map<T, T> arg2(T Function(T) arg21, T arg22)});
 }
 
+class C1 implements C {
+  C1.name1(T<C> arg1, T<Null> arg2);
+  noSuchMethod(Invocation invocation) => throw 0;
+}
+
 extension E on T<dynamic> {
   T<dynamic> foo(T<dynamic> t) => t;
 }
diff --git a/tests/language_2/nonfunction_type_aliases/generic_usage_function_test.dart b/tests/language_2/nonfunction_type_aliases/generic_usage_function_test.dart
index 33bac17..b0d4105 100644
--- a/tests/language_2/nonfunction_type_aliases/generic_usage_function_test.dart
+++ b/tests/language_2/nonfunction_type_aliases/generic_usage_function_test.dart
@@ -30,7 +30,7 @@
 
   C(): v7 = print;
   C.name1(this.v5, this.v7);
-  factory C.name2(T<C> arg1, T<Null> arg2) = C.name1;
+  factory C.name2(T<C> arg1, T<Null> arg2) = C1.name1;
 
   T<double> operator +(T<double> other);
   T<FutureOr<FutureOr<void>>> get g;
@@ -39,6 +39,11 @@
   void m2({T arg1, Map<T, T> arg2(T Function(T) arg21, T arg22)});
 }
 
+class C1 implements C {
+  C1.name1(T<C> arg1, T<Null> arg2);
+  noSuchMethod(Invocation invocation) => throw 0;
+}
+
 class D1<X> extends T<X> {}
 abstract class D2 extends C with T<int> {}
 abstract class D3<X, Y> implements T<T> {}
diff --git a/tests/language_2/nonfunction_type_aliases/generic_usage_futureor_test.dart b/tests/language_2/nonfunction_type_aliases/generic_usage_futureor_test.dart
index a81fad2..2d9d0fe 100644
--- a/tests/language_2/nonfunction_type_aliases/generic_usage_futureor_test.dart
+++ b/tests/language_2/nonfunction_type_aliases/generic_usage_futureor_test.dart
@@ -30,7 +30,7 @@
 
   C(): v7 = null;
   C.name1(this.v5, this.v7);
-  factory C.name2(T<C> arg1, T<Null> arg2) = C.name1;
+  factory C.name2(T<C> arg1, T<Null> arg2) = C1.name1;
 
   T<double> operator +(T<double> other);
   T<FutureOr<FutureOr<void>>> get g;
@@ -39,6 +39,11 @@
   void m2({T arg1, Map<T, T> arg2(T Function(T) arg21, T arg22)});
 }
 
+class C1 implements C {
+  C1.name1(T<C> arg1, T<Null> arg2);
+  noSuchMethod(Invocation invocation) => throw 0;
+}
+
 extension E on T<dynamic> {
   T<dynamic> foo(T<dynamic> t) => t;
 }
diff --git a/tests/language_2/nonfunction_type_aliases/generic_usage_null_test.dart b/tests/language_2/nonfunction_type_aliases/generic_usage_null_test.dart
index 6101801..0934a57 100644
--- a/tests/language_2/nonfunction_type_aliases/generic_usage_null_test.dart
+++ b/tests/language_2/nonfunction_type_aliases/generic_usage_null_test.dart
@@ -30,7 +30,7 @@
 
   C(): v7 = null;
   C.name1(this.v5, this.v7);
-  factory C.name2(T<C> arg1, T<Null> arg2) = C.name1;
+  factory C.name2(T<C> arg1, T<Null> arg2) = C1.name1;
 
   T<double> operator +(T<double> other);
   T<FutureOr<FutureOr<void>>> get g;
@@ -39,6 +39,11 @@
   void m2({T arg1, Map<T, T> arg2(T Function(T) arg21, T arg22)});
 }
 
+class C1 implements C {
+  C1.name1(T<C> arg1, T<Null> arg2);
+  noSuchMethod(Invocation invocation) => throw 0;
+}
+
 extension E on T<dynamic> {
   T<dynamic> foo(T<dynamic> t) => t;
 }
diff --git a/tests/language_2/nonfunction_type_aliases/generic_usage_object_test.dart b/tests/language_2/nonfunction_type_aliases/generic_usage_object_test.dart
index f6f9b24..602671e 100644
--- a/tests/language_2/nonfunction_type_aliases/generic_usage_object_test.dart
+++ b/tests/language_2/nonfunction_type_aliases/generic_usage_object_test.dart
@@ -30,7 +30,7 @@
 
   C(): v12 = T();
   C.name1(this.v10, this.v12);
-  factory C.name2(T<C> arg1, T<Null> arg2) = C.name1;
+  factory C.name2(T<C> arg1, T<Null> arg2) = C1.name1;
 
   T<double> operator +(T<double> other);
   T<FutureOr<FutureOr<void>>> get g;
@@ -39,6 +39,11 @@
   void m2({T arg1, Map<T, T> arg2(T Function(T) arg21, T arg22)});
 }
 
+class C1 implements C {
+  C1.name1(T<C> arg1, T<Null> arg2);
+  noSuchMethod(Invocation invocation) => throw 0;
+}
+
 class D1<X> extends T<X> {}
 
 abstract class D3<X, Y> extends C implements T<T> {}
diff --git a/tests/language_2/nonfunction_type_aliases/generic_usage_type_variable_test.dart b/tests/language_2/nonfunction_type_aliases/generic_usage_type_variable_test.dart
index 1c2604c..acd2efb 100644
--- a/tests/language_2/nonfunction_type_aliases/generic_usage_type_variable_test.dart
+++ b/tests/language_2/nonfunction_type_aliases/generic_usage_type_variable_test.dart
@@ -30,7 +30,7 @@
 
   C(): v7 = null;
   C.name1(this.v5, this.v7);
-  factory C.name2(T<D> arg1, T<Null> arg2) = C.name1;
+  factory C.name2(T<D> arg1, T<Null> arg2) = C1.name1;
 
   T<double> operator +(T<double> other);
   T<FutureOr<FutureOr<void>>> get g;
@@ -39,6 +39,11 @@
   void m2({T arg1, Map<T, T> arg2(T Function(T) arg21, T arg22)});
 }
 
+class C1 implements C {
+  C1.name1(T<D> arg1, T<Null> arg2);
+  noSuchMethod(Invocation invocation) => throw 0;
+}
+
 class D {}
 mixin M {}
 
diff --git a/tests/language_2/nonfunction_type_aliases/generic_usage_void_test.dart b/tests/language_2/nonfunction_type_aliases/generic_usage_void_test.dart
index 6456366..18106b4 100644
--- a/tests/language_2/nonfunction_type_aliases/generic_usage_void_test.dart
+++ b/tests/language_2/nonfunction_type_aliases/generic_usage_void_test.dart
@@ -30,7 +30,7 @@
 
   C(): v7 = null;
   C.name1(this.v5, this.v7);
-  factory C.name2(T<C> arg1, T<Null> arg2) = C.name1;
+  factory C.name2(T<C> arg1, T<Null> arg2) = C1.name1;
 
   T<double> operator +(T<double> other);
   T<FutureOr<FutureOr<void>>> get g;
@@ -39,6 +39,11 @@
   void m2({T arg1, Map<T, T> arg2(T Function(T) arg21, T arg22)});
 }
 
+class C1 implements C {
+  C1.name1(T<C> arg1, T<Null> arg2);
+  noSuchMethod(Invocation invocation) => throw 0;
+}
+
 extension E on T<dynamic> {
   T<dynamic> foo(T<dynamic> t) => t;
 }
diff --git a/tests/language_2/nonfunction_type_aliases/usage_class_test.dart b/tests/language_2/nonfunction_type_aliases/usage_class_test.dart
index c3338d6..ae563d9 100644
--- a/tests/language_2/nonfunction_type_aliases/usage_class_test.dart
+++ b/tests/language_2/nonfunction_type_aliases/usage_class_test.dart
@@ -34,7 +34,7 @@
 
   C(): v12 = T();
   C.name1(this.v10, this.v12);
-  factory C.name2(T arg1, T arg2) = C.name1;
+  factory C.name2(T arg1, T arg2) = C1.name1;
 
   T operator +(T other);
   T get g;
@@ -43,6 +43,11 @@
   void m2({T arg1, T arg2(T arg21, T arg22)});
 }
 
+class C1 implements C {
+  C1.name1(T arg1, T arg2);
+  noSuchMethod(Invocation invocation) => throw 0;
+}
+
 class D1 extends T {}
 abstract class D3 implements T {}
 
diff --git a/tests/language_2/nonfunction_type_aliases/usage_dynamic_test.dart b/tests/language_2/nonfunction_type_aliases/usage_dynamic_test.dart
index 3ff37e1..dc5c93f 100644
--- a/tests/language_2/nonfunction_type_aliases/usage_dynamic_test.dart
+++ b/tests/language_2/nonfunction_type_aliases/usage_dynamic_test.dart
@@ -27,7 +27,7 @@
   final T v12;
 
   C.name1(this.v10, this.v12);
-  factory C.name2(T arg1, T arg2) = C.name1;
+  factory C.name2(T arg1, T arg2) = C1.name1;
 
   T operator +(T other);
   T get g;
@@ -36,6 +36,11 @@
   void m2({T arg1, T arg2(T arg21, T arg22)});
 }
 
+class C1 implements C {
+  C1.name1(T arg1, T arg2);
+  noSuchMethod(Invocation invocation) => throw 0;
+}
+
 X foo<X>(X x) => x;
 
 T Function(T) id = (x) => x;
diff --git a/tests/language_2/nonfunction_type_aliases/usage_function_test.dart b/tests/language_2/nonfunction_type_aliases/usage_function_test.dart
index 4e22762..e9af4f6 100644
--- a/tests/language_2/nonfunction_type_aliases/usage_function_test.dart
+++ b/tests/language_2/nonfunction_type_aliases/usage_function_test.dart
@@ -28,7 +28,7 @@
 
   C(): v12 = (() {});
   C.name1(this.v10, this.v12);
-  factory C.name2(T arg1, T arg2) = C.name1;
+  factory C.name2(T arg1, T arg2) = C1.name1;
 
   T operator +(T other);
   T get g;
@@ -37,13 +37,15 @@
   void m2({T arg1, T arg2(T arg21, T arg22)});
 }
 
-// Awaiting updates in front end to handle crash caused by null from
-// `ClassHierarchyBuilder.getKernelTypeAsInstanceOf`. So for now the
-// following are multi-test cases, so that the rest can be tested.
-class D1 extends T {} //# 01: ok
-abstract class D2 extends C with T {} //# 02: ok
-abstract class D3 implements T {} //# 03: ok
-abstract class D4 = C with T; //# 04: ok
+class C1 implements C {
+  C1.name1(T arg1, T arg2);
+  noSuchMethod(Invocation invocation) => throw 0;
+}
+
+class D1 extends T {}
+abstract class D2 extends C with T {}
+abstract class D3 implements T {}
+abstract class D4 = C with T;
 
 extension E on T {
   T foo(T t) => t;
diff --git a/tests/language_2/nonfunction_type_aliases/usage_futureor_test.dart b/tests/language_2/nonfunction_type_aliases/usage_futureor_test.dart
index cab5a49..e0f6d5a 100644
--- a/tests/language_2/nonfunction_type_aliases/usage_futureor_test.dart
+++ b/tests/language_2/nonfunction_type_aliases/usage_futureor_test.dart
@@ -29,7 +29,7 @@
   final T v12;
 
   C.name1(this.v10, this.v12);
-  factory C.name2(T arg1, T arg2) = C.name1;
+  factory C.name2(T arg1, T arg2) = C1.name1;
 
   T operator +(T other);
   T get g;
@@ -38,6 +38,11 @@
   void m2({T arg1, T arg2(T arg21, T arg22)});
 }
 
+class C1 implements C {
+  C1.name1(T arg1, T arg2);
+  noSuchMethod(Invocation invocation) => throw 0;
+}
+
 extension E on T {
   T foo(T t) => t;
 }
diff --git a/tests/language_2/nonfunction_type_aliases/usage_null_test.dart b/tests/language_2/nonfunction_type_aliases/usage_null_test.dart
index e2a00cd..4eb4583 100644
--- a/tests/language_2/nonfunction_type_aliases/usage_null_test.dart
+++ b/tests/language_2/nonfunction_type_aliases/usage_null_test.dart
@@ -28,7 +28,7 @@
 
   C(): v12 = null;
   C.name1(this.v10, this.v12);
-  factory C.name2(T arg1, T arg2) = C.name1;
+  factory C.name2(T arg1, T arg2) = C1.name1;
 
   T operator +(T other);
   T get g;
@@ -37,6 +37,11 @@
   void m2({T arg1, T arg2(T arg21, T arg22)});
 }
 
+class C1 implements C {
+  C1.name1(T arg1, T arg2);
+  noSuchMethod(Invocation invocation) => throw 0;
+}
+
 extension E on T {
   T foo(T t) => t;
 }
diff --git a/tests/language_2/nonfunction_type_aliases/usage_object_error_test.dart b/tests/language_2/nonfunction_type_aliases/usage_object_error_test.dart
index f43ea38..e07c2090 100644
--- a/tests/language_2/nonfunction_type_aliases/usage_object_error_test.dart
+++ b/tests/language_2/nonfunction_type_aliases/usage_object_error_test.dart
@@ -15,7 +15,12 @@
   final T v12;
   C(): v12 = T();
   C.name1(this.v10, this.v12);
-  factory C.name2(T arg1, T arg2) = C.name1;
+  factory C.name2(T arg1, T arg2) = C1.name1;
+}
+
+class C1 implements C {
+  C1.name1(T arg1, T arg2);
+  noSuchMethod(Invocation invocation) => throw 0;
 }
 
 abstract class D2 extends C with T {}
diff --git a/tests/language_2/nonfunction_type_aliases/usage_object_test.dart b/tests/language_2/nonfunction_type_aliases/usage_object_test.dart
index a93e8b7..6896551 100644
--- a/tests/language_2/nonfunction_type_aliases/usage_object_test.dart
+++ b/tests/language_2/nonfunction_type_aliases/usage_object_test.dart
@@ -28,7 +28,7 @@
 
   C(): v12 = T();
   C.name1(this.v10, this.v12);
-  factory C.name2(T arg1, T arg2) = C.name1;
+  factory C.name2(T arg1, T arg2) = C1.name1;
 
   T operator +(T other);
   T get g;
@@ -37,6 +37,11 @@
   void m2({T arg1, T arg2(T arg21, T arg22)});
 }
 
+class C1 implements C {
+  C1.name1(T arg1, T arg2);
+  noSuchMethod(Invocation invocation) => throw 0;
+}
+
 class D1 extends T {}
 
 extension E on T {
diff --git a/tests/language_2/nonfunction_type_aliases/usage_type_variable_test.dart b/tests/language_2/nonfunction_type_aliases/usage_type_variable_test.dart
index ffd1e16..e580abe 100644
--- a/tests/language_2/nonfunction_type_aliases/usage_type_variable_test.dart
+++ b/tests/language_2/nonfunction_type_aliases/usage_type_variable_test.dart
@@ -34,7 +34,7 @@
 
   C(): v12 = null;
   C.name1(this.v10, this.v12);
-  factory C.name2(T arg1, T arg2) = C.name1;
+  factory C.name2(T arg1, T arg2) = C1.name1;
 
   T operator +(T other);
   T get g;
@@ -43,6 +43,11 @@
   void m2({T arg1, T arg2(T arg21, T arg22)});
 }
 
+class C1 implements C {
+  C1.name1(T arg1, T arg2);
+  noSuchMethod(Invocation invocation) => throw 0;
+}
+
 class D1 extends T {}
 abstract class D3 implements T {}
 
diff --git a/tests/language_2/nonfunction_type_aliases/usage_void_test.dart b/tests/language_2/nonfunction_type_aliases/usage_void_test.dart
index cb752e5..9857812 100644
--- a/tests/language_2/nonfunction_type_aliases/usage_void_test.dart
+++ b/tests/language_2/nonfunction_type_aliases/usage_void_test.dart
@@ -27,7 +27,7 @@
   final T v12;
 
   C.name1(this.v10, this.v12);
-  factory C.name2(T arg1, T arg2) = C.name1;
+  factory C.name2(T arg1, T arg2) = C1.name1;
 
   T operator +(T other);
   T get g;
@@ -36,6 +36,11 @@
   void m2({T arg1, T arg2(T arg21, T arg22)});
 }
 
+class C1 implements C {
+  C1.name1(T arg1, T arg2);
+  noSuchMethod(Invocation invocation) => throw 0;
+}
+
 extension E on T {
   T foo(T t) => t;
 }
diff --git a/tools/VERSION b/tools/VERSION
index 58c42d0..b0eadcc 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 12
 PATCH 0
-PRERELEASE 145
+PRERELEASE 146
 PRERELEASE_PATCH 0
\ No newline at end of file