diff --git a/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart b/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart
index a054ace..1d36b9f 100644
--- a/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart
@@ -170,8 +170,8 @@
       List<NamedTypeBuilder> newTypes,
       SourceLibraryBuilder contextLibrary,
       TypeParameterScopeBuilder contextDeclaration) {
-    // TODO(dmitryas):  It's not clear how [metadata] is used currently, and
-    // how it should be cloned.  Consider cloning it instead of reusing it.
+    // TODO(cstefantsova):  It's not clear how [metadata] is used currently,
+    // and how it should be cloned.  Consider cloning it instead of reusing it.
     return new FunctionTypeParameterBuilder(metadata, kind,
         type?.clone(newTypes, contextLibrary, contextDeclaration), name);
   }
@@ -285,8 +285,8 @@
       List<NamedTypeBuilder> newTypes,
       SourceLibraryBuilder contextLibrary,
       TypeParameterScopeBuilder contextDeclaration) {
-    // TODO(dmitryas):  It's not clear how [metadata] is used currently, and
-    // how it should be cloned.  Consider cloning it instead of reusing it.
+    // TODO(cstefantsova):  It's not clear how [metadata] is used currently,
+    // and how it should be cloned.  Consider cloning it instead of reusing it.
     return new FunctionTypeParameterBuilder(metadata, kind,
         type?.clone(newTypes, contextLibrary, contextDeclaration), name);
   }
diff --git a/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart b/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart
index 1c68cb6..f4f08fe 100644
--- a/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart
@@ -433,8 +433,8 @@
         // Even though Null is disallowed as a supertype, ClassHierarchyBuilder
         // still expects it to be built to the respective InterfaceType
         // referencing the deprecated class.
-        // TODO(dmitryas): Remove the dependency on the deprecated Null class
-        // from ClassHierarchyBuilder.
+        // TODO(cstefantsova): Remove the dependency on the deprecated Null
+        // class from ClassHierarchyBuilder.
         TypeDeclarationBuilder? unaliasedDeclaration = this.declaration;
         // The following code assumes that the declaration is a TypeAliasBuilder
         // that through a chain of other TypeAliasBuilders (possibly, the chain
@@ -454,7 +454,7 @@
         // InterfaceType referencing the deprecated class.  In contrast with
         // Null, it doesn't surface as an error due to FutureOr class not having
         // any inheritable members.
-        // TODO(dmitryas): Remove the dependency on the deprecated FutureOr
+        // TODO(cstefantsova): Remove the dependency on the deprecated FutureOr
         // class from ClassHierarchyBuilder.
         TypeDeclarationBuilder? unaliasedDeclaration = this.declaration;
         // The following code assumes that the declaration is a TypeAliasBuilder
