diff --git a/tests/language/constructor/tear_off_test.dart b/tests/language/constructor/tear_off_test.dart
index f890b44..a0764886 100644
--- a/tests/language/constructor/tear_off_test.dart
+++ b/tests/language/constructor/tear_off_test.dart
@@ -24,18 +24,16 @@
   const NGenRedir._(this.x);
 }
 
-class NFac {
+class NFac implements NFacRedir {
   final int x;
-  factory NFac(int x) => NFacRedir._(x);
-  factory NFac.named(int x) => NFacRedir._(x);
-  NFac._(this.x);
+  factory NFac(int x) => NFac._(x);
+  factory NFac.named(int x) => NFac._(x);
+  const NFac._(this.x);
 }
 
 class NFacRedir {
-  final int x;
   const factory NFacRedir(int x) = NFac._;
   const factory NFacRedir.named(int x) = NFac._;
-  NFacRedir._(this.x);
 }
 
 // Generic classes.
@@ -52,18 +50,16 @@
   const GGenRedir._(this.x);
 }
 
-class GFac<T> {
+class GFac<T> implements GFacRedir<T> {
   final int x;
-  factory GFac(int x) => GFacRedir._(x);
-  factory GFac.named(int x) => GFacRedir._(x);
-  GFac._(this.x);
+  factory GFac(int x) => GFac._(x);
+  factory GFac.named(int x) => GFac._(x);
+  const GFac._(this.x);
 }
 
 class GFacRedir<T> {
-  final int x;
   const factory GFacRedir(int x) = GFac._;
   const factory GFacRedir.named(int x) = GFac._;
-  GFacRedir._(this.x);
 }
 
 class Optional<T> {
@@ -96,9 +92,9 @@
   GGen<int>.new.expectStaticType<Exactly<GGen<int> Function(int)>>();
   GGen<int>.named.expectStaticType<Exactly<GGen<int> Function(int)>>();
   GGenRedir<int>.new
-      .expectStaticType<Exactly<GGenRedir<T> Function<T>(int)>>();
+      .expectStaticType<Exactly<GGenRedir<int> Function(int)>>();
   GGenRedir<int>.named
-      .expectStaticType<Exactly<GGenRedir<T> Function<T>(int)>>();
+      .expectStaticType<Exactly<GGenRedir<int> Function(int)>>();
   GFac<int>.new.expectStaticType<Exactly<GFac<int> Function(int)>>();
   GFac<int>.named.expectStaticType<Exactly<GFac<int> Function(int)>>();
   GFacRedir<int>.new
@@ -106,26 +102,26 @@
   GFacRedir<int>.named
       .expectStaticType<Exactly<GFacRedir<int> Function(int)>>();
 
-  contextType<GGen<int> Function(int)>(
+  context<GGen<int> Function(int)>(
       GGen.new..expectStaticType<Exactly<GGen<int> Function(int)>>());
-  contextType<GGen<int> Function(int)>(
+  context<GGen<int> Function(int)>(
       GGen.named..expectStaticType<Exactly<GGen<int> Function(int)>>());
-  contextType<GGenRedir<int> Function(int)>(GGenRedir.new
+  context<GGenRedir<int> Function(int)>(GGenRedir.new
     ..expectStaticType<Exactly<GGenRedir<int> Function(int)>>());
-  contextType<GGenRedir<int> Function(int)>(GGenRedir.named
+  context<GGenRedir<int> Function(int)>(GGenRedir.named
     ..expectStaticType<Exactly<GGenRedir<int> Function(int)>>());
-  contextType<GFac<int> Function(int)>(
+  context<GFac<int> Function(int)>(
       GFac.new..expectStaticType<Exactly<GFac<int> Function(int)>>());
-  contextType<GFac<int> Function(int)>(
+  context<GFac<int> Function(int)>(
       GFac.named..expectStaticType<Exactly<GFac<int> Function(int)>>());
-  contextType<GFacRedir<int> Function(int)>(
+  context<GFacRedir<int> Function(int)>(
       GFacRedir.new..expectStaticType<Exactly<GFacRedir<int> Function(int)>>());
-  contextType<GFacRedir<int> Function(int)>(GFacRedir.named
+  context<GFacRedir<int> Function(int)>(GFacRedir.named
     ..expectStaticType<Exactly<GFacRedir<int> Function(int)>>());
 
-  contextType<Optional<int> Function()>(Optional.new
+  context<Optional<int> Function()>(Optional.new
     ..expectStaticType<Exactly<Optional<int> Function([int, int])>>());
-  contextType<Optional<int> Function()>(Optional.named
+  context<Optional<int> Function()>(Optional.named
     ..expectStaticType<Exactly<Optional<int> Function({int x, int y})>>());
 
   // Check that tear-offs are canonicalized where possible
diff --git a/tests/language/static_type_helper.dart b/tests/language/static_type_helper.dart
index 4a7809a..14acd63 100644
--- a/tests/language/static_type_helper.dart
+++ b/tests/language/static_type_helper.dart
@@ -6,7 +6,7 @@
 Type typeOf<T>() => T;
 
 /// Ensures a context type of [T] for the operand.
-void context<T>(T x) {}
+Object? context<T>(T x) => x;
 
 /// Captures the context type of the call and returns the same type.
 ///
diff --git a/tests/language/type_object/explicit_instantiated_type_literal_test.dart b/tests/language/type_object/explicit_instantiated_type_literal_test.dart
index 07fa243..6b3b07f 100644
--- a/tests/language/type_object/explicit_instantiated_type_literal_test.dart
+++ b/tests/language/type_object/explicit_instantiated_type_literal_test.dart
@@ -18,8 +18,8 @@
 Type type<T>() => T;
 
 void main() {
-  C.expectStaticType<Type>();
-  C<int>.expectStaticType<Type>();
+  (C).expectStaticType<Exactly<Type>>();
+  (C<int>).expectStaticType<Exactly<Type>>();
 
   Expect.identical(C<num>, C);
   Expect.identical(C<int>, C<int>);
@@ -30,8 +30,8 @@
   Expect.identical(C<dynamic>, C<dynamic>);
   Expect.equals(C<dynamic>, type<C<dynamic>>());
 
-  prefix.C.expectStaticType<Type>();
-  prefix.C<int>.expectStaticType<Type>();
+  (prefix.C).expectStaticType<Exactly<Type>>();
+  (prefix.C<int>).expectStaticType<Exactly<Type>>();
 
   Expect.identical(prefix.C<num>, prefix.C);
   Expect.identical(prefix.C<int>, prefix.C<int>);
diff --git a/tests/language/typedef/aliased_constructor_tear_off_test.dart b/tests/language/typedef/aliased_constructor_tear_off_test.dart
index e63b693..7d51dfb 100644
--- a/tests/language/typedef/aliased_constructor_tear_off_test.dart
+++ b/tests/language/typedef/aliased_constructor_tear_off_test.dart
@@ -14,7 +14,7 @@
 void use(Type type) {}
 
 class C<T> {
-  final T value;
+  final T x;
   C(this.x);
   C.named(this.x);
 }
@@ -37,7 +37,7 @@
   // or if instantiated with a constant type.
   const List<Object> constructors = [
     Special.new,
-    Spceial.named,
+    Special.named,
     Direct.new,
     Direct.named,
     Bounded.new,
@@ -64,12 +64,12 @@
       Wrapping.new,
       Wrapping.named,
     ],
-    const <C<int, int> Function(C<int>)>[
+    const <C<int> Function(int)>[
       Extra.new,
       Extra.named,
     ]
   ];
-  Expect.notNull(constructors); // Use variable.
+  Expect.isNotNull(constructors); // Use variable.
 
   // The static type is as expected.
 
@@ -83,8 +83,8 @@
   Bounded.new.expectStaticType<Exactly<C<T> Function<T extends num>(T)>>();
   Bounded.named.expectStaticType<Exactly<C<T> Function<T extends num>(T)>>();
 
-  Wrapping.new.expectStaticType<Exactly<C<C<T>> Function<T>(T)>>();
-  Wrapping.named.expectStaticType<Exactly<C<C<T>> Function<T>(T)>>();
+  Wrapping.new.expectStaticType<Exactly<C<C<T>> Function<T>(C<T>)>>();
+  Wrapping.named.expectStaticType<Exactly<C<C<T>> Function<T>(C<T>)>>();
 
   Extra.new.expectStaticType<Exactly<C<T> Function<T, S>(T)>>();
   Extra.named.expectStaticType<Exactly<C<T> Function<T, S>(T)>>();
@@ -105,24 +105,24 @@
   Extra<int, String>.named.expectStaticType<Exactly<C<int> Function(int)>>();
 
   // Implicitly instantiated.
-  contextType<C<int> Function(int)>(
-      Direct<int>.new..expectStaticType<Exactly<C<int> Function(int)>>());
-  contextType<C<int> Function(int)>(
-      Direct<int>.named..expectStaticType<Exactly<C<int> Function(int)>>());
+  context<C<int> Function(int)>(
+      Direct.new..expectStaticType<Exactly<C<int> Function(int)>>());
+  context<C<int> Function(int)>(
+      Direct.named..expectStaticType<Exactly<C<int> Function(int)>>());
 
-  contextType<C<int> Function(int)>(
-      Bounded<int>.new..expectStaticType<Exactly<C<int> Function(int)>>());
-  contextType<C<int> Function(int)>(
-      Bounded<int>.named..expectStaticType<Exactly<C<int> Function(int)>>());
+  context<C<int> Function(int)>(
+      Bounded.new..expectStaticType<Exactly<C<int> Function(int)>>());
+  context<C<int> Function(int)>(
+      Bounded.named..expectStaticType<Exactly<C<int> Function(int)>>());
 
-  contextType<C<C<int>> Function(C<int>)>(Wrapping<int>.new
+  context<C<C<int>> Function(C<int>)>(Wrapping.new
     ..expectStaticType<Exactly<C<C<int>> Function(C<int>)>>());
-  contextType<C<C<int>> Function(C<int>)>(Wrapping<int>.named
+  context<C<C<int>> Function(C<int>)>(Wrapping.named
     ..expectStaticType<Exactly<C<C<int>> Function(C<int>)>>());
 
-  contextType<C<int, String> Function(int)>(Extra<int, String>.new
+  context<C<int> Function(int)>(Extra.new
     ..expectStaticType<Exactly<C<int> Function(int)>>());
-  contextType<C<int, String> Function(int)>(Extra<int, String>.named
+  context<C<int> Function(int)>(Extra.named
     ..expectStaticType<Exactly<C<int> Function(int)>>());
 
   // Uninstantiated tear-offs always canonicalize.
@@ -176,35 +176,35 @@
 
   // Implicit instantiation.
   Expect.identical(
-    contextType<C<int> Function(int)>(Direct.new),
+    context<C<int> Function(int)>(Direct.new),
     C<int>.new,
   );
   Expect.identical(
-    contextType<C<int> Function(int)>(Direct.named),
+    context<C<int> Function(int)>(Direct.named),
     C<int>.named,
   );
   Expect.identical(
-    contextType<C<int> Function(int)>(Bounded.new),
+    context<C<int> Function(int)>(Bounded.new),
     C<int>.new,
   );
   Expect.identical(
-    contextType<C<int> Function(int)>(Bounded.named),
+    context<C<int> Function(int)>(Bounded.named),
     C<int>.named,
   );
   Expect.identical(
-    contextType<C<C<int>> Function(C<int>)>(Wrapping.new),
+    context<C<C<int>> Function(C<int>)>(Wrapping.new),
     C<C<int>>.new,
   );
   Expect.identical(
-    contextType<C<C<int>> Function(C<int>)>(Wrapping.named),
+    context<C<C<int>> Function(C<int>)>(Wrapping.named),
     C<C<int>>.named,
   );
   Expect.identical(
-    contextType<D<int, String> Function()>(Swapped.new),
+    context<D<int, String> Function()>(Swapped.new),
     D<int, String>.new,
   );
   Expect.identical(
-    contextType<D<int, String> Function()>(Swapped.named),
+    context<D<int, String> Function()>(Swapped.named),
     D<int, String>.named,
   );
 
diff --git a/tests/language/typedef/aliased_type_literal_instantiation_test.dart b/tests/language/typedef/aliased_type_literal_instantiation_test.dart
index c99e904..25dc8f9 100644
--- a/tests/language/typedef/aliased_type_literal_instantiation_test.dart
+++ b/tests/language/typedef/aliased_type_literal_instantiation_test.dart
@@ -10,7 +10,7 @@
 import "package:expect/expect.dart";
 
 class C<T> {
-  final T value;
+  final T x;
   C(this.x);
   C.named(this.x);
 }
@@ -55,7 +55,7 @@
   Expect.identical(e2, co);
   Expect.identical(e3, ci);
 
-  (<T>() {
+  (<T extends num>() {
     // Using a non-constant type.
     Expect.equals(Direct<T>, ci);
     Expect.equals(Bounded<T>, ci);
