diff --git a/pkg/analyzer/test/src/dart/element/inheritance_manager3_test.dart b/pkg/analyzer/test/src/dart/element/inheritance_manager3_test.dart
index bb83b55..d584afe 100644
--- a/pkg/analyzer/test/src/dart/element/inheritance_manager3_test.dart
+++ b/pkg/analyzer/test/src/dart/element/inheritance_manager3_test.dart
@@ -1281,10 +1281,7 @@
   }
 }
 
-class _InheritanceManager3Base extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin {
-  // TODO(https://github.com/dart-lang/sdk/issues/44666): Use null safety in
-  //  test cases.
+class _InheritanceManager3Base extends PubPackageResolutionTest {
   late final InheritanceManager3 manager;
 
   @override
diff --git a/pkg/analyzer/test/src/dart/resolution/ast_rewrite_test.dart b/pkg/analyzer/test/src/dart/resolution/ast_rewrite_test.dart
index f9664da..ab1f6c6 100644
--- a/pkg/analyzer/test/src/dart/resolution/ast_rewrite_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/ast_rewrite_test.dart
@@ -392,12 +392,7 @@
 @reflectiveTest
 class AstRewriteMethodInvocationWithNonFunctionTypeAliasesTest
     extends PubPackageResolutionTest
-    with
-        WithoutNullSafetyMixin,
-        WithNonFunctionTypeAliasesMixin,
-        AstRewriteMethodInvocationTestCases {
-  // TODO(https://github.com/dart-lang/sdk/issues/44666): Use null safety in
-  //  test cases.
+    with WithNonFunctionTypeAliasesMixin, AstRewriteMethodInvocationTestCases {
   test_targetNull_typeAlias_interfaceType() async {
     await assertNoErrorsInCode(r'''
 class A<T, U> {
diff --git a/pkg/analyzer/test/src/dart/resolution/class_alias_test.dart b/pkg/analyzer/test/src/dart/resolution/class_alias_test.dart
index 9429125..59e92f4 100644
--- a/pkg/analyzer/test/src/dart/resolution/class_alias_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/class_alias_test.dart
@@ -16,9 +16,7 @@
 
 @reflectiveTest
 class ClassAliasDriverResolutionTest extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin, ElementsTypesMixin {
-  // TODO(https://github.com/dart-lang/sdk/issues/44666): Use null safety in
-  //  test cases.
+    with ElementsTypesMixin {
   test_defaultConstructor() async {
     await assertNoErrorsInCode(r'''
 class A {}
@@ -69,8 +67,8 @@
     assertElementTypes(
       x.interfaces,
       [
-        interfaceTypeStar(a),
-        interfaceTypeStar(b),
+        interfaceTypeNone(a),
+        interfaceTypeNone(b),
       ],
     );
   }
@@ -87,8 +85,8 @@
     assertElementTypes(
       x.mixins,
       [
-        interfaceTypeStar(a),
-        interfaceTypeStar(b),
+        interfaceTypeNone(a),
+        interfaceTypeNone(b),
       ],
     );
   }
@@ -179,8 +177,8 @@
     await assertNoErrorsInCode(r'''
 class A {
   A.c1(int a);
-  A.c2(int a, [int b, int c]);
-  A.c3(int a, {int b, int c});
+  A.c2(int a, [int b = 0, int c = 0]);
+  A.c3(int a, {int b = 0, int c = 0});
 }
 
 class M {}
diff --git a/pkg/analyzer/test/src/dart/resolution/class_test.dart b/pkg/analyzer/test/src/dart/resolution/class_test.dart
index f2bff29..da64df0 100644
--- a/pkg/analyzer/test/src/dart/resolution/class_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/class_test.dart
@@ -18,9 +18,7 @@
 
 @reflectiveTest
 class ClassDriverResolutionTest extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin, ElementsTypesMixin {
-  // TODO(https://github.com/dart-lang/sdk/issues/44666): Use null safety in
-  //  test cases.
+    with ElementsTypesMixin {
   test_element_allSupertypes() async {
     await assertNoErrorsInCode(r'''
 class A {}
@@ -42,11 +40,11 @@
     var d = findElement.class_('D');
     var e = findElement.class_('E');
 
-    var typeA = interfaceTypeStar(a);
-    var typeB = interfaceTypeStar(b);
-    var typeC = interfaceTypeStar(c);
-    var typeD = interfaceTypeStar(d);
-    var typeE = interfaceTypeStar(e);
+    var typeA = interfaceTypeNone(a);
+    var typeB = interfaceTypeNone(b);
+    var typeC = interfaceTypeNone(c);
+    var typeD = interfaceTypeNone(d);
+    var typeE = interfaceTypeNone(e);
 
     assertElementTypes(
       findElement.class_('X1').allSupertypes,
@@ -87,16 +85,16 @@
     assertElementTypes(
       findElement.class_('X1').allSupertypes,
       [
-        interfaceTypeStar(a, typeArguments: [stringType]),
+        interfaceTypeNone(a, typeArguments: [stringType]),
         objectType
       ],
     );
     assertElementTypes(
       findElement.class_('X2').allSupertypes,
       [
-        interfaceTypeStar(b, typeArguments: [
+        interfaceTypeNone(b, typeArguments: [
           stringType,
-          interfaceTypeStar(listElement, typeArguments: [intType])
+          interfaceTypeNone(listElement, typeArguments: [intType])
         ]),
         objectType
       ],
@@ -104,8 +102,8 @@
     assertElementTypes(
       findElement.class_('X3').allSupertypes,
       [
-        interfaceTypeStar(c, typeArguments: [doubleType]),
-        interfaceTypeStar(b, typeArguments: [intType, doubleType]),
+        interfaceTypeNone(c, typeArguments: [doubleType]),
+        interfaceTypeNone(b, typeArguments: [intType, doubleType]),
         objectType
       ],
     );
@@ -129,7 +127,7 @@
     var c = findElement.class_('C');
     assertElementTypes(
       findElement.class_('X').allSupertypes,
-      [interfaceTypeStar(a), interfaceTypeStar(b), interfaceTypeStar(c)],
+      [interfaceTypeNone(a), interfaceTypeNone(b), interfaceTypeNone(c)],
     );
   }
 
@@ -155,8 +153,8 @@
     assertElementTypes(
       c.interfaces,
       [
-        interfaceTypeStar(a),
-        interfaceTypeStar(b),
+        interfaceTypeNone(a),
+        interfaceTypeNone(b),
       ],
     );
   }
@@ -175,8 +173,8 @@
     assertElementTypes(
       c.mixins,
       [
-        interfaceTypeStar(a),
-        interfaceTypeStar(b),
+        interfaceTypeNone(a),
+        interfaceTypeNone(b),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/dart/resolution/mixin_test.dart b/pkg/analyzer/test/src/dart/resolution/mixin_test.dart
index 9e23683..7c8bd6a 100644
--- a/pkg/analyzer/test/src/dart/resolution/mixin_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/mixin_test.dart
@@ -19,9 +19,7 @@
 
 @reflectiveTest
 class MixinDriverResolutionTest extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin, ElementsTypesMixin {
-  // TODO(https://github.com/dart-lang/sdk/issues/44666): Use null safety in
-  //  test cases.
+    with ElementsTypesMixin {
   test_accessor_getter() async {
     await assertNoErrorsInCode(r'''
 mixin M {
@@ -96,7 +94,7 @@
     var mElement = findElement.mixin('M');
 
     var aElement = findElement.class_('A');
-    assertElementTypes(aElement.mixins, [interfaceTypeStar(mElement)]);
+    assertElementTypes(aElement.mixins, [interfaceTypeNone(mElement)]);
 
     var mRef = findNode.typeName('M {} // A');
     assertTypeName(mRef, mElement, 'M');
@@ -111,7 +109,7 @@
     var mElement = findElement.mixin('M');
 
     var aElement = findElement.class_('A');
-    assertElementTypes(aElement.mixins, [interfaceTypeStar(mElement)]);
+    assertElementTypes(aElement.mixins, [interfaceTypeNone(mElement)]);
 
     var mRef = findNode.typeName('M;');
     assertTypeName(mRef, mElement, 'M');
@@ -168,15 +166,15 @@
     var c = findElement.class_('C');
     assertElementTypes(
       findElement.mixin('M1').allSupertypes,
-      [interfaceTypeStar(a), interfaceTypeStar(b), objectType],
+      [interfaceTypeNone(a), interfaceTypeNone(b), objectType],
     );
     assertElementTypes(
       findElement.mixin('M2').allSupertypes,
       [
-        interfaceTypeStar(a),
+        interfaceTypeNone(a),
         objectType,
-        interfaceTypeStar(b),
-        interfaceTypeStar(c)
+        interfaceTypeNone(b),
+        interfaceTypeNone(c)
       ],
     );
   }
@@ -195,15 +193,15 @@
     assertElementTypes(
       findElement.mixin('M1').allSupertypes,
       [
-        interfaceTypeStar(a, typeArguments: [intType, doubleType]),
+        interfaceTypeNone(a, typeArguments: [intType, doubleType]),
         objectType
       ],
     );
     assertElementTypes(
       findElement.mixin('M2').allSupertypes,
       [
-        interfaceTypeStar(b, typeArguments: [stringType]),
-        interfaceTypeStar(a, typeArguments: [intType, stringType]),
+        interfaceTypeNone(b, typeArguments: [stringType]),
+        interfaceTypeNone(a, typeArguments: [intType, stringType]),
         objectType
       ],
     );
@@ -325,7 +323,7 @@
     var randomElement = mathImport.importedLibrary!.getType('Random')!;
 
     var element = findElement.mixin('M');
-    assertElementTypes(element.interfaces, [interfaceTypeStar(randomElement)]);
+    assertElementTypes(element.interfaces, [interfaceTypeNone(randomElement)]);
 
     var typeRef = findNode.typeName('Random {}');
     assertTypeName(typeRef, randomElement, 'Random',
@@ -413,15 +411,15 @@
   test_error_mixinApplicationConcreteSuperInvokedMemberType_method() async {
     await assertErrorsInCode(r'''
 class I {
-  void foo([int p]) {}
+  void foo([int? p]) {}
 }
 
 class A {
-  void foo(int p) {}
+  void foo(int? p) {}
 }
 
 abstract class B extends A implements I {
-  void foo([int p]);
+  void foo([int? p]);
 }
 
 mixin M on I {
@@ -435,7 +433,7 @@
       error(
           CompileTimeErrorCode
               .MIXIN_APPLICATION_CONCRETE_SUPER_INVOKED_MEMBER_TYPE,
-          224,
+          227,
           1),
     ]);
   }
@@ -447,7 +445,7 @@
 }
 
 mixin M<U> on A<U> {
-  void remove(Object x) {
+  void remove(Object? x) {
     super.remove(x as U);
   }
 }
@@ -858,7 +856,7 @@
 
     var element = findElement.mixin('M');
     assertElementTypes(element.superclassConstraints, [
-      interfaceTypeStar(randomElement),
+      interfaceTypeNone(randomElement),
     ]);
 
     var typeRef = findNode.typeName('Random {}');
@@ -937,7 +935,7 @@
     var a = findElement.mixin('A');
     var b = findElement.mixin('B');
     assertElementTypes(b.superclassConstraints, [
-      interfaceTypeStar(a),
+      interfaceTypeNone(a),
     ]);
   }
 
@@ -972,7 +970,7 @@
   test_field() async {
     await assertNoErrorsInCode(r'''
 mixin M<T> {
-  T f;
+  late T f;
 }
 ''');
 
@@ -992,7 +990,7 @@
     expect(fields, hasLength(1));
 
     var fElement = fields[0];
-    assertElementName(fElement, 'f', offset: 17);
+    assertElementName(fElement, 'f', offset: 22);
     assertEnclosingElement(fElement, element);
 
     var fNode = findNode.variableDeclaration('f;');
@@ -1018,11 +1016,11 @@
     assertElementTypes(element.interfaces, [
       findElement.class_('A').instantiate(
         typeArguments: const [],
-        nullabilitySuffix: NullabilitySuffix.star,
+        nullabilitySuffix: NullabilitySuffix.none,
       ),
       findElement.class_('B').instantiate(
         typeArguments: const [],
-        nullabilitySuffix: NullabilitySuffix.star,
+        nullabilitySuffix: NullabilitySuffix.none,
       ),
     ]);
 
@@ -1089,19 +1087,17 @@
 
   test_methodCallTypeInference_mixinType() async {
     await assertErrorsInCode('''
-main() {
+g(M<T> f<T>()) {
   C<int> c = f();
 }
 
 class C<T> {}
 
 mixin M<T> on C<T> {}
-
-M<T> f<T>() => null;
 ''', [
-      error(HintCode.UNUSED_LOCAL_VARIABLE, 18, 1),
+      error(HintCode.UNUSED_LOCAL_VARIABLE, 26, 1),
     ]);
-    var fInvocation = findNode.methodInvocation('f()');
+    var fInvocation = findNode.functionExpressionInvocation('f()');
     assertInvokeType(fInvocation, 'M<int> Function()');
   }
 
@@ -1117,11 +1113,11 @@
     assertElementTypes(element.superclassConstraints, [
       findElement.class_('A').instantiate(
         typeArguments: const [],
-        nullabilitySuffix: NullabilitySuffix.star,
+        nullabilitySuffix: NullabilitySuffix.none,
       ),
       findElement.class_('B').instantiate(
         typeArguments: const [],
-        nullabilitySuffix: NullabilitySuffix.star,
+        nullabilitySuffix: NullabilitySuffix.none,
       ),
     ]);
 