diff --git a/pkg/front_end/lib/src/fasta/builder/type_variable_builder.dart b/pkg/front_end/lib/src/fasta/builder/type_variable_builder.dart
index e999e89..30b4631 100644
--- a/pkg/front_end/lib/src/fasta/builder/type_variable_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/type_variable_builder.dart
@@ -208,9 +208,9 @@
       List<NamedTypeBuilder> newTypes,
       SourceLibraryBuilder contextLibrary,
       TypeParameterScopeBuilder contextDeclaration) {
-    // TODO(dmitryas): Figure out if using [charOffset] here is a good idea.
-    // An alternative is to use the offset of the node the cloned type variable
-    // is declared on.
+    // TODO(cstefantsova): Figure out if using [charOffset] here is a good
+    // idea.  An alternative is to use the offset of the node the cloned type
+    // variable is declared on.
     return new TypeVariableBuilder(name, parent!, charOffset, fileUri,
         bound: bound?.clone(newTypes, contextLibrary, contextDeclaration),
         variableVariance: variance,
diff --git a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
index f7b6898..a08f24f 100644
--- a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
@@ -2369,7 +2369,7 @@
 
       mapEntryClass ??=
           inferrer.coreTypes.index.getClass('dart:core', 'MapEntry');
-      // TODO(dmitryas):  Handle the case of an ambiguous Set.
+      // TODO(cstefantsova):  Handle the case of an ambiguous Set.
       entry.entryType = new InterfaceType(
           mapEntryClass!,
           inferrer.libraryBuilder.nonNullable,
@@ -6929,7 +6929,7 @@
   @override
   ExpressionInferenceResult visitCheckLibraryIsLoaded(
       CheckLibraryIsLoaded node, DartType typeContext) {
-    // TODO(dmitryas): Figure out the suitable nullability for that.
+    // TODO(cstefantsova): Figure out the suitable nullability for that.
     return new ExpressionInferenceResult(
         inferrer.coreTypes.objectRawType(inferrer.libraryBuilder.nullable),
         node);
diff --git a/pkg/front_end/lib/src/fasta/kernel/invalid_type.dart b/pkg/front_end/lib/src/fasta/kernel/invalid_type.dart
index be667a7..0d49a4e 100644
--- a/pkg/front_end/lib/src/fasta/kernel/invalid_type.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/invalid_type.dart
@@ -80,7 +80,7 @@
     if (node.returnType.accept1(this, visitedTypedefs)) return true;
     for (TypeParameter typeParameter in node.typeParameters) {
       if (typeParameter.bound.accept1(this, visitedTypedefs)) return true;
-      // TODO(dmitryas): Check defaultTypes as well if they cause cascading
+      // TODO(cstefantsova): Check defaultTypes as well if they cause cascading
       // errors.
     }
     for (DartType parameter in node.positionalParameters) {
diff --git a/pkg/front_end/lib/src/fasta/kernel/type_algorithms.dart b/pkg/front_end/lib/src/fasta/kernel/type_algorithms.dart
index 1992464..66268af 100644
--- a/pkg/front_end/lib/src/fasta/kernel/type_algorithms.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/type_algorithms.dart
@@ -1064,7 +1064,7 @@
     }
 
     TypeDeclarationBuilder? declaration = type.declaration;
-    // TODO(dmitryas): Unalias beyond the first layer for the check.
+    // TODO(cstefantsova): Unalias beyond the first layer for the check.
     if (declaration is TypeAliasBuilder) {
       TypeBuilder? rhsType = declaration.type;
       if (rhsType is FunctionTypeBuilder &&
diff --git a/pkg/front_end/lib/src/fasta/kernel/verifier.dart b/pkg/front_end/lib/src/fasta/kernel/verifier.dart
index 3c825f6..acdf960 100644
--- a/pkg/front_end/lib/src/fasta/kernel/verifier.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/verifier.dart
@@ -283,8 +283,8 @@
     enterTreeNode(node);
     fileUri = checkLocation(node, node.name.text, node.fileUri);
 
-    // TODO(dmitryas): Investigate why some redirecting factory bodies retain
-    // the shape, but aren't of the RedirectingFactoryBody type.
+    // TODO(cstefantsova): Investigate why some redirecting factory bodies
+    // retain the shape, but aren't of the RedirectingFactoryBody type.
     bool hasBody = isRedirectingFactory(node) ||
         RedirectingFactoryBody.hasRedirectingFactoryBodyShape(node);
     bool hasFlag = node.isRedirectingFactory;
@@ -341,7 +341,7 @@
     // Don't check cases like foo(x as{TypeError} T).  In cases where foo comes
     // from a library with a different opt-in status than the current library,
     // the check may not be necessary.  For now, just skip all type-error casts.
-    // TODO(dmitryas): Implement a more precise analysis.
+    // TODO(cstefantsova): Implement a more precise analysis.
     bool isFromAnotherLibrary = remoteContext != null || isTypeCast;
 
     // Checking for non-legacy types in opt-out libraries.
@@ -352,7 +352,8 @@
           node is InvalidType ||
           node is NeverType ||
           node is BottomType;
-      // TODO(dmitryas): Consider checking types coming from other libraries.
+      // TODO(cstefantsova): Consider checking types coming from other
+      // libraries.
       bool expectedLegacy = !isFromAnotherLibrary &&
           !currentLibrary.isNonNullableByDefault &&
           !neverLegacy;
@@ -367,7 +368,8 @@
     {
       Nullability nodeNullability =
           node is InvalidType ? Nullability.undetermined : node.nullability;
-      // TODO(dmitryas): Consider checking types coming from other libraries.
+      // TODO(cstefantsova): Consider checking types coming from other
+      // libraries.
       if (!isFromAnotherLibrary &&
           currentLibrary.isNonNullableByDefault &&
           nodeNullability == Nullability.legacy) {
diff --git a/pkg/front_end/lib/src/fasta/source/outline_builder.dart b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
index 17173a4..050fb51 100644
--- a/pkg/front_end/lib/src/fasta/source/outline_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
@@ -2641,7 +2641,7 @@
       libraryBuilder.beginNestedDeclaration(
           TypeParameterScopeKind.functionType, "#function_type",
           hasMembers: false);
-      // TODO(dmitryas): Make sure that RHS of typedefs can't have '?'.
+      // TODO(cstefantsova): Make sure that RHS of typedefs can't have '?'.
       aliasedType = libraryBuilder.addFunctionType(returnType, null, formals,
           const NullabilityBuilder.omitted(), uri, charOffset);
     } else {
diff --git a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
index 56607a6..51bf903 100644
--- a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
@@ -186,7 +186,7 @@
 
   // List of types inferred in the outline.  Errors in these should be reported
   // differently than for specified types.
-  // TODO(dmitryas):  Find a way to mark inferred types.
+  // TODO(cstefantsova):  Find a way to mark inferred types.
   final Set<DartType> inferredTypes = new Set<DartType>.identity();
 
   // While the bounds of type parameters aren't compiled yet, we can't tell the
@@ -1566,8 +1566,8 @@
 
   @override
   void addSyntheticDeclarationOfNull() {
-    // TODO(dmitryas): Uncomment the following when the Null class is removed
-    // from the SDK.
+    // TODO(cstefantsova): Uncomment the following when the Null class is
+    // removed from the SDK.
     //addBuilder("Null", new NullTypeBuilder(const NullType(), this, -1), -1);
   }
 
@@ -3561,7 +3561,7 @@
     bool isAliasedGenericFunctionType = false;
     if (bound is NamedTypeBuilder) {
       TypeDeclarationBuilder? declaration = bound.declaration;
-      // TODO(dmitryas): Unalias beyond the first layer for the check.
+      // TODO(cstefantsova): Unalias beyond the first layer for the check.
       if (declaration is TypeAliasBuilder) {
         TypeBuilder? rhsType = declaration.type;
         if (rhsType is FunctionTypeBuilder &&
@@ -4416,7 +4416,7 @@
     } else {
       return;
     }
-    // TODO(dmitryas): Find a better way than relying on [interfaceTarget].
+    // TODO(cstefantsova): Find a better way than relying on [interfaceTarget].
     Member? method =
         hierarchy.getDispatchTarget(klass, name) ?? interfaceTarget;
     // ignore: unnecessary_null_comparison
@@ -4602,13 +4602,13 @@
             extensionBuilder.extension.showHideClause ??
                 new ExtensionTypeShowHideClause();
 
-        // TODO(dmitryas): Handle private names.
+        // TODO(cstefantsova): Handle private names.
         List<Supertype> supertypes = membersBuilder.hierarchyBuilder
             .getNodeFromClass(onType.classNode)
             .superclasses;
         Map<String, Supertype> supertypesByName = <String, Supertype>{};
         for (Supertype supertype in supertypes) {
-          // TODO(dmitryas): Should only non-generic supertypes be allowed?
+          // TODO(cstefantsova): Should only non-generic supertypes be allowed?
           supertypesByName[supertype.classNode.name] = supertype;
         }
 
@@ -4636,12 +4636,12 @@
               if (setableMember.setterReference != null) {
                 showHideClause.shownSetters.add(setableMember.setterReference!);
               } else {
-                // TODO(dmitryas): Report an error.
+                // TODO(cstefantsova): Report an error.
               }
             } else if (setableMember.hasSetter) {
               showHideClause.shownSetters.add(setableMember.reference);
             } else {
-              // TODO(dmitryas): Report an error.
+              // TODO(cstefantsova): Report an error.
             }
           }
           if (getableMember == null && setableMember == null) {
@@ -4649,7 +4649,7 @@
               showHideClause.shownSupertypes
                   .add(supertypesByName[memberOrTypeName]!);
             } else {
-              // TODO(dmitryas): Report an error.
+              // TODO(cstefantsova): Report an error.
             }
           }
         }
@@ -4663,10 +4663,10 @@
             } else if (member.hasGetter) {
               showHideClause.shownGetters.add(member.reference);
             } else {
-              // TODO(dmitryas): Handle the erroneous case.
+              // TODO(cstefantsova): Handle the erroneous case.
             }
           } else {
-            // TODO(dmitryas): Handle the erroneous case.
+            // TODO(cstefantsova): Handle the erroneous case.
           }
         }
         for (String setterName in extensionBuilder
@@ -4679,15 +4679,15 @@
               if (member.setterReference != null) {
                 showHideClause.shownSetters.add(member.setterReference!);
               } else {
-                // TODO(dmitryas): Report an error.
+                // TODO(cstefantsova): Report an error.
               }
             } else if (member.hasSetter) {
               showHideClause.shownSetters.add(member.reference);
             } else {
-              // TODO(dmitryas): Report an error.
+              // TODO(cstefantsova): Report an error.
             }
           } else {
-            // TODO(dmitryas): Search for a non-setter and report an error.
+            // TODO(cstefantsova): Search for a non-setter and report an error.
           }
         }
         for (Operator operator in extensionBuilder
@@ -4697,11 +4697,11 @@
           if (member != null) {
             showHideClause.shownOperators.add(member.reference);
           } else {
-            // TODO(dmitryas): Handle the erroneous case.
+            // TODO(cstefantsova): Handle the erroneous case.
           }
         }
 
-        // TODO(dmitryas): Add a helper function to share logic between
+        // TODO(cstefantsova): Add a helper function to share logic between
         // handling the 'show' and 'hide' parts.
 
         // Handling elements of the 'hide' clause.
@@ -4729,12 +4729,12 @@
                 showHideClause.hiddenSetters
                     .add(setableMember.setterReference!);
               } else {
-                // TODO(dmitryas): Report an error.
+                // TODO(cstefantsova): Report an error.
               }
             } else if (setableMember.hasSetter) {
               showHideClause.hiddenSetters.add(setableMember.reference);
             } else {
-              // TODO(dmitryas): Report an error.
+              // TODO(cstefantsova): Report an error.
             }
           }
           if (getableMember == null && setableMember == null) {
@@ -4742,7 +4742,7 @@
               showHideClause.hiddenSupertypes
                   .add(supertypesByName[memberOrTypeName]!);
             } else {
-              // TODO(dmitryas): Report an error.
+              // TODO(cstefantsova): Report an error.
             }
           }
         }
@@ -4756,10 +4756,10 @@
             } else if (member.hasGetter) {
               showHideClause.hiddenGetters.add(member.reference);
             } else {
-              // TODO(dmitryas): Handle the erroneous case.
+              // TODO(cstefantsova): Handle the erroneous case.
             }
           } else {
-            // TODO(dmitryas): Handle the erroneous case.
+            // TODO(cstefantsova): Handle the erroneous case.
           }
         }
         for (String setterName in extensionBuilder
@@ -4772,15 +4772,15 @@
               if (member.setterReference != null) {
                 showHideClause.hiddenSetters.add(member.setterReference!);
               } else {
-                // TODO(dmitryas): Report an error.
+                // TODO(cstefantsova): Report an error.
               }
             } else if (member.hasSetter) {
               showHideClause.hiddenSetters.add(member.reference);
             } else {
-              // TODO(dmitryas): Report an error.
+              // TODO(cstefantsova): Report an error.
             }
           } else {
-            // TODO(dmitryas): Search for a non-setter and report an error.
+            // TODO(cstefantsova): Search for a non-setter and report an error.
           }
         }
         for (Operator operator in extensionBuilder
@@ -4790,7 +4790,7 @@
           if (member != null) {
             showHideClause.hiddenOperators.add(member.reference);
           } else {
-            // TODO(dmitryas): Handle the erroneous case.
+            // TODO(cstefantsova): Handle the erroneous case.
           }
         }
 
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart
index 0327d2c..4b3e3c3 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart
@@ -289,7 +289,7 @@
     return typeEnvironment.coreTypes.isBottom(type);
   }
 
-  // TODO(dmitryas): Consider checking for mutual subtypes instead of ==.
+  // TODO(cstefantsova): Consider checking for mutual subtypes instead of ==.
   @override
   bool isSameType(DartType type1, DartType type2) => type1 == type2;
 
diff --git a/pkg/front_end/test/fasta/type_inference/type_schema_environment_nnbd_test.dart b/pkg/front_end/test/fasta/type_inference/type_schema_environment_nnbd_test.dart
index df6740e..8e9540a 100644
--- a/pkg/front_end/test/fasta/type_inference/type_schema_environment_nnbd_test.dart
+++ b/pkg/front_end/test/fasta/type_inference/type_schema_environment_nnbd_test.dart
@@ -67,7 +67,7 @@
       class C extends A;
     """);
 
-    // TODO(dmitryas): Test for various nullabilities.
+    // TODO(cstefantsova): Test for various nullabilities.
 
     // typeConstraint: EMPTY <: TYPE <: EMPTY
     checkConstraintLowerBound(constraint: "", bound: "UNKNOWN");
@@ -87,7 +87,7 @@
       class C extends A;
     """);
 
-    // TODO(dmitryas): Test for various nullabilities.
+    // TODO(cstefantsova): Test for various nullabilities.
 
     // typeConstraint: EMPTY <: TYPE <: EMPTY
     checkConstraintUpperBound(constraint: "", bound: "UNKNOWN");
@@ -416,7 +416,7 @@
       class B extends A;
     """);
 
-    // TODO(dmitryas): Test for various nullabilities.
+    // TODO(cstefantsova): Test for various nullabilities.
     checkLowerBound(
         type1: "() ->* A*", type2: "() ->* B*", lowerBound: "() ->* B*");
     checkLowerBound(
@@ -585,7 +585,7 @@
   void test_lower_bound_top() {
     parseTestLibrary("class A;");
 
-    // TODO(dmitryas): Test for various nullabilities.
+    // TODO(cstefantsova): Test for various nullabilities.
     checkLowerBound(type1: "dynamic", type2: "A*", lowerBound: "A*");
     checkLowerBound(type1: "A*", type2: "dynamic", lowerBound: "A*");
     checkLowerBound(type1: "Object?", type2: "A*", lowerBound: "A*");
@@ -667,7 +667,7 @@
   void test_inferGenericFunctionOrType() {
     parseTestLibrary("");
 
-    // TODO(dmitryas): Test for various nullabilities.
+    // TODO(cstefantsova): Test for various nullabilities.
 
     // Test an instantiation of [1, 2.0] with no context.  This should infer
     // as List<?> during downwards inference.
@@ -742,7 +742,7 @@
 
     // Assuming: class A<T extends num*> {}
 
-    // TODO(dmitryas): Test for various nullabilities.
+    // TODO(cstefantsova): Test for various nullabilities.
 
     // With no constraints:
     // Downward inference should infer A<?>
@@ -786,7 +786,7 @@
   void test_inferTypeFromConstraints_simple() {
     parseTestLibrary("");
 
-    // TODO(dmitryas): Test for various nullabilities.
+    // TODO(cstefantsova): Test for various nullabilities.
 
     // With an upper bound of List<?>*:
     // Downwards inference should infer List<List<?>*>*
@@ -824,7 +824,7 @@
       class L implements K;
     """);
 
-    // TODO(dmitryas): Test for various nullabilities.
+    // TODO(cstefantsova): Test for various nullabilities.
     checkUpperBound(type1: "B*", type2: "E*", upperBound: "B*");
     checkUpperBound(type1: "D*", type2: "C*", upperBound: "C*");
     checkUpperBound(type1: "D*", type2: "E*", upperBound: "A*");
@@ -1297,7 +1297,7 @@
   void test_upper_bound_typeParameter() {
     parseTestLibrary("");
 
-    // TODO(dmitryas): Test for various nullabilities.
+    // TODO(cstefantsova): Test for various nullabilities.
     checkUpperBound(
         type1: "T",
         type2: "T",
@@ -1396,7 +1396,7 @@
       class B<Y> extends A<Y>;
     """);
 
-    // TODO(dmitryas): Test for various nullabilities.
+    // TODO(cstefantsova): Test for various nullabilities.
 
     // Solve(? <: T <: ?) => ?
     checkConstraintSolving("", "UNKNOWN", grounded: false);
@@ -1488,7 +1488,7 @@
   void test_unknown_at_bottom() {
     parseTestLibrary("class A;");
 
-    // TODO(dmitryas): Test for various nullabilities.
+    // TODO(cstefantsova): Test for various nullabilities.
     checkIsLegacySubtype("UNKNOWN", "A*");
   }
 
diff --git a/pkg/front_end/test/fasta/types/shared_type_tests.dart b/pkg/front_end/test/fasta/types/shared_type_tests.dart
index fc0b9b8..bf82544 100644
--- a/pkg/front_end/test/fasta/types/shared_type_tests.dart
+++ b/pkg/front_end/test/fasta/types/shared_type_tests.dart
@@ -108,8 +108,8 @@
 
     isSubtype('List<int>', 'List<int*>');
     isSubtype('List<int>', 'List<int?>');
-    // TODO(dmitryas):  Uncomment the following when type arguments are allowed
-    // to be intersection types.
+    // TODO(cstefantsova):  Uncomment the following when type arguments are
+    // allowed to be intersection types.
 //    isSubtype('List<X & int>', 'List<X>',
 //    typeParameters: 'X extends Object?');
     isSubtype('List<int*>', 'List<int>');
@@ -118,8 +118,8 @@
     isObliviousSubtype('List<int?>', 'List<int>');
     isSubtype('List<int?>', 'List<int*>');
     isSubtype('List<int?>', 'List<int?>');
-    // TODO(dmitryas):  Uncomment the following when type arguments are allowed
-    // to be intersection types.
+    // TODO(cstefantsova):  Uncomment the following when type arguments are
+    // allowed to be intersection types.
 //    isSubtype('List<X & int?>', 'List<X>',
 //    typeParameters: 'X extends Object?');
 
@@ -910,8 +910,8 @@
 
     isNotSubtype('FutureOr<T & String*>*', 'T & String*', typeParameters: 'T');
 
-    // TODO(dmitryas): Uncomment the following when type arguments are allowed
-    // to be intersection types.
+    // TODO(cstefantsova): Uncomment the following when type arguments are
+    // allowed to be intersection types.
 //    isSubtype('Id<T* & String*>*', 'T* & String*',
 //        typeParameters: 'T extends Object*');
 //    isSubtype('Id<T & String>', 'T & String',
diff --git a/pkg/front_end/test/spell_checking_list_code.txt b/pkg/front_end/test/spell_checking_list_code.txt
index 80753e6..88a7263 100644
--- a/pkg/front_end/test/spell_checking_list_code.txt
+++ b/pkg/front_end/test/spell_checking_list_code.txt
@@ -365,7 +365,6 @@
 distribute
 diverged
 divided
-dmitryas
 doc
 docs
 doesn\'t
diff --git a/pkg/kernel/lib/ast.dart b/pkg/kernel/lib/ast.dart
index c98194e..64e0e20 100644
--- a/pkg/kernel/lib/ast.dart
+++ b/pkg/kernel/lib/ast.dart
@@ -6406,10 +6406,11 @@
     }
   }
 
-  // TODO(dmitryas): Change the getter into a method that accepts a CoreTypes.
+  // TODO(cstefantsova): Change the getter into a method that accepts a
+  // CoreTypes.
   InterfaceType get constructedType {
     Class enclosingClass = target.enclosingClass;
-    // TODO(dmitryas): Get raw type from a CoreTypes object if arguments is
+    // TODO(cstefantsova): Get raw type from a CoreTypes object if arguments is
     // empty.
     return arguments.types.isEmpty
         ? new InterfaceType(
@@ -10653,8 +10654,8 @@
   Library get library => libraryName.asLibrary;
 
   static int _computeHashCode(String name, Reference libraryName) {
-    // TODO(dmitryas): Factor in [libraryName] in a non-deterministic way into
-    // the result.  Note, the previous code here was the following:
+    // TODO(cstefantsova): Factor in [libraryName] in a non-deterministic way
+    // into the result.  Note, the previous code here was the following:
     //     return 131 * name.hashCode + 17 * libraryName.asLibrary._libraryId;
     return name.hashCode;
   }
@@ -10843,13 +10844,15 @@
 
   @override
   Nullability get declaredNullability {
-    // TODO(johnniwinther,dmitryas): Consider implementing invalidNullability.
+    // TODO(johnniwinther,cstefantsova): Consider implementing
+    // invalidNullability.
     return Nullability.legacy;
   }
 
   @override
   Nullability get nullability {
-    // TODO(johnniwinther,dmitryas): Consider implementing invalidNullability.
+    // TODO(johnniwinther,cstefantsova): Consider implementing
+    // invalidNullability.
     return Nullability.legacy;
   }
 
@@ -11413,7 +11416,7 @@
 
   Typedef get typedefNode => typedefReference.asTypedef;
 
-  // TODO(dmitryas): Replace with uniteNullabilities(declaredNullability,
+  // TODO(cstefantsova): Replace with uniteNullabilities(declaredNullability,
   // typedefNode.type.nullability).
   @override
   Nullability get nullability => declaredNullability;
diff --git a/pkg/kernel/lib/binary/ast_to_binary.dart b/pkg/kernel/lib/binary/ast_to_binary.dart
index c048177..32995cb 100644
--- a/pkg/kernel/lib/binary/ast_to_binary.dart
+++ b/pkg/kernel/lib/binary/ast_to_binary.dart
@@ -2327,14 +2327,14 @@
 
   @override
   void visitExtensionType(ExtensionType node) {
-    // TODO(dmitryas): Serialize ExtensionType.
+    // TODO(cstefantsova): Serialize ExtensionType.
     node.onType.accept(this);
   }
 
   @override
   void visitFutureOrType(FutureOrType node) {
-    // TODO(dmitryas): Remove special treatment of FutureOr when the VM supports
-    // the new encoding: just write the tag.
+    // TODO(cstefantsova): Remove special treatment of FutureOr when the VM
+    // supports the new encoding: just write the tag.
     assert(_knownCanonicalNameNonRootTops.isNotEmpty);
     CanonicalName root = _knownCanonicalNameNonRootTops.first;
     while (!root.isRoot) {
@@ -2352,8 +2352,8 @@
 
   @override
   void visitNullType(NullType node) {
-    // TODO(dmitryas): Remove special treatment of Null when the VM supports the
-    // new encoding: just write the tag.
+    // TODO(cstefantsova): Remove special treatment of Null when the VM
+    // supports the new encoding: just write the tag.
     assert(_knownCanonicalNameNonRootTops.isNotEmpty);
     CanonicalName root = _knownCanonicalNameNonRootTops.first;
     while (!root.isRoot) {
diff --git a/pkg/kernel/lib/core_types.dart b/pkg/kernel/lib/core_types.dart
index 04f3cee..4b5adb2 100644
--- a/pkg/kernel/lib/core_types.dart
+++ b/pkg/kernel/lib/core_types.dart
@@ -181,7 +181,7 @@
   late final Procedure futureSyncFactory =
       index.getMember('dart:async', 'Future', 'sync') as Procedure;
 
-  // TODO(dmitryas): Remove it when FutureOrType is fully supported.
+  // TODO(cstefantsova): Remove it when FutureOrType is fully supported.
   late final Class deprecatedFutureOrClass =
       index.getClass('dart:async', 'FutureOr');
 
@@ -1041,7 +1041,8 @@
   }
 
   InterfaceType legacyRawType(Class klass) {
-    // TODO(dmitryas): Consider using computeBounds instead of DynamicType here.
+    // TODO(cstefantsova): Consider using computeBounds instead of DynamicType
+    // here.
     return _legacyRawTypes[klass] ??= new InterfaceType(
         klass,
         Nullability.legacy,
@@ -1050,7 +1051,8 @@
   }
 
   InterfaceType nullableRawType(Class klass) {
-    // TODO(dmitryas): Consider using computeBounds instead of DynamicType here.
+    // TODO(cstefantsova): Consider using computeBounds instead of DynamicType
+    // here.
     return _nullableRawTypes[klass] ??= new InterfaceType(
         klass,
         Nullability.nullable,
@@ -1059,7 +1061,8 @@
   }
 
   InterfaceType nonNullableRawType(Class klass) {
-    // TODO(dmitryas): Consider using computeBounds instead of DynamicType here.
+    // TODO(cstefantsova): Consider using computeBounds instead of DynamicType
+    // here.
     return _nonNullableRawTypes[klass] ??= new InterfaceType(
         klass,
         Nullability.nonNullable,
diff --git a/pkg/kernel/lib/naive_type_checker.dart b/pkg/kernel/lib/naive_type_checker.dart
index 0f86d1c..567c642 100644
--- a/pkg/kernel/lib/naive_type_checker.dart
+++ b/pkg/kernel/lib/naive_type_checker.dart
@@ -112,7 +112,7 @@
   /// Check if [subtype] is subtype of [supertype] after applying
   /// type parameter [substitution].
   bool _isSubtypeOf(DartType subtype, DartType supertype) {
-    // TODO(dmitryas): Remove this when ExtensionType is in ast.dart.
+    // TODO(cstefantsova): Remove this when ExtensionType is in ast.dart.
     if (!_isKnownDartTypeImplementation(subtype) ||
         !_isKnownDartTypeImplementation(supertype)) {
       return true;
@@ -121,8 +121,8 @@
     if (subtype is InvalidType || supertype is InvalidType) {
       return true;
     }
-    // TODO(dmitryas): Find a way to tell the weak mode from strong mode to use
-    // [SubtypeCheckMode.withNullabilities] where necessary.
+    // TODO(cstefantsova): Find a way to tell the weak mode from strong mode to
+    // use [SubtypeCheckMode.withNullabilities] where necessary.
     return environment.isSubtypeOf(
         subtype, supertype, SubtypeCheckMode.ignoringNullabilities);
   }
diff --git a/pkg/kernel/lib/src/bounds_checks.dart b/pkg/kernel/lib/src/bounds_checks.dart
index 31bdf1c..e40aca5 100644
--- a/pkg/kernel/lib/src/bounds_checks.dart
+++ b/pkg/kernel/lib/src/bounds_checks.dart
@@ -500,8 +500,8 @@
   for (int i = 0; i < arguments.length; ++i) {
     DartType argument = arguments[i];
     if (argument is TypeParameterType && argument.promotedBound != null) {
-      // TODO(dmitryas): Consider recognizing this case with a flag on the issue
-      // object.
+      // TODO(cstefantsova): Consider recognizing this case with a flag on the
+      // issue object.
       result.add(new TypeArgumentIssue(i, argument, parameters[i], null));
     } else if (!areGenericArgumentsAllowed &&
         isGenericFunctionTypeOrAlias(argument)) {
@@ -679,8 +679,8 @@
 
   // TypedefTypes receive special treatment because the variance of their
   // arguments' positions depend on the opt-in status of the library.
-  // TODO(dmitryas): Remove the method when the discrepancy between the NNBD
-  // modes is resolved.
+  // TODO(cstefantsova): Remove the method when the discrepancy between the
+  // NNBD modes is resolved.
   @override
   DartType? visitTypedefType(TypedefType node, int variance) {
     Nullability? newNullability = visitNullability(node);
diff --git a/pkg/kernel/lib/src/dart_type_equivalence.dart b/pkg/kernel/lib/src/dart_type_equivalence.dart
index 824082d..aeea30f 100644
--- a/pkg/kernel/lib/src/dart_type_equivalence.dart
+++ b/pkg/kernel/lib/src/dart_type_equivalence.dart
@@ -7,7 +7,7 @@
 
 class DartTypeEquivalence implements DartTypeVisitor1<bool, DartType> {
   final CoreTypes coreTypes;
-  // TODO(dmitryas): Implement also equateBottomTypes.
+  // TODO(cstefantsova): Implement also equateBottomTypes.
   final bool equateTopTypes;
   final bool ignoreAllNullabilities;
   final bool ignoreTopLevelNullability;
diff --git a/pkg/kernel/lib/src/standard_bounds.dart b/pkg/kernel/lib/src/standard_bounds.dart
index 6da56b3..452fcc2 100644
--- a/pkg/kernel/lib/src/standard_bounds.dart
+++ b/pkg/kernel/lib/src/standard_bounds.dart
@@ -103,7 +103,7 @@
       return false;
     }
 
-    // TODO(dmitryas): Update the following after the spec is updated.
+    // TODO(cstefantsova): Update the following after the spec is updated.
     if (s.declaredNullability == Nullability.nullable &&
         t.declaredNullability == Nullability.legacy) {
       return true;
@@ -200,7 +200,7 @@
       return false;
     }
 
-    // TODO(dmitryas): Update the following after the spec is updated.
+    // TODO(cstefantsova): Update the following after the spec is updated.
     if (s.declaredNullability == Nullability.nullable &&
         t.declaredNullability == Nullability.legacy) {
       return true;
@@ -952,8 +952,8 @@
         }
         substitution = Substitution.fromMap(substitutionMap);
         for (int i = 0; i < m && boundsMatch; ++i) {
-          // TODO(dmitryas): Figure out if a procedure for syntactic equality
-          // should be used instead.
+          // TODO(cstefantsova): Figure out if a procedure for syntactic
+          // equality should be used instead.
           if (!areMutualSubtypes(
               f.typeParameters[i].bound,
               substitution.substituteType(g.typeParameters[i].bound),
@@ -1151,7 +1151,7 @@
         }
         substitution = Substitution.fromMap(substitutionMap);
         for (int i = 0; i < m && boundsMatch; ++i) {
-          // TODO(dmitryas): Figure out if a procedure for syntactic
+          // TODO(cstefantsova): Figure out if a procedure for syntactic
           // equality should be used instead.
           if (!areMutualSubtypes(
               f.typeParameters[i].bound,
diff --git a/pkg/kernel/lib/src/types.dart b/pkg/kernel/lib/src/types.dart
index f207418..4cfbb33 100644
--- a/pkg/kernel/lib/src/types.dart
+++ b/pkg/kernel/lib/src/types.dart
@@ -71,8 +71,8 @@
   }
 
   IsSubtypeOf performNullabilityAwareSubtypeCheck(DartType s, DartType t) {
-    // TODO(johnniwinther,dmitryas): Ensure complete handling of InvalidType in
-    // the subtype relation.
+    // TODO(johnniwinther,cstefantsova): Ensure complete handling of
+    // InvalidType in the subtype relation.
     if (s is InvalidType || t is InvalidType) {
       return const IsSubtypeOf.always();
     }
@@ -654,7 +654,8 @@
   IsSubtypeOf isIntersectionRelated(
       TypeParameterType intersection, TypeParameterType t, Types types) {
     // Nullable types aren't promoted to intersection types.
-    // TODO(dmitryas): Uncomment the following when the inference is updated.
+    // TODO(cstefantsova): Uncomment the following when the inference is
+    // updated.
     //assert(intersection.typeParameterTypeNullability != Nullability.nullable);
 
     // Rule 8.
@@ -855,7 +856,7 @@
   @override
   IsSubtypeOf isTypeParameterRelated(
       TypeParameterType s, FutureOrType t, Types types) {
-    // TODO(dmitryas): Revise the original optimization.
+    // TODO(cstefantsova): Revise the original optimization.
     return types
         // Rule 11.
         .performNullabilityAwareSubtypeCheck(
@@ -1128,7 +1129,8 @@
     if (s.extension != t.extension) {
       return const IsSubtypeOf.never();
     }
-    // TODO(dmitryas): Check if subtyping or mutual subtyping should be used.
+    // TODO(cstefantsova): Check if subtyping or mutual subtyping should be
+    // used.
     return types
         .areTypeArgumentsOfSubtypeKernel(
             s.typeArguments, t.typeArguments, t.extension.typeParameters)
diff --git a/pkg/kernel/lib/text/serializer_combinators.dart b/pkg/kernel/lib/text/serializer_combinators.dart
index b187beb..7eed26a 100644
--- a/pkg/kernel/lib/text/serializer_combinators.dart
+++ b/pkg/kernel/lib/text/serializer_combinators.dart
@@ -35,7 +35,8 @@
     return binders[distinctName] = node;
   }
 
-  // TODO(dmitryas): Consider combining with [addBinder] into a single method.
+  // TODO(cstefantsova): Consider combining with [addBinder] into a single
+  // method.
   void extend() {
     locals.addAll(binders);
     binders.clear();
@@ -98,7 +99,8 @@
     return binders[node] = distinctName;
   }
 
-  // TODO(dmitryas): Consider combining with [addBinder] into a single method.
+  // TODO(cstefantsova): Consider combining with [addBinder] into a single
+  // method.
   void extend() {
     locals.addAll(binders);
     binders.clear();
diff --git a/pkg/kernel/lib/text/text_serializer.dart b/pkg/kernel/lib/text/text_serializer.dart
index 0a38ec2..b4b62b7 100644
--- a/pkg/kernel/lib/text/text_serializer.dart
+++ b/pkg/kernel/lib/text/text_serializer.dart
@@ -1397,7 +1397,7 @@
 
 NeverType wrapNeverType(void ignored) => const NeverType.legacy();
 
-// TODO(dmitryas):  Also handle nameParameters, and typedefType.
+// TODO(cstefantsova):  Also handle nameParameters, and typedefType.
 TextSerializer<FunctionType> functionTypeSerializer = new Wrapped<
         Tuple2<List<TypeParameter>,
             Tuple4<List<DartType>, List<DartType>, List<NamedType>, DartType>>,
diff --git a/pkg/kernel/lib/transformations/scanner.dart b/pkg/kernel/lib/transformations/scanner.dart
index 9148fa7..94bf00d 100644
--- a/pkg/kernel/lib/transformations/scanner.dart
+++ b/pkg/kernel/lib/transformations/scanner.dart
@@ -39,8 +39,8 @@
     if (node is Class) {
       if (predicate(node)) {
         result.targets[node] = next?.scan(node);
-        // TODO(dmitryas): set result.errors when specification is landed,
-        //  same with all other places where targets is set
+        // TODO(cstefantsova): set result.errors when specification is landed,
+        // same with all other places where targets is set
       }
     } else if (node is Library) {
       _scanLibrary(node, result);
diff --git a/pkg/kernel/lib/type_algebra.dart b/pkg/kernel/lib/type_algebra.dart
index af4b1d0..7afdf2d 100644
--- a/pkg/kernel/lib/type_algebra.dart
+++ b/pkg/kernel/lib/type_algebra.dart
@@ -1078,7 +1078,7 @@
 ///
 /// Some types are nullable even without the application of the nullable type
 /// constructor at the top level, for example, Null or FutureOr<int?>.
-// TODO(dmitryas): Remove [coreTypes] parameter when NullType is landed.
+// TODO(cstefantsova): Remove [coreTypes] parameter when NullType is landed.
 DartType unwrapNullabilityConstructor(DartType type, CoreTypes coreTypes) {
   return type.accept1(const _NullabilityConstructorUnwrapper(), coreTypes);
 }
@@ -1087,7 +1087,7 @@
 ///
 /// Implementing the function as a visitor makes the necessity of supporting a
 /// new implementation of [DartType] visible at compile time.
-// TODO(dmitryas): Remove CoreTypes as the second argument when NullType is
+// TODO(cstefantsova): Remove CoreTypes as the second argument when NullType is
 // landed.
 class _NullabilityConstructorUnwrapper
     implements DartTypeVisitor1<DartType, CoreTypes> {
diff --git a/pkg/kernel/test/norm_test.dart b/pkg/kernel/test/norm_test.dart
index 6ae7be5..f6cef2d 100644
--- a/pkg/kernel/test/norm_test.dart
+++ b/pkg/kernel/test/norm_test.dart
@@ -24,7 +24,7 @@
   check('FutureOr<Never>', 'Future<Never>');
   check('FutureOr<Never?>', 'Future<Null>?');
 
-  // TODO(dmitryas): Use the following test case instead when FutureOr can
+  // TODO(cstefantsova): Use the following test case instead when FutureOr can
   // distinguish between the declared nullability and the nullability as a
   // property.
   //
@@ -39,21 +39,21 @@
   check('FutureOr<FutureOr<Object*>>', 'Object*');
   check('FutureOr<FutureOr<Never>>', 'FutureOr<Future<Never>>');
 
-  // TODO(dmitryas): Use the following test case instead when FutureOr can
+  // TODO(cstefantsova): Use the following test case instead when FutureOr can
   // distinguish between the declared nullability and the nullability as a
   // property.
   //
   //check('FutureOr<FutureOr<Never?>>', 'FutureOr<Future<Null>?>');
   check('FutureOr<FutureOr<Never?>>', 'FutureOr<Future<Null>?>?');
 
-  // TODO(dmitryas): Use the following test case instead when FutureOr can
+  // TODO(cstefantsova): Use the following test case instead when FutureOr can
   // distinguish between the declared nullability and the nullability as a
   // property.
   //
   //check('FutureOr<FutureOr<Never*>>', 'FutureOr<Future<Never*>>');
   check('FutureOr<FutureOr<Never*>>', 'FutureOr<Future<Never*>*>*');
 
-  // TODO(dmitryas): Use the following test case instead when FutureOr can
+  // TODO(cstefantsova): Use the following test case instead when FutureOr can
   // distinguish between the declared nullability and the nullability as a
   // property.
   //
@@ -132,9 +132,9 @@
   check('FutureOr<FutureOr<void>?>?', 'void');
   check('FutureOr<FutureOr<Object?>?>?', 'Object?');
 
-  // TODO(dmitryas): The following test cases should be removed when FutureOr
-  // can distinguish between the declared nullability and the nullability as a
-  // property.
+  // TODO(cstefantsova): The following test cases should be removed when
+  // FutureOr can distinguish between the declared nullability and the
+  // nullability as a property.
   check('FutureOr<int?>', 'FutureOr<int?>?');
   check('FutureOr<FutureOr<int?>>', 'FutureOr<FutureOr<int?>?>?');
   check('FutureOr<FutureOr<int>?>', 'FutureOr<FutureOr<int>?>?');
diff --git a/pkg/vm/lib/kernel_front_end.dart b/pkg/vm/lib/kernel_front_end.dart
index e228973..79aaf36 100644
--- a/pkg/vm/lib/kernel_front_end.dart
+++ b/pkg/vm/lib/kernel_front_end.dart
@@ -471,8 +471,8 @@
 
   final coreTypes = new CoreTypes(component);
 
-  // TODO(alexmarkov, dmitryas): Consider doing canonicalization of identical
-  // mixin applications when creating mixin applications in frontend,
+  // TODO(alexmarkov,cstefantsova): Consider doing canonicalization of
+  // identical mixin applications when creating mixin applications in frontend,
   // so all backends (and all transformation passes from the very beginning)
   // can benefit from mixin de-duplication.
   // At least, in addition to VM/AOT case we should run this transformation
diff --git a/tools/VERSION b/tools/VERSION
index 29dd711..46decc5 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 17
 PATCH 0
-PRERELEASE 273
+PRERELEASE 274
 PRERELEASE_PATCH 0
\ No newline at end of file
