Version 2.10.0-139.0.dev

Merge commit 'f4501b6e83b112ee905fbcc22b973b57d40d82ac' into 'dev'
diff --git a/pkg/_js_interop_checks/lib/js_interop_checks.dart b/pkg/_js_interop_checks/lib/js_interop_checks.dart
index 2355b50..9cb71f9 100644
--- a/pkg/_js_interop_checks/lib/js_interop_checks.dart
+++ b/pkg/_js_interop_checks/lib/js_interop_checks.dart
@@ -35,11 +35,11 @@
     if (!procedure.isExternal || !isJSInteropMember(procedure)) return;
 
     if (!procedure.isStatic &&
-        (procedure.name.name == '[]=' || procedure.name.name == '[]')) {
+        (procedure.name.text == '[]=' || procedure.name.text == '[]')) {
       _diagnosticsReporter.report(
           messageJsInteropIndexNotSupported,
           procedure.fileOffset,
-          procedure.name.name.length,
+          procedure.name.text.length,
           procedure.location.file);
     }
 
@@ -73,7 +73,7 @@
       _diagnosticsReporter.report(
           messageJsInteropNonExternalConstructor,
           constructor.fileOffset,
-          constructor.name.name.length,
+          constructor.name.text.length,
           constructor.location.file);
     }
 
@@ -99,7 +99,7 @@
     var enclosingClass = m.enclosingClass;
     if (enclosingClass != null && !hasJSInteropAnnotation(enclosingClass)) {
       _diagnosticsReporter.report(messageJsInteropEnclosingClassJSAnnotation,
-          m.fileOffset, m.name.name.length, m.location.file,
+          m.fileOffset, m.name.text.length, m.location.file,
           context: <LocatedMessage>[
             messageJsInteropEnclosingClassJSAnnotationContext.withLocation(
                 enclosingClass.location.file,
diff --git a/pkg/compiler/lib/src/io/kernel_source_information.dart b/pkg/compiler/lib/src/io/kernel_source_information.dart
index f8d5341..6600d21 100644
--- a/pkg/compiler/lib/src/io/kernel_source_information.dart
+++ b/pkg/compiler/lib/src/io/kernel_source_information.dart
@@ -93,7 +93,7 @@
         } else {
           extensionName = extension.name;
         }
-        String memberName = descriptor.name.name;
+        String memberName = descriptor.name.text;
         return '$extensionName.$memberName';
       }
     }
diff --git a/pkg/compiler/lib/src/ir/annotations.dart b/pkg/compiler/lib/src/ir/annotations.dart
index 637bd63..fa04392 100644
--- a/pkg/compiler/lib/src/ir/annotations.dart
+++ b/pkg/compiler/lib/src/ir/annotations.dart
@@ -77,7 +77,7 @@
     _jsInteropLibraryNames.forEach((ir.Library library, _) {
       for (ir.Member member in library.members) {
         if (member.isExternal) {
-          f(member, _jsInteropMemberNames[member] ?? member.name.name);
+          f(member, _jsInteropMemberNames[member] ?? member.name.text);
         }
       }
     });
@@ -86,7 +86,7 @@
         if (member is ir.Field) continue;
         String name = _jsInteropMemberNames[member];
         if (member.isExternal) {
-          name ??= member.name.name;
+          name ??= member.name.text;
         }
         f(member, name);
       }
@@ -99,7 +99,7 @@
           f) {
     for (ir.Member node in _nativeMembers) {
       if (node is! ir.Field) {
-        String name = _nativeMemberNames[node] ?? node.name.name;
+        String name = _nativeMemberNames[node] ?? node.name.text;
         f(node, name, getCreatesAnnotations(node), getReturnsAnnotations(node));
       }
     }
@@ -112,7 +112,7 @@
     for (ir.Class cls in _nativeClassNames.keys) {
       for (ir.Field field in cls.fields) {
         if (field.isInstanceMember) {
-          String name = _nativeMemberNames[field] ?? field.name.name;
+          String name = _nativeMemberNames[field] ?? field.name.text;
           f(field, name, getCreatesAnnotations(field),
               getReturnsAnnotations(field));
         }
@@ -348,9 +348,9 @@
     ir.Constant optionsValue;
     value.fieldValues.forEach((ir.Reference reference, ir.Constant fieldValue) {
       ir.Field field = reference.asField;
-      if (field.name.name == 'name') {
+      if (field.name.text == 'name') {
         nameValue = fieldValue;
-      } else if (field.name.name == 'options') {
+      } else if (field.name.text == 'options') {
         optionsValue = fieldValue;
       }
     });
diff --git a/pkg/compiler/lib/src/ir/debug.dart b/pkg/compiler/lib/src/ir/debug.dart
index 27fad8e..01fc1f0 100644
--- a/pkg/compiler/lib/src/ir/debug.dart
+++ b/pkg/compiler/lib/src/ir/debug.dart
@@ -29,7 +29,7 @@
   @override
   void visitName(Name node) {
     openAndCloseNode(node, '${node.runtimeType}',
-        {'name': node.name, 'library': node.library?.name});
+        {'name': node.text, 'library': node.library?.name});
   }
 
   @override
diff --git a/pkg/compiler/lib/src/ir/impact.dart b/pkg/compiler/lib/src/ir/impact.dart
index c176e35..60dc75f3 100644
--- a/pkg/compiler/lib/src/ir/impact.dart
+++ b/pkg/compiler/lib/src/ir/impact.dart
@@ -542,7 +542,7 @@
             positionArguments, namedArguments, typeArguments);
         // TODO(johnniwinther): Avoid treating a known function call as a
         // dynamic call when CFE provides a way to distinguish the two.
-        if (operatorFromString(node.name.name) == null &&
+        if (operatorFromString(node.name.text) == null &&
             receiverType is ir.DynamicType) {
           // We might implicitly call a getter that returns a function.
           registerFunctionInvocation(const ir.DynamicType(), positionArguments,
diff --git a/pkg/compiler/lib/src/ir/runtime_type_analysis.dart b/pkg/compiler/lib/src/ir/runtime_type_analysis.dart
index d7e1d75..b62aafc 100644
--- a/pkg/compiler/lib/src/ir/runtime_type_analysis.dart
+++ b/pkg/compiler/lib/src/ir/runtime_type_analysis.dart
@@ -84,7 +84,7 @@
 
   /// Returns `true` if [node] is of the form `e.runtimeType`.
   bool isGetRuntimeType(ir.TreeNode node) {
-    return node is ir.PropertyGet && node.name.name == Identifiers.runtimeType_;
+    return node is ir.PropertyGet && node.name.text == Identifiers.runtimeType_;
   }
 
   /// Returns [node] if [node] is of the form `e.runtimeType` and `null`
@@ -95,7 +95,7 @@
 
   /// Returns `true` if [node] is of the form `e.toString()`.
   bool isInvokeToString(ir.TreeNode node) {
-    return node is ir.MethodInvocation && node.name.name == 'toString';
+    return node is ir.MethodInvocation && node.name.text == 'toString';
   }
 
   assert(isGetRuntimeType(node));
@@ -141,7 +141,7 @@
       } else if (nullAware.parent is ir.MethodInvocation) {
         ir.MethodInvocation methodInvocation = nullAware.parent;
         if (methodInvocation.receiver == nullAware.let &&
-            methodInvocation.name.name == '==') {
+            methodInvocation.name.text == '==') {
           // Detected
           //
           //  e0?.runtimeType == other
@@ -202,7 +202,7 @@
       } else if (nullAware.parent is ir.Arguments &&
           nullAware.parent.parent is ir.MethodInvocation) {
         ir.MethodInvocation methodInvocation = nullAware.parent.parent;
-        if (methodInvocation.name.name == '==' &&
+        if (methodInvocation.name.text == '==' &&
             methodInvocation.arguments.positional.first == nullAware.let) {
           // [nullAware] is the right hand side of ==.
 
@@ -290,7 +290,7 @@
     }
   } else if (node.parent is ir.MethodInvocation) {
     ir.MethodInvocation methodInvocation = node.parent;
-    if (methodInvocation.name.name == '==' &&
+    if (methodInvocation.name.text == '==' &&
         methodInvocation.receiver == node) {
       // [node] is the left hand side of ==.
 
@@ -340,7 +340,7 @@
   } else if (node.parent is ir.Arguments &&
       node.parent.parent is ir.MethodInvocation) {
     ir.MethodInvocation methodInvocation = node.parent.parent;
-    if (methodInvocation.name.name == '==' &&
+    if (methodInvocation.name.text == '==' &&
         methodInvocation.arguments.positional.first == node) {
       // [node] is the right hand side of ==.
       ir.PropertyGet otherGetRuntimeType =
diff --git a/pkg/compiler/lib/src/ir/scope_visitor.dart b/pkg/compiler/lib/src/ir/scope_visitor.dart
index 7ef94b7..27d9b0b 100644
--- a/pkg/compiler/lib/src/ir/scope_visitor.dart
+++ b/pkg/compiler/lib/src/ir/scope_visitor.dart
@@ -1228,7 +1228,7 @@
         sb.write('eager');
         if (fields != null) {
           sb.write('&fields=[');
-          List<String> names = fields.map((f) => f.name.name).toList()..sort();
+          List<String> names = fields.map((f) => f.name.text).toList()..sort();
           sb.write(names.join(','));
           sb.write(']');
         }
diff --git a/pkg/compiler/lib/src/ir/static_type.dart b/pkg/compiler/lib/src/ir/static_type.dart
index 33079f9..a5ab288 100644
--- a/pkg/compiler/lib/src/ir/static_type.dart
+++ b/pkg/compiler/lib/src/ir/static_type.dart
@@ -233,7 +233,7 @@
           .substituteType(interfaceTarget.getterType);
     }
     // Treat the properties of Object specially.
-    String nameString = node.name.name;
+    String nameString = node.name.text;
     if (nameString == 'hashCode') {
       return typeEnvironment.coreTypes.intNonNullableRawType;
     } else if (nameString == 'runtimeType') {
@@ -255,7 +255,7 @@
         _computePropertyGetType(node, receiverType);
     receiverType = _narrowInstanceReceiver(node.interfaceTarget, receiverType);
     handlePropertyGet(node, receiverType, resultType);
-    if (node.name.name == Identifiers.runtimeType_) {
+    if (node.name.text == Identifiers.runtimeType_) {
       RuntimeTypeUseData data =
           computeRuntimeTypeUse(_pendingRuntimeTypeUseData, node);
       if (data.leftRuntimeTypeExpression == node) {
@@ -391,7 +391,7 @@
 
   ir.Member _getMember(ir.Class cls, String name) {
     for (ir.Member member in cls.members) {
-      if (member.name.name == name) return member;
+      if (member.name.text == name) return member;
     }
     throw fail("Member '$name' not found in $cls");
   }
@@ -599,7 +599,7 @@
     // TODO(34602): Remove when `interfaceTarget` is set on synthetic calls to
     // ==.
     if (interfaceTarget == null &&
-        node.name.name == '==' &&
+        node.name.text == '==' &&
         node.arguments.types.isEmpty &&
         node.arguments.positional.length == 1 &&
         node.arguments.named.isEmpty) {
@@ -647,7 +647,7 @@
         return const ir.DynamicType();
       }
     }
-    if (node.name.name == 'call') {
+    if (node.name.text == 'call') {
       if (receiverType is ir.FunctionType) {
         if (receiverType.typeParameters.length != node.arguments.types.length) {
           return const DoesNotCompleteType();
@@ -657,7 +657,7 @@
             .substituteType(receiverType.returnType);
       }
     }
-    if (node.name.name == '==') {
+    if (node.name.text == '==') {
       // We use this special case to simplify generation of '==' checks.
       return typeEnvironment.coreTypes.boolNonNullableRawType;
     }
@@ -701,7 +701,7 @@
     ir.DartType returnType =
         _computeMethodInvocationType(node, receiverType, argumentTypes);
     receiverType = _narrowInstanceReceiver(node.interfaceTarget, receiverType);
-    if (node.name.name == '==') {
+    if (node.name.text == '==') {
       ir.Expression left = node.receiver;
       ir.Expression right = node.arguments.positional[0];
       TypeMap afterInvocation = typeMap;
diff --git a/pkg/compiler/lib/src/ir/util.dart b/pkg/compiler/lib/src/ir/util.dart
index 7132491..d963863 100644
--- a/pkg/compiler/lib/src/ir/util.dart
+++ b/pkg/compiler/lib/src/ir/util.dart
@@ -120,7 +120,7 @@
         body.then is ir.NullLiteral) {
       ir.MethodInvocation invocation = body.condition;
       ir.Expression receiver = invocation.receiver;
-      if (invocation.name.name == '==' &&
+      if (invocation.name.text == '==' &&
           receiver is ir.VariableGet &&
           receiver.variable == node.variable &&
           invocation.arguments.positional.single is ir.NullLiteral) {
diff --git a/pkg/compiler/lib/src/js_model/element_map_impl.dart b/pkg/compiler/lib/src/js_model/element_map_impl.dart
index 20f91bd..5a3de9a 100644
--- a/pkg/compiler/lib/src/js_model/element_map_impl.dart
+++ b/pkg/compiler/lib/src/js_model/element_map_impl.dart
@@ -820,7 +820,7 @@
     while (superclass != null) {
       JClassEnv env = classes.getEnv(superclass);
       MemberEntity superMember =
-          env.lookupMember(this, name.name, setter: setter);
+          env.lookupMember(this, name.text, setter: setter);
       if (superMember != null) {
         if (!superMember.isInstanceMember) return null;
         if (!superMember.isAbstract) {
@@ -1243,7 +1243,7 @@
   @override
   Name getName(ir.Name name) {
     return new Name(
-        name.name, name.isPrivate ? getLibrary(name.library) : null);
+        name.text, name.isPrivate ? getLibrary(name.library) : null);
   }
 
   @override
@@ -1302,13 +1302,13 @@
 
   Selector getGetterSelector(ir.Name irName) {
     Name name = new Name(
-        irName.name, irName.isPrivate ? getLibrary(irName.library) : null);
+        irName.text, irName.isPrivate ? getLibrary(irName.library) : null);
     return new Selector.getter(name);
   }
 
   Selector getSetterSelector(ir.Name irName) {
     Name name = new Name(
-        irName.name, irName.isPrivate ? getLibrary(irName.library) : null);
+        irName.text, irName.isPrivate ? getLibrary(irName.library) : null);
     return new Selector.setter(name);
   }
 
@@ -2140,7 +2140,7 @@
         if (node.kind == ir.ProcedureKind.Factory) {
           parts.add(utils.reconstructConstructorName(getMember(node)));
         } else {
-          parts.add(utils.operatorNameToIdentifier(node.name.name));
+          parts.add(utils.operatorNameToIdentifier(node.name.text));
         }
       } else if (node is ir.Constructor) {
         parts.add(utils.reconstructConstructorName(getMember(node)));
diff --git a/pkg/compiler/lib/src/kernel/deferred_load.dart b/pkg/compiler/lib/src/kernel/deferred_load.dart
index 9ca9bcf..37ca71d 100644
--- a/pkg/compiler/lib/src/kernel/deferred_load.dart
+++ b/pkg/compiler/lib/src/kernel/deferred_load.dart
@@ -53,7 +53,7 @@
     ir.Member node = _elementMap.getMemberNode(element);
     return _findImportsTo(
         node is ir.Constructor ? node.enclosingClass : node,
-        node is ir.Constructor ? node.enclosingClass.name : node.name.name,
+        node is ir.Constructor ? node.enclosingClass.name : node.name.text,
         node.enclosingLibrary,
         library);
   }
diff --git a/pkg/compiler/lib/src/kernel/element_map_impl.dart b/pkg/compiler/lib/src/kernel/element_map_impl.dart
index 76e5139..46d5a3a 100644
--- a/pkg/compiler/lib/src/kernel/element_map_impl.dart
+++ b/pkg/compiler/lib/src/kernel/element_map_impl.dart
@@ -439,7 +439,7 @@
     while (superclass != null) {
       KClassEnv env = classes.getEnv(superclass);
       MemberEntity superMember =
-          env.lookupMember(this, name.name, setter: setter);
+          env.lookupMember(this, name.text, setter: setter);
       if (superMember != null) {
         if (!superMember.isInstanceMember) return null;
         if (!superMember.isAbstract) {
@@ -826,7 +826,7 @@
   @override
   Name getName(ir.Name name) {
     return new Name(
-        name.name, name.isPrivate ? getLibrary(name.library) : null);
+        name.text, name.isPrivate ? getLibrary(name.library) : null);
   }
 
   @override
@@ -887,13 +887,13 @@
 
   Selector getGetterSelector(ir.Name irName) {
     Name name = new Name(
-        irName.name, irName.isPrivate ? getLibrary(irName.library) : null);
+        irName.text, irName.isPrivate ? getLibrary(irName.library) : null);
     return new Selector.getter(name);
   }
 
   Selector getSetterSelector(ir.Name irName) {
     Name name = new Name(
-        irName.name, irName.isPrivate ? getLibrary(irName.library) : null);
+        irName.text, irName.isPrivate ? getLibrary(irName.library) : null);
     return new Selector.setter(name);
   }
 
@@ -1534,7 +1534,7 @@
   @override
   ForeignKind getForeignKind(ir.StaticInvocation node) {
     if (commonElements.isForeignHelper(getMember(node.target))) {
-      switch (node.target.name.name) {
+      switch (node.target.name.text) {
         case Identifiers.JS:
           return ForeignKind.JS;
         case Identifiers.JS_BUILTIN:
@@ -2037,7 +2037,7 @@
   /// defaulting to the Dart name.
   void _setNativeName(ir.Member node, IrAnnotationData annotationData) {
     String name = _findJsNameFromAnnotation(node, annotationData);
-    name ??= node.name.name;
+    name ??= node.name.text;
     _nativeDataBuilder.setNativeMemberName(_elementMap.getMember(node), name);
   }
 
@@ -2052,7 +2052,7 @@
   void _setNativeNameForStaticMethod(
       ir.Member node, IrAnnotationData annotationData) {
     String name = _findJsNameFromAnnotation(node, annotationData);
-    name ??= node.name.name;
+    name ??= node.name.text;
     if (_isIdentifier(name)) {
       ClassEntity cls = _elementMap.getClass(node.enclosingClass);
       List<String> nativeNames = _nativeBasicData.getNativeTagsOfClass(cls);
diff --git a/pkg/compiler/lib/src/kernel/env.dart b/pkg/compiler/lib/src/kernel/env.dart
index 23a170d..36f4dad 100644
--- a/pkg/compiler/lib/src/kernel/env.dart
+++ b/pkg/compiler/lib/src/kernel/env.dart
@@ -125,14 +125,14 @@
         }
         if (member is ir.Procedure) {
           if (member.kind == ir.ProcedureKind.Setter) {
-            _setterMap[member.name.name] = member;
+            _setterMap[member.name.text] = member;
           } else {
-            _memberMap[member.name.name] = member;
+            _memberMap[member.name.text] = member;
           }
         } else if (member is ir.Field) {
-          _memberMap[member.name.name] = member;
+          _memberMap[member.name.text] = member;
           if (member.isMutable) {
-            _setterMap[member.name.name] = member;
+            _setterMap[member.name.text] = member;
           }
         } else {
           failedAt(
@@ -379,7 +379,7 @@
     void addField(ir.Field member, {bool includeStatic}) {
       if (!includeStatic && member.isStatic) return;
       if (isRedirectingFactoryField(member)) return;
-      var name = member.name.name;
+      var name = member.name.text;
       _memberMap[name] = member;
       if (member.isMutable) {
         _setterMap[name] = member;
@@ -399,7 +399,7 @@
           return;
         }
       }
-      var name = member.name.name;
+      var name = member.name.text;
       if (member.kind == ir.ProcedureKind.Factory) {
         if (isRedirectingFactory(member)) {
           // Don't include redirecting factories.
@@ -420,7 +420,7 @@
 
     void addConstructors(ir.Class c) {
       for (ir.Constructor member in c.constructors) {
-        var name = member.name.name;
+        var name = member.name.text;
         _constructorMap[name] = member;
       }
     }
@@ -487,7 +487,7 @@
         var forwardingConstructor = _buildForwardingConstructor(
             superclassCloner, superclassConstructor);
         cls.addMember(forwardingConstructor);
-        _constructorMap[forwardingConstructor.name.name] =
+        _constructorMap[forwardingConstructor.name.text] =
             forwardingConstructor;
       }
     }
diff --git a/pkg/compiler/lib/src/kernel/no_such_method_resolver.dart b/pkg/compiler/lib/src/kernel/no_such_method_resolver.dart
index 32f6721..2e347e0 100644
--- a/pkg/compiler/lib/src/kernel/no_such_method_resolver.dart
+++ b/pkg/compiler/lib/src/kernel/no_such_method_resolver.dart
@@ -32,7 +32,7 @@
       expr = asExpression.operand;
     }
     if (expr is ir.SuperMethodInvocation &&
-        expr.name.name == Identifiers.noSuchMethod_) {
+        expr.name.text == Identifiers.noSuchMethod_) {
       ir.Arguments arguments = expr.arguments;
       if (arguments.positional.length == 1 &&
           arguments.named.isEmpty &&
diff --git a/pkg/compiler/lib/src/serialization/member_data.dart b/pkg/compiler/lib/src/serialization/member_data.dart
index a014c58..72b2148 100644
--- a/pkg/compiler/lib/src/serialization/member_data.dart
+++ b/pkg/compiler/lib/src/serialization/member_data.dart
@@ -36,7 +36,7 @@
     // other libraries.
     return null;
   }
-  String name = member.name.name;
+  String name = member.name.text;
   if (member is ir.Constructor) {
     name = '.$name';
   } else if (member is ir.Procedure) {
diff --git a/pkg/compiler/lib/src/serialization/mixins.dart b/pkg/compiler/lib/src/serialization/mixins.dart
index c65a05c..3718e25 100644
--- a/pkg/compiler/lib/src/serialization/mixins.dart
+++ b/pkg/compiler/lib/src/serialization/mixins.dart
@@ -763,7 +763,7 @@
 
   @override
   void writeName(ir.Name value) {
-    writeString(value.name);
+    writeString(value.text);
     writeValueOrNull(value.library, writeLibraryNode);
   }
 
diff --git a/pkg/compiler/lib/src/ssa/builder_kernel.dart b/pkg/compiler/lib/src/ssa/builder_kernel.dart
index 2c6cf53..6dbf003 100644
--- a/pkg/compiler/lib/src/ssa/builder_kernel.dart
+++ b/pkg/compiler/lib/src/ssa/builder_kernel.dart
@@ -4239,7 +4239,7 @@
       return '$count ${adjective}arguments';
     }
 
-    String name() => invocation.target.name.name;
+    String name() => invocation.target.name.text;
 
     ir.Arguments arguments = invocation.arguments;
     bool bad = false;
diff --git a/pkg/compiler/test/model/cfe_annotations_test.dart b/pkg/compiler/test/model/cfe_annotations_test.dart
index 20e0c2b..e84ee78 100644
--- a/pkg/compiler/test/model/cfe_annotations_test.dart
+++ b/pkg/compiler/test/model/cfe_annotations_test.dart
@@ -206,7 +206,7 @@
         void testMember(String idPrefix, ir.Member member,
             {bool implicitJsInteropMember, bool implicitNativeMember}) {
           if (memberIsIgnorable(member)) return;
-          String memberId = '$idPrefix::${member.name.name}';
+          String memberId = '$idPrefix::${member.name.text}';
           MemberEntity memberEntity = elementMap.getMember(member);
 
           String expectedJsInteropMemberName =
diff --git a/pkg/dev_compiler/lib/src/kernel/compiler.dart b/pkg/dev_compiler/lib/src/kernel/compiler.dart
index 96029ef..d6ee556 100644
--- a/pkg/dev_compiler/lib/src/kernel/compiler.dart
+++ b/pkg/dev_compiler/lib/src/kernel/compiler.dart
@@ -472,7 +472,7 @@
     // publicly exposed JS API for a library.
 
     var node = export.node;
-    if (node is Procedure && node.name.name == 'main') {
+    if (node is Procedure && node.name.text == 'main') {
       // Don't allow redefining names from this library.
       var name = _emitTopLevelName(export.node);
       moduleItems.add(js.statement(
@@ -868,7 +868,7 @@
         _currentUri = ctor.enclosingClass.fileUri;
         var jsParams = _emitParameters(ctor.function, isForwarding: true);
         _currentUri = savedUri;
-        var name = ctor.name.name;
+        var name = ctor.name.text;
         var ctorBody = [
           if (mixinCtor != null) mixinCtor,
           if (name != '' || hasUnnamedSuper)
@@ -1006,7 +1006,7 @@
     var fields = c.fields;
     for (var ctor in c.constructors) {
       if (ctor.isExternal) continue;
-      addConstructor(ctor.name.name, _emitConstructor(ctor, fields, className));
+      addConstructor(ctor.name.text, _emitConstructor(ctor, fields, className));
     }
 
     // If classElement has only factory constructors, and it can be mixed in,
@@ -1144,7 +1144,7 @@
       // We know enum fields can be safely emitted as const fields, as long
       // as the `values` field is emitted last.
       var classRef = _emitTopLevelName(c);
-      var valueField = fields.firstWhere((f) => f.name.name == 'values');
+      var valueField = fields.firstWhere((f) => f.name.text == 'values');
       fields.remove(valueField);
       fields.add(valueField);
       for (var f in fields) {
@@ -1152,13 +1152,13 @@
         body.add(defineValueOnClass(
                 c,
                 classRef,
-                _emitStaticMemberName(f.name.name),
+                _emitStaticMemberName(f.name.text),
                 _visitInitializer(f.initializer, f.annotations))
             .toStatement());
       }
     } else if (fields.isNotEmpty) {
       body.add(_emitLazyFields(_emitTopLevelName(c), fields,
-          (n) => _emitStaticMemberName(n.name.name)));
+          (n) => _emitStaticMemberName(n.name.text)));
     }
   }
 
@@ -1261,7 +1261,7 @@
       // nor can they be torn off.
       if (member.isStatic) continue;
 
-      var name = member.name.name;
+      var name = member.name.text;
       var reifiedType = _memberRuntimeType(member, c) as FunctionType;
 
       // Don't add redundant signatures for inherited methods whose signature
@@ -1408,7 +1408,7 @@
     // Also for const constructors we need to ensure default values are
     // available for use by top-level constant initializers.
     var fn = node.function;
-    var body = _emitArgumentInitializers(fn, node.name.name);
+    var body = _emitArgumentInitializers(fn, node.name.text);
 
     // Redirecting constructors: these are not allowed to have initializers,
     // and the redirecting ctor invocation runs before field initializers.
@@ -1456,7 +1456,7 @@
     // derived class constructor with the same name.
     return js.statement('#.#.call(this, #);', [
       className,
-      _constructorName(ctor.name.name),
+      _constructorName(ctor.name.text),
       _emitArgumentList(node.arguments, types: false)
     ]);
   }
@@ -1478,10 +1478,10 @@
     // We can skip the super call if it's empty. Most commonly this happens for
     // things that extend Object, and don't have any field initializers or their
     // own default constructor.
-    if (ctor.name.name == '' && !_hasUnnamedSuperConstructor(c)) {
+    if (ctor.name.text == '' && !_hasUnnamedSuperConstructor(c)) {
       return null;
     }
-    return _emitSuperConstructorCall(className, ctor.name.name, args);
+    return _emitSuperConstructorCall(className, ctor.name.text, args);
   }
 
   js_ast.Statement _emitSuperConstructorCall(
@@ -1655,9 +1655,9 @@
     for (var m in c.procedures) {
       if (m.isAbstract) continue;
       if (m.isGetter) {
-        getters[m.name.name] = m;
+        getters[m.name.text] = m;
       } else if (m.isSetter) {
-        setters[m.name.name] = m;
+        setters[m.name.text] = m;
       }
     }
 
@@ -1684,7 +1684,7 @@
       } else if (m.isAccessor) {
         jsMethods.add(_emitMethodDeclaration(m));
         jsMethods.add(_emitSuperAccessorWrapper(m, getters, setters));
-        if (!hasJsPeer && m.isGetter && m.name.name == 'iterator') {
+        if (!hasJsPeer && m.isGetter && m.name.text == 'iterator') {
           hasIterator = true;
           jsMethods.add(_emitIterable(c));
         }
@@ -1748,7 +1748,7 @@
       }
       fn = _emitNativeFunctionBody(member);
     } else {
-      fn = _emitFunction(member.function, member.name.name);
+      fn = _emitFunction(member.function, member.name.text);
     }
 
     return js_ast.Method(_declareMemberName(member), fn,
@@ -1759,7 +1759,7 @@
   }
 
   js_ast.Fun _emitNativeFunctionBody(Procedure node) {
-    var name = _annotationName(node, isJSAnnotation) ?? node.name.name;
+    var name = _annotationName(node, isJSAnnotation) ?? node.name.text;
     if (node.isGetter) {
       return js_ast.Fun([], js.block('{ return this.#; }', [name]));
     } else if (node.isSetter) {
@@ -1879,7 +1879,7 @@
     /// If a future Dart version allows factory constructors to take their
     /// own type parameters, this will need to be changed to call
     /// [_emitFunction] instead.
-    var name = node.name.name;
+    var name = node.name.text;
     var jsBody = _emitSyncFunctionBody(function, name);
 
     return js_ast.Method(
@@ -1938,7 +1938,7 @@
     var jsMethods = <js_ast.Method>[];
     assert(!field.isStatic);
 
-    var name = _annotationName(field, isJSName) ?? field.name.name;
+    var name = _annotationName(field, isJSName) ?? field.name.text;
     // Generate getter
     var fn = js_ast.Fun([], js.block('{ return this.#; }', [name]));
     var method = js_ast.Method(_declareMemberName(field), fn, isGetter: true);
@@ -1965,7 +1965,7 @@
       Map<String, Procedure> getters, Map<String, Procedure> setters) {
     if (member.isAbstract) return null;
 
-    var name = member.name.name;
+    var name = member.name.text;
     var memberName = _declareMemberName(member);
     if (member.isGetter) {
       if (!setters.containsKey(name) &&
@@ -2097,7 +2097,7 @@
         ..sourceInformation = _hoverComment(
             js_ast.PropertyAccess(objExpr, access),
             field.fileOffset,
-            field.name.name.length));
+            field.name.text.length));
 
       // TODO(jmesserly): currently uses a dummy setter to indicate writable.
       if (!field.isFinal && !field.isConst) {
@@ -2146,7 +2146,7 @@
   /// Unlike call sites, we always have an element available, so we can use it
   /// directly rather than computing the relevant options for [_emitMemberName].
   js_ast.Expression _declareMemberName(Member m, {bool useExtension}) {
-    return _emitMemberName(m.name.name,
+    return _emitMemberName(m.name.text,
         isStatic: m is Field ? m.isStatic : (m as Procedure).isStatic,
         useExtension:
             useExtension ?? _extensionTypes.isNativeClass(m.enclosingClass),
@@ -2377,8 +2377,8 @@
     if (m is Procedure) {
       if (m.isExternal) return true;
       if (m.isNoSuchMethodForwarder) {
-        if (renamedJsMembers.contains(m.name.name)) {
-          return _hasExternalProcedure(m.enclosingClass, m.name.name);
+        if (renamedJsMembers.contains(m.name.text)) {
+          return _hasExternalProcedure(m.enclosingClass, m.name.text);
         }
       }
     }
@@ -2402,7 +2402,7 @@
       ];
       classes.addAll(classesToCheck);
       for (var procedure in c.procedures) {
-        if (procedure.name.name == name && !procedure.isNoSuchMethodForwarder) {
+        if (procedure.name.text == name && !procedure.isNoSuchMethodForwarder) {
           return procedure.isExternal;
         }
       }
@@ -2459,9 +2459,9 @@
     _staticTypeContext.enterMember(node);
     _currentUri = node.fileUri;
 
-    var name = node.name.name;
+    var name = node.name.text;
     var result = js_ast.Method(
-        propertyName(name), _emitFunction(node.function, node.name.name),
+        propertyName(name), _emitFunction(node.function, node.name.text),
         isGetter: node.isGetter, isSetter: node.isSetter)
       ..sourceInformation = _nodeEnd(node.fileEndOffset);
 
@@ -2476,7 +2476,7 @@
     _currentUri = p.fileUri;
 
     var body = <js_ast.Statement>[];
-    var fn = _emitFunction(p.function, p.name.name)
+    var fn = _emitFunction(p.function, p.name.text)
       ..sourceInformation = _nodeEnd(p.fileEndOffset);
 
     if (_currentLibrary.importUri.scheme == 'dart' &&
@@ -2486,7 +2486,7 @@
 
     var nameExpr = _emitTopLevelName(p);
     body.add(js.statement('# = #',
-        [nameExpr, js_ast.NamedFunction(_emitTemporaryId(p.name.name), fn)]));
+        [nameExpr, js_ast.NamedFunction(_emitTemporaryId(p.name.text), fn)]));
 
     _currentUri = savedUri;
     _staticTypeContext.leaveMember(p);
@@ -2900,7 +2900,7 @@
   js_ast.Expression _emitConstructorName(InterfaceType type, Member c) {
     return _emitJSInterop(type.classNode) ??
         js_ast.PropertyAccess(
-            _emitConstructorAccess(type), _constructorName(c.name.name));
+            _emitConstructorAccess(type), _constructorName(c.name.text));
   }
 
   /// Emits an expression that lets you access statics on an [c] from code.
@@ -3043,7 +3043,7 @@
       // assign directly to [virtualField].  If the latter, copy the old
       // variable to [virtualField].
       var symbol = emitClassPrivateNameSymbol(c.enclosingLibrary,
-          getLocalClassName(c), field.name.name, virtualField);
+          getLocalClassName(c), field.name.text, virtualField);
       if (symbol != virtualField) {
         body.add(js.statement('const # = #;', [virtualField, symbol]));
       }
@@ -3823,7 +3823,7 @@
         _emitConstructorName(
             streamIterator,
             _asyncStreamIteratorClass.procedures
-                .firstWhere((p) => p.isFactory && p.name.name == '')),
+                .firstWhere((p) => p.isFactory && p.name.text == '')),
         [_visitExpression(node.iterable)]);
 
     var iter = _emitTemporaryId('iter');
@@ -4201,13 +4201,13 @@
   @override
   js_ast.Expression visitPropertyGet(PropertyGet node) {
     return _emitPropertyGet(
-        node.receiver, node.interfaceTarget, node.name.name);
+        node.receiver, node.interfaceTarget, node.name.text);
   }
 
   @override
   js_ast.Expression visitPropertySet(PropertySet node) {
     return _emitPropertySet(
-        node.receiver, node.interfaceTarget, node.value, node.name.name);
+        node.receiver, node.interfaceTarget, node.value, node.name.text);
   }
 
   @override
@@ -4222,7 +4222,7 @@
 
   js_ast.Expression _emitPropertyGet(Expression receiver, Member member,
       [String memberName]) {
-    memberName ??= member.name.name;
+    memberName ??= member.name.text;
     // TODO(jmesserly): should tearoff of `.call` on a function type be
     // encoded as a different node, or possibly eliminated?
     // (Regardless, we'll still need to handle the callable JS interop classes.)
@@ -4273,7 +4273,7 @@
       Expression receiver, Member member, Expression value,
       [String memberName]) {
     var jsName =
-        _emitMemberName(memberName ?? member.name.name, member: member);
+        _emitMemberName(memberName ?? member.name.text, member: member);
 
     if (member != null && isJsMember(member)) {
       value = _assertInterop(value);
@@ -4345,7 +4345,7 @@
 
   js_ast.Expression _emitMethodCall(Expression receiver, Member target,
       Arguments arguments, InvocationExpression node) {
-    var name = node.name.name;
+    var name = node.name.text;
     if (isOperatorMethodName(name) && arguments.named.isEmpty) {
       var argLength = arguments.positional.length;
       if (argLength == 0) {
@@ -4454,7 +4454,7 @@
 
   js_ast.Expression _emitUnaryOperator(
       Expression expr, Member target, InvocationExpression node) {
-    var op = node.name.name;
+    var op = node.name.text;
     if (target != null) {
       var dispatchType = _coreTypes.legacyRawType(target.enclosingClass);
       if (_typeRep.unaryOperationIsPrimitive(dispatchType)) {
@@ -4492,7 +4492,7 @@
     // comparison, e.g.  `a & ~b == 0`.
     if (parent is InvocationExpression &&
         parent.arguments.positional.length == 1) {
-      var op = parent.name.name;
+      var op = parent.name.text;
       var left = getInvocationReceiver(parent);
       var right = parent.arguments.positional[0];
       if (left != null && op == '==') {
@@ -4511,7 +4511,7 @@
   }
 
   bool _nodeIsBitwiseOperation(InvocationExpression node) {
-    switch (node.name.name) {
+    switch (node.name.text) {
       case '&':
       case '|':
       case '^':
@@ -4545,7 +4545,7 @@
     var parent = node.parent;
     if (parent == null) return false;
     if (parent is InvocationExpression && _nodeIsBitwiseOperation(parent)) {
-      if (parent.name.name == '&' && parent.arguments.positional.length == 1) {
+      if (parent.name.text == '&' && parent.arguments.positional.length == 1) {
         var left = getInvocationReceiver(parent);
         var right = parent.arguments.positional[0];
         final MAX = (1 << width) - 1;
@@ -4575,7 +4575,7 @@
         var left = getInvocationReceiver(expr);
         var right = expr.arguments.positional[0];
         if (left != null) {
-          switch (expr.name.name) {
+          switch (expr.name.text) {
             case '&':
               return min(bitWidth(left, depth), bitWidth(right, depth));
 
@@ -4619,7 +4619,7 @@
 
   js_ast.Expression _emitBinaryOperator(Expression left, Member target,
       Expression right, InvocationExpression node) {
-    var op = node.name.name;
+    var op = node.name.text;
     if (op == '==') return _emitEqualityOperator(left, target, right);
 
     // TODO(jmesserly): using the target type here to work around:
@@ -4816,7 +4816,7 @@
   /// Emits the [js_ast.PropertyAccess] for accessors or method calls to
   /// [jsTarget].[jsName], replacing `super` if it is not allowed in scope.
   js_ast.PropertyAccess _emitSuperTarget(Member member, {bool setter = false}) {
-    var jsName = _emitMemberName(member.name.name, member: member);
+    var jsName = _emitMemberName(member.name.text, member: member);
     if (member is Field && !_virtualFields.isVirtual(member)) {
       return js_ast.PropertyAccess(js_ast.This(), jsName);
     }
@@ -4824,7 +4824,7 @@
 
     // If we can't emit `super` in this context, generate a helper that does it
     // for us, and call the helper.
-    var name = member.name.name;
+    var name = member.name.text;
     var jsMethod = _superHelpers.putIfAbsent(name, () {
       var isAccessor = member is Procedure ? member.isAccessor : true;
       if (isAccessor) {
@@ -4865,7 +4865,7 @@
 
     // Optimize some internal SDK calls.
     if (isSdkInternalRuntime(target.enclosingLibrary)) {
-      var name = target.name.name;
+      var name = target.name.text;
       if (node.arguments.positional.isEmpty) {
         if (name == 'typeRep') {
           return _emitType(node.arguments.types.single);
@@ -4932,7 +4932,7 @@
   }
 
   bool _isDebuggerCall(Procedure target) {
-    return target.name.name == 'debugger' &&
+    return target.name.text == 'debugger' &&
         target.enclosingLibrary.importUri.toString() == 'dart:developer';
   }
 
@@ -4984,12 +4984,12 @@
         var nativeName = _extensionTypes.getNativePeers(c);
         if (nativeName.isNotEmpty) {
           var memberName = _annotationName(target, isJSName) ??
-              _emitStaticMemberName(target.name.name, target);
+              _emitStaticMemberName(target.name.text, target);
           return runtimeCall('global.#.#', [nativeName[0], memberName]);
         }
       }
       return js_ast.PropertyAccess(_emitStaticClassName(c),
-          _emitStaticMemberName(target.name.name, target));
+          _emitStaticMemberName(target.name.text, target));
     }
     return _emitTopLevelName(target);
   }
@@ -5169,9 +5169,9 @@
         case 'Map':
         case 'HashMap':
         case 'LinkedHashMap':
-          if (ctor.name.name == '') {
+          if (ctor.name.text == '') {
             return js.call('new #.new()', _emitMapImplType(type));
-          } else if (ctor.name.name == 'identity') {
+          } else if (ctor.name.text == 'identity') {
             return js.call(
                 'new #.new()', _emitMapImplType(type, identity: true));
           }
@@ -5179,15 +5179,15 @@
         case 'Set':
         case 'HashSet':
         case 'LinkedHashSet':
-          if (ctor.name.name == '') {
+          if (ctor.name.text == '') {
             return js.call('new #.new()', _emitSetImplType(type));
-          } else if (ctor.name.name == 'identity') {
+          } else if (ctor.name.text == 'identity') {
             return js.call(
                 'new #.new()', _emitSetImplType(type, identity: true));
           }
           break;
         case 'List':
-          if (ctor.name.name == '' && type is InterfaceType) {
+          if (ctor.name.text == '' && type is InterfaceType) {
             return _emitList(type.typeArguments[0], []);
           }
           break;
@@ -5240,11 +5240,11 @@
   @override
   js_ast.Expression visitNot(Not node) {
     var operand = node.operand;
-    if (operand is MethodInvocation && operand.name.name == '==') {
+    if (operand is MethodInvocation && operand.name.text == '==') {
       return _emitEqualityOperator(operand.receiver, operand.interfaceTarget,
           operand.arguments.positional[0],
           negated: true);
-    } else if (operand is DirectMethodInvocation && operand.name.name == '==') {
+    } else if (operand is DirectMethodInvocation && operand.name.text == '==') {
       return _emitEqualityOperator(
           operand.receiver, operand.target, operand.arguments.positional[0],
           negated: true);
@@ -5825,9 +5825,9 @@
       // directly.  Otherwise, use a private symbol in case the field
       // was overridden.
       var symbol = cls.isEnum
-          ? _emitMemberName(member.name.name, member: member)
+          ? _emitMemberName(member.name.text, member: member)
           : emitClassPrivateNameSymbol(
-              cls.enclosingLibrary, getLocalClassName(cls), member.name.name);
+              cls.enclosingLibrary, getLocalClassName(cls), member.name.text);
       return js_ast.Property(symbol, constant);
     }
 
diff --git a/pkg/dev_compiler/lib/src/kernel/constants.dart b/pkg/dev_compiler/lib/src/kernel/constants.dart
index 69ba4a5..5400577 100644
--- a/pkg/dev_compiler/lib/src/kernel/constants.dart
+++ b/pkg/dev_compiler/lib/src/kernel/constants.dart
@@ -46,7 +46,7 @@
       var constant = node.constant;
       if (constant is InstanceConstant) {
         var value = constant.fieldValues.entries
-            .firstWhere((e) => e.key.asField.name.name == name,
+            .firstWhere((e) => e.key.asField.name.text == name,
                 orElse: () => null)
             ?.value;
         if (value is PrimitiveConstant) return value.value;
diff --git a/pkg/dev_compiler/lib/src/kernel/expression_compiler.dart b/pkg/dev_compiler/lib/src/kernel/expression_compiler.dart
index 2b26a3f..47d0805 100644
--- a/pkg/dev_compiler/lib/src/kernel/expression_compiler.dart
+++ b/pkg/dev_compiler/lib/src/kernel/expression_compiler.dart
@@ -177,28 +177,28 @@
   @override
   void visitFieldReference(Field node) {
     if (node.name.isPrivate) {
-      privateFields[node.name.name] = node.name.library.importUri.toString();
+      privateFields[node.name.text] = node.name.library.importUri.toString();
     }
   }
 
   @override
   void visitField(Field node) {
     if (node.name.isPrivate) {
-      privateFields[node.name.name] = node.name.library.importUri.toString();
+      privateFields[node.name.text] = node.name.library.importUri.toString();
     }
   }
 
   @override
   void visitPropertyGet(PropertyGet node) {
     if (node.name.isPrivate) {
-      privateFields[node.name.name] = node.name.library.importUri.toString();
+      privateFields[node.name.text] = node.name.library.importUri.toString();
     }
   }
 
   @override
   void visitPropertySet(PropertySet node) {
     if (node.name.isPrivate) {
-      privateFields[node.name.name] = node.name.library.importUri.toString();
+      privateFields[node.name.text] = node.name.library.importUri.toString();
     }
   }
 }
diff --git a/pkg/dev_compiler/lib/src/kernel/js_interop.dart b/pkg/dev_compiler/lib/src/kernel/js_interop.dart
index 2f929ab..9c01d89 100644
--- a/pkg/dev_compiler/lib/src/kernel/js_interop.dart
+++ b/pkg/dev_compiler/lib/src/kernel/js_interop.dart
@@ -35,7 +35,7 @@
   if (node is StaticInvocation) {
     var target = node.target;
     return _isLibrary(target.enclosingLibrary, ['dart:js']) &&
-        target.name.name == 'allowInterop';
+        target.name.text == 'allowInterop';
   }
   return false;
 }
@@ -80,7 +80,7 @@
 /// Whether [i] is a `spread` invocation (to be used on function arguments
 /// to have them compiled as `...` spread args in ES6 outputs).
 bool isJSSpreadInvocation(Procedure target) =>
-    target.name.name == 'spread' && _isJSLibrary(target.enclosingLibrary);
+    target.name.text == 'spread' && _isJSLibrary(target.enclosingLibrary);
 
 bool isJSName(Expression value) =>
     isBuiltinAnnotation(value, '_js_helper', 'JSName');
diff --git a/pkg/dev_compiler/lib/src/kernel/kernel_helpers.dart b/pkg/dev_compiler/lib/src/kernel/kernel_helpers.dart
index 81776ac..0cac386 100644
--- a/pkg/dev_compiler/lib/src/kernel/kernel_helpers.dart
+++ b/pkg/dev_compiler/lib/src/kernel/kernel_helpers.dart
@@ -8,7 +8,7 @@
 import 'package:kernel/kernel.dart';
 
 Constructor unnamedConstructor(Class c) =>
-    c.constructors.firstWhere((c) => c.name.name == '', orElse: () => null);
+    c.constructors.firstWhere((c) => c.name.text == '', orElse: () => null);
 
 /// Returns the enclosing library for reference [node].
 Library getLibrary(NamedNode node) {
@@ -47,10 +47,10 @@
 String getTypeParameterName(TypeParameter node) => escapeIdentifier(node.name);
 
 String getTopLevelName(NamedNode n) {
-  if (n is Procedure) return n.name.name;
+  if (n is Procedure) return n.name.text;
   if (n is Class) return n.name;
   if (n is Typedef) return n.name;
-  if (n is Field) return n.name.name;
+  if (n is Field) return n.name.text;
   return n.canonicalName?.name;
 }
 
@@ -152,7 +152,7 @@
 bool isFromEnvironmentInvocation(CoreTypes coreTypes, StaticInvocation node) {
   var target = node.target;
   return node.isConst &&
-      target.name.name == 'fromEnvironment' &&
+      target.name.text == 'fromEnvironment' &&
       target.enclosingLibrary == coreTypes.coreLibrary;
 }
 
@@ -197,7 +197,7 @@
 
 bool isInlineJS(Member e) =>
     e is Procedure &&
-    e.name.name == 'JS' &&
+    e.name.text == 'JS' &&
     e.enclosingLibrary.importUri.toString() == 'dart:_foreign_helper';
 
 /// Whether the parameter [p] is covariant (either explicitly `covariant` or
diff --git a/pkg/dev_compiler/lib/src/kernel/nullable_inference.dart b/pkg/dev_compiler/lib/src/kernel/nullable_inference.dart
index 363f13a..1040ac9 100644
--- a/pkg/dev_compiler/lib/src/kernel/nullable_inference.dart
+++ b/pkg/dev_compiler/lib/src/kernel/nullable_inference.dart
@@ -110,15 +110,15 @@
 
   @override
   bool visitMethodInvocation(MethodInvocation node) => _invocationIsNullable(
-      node.interfaceTarget, node.name.name, node.receiver);
+      node.interfaceTarget, node.name.text, node.receiver);
 
   @override
   bool visitDirectMethodInvocation(DirectMethodInvocation node) =>
-      _invocationIsNullable(node.target, node.name.name, node.receiver);
+      _invocationIsNullable(node.target, node.name.text, node.receiver);
 
   @override
   bool visitSuperMethodInvocation(SuperMethodInvocation node) =>
-      _invocationIsNullable(node.interfaceTarget, node.name.name);
+      _invocationIsNullable(node.interfaceTarget, node.name.text);
 
   bool _invocationIsNullable(Member target, String name,
       [Expression receiver]) {
@@ -127,7 +127,7 @@
     // https://github.com/dart-lang/sdk/issues/31854
     if (name == '==') return false;
     if (target == null) return true; // dynamic call
-    if (target.name.name == 'toString' &&
+    if (target.name.text == 'toString' &&
         receiver != null &&
         receiver.getStaticType(_staticTypeContext) ==
             coreTypes.stringLegacyRawType) {
@@ -188,7 +188,7 @@
             typeString.split('|').contains('Null');
       }
     }
-    return _invocationIsNullable(target, node.name.name);
+    return _invocationIsNullable(target, node.name.text);
   }
 
   @override
@@ -274,7 +274,7 @@
     if (node is StaticGet) {
       var t = node.target;
       return t is Field &&
-          t.name.name == fieldName &&
+          t.name.text == fieldName &&
           _isInternalSdkAnnotation(t.enclosingLibrary);
     }
     return false;
diff --git a/pkg/dev_compiler/lib/src/kernel/property_model.dart b/pkg/dev_compiler/lib/src/kernel/property_model.dart
index a0d28e0..cee7fb9 100644
--- a/pkg/dev_compiler/lib/src/kernel/property_model.dart
+++ b/pkg/dev_compiler/lib/src/kernel/property_model.dart
@@ -85,7 +85,7 @@
     Map<String, Field> getInstanceFieldMap(Class c) {
       var instanceFields = c.fields.where((f) => !f.isStatic);
       return HashMap.fromIterables(
-          instanceFields.map((f) => f.name.name), instanceFields);
+          instanceFields.map((f) => f.name.text), instanceFields);
     }
 
     var allFields =
@@ -129,7 +129,7 @@
 
         // Look in all super classes to see if we're overriding a field in our
         // library, if so mark that field as overridden.
-        var name = member.name.name;
+        var name = member.name.text;
         _overriddenPrivateFields.addAll(superclasses
             .map((c) => allFields[c][name])
             .where((f) => f != null));
@@ -228,7 +228,7 @@
           continue;
         }
 
-        var name = member.name.name;
+        var name = member.name.text;
         if (member is Field) {
           inheritedGetters.add(name);
           if (!member.isFinal) inheritedSetters.add(name);
@@ -253,7 +253,7 @@
       // Also ignore abstract fields.
       if (field.isAbstract || field.isStatic) continue;
 
-      var name = field.name.name;
+      var name = field.name.text;
       if (virtualAccessorNames.contains(name) ||
           fieldModel.isVirtual(field) ||
           field.isCovariant ||
@@ -328,7 +328,7 @@
     // we've seen, and visit starting from the class, then mixins in
     // reverse order, then superclasses.
     for (var m in c.members) {
-      var name = m.name.name;
+      var name = m.name.text;
       if (m.isAbstract || m is Constructor) continue;
       if (m is Procedure) {
         if (m.isStatic) continue;
@@ -352,7 +352,7 @@
       for (var m in c.members) {
         if (!m.name.isPrivate &&
             (m is Procedure && !m.isStatic || m is Field && !m.isStatic)) {
-          members.add(m.name.name);
+          members.add(m.name.text);
         }
       }
     }
diff --git a/pkg/dev_compiler/lib/src/kernel/target.dart b/pkg/dev_compiler/lib/src/kernel/target.dart
index 8a54269..d2fc5e5 100644
--- a/pkg/dev_compiler/lib/src/kernel/target.dart
+++ b/pkg/dev_compiler/lib/src/kernel/target.dart
@@ -181,7 +181,7 @@
       var ctor = coreTypes.index
           .getClass('dart:core', '_Invocation')
           .constructors
-          .firstWhere((c) => c.name.name == name);
+          .firstWhere((c) => c.name.text == name);
       return ConstructorInvocation(ctor, Arguments(positional));
     }
 
diff --git a/pkg/front_end/lib/src/api_prototype/lowering_predicates.dart b/pkg/front_end/lib/src/api_prototype/lowering_predicates.dart
index ed9062f..c208be1 100644
--- a/pkg/front_end/lib/src/api_prototype/lowering_predicates.dart
+++ b/pkg/front_end/lib/src/api_prototype/lowering_predicates.dart
@@ -28,8 +28,8 @@
 bool isLateLoweredField(Field node) {
   return node.isInternalImplementation &&
       node.name != null &&
-      node.name.name.startsWith(lateFieldPrefix) &&
-      !node.name.name.endsWith(lateIsSetSuffix);
+      node.name.text.startsWith(lateFieldPrefix) &&
+      !node.name.text.endsWith(lateIsSetSuffix);
 }
 
 /// Returns `true` if [node] is the field holding the marker for whether a
@@ -55,8 +55,8 @@
 bool isLateLoweredIsSetField(Field node) {
   return node.isInternalImplementation &&
       node.name != null &&
-      node.name.name.startsWith(lateFieldPrefix) &&
-      node.name.name.endsWith(lateIsSetSuffix);
+      node.name.text.startsWith(lateFieldPrefix) &&
+      node.name.text.endsWith(lateIsSetSuffix);
 }
 
 /// Returns `true` if [node] is the getter for reading the value of a lowered
@@ -84,11 +84,11 @@
     if (parent is Class) {
       return parent.fields.any((Field field) =>
           isLateLoweredField(field) &&
-          field.name.name.endsWith(node.name.name));
+          field.name.text.endsWith(node.name.text));
     } else if (parent is Library) {
       return parent.fields.any((Field field) =>
           isLateLoweredField(field) &&
-          field.name.name.endsWith(node.name.name));
+          field.name.text.endsWith(node.name.text));
     }
   }
   return false;
@@ -119,11 +119,11 @@
     if (parent is Class) {
       return parent.fields.any((Field field) =>
           isLateLoweredField(field) &&
-          field.name.name.endsWith(node.name.name));
+          field.name.text.endsWith(node.name.text));
     } else if (parent is Library) {
       return parent.fields.any((Field field) =>
           isLateLoweredField(field) &&
-          field.name.name.endsWith(node.name.name));
+          field.name.text.endsWith(node.name.text));
     }
   }
   return false;
diff --git a/pkg/front_end/lib/src/fasta/builder/class_builder.dart b/pkg/front_end/lib/src/fasta/builder/class_builder.dart
index 1a6eb5d..4c5b699 100644
--- a/pkg/front_end/lib/src/fasta/builder/class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/class_builder.dart
@@ -755,7 +755,7 @@
         : procedure.isSetter
             ? 'set:'
             : '';
-    String invocationName = prefix + procedure.name.name;
+    String invocationName = prefix + procedure.name.text;
     if (procedure.isSetter) invocationName += '=';
     Expression invocation = target.backendTarget.instantiateInvocation(
         target.loader.coreTypes,
diff --git a/pkg/front_end/lib/src/fasta/builder/extension_builder.dart b/pkg/front_end/lib/src/fasta/builder/extension_builder.dart
index 5dbfb12..b361811 100644
--- a/pkg/front_end/lib/src/fasta/builder/extension_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/extension_builder.dart
@@ -119,7 +119,7 @@
   Builder lookupLocalMemberByName(Name name,
       {bool setter: false, bool required: false}) {
     Builder builder =
-        lookupLocalMember(name.name, setter: setter, required: required);
+        lookupLocalMember(name.text, setter: setter, required: required);
     if (builder != null && name.isPrivate && library.library != name.library) {
       builder = null;
     }
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_class_builder.dart b/pkg/front_end/lib/src/fasta/dill/dill_class_builder.dart
index 73003a2..b8afcf7 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_class_builder.dart
@@ -73,7 +73,7 @@
 
   void addMember(Member member) {
     DillMemberBuilder builder = new DillMemberBuilder(member, this);
-    String name = member.name.name;
+    String name = member.name.text;
     if (builder.isConstructor || builder.isFactory) {
       constructorScopeBuilder.addMember(name, builder);
     } else if (builder.isSetter) {
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_extension_builder.dart b/pkg/front_end/lib/src/fasta/dill/dill_extension_builder.dart
index 803ebd2..86aaa4d 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_extension_builder.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_extension_builder.dart
@@ -52,12 +52,12 @@
         case ExtensionMemberKind.Operator:
         case ExtensionMemberKind.Field:
           Member member = descriptor.member.asMember;
-          scopeBuilder.addMember(name.name,
+          scopeBuilder.addMember(name.text,
               new DillExtensionMemberBuilder(member, descriptor, this));
           break;
         case ExtensionMemberKind.Setter:
           Member member = descriptor.member.asMember;
-          scopeBuilder.addSetter(name.name,
+          scopeBuilder.addSetter(name.text,
               new DillExtensionMemberBuilder(member, descriptor, this));
           break;
       }
@@ -65,7 +65,7 @@
     _methods.forEach((Name name, ExtensionMemberDescriptor descriptor) {
       Member member = descriptor.member.asMember;
       scopeBuilder.addMember(
-          name.name,
+          name.text,
           new DillExtensionMemberBuilder(
               member, descriptor, this, _tearOffs[name]));
     });
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_library_builder.dart b/pkg/front_end/lib/src/fasta/dill/dill_library_builder.dart
index 07ed03c..e36d001 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_library_builder.dart
@@ -187,7 +187,7 @@
   }
 
   void addMember(Member member) {
-    String name = member.name.name;
+    String name = member.name.text;
     if (name == "_exports#") {
       Field field = member;
       String stringValue;
@@ -327,11 +327,11 @@
           name = node.name;
         } else if (node is Procedure) {
           libraryUri = node.enclosingLibrary.importUri;
-          name = node.name.name;
+          name = node.name.text;
           isSetter = node.isSetter;
         } else if (node is Member) {
           libraryUri = node.enclosingLibrary.importUri;
-          name = node.name.name;
+          name = node.name.text;
         } else if (node is Typedef) {
           libraryUri = node.enclosingLibrary.importUri;
           name = node.name;
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_member_builder.dart b/pkg/front_end/lib/src/fasta/dill/dill_member_builder.dart
index 2426266..ca51796 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_member_builder.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_member_builder.dart
@@ -33,7 +33,7 @@
 
   String get debugName => "DillMemberBuilder";
 
-  String get name => member.name.name;
+  String get name => member.name.text;
 
   bool get isConstructor => member is Constructor;
 
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index b009d4a..713947d 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -1181,7 +1181,7 @@
       Member resolvedTarget = redirectionTarget?.target;
 
       if (resolvedTarget == null) {
-        String name = constructorNameForDiagnostics(initialTarget.name.name,
+        String name = constructorNameForDiagnostics(initialTarget.name.text,
             className: initialTarget.enclosingClass.name);
         // TODO(dmitryas): Report this error earlier.
         replacementNode = buildProblem(
@@ -1470,7 +1470,7 @@
                   builder.charOffset, const <TypeParameter>[]) !=
               null) {
         String superclass = classBuilder.supertypeBuilder.fullNameForErrors;
-        int length = constructor.name.name.length;
+        int length = constructor.name.text.length;
         if (length == 0) {
           length = (constructor.parent as Class).name.length;
         }
@@ -1847,7 +1847,7 @@
             .withArguments(candidate.enclosingClass.name);
       } else {
         if (candidate is Constructor) {
-          if (candidate.name.name == '') {
+          if (candidate.name.text == '') {
             length = candidate.enclosingClass.name.length;
           } else {
             // Assume no spaces around the dot. Not perfect, but probably the
@@ -1887,10 +1887,10 @@
       bool reportWarning: true,
       List<LocatedMessage> context}) {
     Message message = isSuper
-        ? fasta.templateSuperclassHasNoGetter.withArguments(name.name)
-        : fasta.templateGetterNotFound.withArguments(name.name);
+        ? fasta.templateSuperclassHasNoGetter.withArguments(name.text)
+        : fasta.templateGetterNotFound.withArguments(name.text);
     if (reportWarning) {
-      addProblemErrorIfConst(message, charOffset, name.name.length,
+      addProblemErrorIfConst(message, charOffset, name.text.length,
           context: context);
     }
     return message;
@@ -1902,10 +1902,10 @@
       bool reportWarning: true,
       List<LocatedMessage> context}) {
     Message message = isSuper
-        ? fasta.templateSuperclassHasNoSetter.withArguments(name.name)
-        : fasta.templateSetterNotFound.withArguments(name.name);
+        ? fasta.templateSuperclassHasNoSetter.withArguments(name.text)
+        : fasta.templateSetterNotFound.withArguments(name.text);
     if (reportWarning) {
-      addProblemErrorIfConst(message, charOffset, name.name.length,
+      addProblemErrorIfConst(message, charOffset, name.text.length,
           context: context);
     }
     return message;
@@ -1916,7 +1916,7 @@
       {bool isSuper: false,
       bool reportWarning: true,
       List<LocatedMessage> context}) {
-    String plainName = name.name;
+    String plainName = name.text;
     int dotIndex = plainName.lastIndexOf(".");
     if (dotIndex != -1) {
       plainName = plainName.substring(dotIndex + 1);
@@ -1928,8 +1928,8 @@
       length = 1;
     }
     Message message = isSuper
-        ? fasta.templateSuperclassHasNoMethod.withArguments(name.name)
-        : fasta.templateMethodNotFound.withArguments(name.name);
+        ? fasta.templateSuperclassHasNoMethod.withArguments(name.text)
+        : fasta.templateMethodNotFound.withArguments(name.text);
     if (reportWarning) {
       addProblemErrorIfConst(message, charOffset, length, context: context);
     }
@@ -3989,7 +3989,7 @@
         target.function, arguments, charOffset, typeParameters);
     if (argMessage != null) {
       return throwNoSuchMethodError(forest.createNullLiteral(charOffset),
-          target.name.name, arguments, charOffset,
+          target.name.text, arguments, charOffset,
           candidate: target, message: argMessage);
     }
 
@@ -4064,7 +4064,7 @@
         target.function, arguments, fileOffset, typeParameters);
     if (argMessage != null) {
       return throwNoSuchMethodError(forest.createNullLiteral(fileOffset),
-          target.name.name, arguments, fileOffset,
+          target.name.text, arguments, fileOffset,
           candidate: target, message: argMessage);
     }
 
@@ -5979,7 +5979,7 @@
       [int charOffset = -1]) {
     if (member.isConst && !constructor.isConst) {
       addProblem(fasta.messageConstConstructorWithNonConstSuper, charOffset,
-          constructor.name.name.length);
+          constructor.name.text.length);
     }
     needsImplicitSuperInitializer = false;
     return new SuperInitializer(constructor, arguments)
@@ -5992,8 +5992,8 @@
       Constructor constructor, Arguments arguments,
       [int charOffset = -1]) {
     if (classBuilder.checkConstructorCyclic(
-        member.name, constructor.name.name)) {
-      int length = constructor.name.name.length;
+        member.name, constructor.name.text)) {
+      int length = constructor.name.text.length;
       if (length == 0) length = "this".length;
       addProblem(fasta.messageConstructorCyclic, charOffset, length);
       // TODO(askesc): Produce invalid initializer.
@@ -6146,7 +6146,7 @@
           fasta.templateNotConstantExpression
               .withArguments('Method invocation'),
           offset,
-          name.name.length);
+          name.text.length);
     }
     if (isSuper) {
       // We can ignore [isNullAware] on super sends.
@@ -6160,9 +6160,9 @@
           target = null;
           addProblemErrorIfConst(
               fasta.templateSuperclassMethodArgumentMismatch
-                  .withArguments(name.name),
+                  .withArguments(name.text),
               offset,
-              name.name.length);
+              name.text.length);
         }
         return new SuperMethodInvocation(name, arguments, target)
           ..fileOffset = offset;
diff --git a/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart b/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart
index b7a9d24..13c33ac 100644
--- a/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart
@@ -581,9 +581,9 @@
     if (declaration?.isStatic ?? true) return null;
     if (declaration.isDuplicate) {
       library?.addProblem(
-          templateDuplicatedDeclarationUse.withArguments(name.name),
+          templateDuplicatedDeclarationUse.withArguments(name.text),
           charOffset,
-          name.name.length,
+          name.text.length,
           library.fileUri);
       return null;
     }
diff --git a/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart b/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
index a15f7be..926b2f8 100644
--- a/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
@@ -1585,7 +1585,7 @@
               unevaluatedArguments(arguments, {}, node.arguments.types)));
     }
 
-    final String op = node.name.name;
+    final String op = node.name.text;
 
     // Handle == and != first (it's common between all types). Since `a != b` is
     // parsed as `!(a == b)` it is handled implicitly through ==.
@@ -1835,7 +1835,7 @@
     }
 
     final Constant receiver = _evaluateSubexpression(node.receiver);
-    if (receiver is StringConstant && node.name.name == 'length') {
+    if (receiver is StringConstant && node.name.text == 'length') {
       return canonicalize(intFolder.makeIntConstant(receiver.value.length));
     } else if (shouldBeUnevaluated) {
       return unevaluated(node,
@@ -1846,7 +1846,7 @@
     return report(
         node,
         templateConstEvalInvalidPropertyGet.withArguments(
-            node.name.name, receiver, isNonNullableByDefault));
+            node.name.text, receiver, isNonNullableByDefault));
   }
 
   @override
@@ -1910,7 +1910,7 @@
         return report(
             node,
             templateConstEvalInvalidStaticInvocation
-                .withArguments(target.name.name));
+                .withArguments(target.name.text));
       } else if (target is Procedure) {
         if (target.kind == ProcedureKind.Method) {
           return canonicalize(new TearOffConstant(target));
@@ -1918,7 +1918,7 @@
         return report(
             node,
             templateConstEvalInvalidStaticInvocation
-                .withArguments(target.name.name));
+                .withArguments(target.name.text));
       } else {
         reportInvalid(
             node, 'No support for ${target.runtimeType} in a static-get.');
@@ -2064,13 +2064,13 @@
       if (target.isConst &&
           target.enclosingLibrary == coreTypes.coreLibrary &&
           positionals.length == 1 &&
-          (target.name.name == "fromEnvironment" ||
-              target.name.name == "hasEnvironment")) {
+          (target.name.text == "fromEnvironment" ||
+              target.name.text == "hasEnvironment")) {
         if (environmentDefines != null) {
           // Evaluate environment constant.
           Constant name = positionals.single;
           if (name is StringConstant) {
-            if (target.name.name == "fromEnvironment") {
+            if (target.name.text == "fromEnvironment") {
               return _handleFromEnvironment(target, name, named);
             } else {
               return _handleHasEnvironment(name);
@@ -2087,7 +2087,7 @@
                   isConst: true));
         }
       }
-    } else if (target.name.name == 'identical') {
+    } else if (target.name.text == 'identical') {
       // Ensure the "identical()" function comes from dart:core.
       final TreeNode parent = target.parent;
       if (parent is Library && parent == coreTypes.coreLibrary) {
@@ -2123,7 +2123,7 @@
       return report(node, messageConstEvalExtension);
     }
 
-    String name = target.name.name;
+    String name = target.name.text;
     if (target is Procedure && target.isFactory) {
       if (name.isEmpty) {
         name = target.enclosingClass.name;
@@ -2325,7 +2325,7 @@
     if (cached != null) return cached;
     for (Procedure procedure in klass.procedures) {
       if (procedure.kind == ProcedureKind.Operator &&
-          procedure.name.name == '==' &&
+          procedure.name.text == '==' &&
           !procedure.isAbstract &&
           !procedure.isForwardingStub) {
         return primitiveEqualCache[klass] = false;
diff --git a/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart b/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
index ec809d6..659754b 100644
--- a/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
@@ -471,7 +471,7 @@
   String get _debugName => "PropertyAccessGenerator";
 
   @override
-  String get _plainNameForRead => name.name;
+  String get _plainNameForRead => name.text;
 
   @override
   Expression doInvocation(
@@ -486,7 +486,7 @@
     sink.write(", receiver: ");
     printNodeOn(receiver, sink, syntheticNames: syntheticNames);
     sink.write(", name: ");
-    sink.write(name.name);
+    sink.write(name.text);
   }
 
   @override
@@ -624,7 +624,7 @@
   String get _debugName => "ThisPropertyAccessGenerator";
 
   @override
-  String get _plainNameForRead => name.name;
+  String get _plainNameForRead => name.text;
 
   @override
   Expression buildSimpleRead() {
@@ -715,7 +715,7 @@
   @override
   void printOn(StringSink sink) {
     sink.write(", name: ");
-    sink.write(name.name);
+    sink.write(name.text);
   }
 }
 
@@ -738,7 +738,7 @@
   Expression receiverAccess() => new VariableGet(receiver);
 
   @override
-  String get _plainNameForRead => name.name;
+  String get _plainNameForRead => name.text;
 
   @override
   Expression buildSimpleRead() {
@@ -823,7 +823,7 @@
     sink.write(", receiverExpression: ");
     printNodeOn(receiverExpression, sink, syntheticNames: syntheticNames);
     sink.write(", name: ");
-    sink.write(name.name);
+    sink.write(name.text);
   }
 }
 
@@ -842,7 +842,7 @@
   String get _debugName => "SuperPropertyAccessGenerator";
 
   @override
-  String get _plainNameForRead => name.name;
+  String get _plainNameForRead => name.text;
 
   @override
   Expression buildSimpleRead() {
@@ -936,7 +936,7 @@
   void printOn(StringSink sink) {
     NameSystem syntheticNames = new NameSystem();
     sink.write(", name: ");
-    sink.write(name.name);
+    sink.write(name.text);
     sink.write(", getter: ");
     printQualifiedNameOn(getter, sink, syntheticNames: syntheticNames);
     sink.write(", setter: ");
@@ -1458,11 +1458,11 @@
       return _helper.buildProblem(
           templateNotConstantExpression.withArguments('Method invocation'),
           offset,
-          readTarget?.name?.name?.length ?? 0);
+          readTarget?.name?.text?.length ?? 0);
     }
     if (readTarget == null || isFieldOrGetter(readTarget)) {
       return _helper.forest.createExpressionInvocation(
-          offset + (readTarget?.name?.name?.length ?? 0),
+          offset + (readTarget?.name?.text?.length ?? 0),
           buildSimpleRead(),
           arguments);
     } else {
@@ -1935,7 +1935,7 @@
   String get _debugName => "ExplicitExtensionIndexedAccessGenerator";
 
   @override
-  String get _plainNameForRead => targetName.name;
+  String get _plainNameForRead => targetName.text;
 
   List<DartType> _createExtensionTypeArguments() {
     return explicitTypeArguments ?? const <DartType>[];
@@ -3079,7 +3079,7 @@
     if (declarationBuilder is DeclarationBuilder) {
       DeclarationBuilder declaration = declarationBuilder;
       Builder member = declaration.findStaticBuilder(
-          name.name, offsetForToken(send.token), _uri, _helper.libraryBuilder);
+          name.text, offsetForToken(send.token), _uri, _helper.libraryBuilder);
 
       Generator generator;
       if (member == null) {
@@ -3092,7 +3092,7 @@
               send.token,
               send.token,
               arguments,
-              name.name,
+              name.text,
               send.typeArguments,
               token.charOffset,
               Constness.implicit,
@@ -3100,7 +3100,7 @@
         }
       } else if (member is AmbiguousBuilder) {
         return _helper.buildProblem(
-            member.message, member.charOffset, name.name.length);
+            member.message, member.charOffset, name.text.length);
       } else {
         Builder setter;
         if (member.isSetter) {
@@ -3108,13 +3108,13 @@
           member = null;
         } else if (member.isGetter) {
           setter = declaration.findStaticBuilder(
-              name.name, fileOffset, _uri, _helper.libraryBuilder,
+              name.text, fileOffset, _uri, _helper.libraryBuilder,
               isSetter: true);
         } else if (member.isField) {
           MemberBuilder fieldBuilder = member;
           if (!fieldBuilder.isAssignable) {
             setter = declaration.findStaticBuilder(
-                name.name, fileOffset, _uri, _helper.libraryBuilder,
+                name.text, fileOffset, _uri, _helper.libraryBuilder,
                 isSetter: true);
           } else {
             setter = member;
@@ -3122,7 +3122,7 @@
         }
         generator = new StaticAccessGenerator.fromBuilder(
             _helper,
-            name.name,
+            name.text,
             send.token,
             member is MemberBuilder ? member : null,
             setter is MemberBuilder ? setter : null);
@@ -3338,7 +3338,7 @@
   Name get name => unsupported("name", fileOffset, _uri);
 
   @override
-  String get _plainNameForRead => name.name;
+  String get _plainNameForRead => name.text;
 
   withReceiver(Object receiver, int operatorOffset, {bool isNullAware}) => this;
 
@@ -3454,7 +3454,7 @@
 
   factory UnresolvedNameGenerator(
       ExpressionGeneratorHelper helper, Token token, Name name) {
-    if (name.name.isEmpty) {
+    if (name.text.isEmpty) {
       unhandled("empty", "name", offsetForToken(token), helper.uri);
     }
     return new UnresolvedNameGenerator.internal(helper, token, name);
@@ -3511,7 +3511,7 @@
   @override
   void printOn(StringSink sink) {
     sink.write(", name: ");
-    sink.write(name.name);
+    sink.write(name.text);
   }
 
   Expression _buildUnresolvedVariableAssignment(
@@ -3719,7 +3719,7 @@
   @override
   void printOn(StringSink sink) {
     sink.write(", binaryOperator: ");
-    sink.write(binaryOperator.name);
+    sink.write(binaryOperator.text);
   }
 }
 
@@ -3801,8 +3801,8 @@
   /* Expression | Generator */ buildPropertyAccess(
       IncompleteSendGenerator send, int operatorOffset, bool isNullAware) {
     if (send is IncompleteSendGenerator) {
-      assert(send.name.name == send.token.lexeme,
-          "'${send.name.name}' != ${send.token.lexeme}");
+      assert(send.name.text == send.token.lexeme,
+          "'${send.name.text}' != ${send.token.lexeme}");
       Object result = qualifiedLookup(send.token);
       if (send is SendAccessGenerator) {
         result = _helper.finishSend(
@@ -4265,7 +4265,7 @@
           constructor.function, arguments, offset, <TypeParameter>[]);
     } else {
       String fullName =
-          _helper.constructorNameForDiagnostics(name.name, isSuper: isSuper);
+          _helper.constructorNameForDiagnostics(name.text, isSuper: isSuper);
       message = (isSuper
               ? templateSuperclassHasNoConstructor
               : templateConstructorNotFound)
@@ -4276,7 +4276,7 @@
       return _helper.buildInvalidInitializer(
           _helper.throwNoSuchMethodError(
               _forest.createNullLiteral(offset),
-              _helper.constructorNameForDiagnostics(name.name,
+              _helper.constructorNameForDiagnostics(name.text,
                   isSuper: isSuper),
               arguments,
               offset,
@@ -4434,7 +4434,7 @@
     assert(arguments != null);
   }
 
-  String get _plainNameForRead => name.name;
+  String get _plainNameForRead => name.text;
 
   String get _debugName => "SendAccessGenerator";
 
@@ -4494,7 +4494,7 @@
   @override
   void printOn(StringSink sink) {
     sink.write(", name: ");
-    sink.write(name.name);
+    sink.write(name.text);
     sink.write(", arguments: ");
     Arguments node = arguments;
     if (node is Node) {
@@ -4513,7 +4513,7 @@
       ExpressionGeneratorHelper helper, Token token, this.name)
       : super(helper, token);
 
-  String get _plainNameForRead => name.name;
+  String get _plainNameForRead => name.text;
 
   String get _debugName => "IncompletePropertyAccessGenerator";
 
@@ -4572,7 +4572,7 @@
   @override
   void printOn(StringSink sink) {
     sink.write(", name: ");
-    sink.write(name.name);
+    sink.write(name.text);
   }
 }
 
diff --git a/pkg/front_end/lib/src/fasta/kernel/forwarding_node.dart b/pkg/front_end/lib/src/fasta/kernel/forwarding_node.dart
index 0ed93a7..9daa3e6 100644
--- a/pkg/front_end/lib/src/fasta/kernel/forwarding_node.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/forwarding_node.dart
@@ -92,7 +92,7 @@
     Procedure referenceFrom;
     if (classBuilder.referencesFromIndexed != null) {
       referenceFrom = classBuilder.referencesFromIndexed
-          .lookupProcedureNotSetter(name.name);
+          .lookupProcedureNotSetter(name.text);
     }
     return new Procedure(name, kind, new FunctionNode(null, returnType: type),
         isAbstract: true,
@@ -115,7 +115,7 @@
     Procedure referenceFrom;
     if (classBuilder.referencesFromIndexed != null) {
       referenceFrom =
-          classBuilder.referencesFromIndexed.lookupProcedureSetter(name.name);
+          classBuilder.referencesFromIndexed.lookupProcedureSetter(name.text);
     }
     return new Procedure(
         name,
@@ -216,7 +216,7 @@
       Procedure referenceFrom;
       if (classBuilder.referencesFromIndexed != null) {
         referenceFrom = classBuilder.referencesFromIndexed
-            .lookupProcedureNotSetter(name.name);
+            .lookupProcedureNotSetter(name.text);
       }
       List<VariableDeclaration> positionalParameters = [];
       for (int i = 0; i < function.positionalParameters.length; i++) {
@@ -776,10 +776,10 @@
     if (classBuilder.referencesFromIndexed != null) {
       if (kind == ProcedureKind.Setter) {
         referenceFrom =
-            classBuilder.referencesFromIndexed.lookupProcedureSetter(name.name);
+            classBuilder.referencesFromIndexed.lookupProcedureSetter(name.text);
       } else {
         referenceFrom = classBuilder.referencesFromIndexed
-            .lookupProcedureNotSetter(name.name);
+            .lookupProcedureNotSetter(name.text);
       }
     }
     return new Procedure(name, kind, function,
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 f823190..e606538 100644
--- a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
@@ -3725,9 +3725,9 @@
           inferrer.helper.wrapInProblem(
               binary,
               templateNullableOperatorCallError.withArguments(
-                  binaryName.name, leftType, inferrer.isNonNullableByDefault),
+                  binaryName.text, leftType, inferrer.isNonNullableByDefault),
               binary.fileOffset,
-              binaryName.name.length));
+              binaryName.text.length));
     }
     return new ExpressionInferenceResult(binaryType, binary);
   }
@@ -3823,10 +3823,10 @@
           unaryType,
           inferrer.helper.wrapInProblem(
               unary,
-              templateNullableOperatorCallError.withArguments(unaryName.name,
+              templateNullableOperatorCallError.withArguments(unaryName.text,
                   expressionType, inferrer.isNonNullableByDefault),
               unary.fileOffset,
-              unaryName == unaryMinusName ? 1 : unaryName.name.length));
+              unaryName == unaryMinusName ? 1 : unaryName.text.length));
     }
     return new ExpressionInferenceResult(unaryType, unary);
   }
@@ -3909,7 +3909,7 @@
           readType,
           inferrer.helper.wrapInProblem(
               read,
-              templateNullableOperatorCallError.withArguments(indexGetName.name,
+              templateNullableOperatorCallError.withArguments(indexGetName.text,
                   receiverType, inferrer.isNonNullableByDefault),
               read.fileOffset,
               noLength));
@@ -3973,7 +3973,7 @@
       return inferrer.helper.wrapInProblem(
           write,
           templateNullableOperatorCallError.withArguments(
-              indexSetName.name, receiverType, inferrer.isNonNullableByDefault),
+              indexSetName.text, receiverType, inferrer.isNonNullableByDefault),
           write.fileOffset,
           noLength);
     }
@@ -4107,9 +4107,9 @@
       readResult = inferrer.wrapExpressionInferenceResultInProblem(
           readResult,
           templateNullablePropertyAccessError.withArguments(
-              propertyName.name, receiverType, inferrer.isNonNullableByDefault),
+              propertyName.text, receiverType, inferrer.isNonNullableByDefault),
           read.fileOffset,
-          propertyName.name.length);
+          propertyName.text.length);
     }
     return readResult;
   }
@@ -4191,9 +4191,9 @@
       return inferrer.helper.wrapInProblem(
           write,
           templateNullablePropertyAccessError.withArguments(
-              propertyName.name, receiverType, inferrer.isNonNullableByDefault),
+              propertyName.text, receiverType, inferrer.isNonNullableByDefault),
           write.fileOffset,
-          propertyName.name.length);
+          propertyName.text.length);
     }
 
     return write;
diff --git a/pkg/front_end/lib/src/fasta/kernel/internal_ast.dart b/pkg/front_end/lib/src/fasta/kernel/internal_ast.dart
index 68d00f9..a47d7a5 100644
--- a/pkg/front_end/lib/src/fasta/kernel/internal_ast.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/internal_ast.dart
@@ -698,9 +698,9 @@
     }
     printer.writeClassName(target.enclosingClass.reference);
     printer.writeTypeArguments(arguments.types);
-    if (target.name.name.isNotEmpty) {
+    if (target.name.text.isNotEmpty) {
       printer.write('.');
-      printer.write(target.name.name);
+      printer.write(target.name.text);
     }
     printer.writeArguments(arguments, includeTypeArguments: false);
   }
@@ -3557,12 +3557,12 @@
   }
 
   @override
-  int get precedence => Precedence.binaryPrecedence[binaryName.name];
+  int get precedence => Precedence.binaryPrecedence[binaryName.text];
 
   @override
   void toTextInternal(AstPrinter printer) {
     printer.writeExpression(left, minimumPrecedence: precedence);
-    printer.write(' ${binaryName.name} ');
+    printer.write(' ${binaryName.text} ');
     printer.writeExpression(right, minimumPrecedence: precedence);
   }
 }
@@ -3611,7 +3611,7 @@
     if (unaryName == unaryMinusName) {
       printer.write('-');
     } else {
-      printer.write('${unaryName.name}');
+      printer.write('${unaryName.text}');
     }
     printer.writeExpression(expression, minimumPrecedence: precedence);
   }
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_api.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_api.dart
index cc23b9c..c8165a2 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_api.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_api.dart
@@ -47,6 +47,6 @@
       sink.write(cls.name ?? syntheticNames.nameClass(cls));
       sink.write("::");
     }
-    sink.write(member.name?.name ?? syntheticNames.nameMember(member));
+    sink.write(member.name?.text ?? syntheticNames.nameMember(member));
   }
 }
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
index 4472d88..ab208ce 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
@@ -609,7 +609,7 @@
             builder.getSubstitutionMap(supertype.cls);
         for (Constructor constructor in supertype.cls.constructors) {
           Constructor referenceFrom =
-              indexedClass?.lookupConstructor(constructor.name.name);
+              indexedClass?.lookupConstructor(constructor.name.text);
 
           builder.addSyntheticConstructor(makeMixinApplicationConstructor(
               builder.cls,
@@ -849,7 +849,7 @@
         }
       });
       Set<String> kernelConstructorNames =
-          cls.constructors.map((c) => c.name.name).toSet().difference({""});
+          cls.constructors.map((c) => c.name.text).toSet().difference({""});
       return kernelConstructorNames.containsAll(patchConstructorNames);
     }(),
         "Constructors of class '${builder.fullNameForErrors}' "
@@ -860,7 +860,7 @@
         if (initializer is RedirectingInitializer) {
           if (constructor.isConst && !initializer.target.isConst) {
             builder.addProblem(messageConstConstructorRedirectionToNonConst,
-                initializer.fileOffset, initializer.target.name.name.length);
+                initializer.fileOffset, initializer.target.name.text.length);
           }
           isRedirecting = true;
           break;
@@ -1072,7 +1072,7 @@
           patchFieldNames.remove(name);
         }
       });
-      Set<String> kernelFieldNames = cls.fields.map((f) => f.name.name).toSet();
+      Set<String> kernelFieldNames = cls.fields.map((f) => f.name.text).toSet();
       return kernelFieldNames.containsAll(patchFieldNames);
     }(),
         "Fields of class '${builder.fullNameForErrors}' "
@@ -1239,7 +1239,7 @@
   Class superclass = cls.superclass;
   if (superclass != null) {
     for (Constructor constructor in superclass.constructors) {
-      if (constructor.name.name.isEmpty) {
+      if (constructor.name.text.isEmpty) {
         return constructor.function.requiredParameterCount == 0
             ? constructor
             : null;
diff --git a/pkg/front_end/lib/src/fasta/kernel/load_library_builder.dart b/pkg/front_end/lib/src/fasta/kernel/load_library_builder.dart
index 4196292..9c26327 100644
--- a/pkg/front_end/lib/src/fasta/kernel/load_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/load_library_builder.dart
@@ -51,7 +51,7 @@
     String prefix = expression.import.name;
     Name name = new Name('_#loadLibrary_$prefix', parent.library);
     Procedure referencesFrom =
-        parent.lookupLibraryReferenceProcedure(name.name, false);
+        parent.lookupLibraryReferenceProcedure(name.text, false);
     tearoff = new Procedure(
         name,
         ProcedureKind.Method,
diff --git a/pkg/front_end/lib/src/fasta/kernel/redirecting_factory_body.dart b/pkg/front_end/lib/src/fasta/kernel/redirecting_factory_body.dart
index 35757bd..3a12ab4 100644
--- a/pkg/front_end/lib/src/fasta/kernel/redirecting_factory_body.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/redirecting_factory_body.dart
@@ -35,7 +35,7 @@
 bool isRedirectingFactoryField(Member member) {
   return member is Field &&
       member.isStatic &&
-      member.name.name == redirectingName;
+      member.name.text == redirectingName;
 }
 
 /// Name used for a synthesized let variable used to encode redirecting factory
diff --git a/pkg/front_end/lib/src/fasta/kernel/type_labeler.dart b/pkg/front_end/lib/src/fasta/kernel/type_labeler.dart
index e7f565a..06556d5 100644
--- a/pkg/front_end/lib/src/fasta/kernel/type_labeler.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/type_labeler.dart
@@ -369,7 +369,7 @@
           classNode.enclosingLibrary.fileUri));
       result.add(".");
     }
-    result.add(procedure.name.name);
+    result.add(procedure.name.text);
   }
 
   void visitPartialInstantiationConstant(PartialInstantiationConstant node) {
diff --git a/pkg/front_end/lib/src/fasta/kernel/verifier.dart b/pkg/front_end/lib/src/fasta/kernel/verifier.dart
index f17aaef..3f0877b 100644
--- a/pkg/front_end/lib/src/fasta/kernel/verifier.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/verifier.dart
@@ -240,7 +240,7 @@
   @override
   void visitField(Field node) {
     enterTreeNode(node);
-    fileUri = checkLocation(node, node.name.name, node.fileUri);
+    fileUri = checkLocation(node, node.name.text, node.fileUri);
     super.visitField(node);
     exitTreeNode(node);
   }
@@ -248,7 +248,7 @@
   @override
   void visitProcedure(Procedure node) {
     enterTreeNode(node);
-    fileUri = checkLocation(node, node.name.name, node.fileUri);
+    fileUri = checkLocation(node, node.name.text, node.fileUri);
     super.visitProcedure(node);
     exitTreeNode(node);
   }
diff --git a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
index 3708c2d..85f9056 100644
--- a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
@@ -620,7 +620,7 @@
   }
 
   void addSyntheticConstructor(Constructor constructor) {
-    String name = constructor.name.name;
+    String name = constructor.name.text;
     cls.constructors.add(constructor);
     constructor.parent = cls;
     DillMemberBuilder memberBuilder = new DillMemberBuilder(constructor, this);
@@ -718,10 +718,10 @@
     if (referencesFromIndexed != null) {
       if (procedure.isSetter) {
         referenceFrom =
-            referencesFromIndexed.lookupProcedureSetter(procedure.name.name);
+            referencesFromIndexed.lookupProcedureSetter(procedure.name.text);
       } else {
         referenceFrom =
-            referencesFromIndexed.lookupProcedureNotSetter(procedure.name.name);
+            referencesFromIndexed.lookupProcedureNotSetter(procedure.name.text);
       }
     }
 
@@ -748,7 +748,7 @@
     Procedure referenceFrom;
     if (referencesFromIndexed != null) {
       referenceFrom =
-          referencesFromIndexed.lookupProcedureNotSetter(field.name.name);
+          referencesFromIndexed.lookupProcedureNotSetter(field.name.text);
     }
     Procedure getter = new Procedure(
         field.name,
@@ -777,7 +777,7 @@
     Procedure referenceFrom;
     if (referencesFromIndexed != null) {
       referenceFrom =
-          referencesFromIndexed.lookupProcedureSetter(field.name.name);
+          referencesFromIndexed.lookupProcedureSetter(field.name.text);
     }
 
     Procedure setter = new Procedure(
@@ -1236,14 +1236,14 @@
           declaredMember,
           templateOverrideTypeVariablesMismatch.withArguments(
               "${declaredMember.enclosingClass.name}."
-                  "${declaredMember.name.name}",
+                  "${declaredMember.name.text}",
               "${interfaceMemberOrigin.enclosingClass.name}."
-                  "${interfaceMemberOrigin.name.name}"),
+                  "${interfaceMemberOrigin.name.text}"),
           declaredMember.fileOffset,
           noLength,
           context: [
             templateOverriddenMethodCause
-                .withArguments(interfaceMemberOrigin.name.name)
+                .withArguments(interfaceMemberOrigin.name.text)
                 .withLocation(_getMemberUri(interfaceMemberOrigin),
                     interfaceMemberOrigin.fileOffset, noLength)
           ]);
@@ -1284,16 +1284,16 @@
                     declaredBound,
                     declaredParameter.name,
                     "${declaredMember.enclosingClass.name}."
-                        "${declaredMember.name.name}",
+                        "${declaredMember.name.text}",
                     computedBound,
                     "${interfaceMemberOrigin.enclosingClass.name}."
-                        "${interfaceMemberOrigin.name.name}",
+                        "${interfaceMemberOrigin.name.text}",
                     library.isNonNullableByDefault),
                 declaredMember.fileOffset,
                 noLength,
                 context: [
                   templateOverriddenMethodCause
-                      .withArguments(interfaceMemberOrigin.name.name)
+                      .withArguments(interfaceMemberOrigin.name.text)
                       .withLocation(_getMemberUri(interfaceMemberOrigin),
                           interfaceMemberOrigin.fileOffset, noLength)
                 ]);
@@ -1368,10 +1368,10 @@
                   supertype, subtype, SubtypeCheckMode.ignoringNullabilities));
       if (isErrorInNnbdOptedOutMode || library.isNonNullableByDefault) {
         String declaredMemberName = '${declaredMember.enclosingClass.name}'
-            '.${declaredMember.name.name}';
+            '.${declaredMember.name.text}';
         String interfaceMemberName =
             '${interfaceMemberOrigin.enclosingClass.name}'
-            '.${interfaceMemberOrigin.name.name}';
+            '.${interfaceMemberOrigin.name.text}';
         Message message;
         int fileOffset;
         if (declaredParameter == null) {
@@ -1406,7 +1406,7 @@
             isInterfaceCheck, declaredMember, message, fileOffset, noLength,
             context: [
               templateOverriddenMethodCause
-                  .withArguments(interfaceMemberOrigin.name.name)
+                  .withArguments(interfaceMemberOrigin.name.text)
                   .withLocation(_getMemberUri(interfaceMemberOrigin),
                       interfaceMemberOrigin.fileOffset, noLength)
             ]);
@@ -1466,14 +1466,14 @@
           declaredMember,
           templateOverrideFewerPositionalArguments.withArguments(
               "${declaredMember.enclosingClass.name}."
-                  "${declaredMember.name.name}",
+                  "${declaredMember.name.text}",
               "${interfaceMember.enclosingClass.name}."
-                  "${interfaceMember.name.name}"),
+                  "${interfaceMember.name.text}"),
           declaredMember.fileOffset,
           noLength,
           context: [
             templateOverriddenMethodCause
-                .withArguments(interfaceMember.name.name)
+                .withArguments(interfaceMember.name.text)
                 .withLocation(interfaceMember.fileUri,
                     interfaceMember.fileOffset, noLength)
           ]);
@@ -1485,14 +1485,14 @@
           declaredMember,
           templateOverrideMoreRequiredArguments.withArguments(
               "${declaredMember.enclosingClass.name}."
-                  "${declaredMember.name.name}",
+                  "${declaredMember.name.text}",
               "${interfaceMember.enclosingClass.name}."
-                  "${interfaceMember.name.name}"),
+                  "${interfaceMember.name.text}"),
           declaredMember.fileOffset,
           noLength,
           context: [
             templateOverriddenMethodCause
-                .withArguments(interfaceMember.name.name)
+                .withArguments(interfaceMember.name.text)
                 .withLocation(interfaceMember.fileUri,
                     interfaceMember.fileOffset, noLength)
           ]);
@@ -1541,14 +1541,14 @@
           declaredMember,
           templateOverrideFewerNamedArguments.withArguments(
               "${declaredMember.enclosingClass.name}."
-                  "${declaredMember.name.name}",
+                  "${declaredMember.name.text}",
               "${interfaceMemberOrigin.enclosingClass.name}."
-                  "${interfaceMemberOrigin.name.name}"),
+                  "${interfaceMemberOrigin.name.text}"),
           declaredMember.fileOffset,
           noLength,
           context: [
             templateOverriddenMethodCause
-                .withArguments(interfaceMemberOrigin.name.name)
+                .withArguments(interfaceMemberOrigin.name.text)
                 .withLocation(interfaceMemberOrigin.fileUri,
                     interfaceMemberOrigin.fileOffset, noLength)
           ]);
@@ -1578,15 +1578,15 @@
               declaredMember,
               templateOverrideMismatchNamedParameter.withArguments(
                   "${declaredMember.enclosingClass.name}."
-                      "${declaredMember.name.name}",
+                      "${declaredMember.name.text}",
                   interfaceNamedParameters.current.name,
                   "${interfaceMember.enclosingClass.name}."
-                      "${interfaceMember.name.name}"),
+                      "${interfaceMember.name.text}"),
               declaredMember.fileOffset,
               noLength,
               context: [
                 templateOverriddenMethodCause
-                    .withArguments(interfaceMember.name.name)
+                    .withArguments(interfaceMember.name.text)
                     .withLocation(interfaceMember.fileUri,
                         interfaceMember.fileOffset, noLength)
               ]);
@@ -1616,14 +1616,14 @@
             templateOverrideMismatchRequiredNamedParameter.withArguments(
                 declaredParameter.name,
                 "${declaredMember.enclosingClass.name}."
-                    "${declaredMember.name.name}",
+                    "${declaredMember.name.text}",
                 "${interfaceMember.enclosingClass.name}."
-                    "${interfaceMember.name.name}"),
+                    "${interfaceMember.name.text}"),
             declaredParameter.fileOffset,
             noLength,
             context: [
               templateOverriddenMethodCause
-                  .withArguments(interfaceMemberOrigin.name.name)
+                  .withArguments(interfaceMemberOrigin.name.text)
                   .withLocation(_getMemberUri(interfaceMemberOrigin),
                       interfaceMemberOrigin.fileOffset, noLength)
             ]);
@@ -1743,7 +1743,7 @@
         // Interface check
         library.addProblem(
             templateInterfaceCheck.withArguments(
-                declaredMember.name.name, cls.name),
+                declaredMember.name.text, cls.name),
             cls.fileOffset,
             cls.name.length,
             cls.fileUri,
@@ -1756,7 +1756,7 @@
           int classNameLength = cls.nameAsMixinApplicationSubclass.length;
           library.addProblem(
               templateImplicitMixinOverride.withArguments(
-                  mixinName, baseName, declaredMember.name.name),
+                  mixinName, baseName, declaredMember.name.text),
               cls.fileOffset,
               classNameLength,
               cls.fileUri,
@@ -1765,7 +1765,7 @@
           // Named mixin application class
           library.addProblem(
               templateNamedMixinOverride.withArguments(
-                  cls.name, declaredMember.name.name),
+                  cls.name, declaredMember.name.text),
               cls.fileOffset,
               cls.name.length,
               cls.fileUri,
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 be090da..c0d4818 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
@@ -2174,7 +2174,7 @@
     MetadataCollector metadataCollector = loader.target.metadataCollector;
     if (returnType == null) {
       if (kind == ProcedureKind.Operator &&
-          identical(name, indexSetName.name)) {
+          identical(name, indexSetName.text)) {
         returnType = addVoidType(charOffset);
       } else if (kind == ProcedureKind.Setter) {
         returnType = addVoidType(charOffset);
@@ -2738,7 +2738,7 @@
         VariableDeclaration originNamed = originNamedMap[forwarderNamed.name];
         if (originNamed == null) {
           return unhandled(
-              "null", forwarder.name.name, origin.fileOffset, origin.fileUri);
+              "null", forwarder.name.text, origin.fileOffset, origin.fileUri);
         }
         if (originNamed.initializer == null) continue;
         forwarderNamed.initializer = cloner.clone(originNamed.initializer);
@@ -3405,7 +3405,7 @@
         targetReceiver =
             new InterfaceType(klass, klass.enclosingLibrary.nonNullable);
       }
-      String targetName = node.target.name.name;
+      String targetName = node.target.name.text;
       reportTypeArgumentIssues(issues, fileUri, node.fileOffset,
           typeArgumentsInfo: typeArgumentsInfo,
           targetReceiver: targetReceiver,
@@ -3489,7 +3489,7 @@
     reportTypeArgumentIssues(issues, fileUri, offset,
         typeArgumentsInfo: getTypeArgumentsInfo(arguments),
         targetReceiver: receiverType,
-        targetName: name.name);
+        targetName: name.text);
   }
 
   void checkTypesInOutline(TypeEnvironment typeEnvironment) {
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
index 2d855ee8..e6cee2a 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
@@ -292,10 +292,10 @@
       // corresponding field type which required us to know the type of the
       // constructor.
       String name = target.enclosingClass.name;
-      if (target.name.name.isNotEmpty) {
+      if (target.name.text.isNotEmpty) {
         // TODO(ahe): Use `inferrer.helper.constructorNameForDiagnostics`
         // instead. However, `inferrer.helper` may be null.
-        name += ".${target.name.name}";
+        name += ".${target.name.text}";
       }
       constructor.library.addProblem(
           templateCantInferTypeDueToCircularity.withArguments(name),
@@ -498,7 +498,7 @@
     if (contextType is! InvalidType) {
       errorNode = helper.wrapInProblem(
           errorNode,
-          template.withArguments(callName.name),
+          template.withArguments(callName.text),
           errorNode.fileOffset,
           noLength);
     }
@@ -942,13 +942,13 @@
       Template<Message Function(String, DartType, bool)> errorTemplate) {
     assert(receiverType != null && isKnown(receiverType));
     if (!isTopLevel && target.isMissing && errorTemplate != null) {
-      int length = name.name.length;
-      if (identical(name.name, callName.name) ||
-          identical(name.name, unaryMinusName.name)) {
+      int length = name.text.length;
+      if (identical(name.text, callName.text) ||
+          identical(name.text, unaryMinusName.text)) {
         length = 1;
       }
       return helper.buildProblem(
-          errorTemplate.withArguments(name.name,
+          errorTemplate.withArguments(name.text,
               resolveTypeParameter(receiverType), isNonNullableByDefault),
           fileOffset,
           length);
@@ -2411,9 +2411,9 @@
           replacement = helper.wrapInProblem(
               replacement,
               templateNullableMethodCallError.withArguments(
-                  name.name, receiverType, isNonNullableByDefault),
+                  name.text, receiverType, isNonNullableByDefault),
               fileOffset,
-              name.name.length);
+              name.text.length);
         }
       }
       return createNullAwareExpressionInferenceResult(
@@ -2454,9 +2454,9 @@
         replacement = helper.wrapInProblem(
             replacement,
             templateNullableMethodCallError.withArguments(
-                callName.name, receiverType, isNonNullableByDefault),
+                callName.text, receiverType, isNonNullableByDefault),
             fileOffset,
-            callName.name.length);
+            callName.text.length);
       }
     }
     // TODO(johnniwinther): Check that type arguments against the bounds.
@@ -2562,9 +2562,9 @@
         replacement = helper.wrapInProblem(
             replacement,
             templateNullableMethodCallError.withArguments(
-                methodName.name, receiverType, isNonNullableByDefault),
+                methodName.text, receiverType, isNonNullableByDefault),
             fileOffset,
-            methodName.name.length);
+            methodName.text.length);
       }
     }
 
@@ -3021,7 +3021,7 @@
         receiverType: receiverType,
         isImplicitExtensionMember: target.isExtensionMember);
     DartType inferredType = result.inferredType;
-    if (methodName.name == '==') {
+    if (methodName.text == '==') {
       inferredType = coreTypes.boolRawType(library.nonNullable);
     }
     _checkBoundsInMethodInvocation(
@@ -3320,7 +3320,7 @@
           null, engine.forest.createArguments(fileOffset, <Expression>[index]));
     } else {
       return helper.buildProblem(
-          templateSuperclassHasNoMethod.withArguments(indexGetName.name),
+          templateSuperclassHasNoMethod.withArguments(indexGetName.text),
           fileOffset,
           noLength);
     }
@@ -3337,7 +3337,7 @@
               .createArguments(fileOffset, <Expression>[index, value]));
     } else {
       return helper.buildProblem(
-          templateSuperclassHasNoMethod.withArguments(indexSetName.name),
+          templateSuperclassHasNoMethod.withArguments(indexSetName.text),
           fileOffset,
           noLength);
     }
@@ -3365,7 +3365,7 @@
       template = ambiguousTemplate;
     }
     return helper.buildProblem(
-        template.withArguments(name.name, resolveTypeParameter(receiverType),
+        template.withArguments(name.text, resolveTypeParameter(receiverType),
             isNonNullableByDefault),
         fileOffset,
         length,
@@ -3385,13 +3385,13 @@
       assert(extensionAccessCandidates == null);
       return helper.buildProblem(
           templateInvokeNonFunction
-              .withArguments(implicitInvocationPropertyName.name),
+              .withArguments(implicitInvocationPropertyName.text),
           fileOffset,
-          implicitInvocationPropertyName.name.length);
+          implicitInvocationPropertyName.text.length);
     } else {
       return _reportMissingOrAmbiguousMember(
           fileOffset,
-          isExpressionInvocation ? noLength : name.name.length,
+          isExpressionInvocation ? noLength : name.text.length,
           receiverType,
           name,
           extensionAccessCandidates,
@@ -3409,7 +3409,7 @@
     } else {
       return _reportMissingOrAmbiguousMember(
           fileOffset,
-          propertyName.name.length,
+          propertyName.text.length,
           receiverType,
           propertyName,
           extensionAccessCandidates,
@@ -3430,7 +3430,7 @@
     } else {
       return _reportMissingOrAmbiguousMember(
           fileOffset,
-          propertyName.name.length,
+          propertyName.text.length,
           receiverType,
           propertyName,
           extensionAccessCandidates,
@@ -3488,7 +3488,7 @@
     } else {
       return _reportMissingOrAmbiguousMember(
           fileOffset,
-          binaryName.name.length,
+          binaryName.text.length,
           leftType,
           binaryName,
           extensionAccessCandidates,
@@ -3506,7 +3506,7 @@
     } else {
       return _reportMissingOrAmbiguousMember(
           fileOffset,
-          unaryName == unaryMinusName ? 1 : unaryName.name.length,
+          unaryName == unaryMinusName ? 1 : unaryName.text.length,
           expressionType,
           unaryName,
           extensionAccessCandidates,
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_schema_environment.dart b/pkg/front_end/lib/src/fasta/type_inference/type_schema_environment.dart
index 1b89f55..d467fb7 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_schema_environment.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_schema_environment.dart
@@ -399,7 +399,7 @@
       // TODO(paulberry): this matches what is defined in the spec.  It would be
       // nice if we could change kernel to match the spec and not have to
       // override.
-      if (member.name.name == 'remainder') return false;
+      if (member.name.text == 'remainder') return false;
       if (!(receiverType is InterfaceType &&
           identical(receiverType.classNode, coreTypes.intClass))) {
         return false;
diff --git a/pkg/front_end/lib/src/testing/id_extractor.dart b/pkg/front_end/lib/src/testing/id_extractor.dart
index d3e174c..d63f675 100644
--- a/pkg/front_end/lib/src/testing/id_extractor.dart
+++ b/pkg/front_end/lib/src/testing/id_extractor.dart
@@ -11,7 +11,7 @@
   if (node.enclosingClass != null) {
     className = node.enclosingClass.name;
   }
-  String memberName = node.name.name;
+  String memberName = node.name.text;
   if (node is Procedure && node.kind == ProcedureKind.Setter) {
     memberName += '=';
   }
@@ -203,14 +203,14 @@
       // This is an invocation of a named local function.
       computeForNode(node, createInvokeId(node.receiver));
       node.arguments.accept(this);
-    } else if (node.name.name == '==' &&
+    } else if (node.name.text == '==' &&
         receiver is VariableGet &&
         receiver.variable.name == null) {
       // This is a desugared `?.`.
-    } else if (node.name.name == '[]') {
+    } else if (node.name.text == '[]') {
       computeForNode(node, computeDefaultNodeId(node));
       super.visitMethodInvocation(node);
-    } else if (node.name.name == '[]=') {
+    } else if (node.name.text == '[]=') {
       computeForNode(node, createUpdateId(node));
       super.visitMethodInvocation(node);
     } else {
diff --git a/pkg/front_end/lib/src/testing/id_testing_utils.dart b/pkg/front_end/lib/src/testing/id_testing_utils.dart
index 97eed20..2d8e634 100644
--- a/pkg/front_end/lib/src/testing/id_testing_utils.dart
+++ b/pkg/front_end/lib/src/testing/id_testing_utils.dart
@@ -20,8 +20,8 @@
 
 /// Returns a canonical simple name for [member].
 String getMemberName(Member member) {
-  if (member is Procedure && member.isSetter) return '${member.name.name}=';
-  return member.name.name;
+  if (member is Procedure && member.isSetter) return '${member.name.text}=';
+  return member.name.text;
 }
 
 /// Returns the enclosing [Member] for [node].
@@ -174,7 +174,7 @@
     {bool required: true}) {
   MemberBuilder memberBuilder;
   if (member.isExtensionMember) {
-    String memberName = member.name.name;
+    String memberName = member.name.text;
     String extensionName = memberName.substring(0, memberName.indexOf('|'));
     memberName = memberName.substring(extensionName.length + 1);
     bool isSetter = member is Procedure && member.isSetter;
@@ -191,16 +191,16 @@
         isSetter: isSetter, required: required);
   } else if (member.enclosingClass != null) {
     memberBuilder = lookupClassMemberBuilder(
-        compilerResult, member.enclosingClass, member, member.name.name,
+        compilerResult, member.enclosingClass, member, member.name.text,
         required: required);
   } else {
     TypeParameterScopeBuilder libraryBuilder = lookupLibraryDeclarationBuilder(
         compilerResult, member.enclosingLibrary,
         required: required);
     if (member is Procedure && member.isSetter) {
-      memberBuilder = libraryBuilder.setters[member.name.name];
+      memberBuilder = libraryBuilder.setters[member.name.text];
     } else {
-      memberBuilder = libraryBuilder.members[member.name.name];
+      memberBuilder = libraryBuilder.members[member.name.text];
     }
   }
   if (memberBuilder == null && required) {
@@ -659,10 +659,10 @@
       sb.write('tearoff ');
       break;
   }
-  sb.write(descriptor.name.name);
+  sb.write(descriptor.name.text);
   sb.write('=');
   Member member = descriptor.member.asMember;
-  String name = member.name.name;
+  String name = member.name.text;
   if (member is Procedure && member.isSetter) {
     sb.write('$name=');
   } else {
diff --git a/pkg/front_end/test/ast_nodes_has_to_string_test.dart b/pkg/front_end/test/ast_nodes_has_to_string_test.dart
index 28a3810..13d7120 100644
--- a/pkg/front_end/test/ast_nodes_has_to_string_test.dart
+++ b/pkg/front_end/test/ast_nodes_has_to_string_test.dart
@@ -51,7 +51,7 @@
               .getInterfaceMembers(c)
               .where((Member m) =>
                   !m.isAbstract &&
-                  m.name.name == "toString" &&
+                  m.name.text == "toString" &&
                   m.enclosingLibrary.importUri.scheme != "dart")
               .toList();
           if (toStringList.length > 1) throw "What?";
@@ -153,7 +153,7 @@
             .getInterfaceMembers(c)
             .where((Member m) =>
                 !m.isAbstract &&
-                m.name.name == "toString" &&
+                m.name.text == "toString" &&
                 m.enclosingLibrary.importUri.scheme != "dart")
             .toList();
         Member toString = toStringList.single;
diff --git a/pkg/front_end/test/binary_md_vm_tags_and_version_test.dart b/pkg/front_end/test/binary_md_vm_tags_and_version_test.dart
index 706d0a6..d9f412e 100644
--- a/pkg/front_end/test/binary_md_vm_tags_and_version_test.dart
+++ b/pkg/front_end/test/binary_md_vm_tags_and_version_test.dart
@@ -111,29 +111,29 @@
     Map<int, String> tagToName = {};
     for (Field f in compareMe.tagClass.fields) {
       // Class doesn't only contain tag stuff.
-      if (f.name.name.endsWith("Mask")) continue;
-      if (f.name.name.endsWith("HighBit")) continue;
-      if (f.name.name.endsWith("Bias")) continue;
-      if (f.name.name == "ComponentFile") continue;
+      if (f.name.text.endsWith("Mask")) continue;
+      if (f.name.text.endsWith("HighBit")) continue;
+      if (f.name.text.endsWith("Bias")) continue;
+      if (f.name.text == "ComponentFile") continue;
       ConstantExpression value = f.initializer;
       IntConstant intConstant = value.constant;
       int intValue = intConstant.value;
-      if (f.name.name == "BinaryFormatVersion") {
+      if (f.name.text == "BinaryFormatVersion") {
         tagVersion = intValue;
         continue;
       }
 
       int end = intValue + 1;
       // There are a few special cases that takes up a total of 8 tags.
-      if (uses8Tags(f.name.name)) {
+      if (uses8Tags(f.name.text)) {
         end = intValue + 8;
       }
       for (; intValue < end; intValue++) {
         if (tagToName[intValue] != null) {
           throw "Double entry for ${intValue}: "
-              "${f.name.name} and ${tagToName[intValue]}";
+              "${f.name.text} and ${tagToName[intValue]}";
         }
-        tagToName[intValue] = f.name.name;
+        tagToName[intValue] = f.name.text;
       }
     }
 
diff --git a/pkg/front_end/test/desugar_test.dart b/pkg/front_end/test/desugar_test.dart
index 9ec4d38..b61a6a7 100644
--- a/pkg/front_end/test/desugar_test.dart
+++ b/pkg/front_end/test/desugar_test.dart
@@ -63,7 +63,7 @@
       component.libraries.firstWhere((l) => l.importUri.path.endsWith(uriPath));
   var cls = lib.classes.firstWhere((c) => c.name == className);
   ir.Procedure member =
-      cls.members.firstWhere((m) => m.name.name == constructorName);
+      cls.members.firstWhere((m) => m.name.text == constructorName);
   Expect.isTrue(
       member.kind == ir.ProcedureKind.Factory, "$member is not a factory");
   Expect.isTrue(api.isRedirectingFactory(member));
diff --git a/pkg/front_end/test/fasta/assert_locations_test.dart b/pkg/front_end/test/fasta/assert_locations_test.dart
index eaff73c..532b311 100644
--- a/pkg/front_end/test/fasta/assert_locations_test.dart
+++ b/pkg/front_end/test/fasta/assert_locations_test.dart
@@ -114,10 +114,10 @@
 
   @override
   visitProcedure(Procedure node) {
-    expectedSpan = test.spans[node.name.name];
+    expectedSpan = test.spans[node.name.text];
     if (expectedSpan != null) {
       super.visitProcedure(node);
-      verified.add(node.name.name);
+      verified.add(node.name.text);
       expectedSpan = null;
     }
   }
diff --git a/pkg/front_end/test/id_tests/inheritance_test.dart b/pkg/front_end/test/id_tests/inheritance_test.dart
index a042a8a..39f382a 100644
--- a/pkg/front_end/test/id_tests/inheritance_test.dart
+++ b/pkg/front_end/test/id_tests/inheritance_test.dart
@@ -151,7 +151,7 @@
         return;
       }
 
-      String memberName = name.name;
+      String memberName = name.text;
       if (isSetter) {
         memberName += '=';
       }
diff --git a/pkg/front_end/test/incremental_load_from_dill_suite.dart b/pkg/front_end/test/incremental_load_from_dill_suite.dart
index 51255c1..768e1ba 100644
--- a/pkg/front_end/test/incremental_load_from_dill_suite.dart
+++ b/pkg/front_end/test/incremental_load_from_dill_suite.dart
@@ -1013,7 +1013,7 @@
       if (info.lazyDeclaredGettersAndCalls != null) {
         sb.writeln("    - lazyDeclaredGettersAndCalls:");
         for (Member member in info.lazyDeclaredGettersAndCalls) {
-          sb.writeln("      - ${member.name.name}");
+          sb.writeln("      - ${member.name.text}");
         }
 
         // Expect these to be the same as in the class.
@@ -1022,7 +1022,7 @@
           if (f.isStatic) continue;
           if (!f.hasImplicitGetter) continue;
           if (!members.remove(f)) {
-            throw "Didn't find ${f.name.name} in lazyDeclaredGettersAndCalls "
+            throw "Didn't find ${f.name.text} in lazyDeclaredGettersAndCalls "
                 "for ${c.name} in ${library.importUri}";
           }
         }
@@ -1030,19 +1030,19 @@
           if (p.isStatic) continue;
           if (p.isSetter) continue;
           if (!members.remove(p)) {
-            throw "Didn't find ${p.name.name} in lazyDeclaredGettersAndCalls "
+            throw "Didn't find ${p.name.text} in lazyDeclaredGettersAndCalls "
                 "for ${c.name} in ${library.importUri}";
           }
         }
         if (members.isNotEmpty) {
-          throw "Still have ${members.map((m) => m.name.name)} left "
+          throw "Still have ${members.map((m) => m.name.text)} left "
               "for ${c.name} in ${library.importUri}";
         }
       }
       if (info.lazyDeclaredSetters != null) {
         sb.writeln("    - lazyDeclaredSetters:");
         for (Member member in info.lazyDeclaredSetters) {
-          sb.writeln("      - ${member.name.name}");
+          sb.writeln("      - ${member.name.text}");
         }
 
         // Expect these to be the same as in the class.
@@ -1062,32 +1062,32 @@
           }
         }
         if (members.isNotEmpty) {
-          throw "Still have ${members.map((m) => m.name.name)} left "
+          throw "Still have ${members.map((m) => m.name.text)} left "
               "for ${c.name} in ${library.importUri}";
         }
       }
       if (info.lazyImplementedGettersAndCalls != null) {
         sb.writeln("    - lazyImplementedGettersAndCalls:");
         for (Member member in info.lazyImplementedGettersAndCalls) {
-          sb.writeln("      - ${member.name.name}");
+          sb.writeln("      - ${member.name.text}");
         }
       }
       if (info.lazyImplementedSetters != null) {
         sb.writeln("    - lazyImplementedSetters:");
         for (Member member in info.lazyImplementedSetters) {
-          sb.writeln("      - ${member.name.name}");
+          sb.writeln("      - ${member.name.text}");
         }
       }
       if (info.lazyInterfaceGettersAndCalls != null) {
         sb.writeln("    - lazyInterfaceGettersAndCalls:");
         for (Member member in info.lazyInterfaceGettersAndCalls) {
-          sb.writeln("      - ${member.name.name}");
+          sb.writeln("      - ${member.name.text}");
         }
       }
       if (info.lazyInterfaceSetters != null) {
         sb.writeln("    - lazyInterfaceSetters:");
         for (Member member in info.lazyInterfaceSetters) {
-          sb.writeln("      - ${member.name.name}");
+          sb.writeln("      - ${member.name.text}");
         }
       }
     }
@@ -1292,10 +1292,10 @@
       libContent.add("Class ${c.name}");
     }
     for (Procedure p in lib.procedures) {
-      libContent.add("Procedure ${p.name.name}");
+      libContent.add("Procedure ${p.name.text}");
     }
     for (Field f in lib.fields) {
-      libContent.add("Field ${f.name.name}");
+      libContent.add("Field ${f.name.text}");
     }
   }
   return actualContent;
@@ -1657,7 +1657,7 @@
 void doSimulateTransformer(Component c) {
   for (Library lib in c.libraries) {
     if (lib.fields
-        .where((f) => f.name.name == "unique_SimulateTransformer")
+        .where((f) => f.name.text == "unique_SimulateTransformer")
         .toList()
         .isNotEmpty) continue;
     Name fieldName = new Name("unique_SimulateTransformer");
@@ -1669,7 +1669,7 @@
     lib.addMember(field);
     for (Class c in lib.classes) {
       if (c.fields
-          .where((f) => f.name.name == "unique_SimulateTransformer")
+          .where((f) => f.name.text == "unique_SimulateTransformer")
           .toList()
           .isNotEmpty) continue;
       fieldName = new Name("unique_SimulateTransformer");
diff --git a/pkg/front_end/test/kernel_generator_test.dart b/pkg/front_end/test/kernel_generator_test.dart
index 27fe114..20e3b57 100644
--- a/pkg/front_end/test/kernel_generator_test.dart
+++ b/pkg/front_end/test/kernel_generator_test.dart
@@ -74,7 +74,7 @@
           (await compileScript('main() => print("hi");', options: options))
               ?.component;
       var core = component.libraries.firstWhere(isDartCoreLibrary);
-      var printMember = core.members.firstWhere((m) => m.name.name == 'print');
+      var printMember = core.members.firstWhere((m) => m.name.text == 'print');
 
       // Note: summaries created by the SDK today contain empty statements as
       // method bodies.
diff --git a/pkg/front_end/test/patching/patching_test.dart b/pkg/front_end/test/patching/patching_test.dart
index 4cce8c0..81210eb 100644
--- a/pkg/front_end/test/patching/patching_test.dart
+++ b/pkg/front_end/test/patching/patching_test.dart
@@ -149,7 +149,7 @@
         // Don't include member signatures.
         continue;
       }
-      String name = m.name.name;
+      String name = m.name.text;
       if (m is Constructor) {
         name = '${m.enclosingClass.name}.${name}';
       }
diff --git a/pkg/front_end/test/summary_generator_test.dart b/pkg/front_end/test/summary_generator_test.dart
index 486295d..d641234 100644
--- a/pkg/front_end/test/summary_generator_test.dart
+++ b/pkg/front_end/test/summary_generator_test.dart
@@ -30,7 +30,7 @@
     var classA = aLib.classes.first;
     expect(classA.name, 'A');
     var fooMethod = classA.procedures.first;
-    expect(fooMethod.name.name, 'foo');
+    expect(fooMethod.name.text, 'foo');
     expect(fooMethod.function.body is EmptyStatement, isTrue);
   });
 
diff --git a/pkg/front_end/test/text_representation/text_representation_test.dart b/pkg/front_end/test/text_representation/text_representation_test.dart
index ef127c6..daff068 100644
--- a/pkg/front_end/test/text_representation/text_representation_test.dart
+++ b/pkg/front_end/test/text_representation/text_representation_test.dart
@@ -134,8 +134,8 @@
 
   @override
   visitProcedure(Procedure node) {
-    if (!node.name.name.startsWith(expressionMarker) &&
-        !node.name.name.startsWith(statementMarker)) {
+    if (!node.name.text.startsWith(expressionMarker) &&
+        !node.name.text.startsWith(statementMarker)) {
       node.function.accept(this);
     }
     computeForMember(node);
@@ -143,8 +143,8 @@
 
   @override
   visitField(Field node) {
-    if (!node.name.name.startsWith(expressionMarker) &&
-        !node.name.name.startsWith(statementMarker)) {
+    if (!node.name.text.startsWith(expressionMarker) &&
+        !node.name.text.startsWith(statementMarker)) {
       node.initializer?.accept(this);
     }
     computeForMember(node);
@@ -152,10 +152,10 @@
 
   @override
   String computeMemberValue(Id id, Member node) {
-    if (node.name.name == 'stmtVariableDeclarationMulti') {
+    if (node.name.text == 'stmtVariableDeclarationMulti') {
       print(node);
     }
-    if (node.name.name.startsWith(expressionMarker)) {
+    if (node.name.text.startsWith(expressionMarker)) {
       if (node is Procedure) {
         Statement body = node.function.body;
         if (body is ReturnStatement) {
@@ -164,7 +164,7 @@
       } else if (node is Field && node.initializer != null) {
         return node.initializer.toText(strategy);
       }
-    } else if (node.name.name.startsWith(statementMarker)) {
+    } else if (node.name.text.startsWith(statementMarker)) {
       if (node is Procedure) {
         Statement body = node.function.body;
         if (body is Block && body.statements.length == 1) {
diff --git a/pkg/front_end/tool/_fasta/bench_maker.dart b/pkg/front_end/tool/_fasta/bench_maker.dart
index 5ab2e3e..581b5a9 100644
--- a/pkg/front_end/tool/_fasta/bench_maker.dart
+++ b/pkg/front_end/tool/_fasta/bench_maker.dart
@@ -164,7 +164,7 @@
     }
     Procedure callOperator;
     for (Procedure procedure in cls.procedures) {
-      if (procedure.name.name == "call") {
+      if (procedure.name.text == "call") {
         callOperator = procedure;
       }
     }
diff --git a/pkg/kernel/lib/ast.dart b/pkg/kernel/lib/ast.dart
index 74ef5a2..3adc495 100644
--- a/pkg/kernel/lib/ast.dart
+++ b/pkg/kernel/lib/ast.dart
@@ -3252,7 +3252,7 @@
           .substituteType(interfaceTarget.getterType);
     }
     // Treat the properties of Object specially.
-    String nameString = name.name;
+    String nameString = name.text;
     if (nameString == 'hashCode') {
       return context.typeEnvironment.coreTypes.intRawType(context.nonNullable);
     } else if (nameString == 'runtimeType') {
@@ -3982,7 +3982,7 @@
       }
       return const DynamicType();
     }
-    if (name.name == 'call') {
+    if (name.text == 'call') {
       var receiverType = receiver.getStaticType(context);
       if (receiverType is FunctionType) {
         if (receiverType.typeParameters.length != arguments.types.length) {
@@ -3993,7 +3993,7 @@
             .substituteType(receiverType.returnType);
       }
     }
-    if (name.name == '==') {
+    if (name.text == '==') {
       // We use this special case to simplify generation of '==' checks.
       return context.typeEnvironment.coreTypes.boolRawType(context.nonNullable);
     }
@@ -4246,9 +4246,9 @@
     }
     printer.writeClassName(target.enclosingClass.reference);
     printer.writeTypeArguments(arguments.types);
-    if (target.name.name.isNotEmpty) {
+    if (target.name.text.isNotEmpty) {
       printer.write('.');
-      printer.write(target.name.name);
+      printer.write(target.name.text);
     }
     printer.writeArguments(arguments, includeTypeArguments: false);
   }
@@ -7088,29 +7088,34 @@
 /// library name for private names; uniqueness is not guaranteed.
 abstract class Name extends Node {
   final int hashCode;
-  final String name;
+  final String text;
   Reference get libraryName;
   Library get library;
   bool get isPrivate;
 
-  Name._internal(this.hashCode, this.name);
+  Name._internal(this.hashCode, this.text);
 
-  factory Name(String name, [Library library]) =>
-      new Name.byReference(name, library?.reference);
+  factory Name(String text, [Library library]) =>
+      new Name.byReference(text, library?.reference);
 
-  factory Name.byReference(String name, Reference libraryName) {
+  factory Name.byReference(String text, Reference libraryName) {
     /// Use separate subclasses for the public and private case to save memory
     /// for public names.
-    if (name.startsWith('_')) {
+    if (text.startsWith('_')) {
       assert(libraryName != null);
-      return new _PrivateName(name, libraryName);
+      return new _PrivateName(text, libraryName);
     } else {
-      return new _PublicName(name);
+      return new _PublicName(text);
     }
   }
 
+  // TODO(johnniwinther): Remove this when dependent code has been updated to
+  // use [text].
+  @deprecated
+  String get name => text;
+
   bool operator ==(other) {
-    return other is Name && name == other.name && library == other.library;
+    return other is Name && text == other.text && library == other.library;
   }
 
   R accept<R>(Visitor<R> v) => v.visitName(this);
@@ -7135,13 +7140,13 @@
   final Reference libraryName;
   bool get isPrivate => true;
 
-  _PrivateName(String name, Reference libraryName)
+  _PrivateName(String text, Reference libraryName)
       : this.libraryName = libraryName,
-        super._internal(_computeHashCode(name, libraryName), name);
+        super._internal(_computeHashCode(text, libraryName), text);
 
   String toString() => toStringInternal();
 
-  String toStringInternal() => library != null ? '$library::$name' : name;
+  String toStringInternal() => library != null ? '$library::$text' : text;
 
   Library get library => libraryName.asLibrary;
 
@@ -7158,7 +7163,7 @@
   Library get library => null;
   bool get isPrivate => false;
 
-  _PublicName(String name) : super._internal(name.hashCode, name);
+  _PublicName(String text) : super._internal(text.hashCode, text);
 
   String toString() => toStringInternal();
 }
diff --git a/pkg/kernel/lib/binary/ast_from_binary.dart b/pkg/kernel/lib/binary/ast_from_binary.dart
index d718a30..63cbbf3 100644
--- a/pkg/kernel/lib/binary/ast_from_binary.dart
+++ b/pkg/kernel/lib/binary/ast_from_binary.dart
@@ -1324,7 +1324,7 @@
     var name = readName();
     var annotations = readAnnotationList(node);
     assert(() {
-      debugPath.add(node.name?.name ?? 'field');
+      debugPath.add(node.name?.text ?? 'field');
       return true;
     }());
     var type = readDartType();
@@ -1364,7 +1364,7 @@
     var name = readName();
     var annotations = readAnnotationList(node);
     assert(() {
-      debugPath.add(node.name?.name ?? 'constructor');
+      debugPath.add(node.name?.text ?? 'constructor');
       return true;
     }());
     var function = readFunctionNode();
@@ -1408,7 +1408,7 @@
     var name = readName();
     var annotations = readAnnotationList(node);
     assert(() {
-      debugPath.add(node.name?.name ?? 'procedure');
+      debugPath.add(node.name?.text ?? 'procedure');
       return true;
     }());
     int functionNodeSize = endOffset - _byteOffset;
@@ -1469,7 +1469,7 @@
     var name = readName();
     var annotations = readAnnotationList(node);
     assert(() {
-      debugPath.add(node.name?.name ?? 'redirecting-factory-constructor');
+      debugPath.add(node.name?.text ?? 'redirecting-factory-constructor');
       return true;
     }());
     var targetReference = readMemberReference();
diff --git a/pkg/kernel/lib/binary/ast_to_binary.dart b/pkg/kernel/lib/binary/ast_to_binary.dart
index 98fb84a..f85987b 100644
--- a/pkg/kernel/lib/binary/ast_to_binary.dart
+++ b/pkg/kernel/lib/binary/ast_to_binary.dart
@@ -937,7 +937,7 @@
     if (_metadataSubsections != null) {
       _writeNodeMetadata(node);
     }
-    writeStringReference(node.name);
+    writeStringReference(node.text);
     // TODO: Consider a more compressed format for private names within the
     // enclosing library.
     if (node.isPrivate) {
diff --git a/pkg/kernel/lib/canonical_name.dart b/pkg/kernel/lib/canonical_name.dart
index c7e7067..95acedd 100644
--- a/pkg/kernel/lib/canonical_name.dart
+++ b/pkg/kernel/lib/canonical_name.dart
@@ -118,8 +118,8 @@
 
   CanonicalName getChildFromQualifiedName(Name name) {
     return name.isPrivate
-        ? getChildFromUri(name.library.importUri).getChild(name.name)
-        : getChild(name.name);
+        ? getChildFromUri(name.library.importUri).getChild(name.text)
+        : getChild(name.text);
   }
 
   CanonicalName getChildFromMember(Member member) {
diff --git a/pkg/kernel/lib/class_hierarchy.dart b/pkg/kernel/lib/class_hierarchy.dart
index 446a07f..9f8500c 100644
--- a/pkg/kernel/lib/class_hierarchy.dart
+++ b/pkg/kernel/lib/class_hierarchy.dart
@@ -281,8 +281,8 @@
     int firstHash = firstName.hashCode;
     int secondHash = secondName.hashCode;
     if (firstHash != secondHash) return firstHash - secondHash;
-    String firstString = firstName.name;
-    String secondString = secondName.name;
+    String firstString = firstName.text;
+    String secondString = secondName.text;
     int firstLength = firstString.length;
     int secondLength = secondString.length;
     if (firstLength != secondLength) {
diff --git a/pkg/kernel/lib/error_formatter.dart b/pkg/kernel/lib/error_formatter.dart
index 56f4a9f..7bb8974 100644
--- a/pkg/kernel/lib/error_formatter.dart
+++ b/pkg/kernel/lib/error_formatter.dart
@@ -65,7 +65,7 @@
       final parent = context.parent;
       final parentName =
           parent is Class ? parent.name : (parent as Library).name;
-      name = "${parentName}::${context.name.name}";
+      name = "${parentName}::${context.name.text}";
     } else {
       final field = context as Field;
       if (where is Field) {
diff --git a/pkg/kernel/lib/library_index.dart b/pkg/kernel/lib/library_index.dart
index 94db880..8dbb8ee 100644
--- a/pkg/kernel/lib/library_index.dart
+++ b/pkg/kernel/lib/library_index.dart
@@ -220,10 +220,10 @@
 
   String getDisambiguatedName(Member member) {
     if (member is Procedure) {
-      if (member.isGetter) return LibraryIndex.getterPrefix + member.name.name;
-      if (member.isSetter) return LibraryIndex.setterPrefix + member.name.name;
+      if (member.isGetter) return LibraryIndex.getterPrefix + member.name.text;
+      if (member.isSetter) return LibraryIndex.setterPrefix + member.name.text;
     }
-    return member.name.name;
+    return member.name.text;
   }
 
   void addMember(Member member) {
@@ -238,12 +238,12 @@
   String getDisambiguatedExtensionName(
       ExtensionMemberDescriptor extensionMember) {
     if (extensionMember.kind == ExtensionMemberKind.TearOff)
-      return LibraryIndex.tearoffPrefix + extensionMember.name.name;
+      return LibraryIndex.tearoffPrefix + extensionMember.name.text;
     if (extensionMember.kind == ExtensionMemberKind.Getter)
-      return LibraryIndex.getterPrefix + extensionMember.name.name;
+      return LibraryIndex.getterPrefix + extensionMember.name.text;
     if (extensionMember.kind == ExtensionMemberKind.Setter)
-      return LibraryIndex.setterPrefix + extensionMember.name.name;
-    return extensionMember.name.name;
+      return LibraryIndex.setterPrefix + extensionMember.name.text;
+    return extensionMember.name.text;
   }
 
   void addExtensionMember(ExtensionMemberDescriptor extensionMember) {
diff --git a/pkg/kernel/lib/naive_type_checker.dart b/pkg/kernel/lib/naive_type_checker.dart
index ef93768..1178a0c 100644
--- a/pkg/kernel/lib/naive_type_checker.dart
+++ b/pkg/kernel/lib/naive_type_checker.dart
@@ -272,7 +272,7 @@
     // Permit any invocation on Function type.
     if (receiver == environment.coreTypes.functionLegacyRawType &&
         where is MethodInvocation &&
-        where.name.name == 'call') {
+        where.name.text == 'call') {
       return;
     }
 
diff --git a/pkg/kernel/lib/reference_from_index.dart b/pkg/kernel/lib/reference_from_index.dart
index a2a5f77..709fbb5 100644
--- a/pkg/kernel/lib/reference_from_index.dart
+++ b/pkg/kernel/lib/reference_from_index.dart
@@ -48,14 +48,14 @@
     for (int i = 0; i < library.procedures.length; i++) {
       Procedure procedure = library.procedures[i];
       if (procedure.isSetter) {
-        _proceduresSetters[procedure.name.name] = procedure;
+        _proceduresSetters[procedure.name.text] = procedure;
       } else {
-        _proceduresNotSetters[procedure.name.name] = procedure;
+        _proceduresNotSetters[procedure.name.text] = procedure;
       }
     }
     for (int i = 0; i < library.fields.length; i++) {
       Field field = library.fields[i];
-      _fields[field.name.name] = field;
+      _fields[field.name.text] = field;
     }
   }
 
@@ -80,19 +80,19 @@
   IndexedClass._(Class c) {
     for (int i = 0; i < c.constructors.length; i++) {
       Constructor constructor = c.constructors[i];
-      _constructors[constructor.name.name] = constructor;
+      _constructors[constructor.name.text] = constructor;
     }
     for (int i = 0; i < c.procedures.length; i++) {
       Procedure procedure = c.procedures[i];
       if (procedure.isSetter) {
-        _proceduresSetters[procedure.name.name] = procedure;
+        _proceduresSetters[procedure.name.text] = procedure;
       } else {
-        _proceduresNotSetters[procedure.name.name] = procedure;
+        _proceduresNotSetters[procedure.name.text] = procedure;
       }
     }
     for (int i = 0; i < c.fields.length; i++) {
       Field field = c.fields[i];
-      _fields[field.name.name] = field;
+      _fields[field.name.text] = field;
     }
   }
 
diff --git a/pkg/kernel/lib/src/text_util.dart b/pkg/kernel/lib/src/text_util.dart
index c04deb8..9fe573f 100644
--- a/pkg/kernel/lib/src/text_util.dart
+++ b/pkg/kernel/lib/src/text_util.dart
@@ -22,9 +22,9 @@
   if (node == null) {
     return 'null';
   } else if (node.library != null && includeLibraryName) {
-    return '${libraryNameToString(node.library)}::${node.name}';
+    return '${libraryNameToString(node.library)}::${node.text}';
   } else {
-    return node.name;
+    return node.text;
   }
 }
 
@@ -205,7 +205,7 @@
 }
 
 String memberNameToString(Member node) {
-  return node.name?.name ??
+  return node.name?.text ??
       "null-named member ${node.runtimeType} ${node.hashCode}";
 }
 
diff --git a/pkg/kernel/lib/text/ast_to_text.dart b/pkg/kernel/lib/text/ast_to_text.dart
index 71f9fef..209122a 100644
--- a/pkg/kernel/lib/text/ast_to_text.dart
+++ b/pkg/kernel/lib/text/ast_to_text.dart
@@ -119,7 +119,7 @@
 }
 
 String debugMemberName(Member node) {
-  return node.name?.name ?? globalDebuggingNames.nameMember(node);
+  return node.name?.text ?? globalDebuggingNames.nameMember(node);
 }
 
 String debugQualifiedMemberName(Member node) {
@@ -341,14 +341,14 @@
   static final Name emptyName = new Name(emptyNameString);
 
   Name getMemberName(Member node) {
-    if (node.name?.name == '') return emptyName;
+    if (node.name?.text == '') return emptyName;
     if (node.name != null) return node.name;
     return new Name(syntheticNames.nameMember(node));
   }
 
   String getMemberReference(Member node) {
     if (node == null) return '<No Member>';
-    String name = getMemberName(node).name;
+    String name = getMemberName(node).text;
     if (node.parent is Class) {
       String className = getClassReference(node.parent);
       return '$className::$name';
@@ -481,11 +481,11 @@
       } else if (node is Field) {
         Library nodeLibrary = node.enclosingLibrary;
         String prefix = syntheticNames.nameLibraryPrefix(nodeLibrary);
-        write(prefix + '::' + node.name.name);
+        write(prefix + '::' + node.name.text);
       } else if (node is Procedure) {
         Library nodeLibrary = node.enclosingLibrary;
         String prefix = syntheticNames.nameLibraryPrefix(nodeLibrary);
-        write(prefix + '::' + node.name.name);
+        write(prefix + '::' + node.name.text);
       } else if (node is Typedef) {
         Library nodeLibrary = node.enclosingLibrary;
         String prefix = syntheticNames.nameLibraryPrefix(nodeLibrary);
@@ -701,10 +701,10 @@
   }
 
   void writeName(Name name) {
-    if (name?.name == '') {
+    if (name?.text == '') {
       writeWord(emptyNameString);
     } else {
-      writeWord(name?.name ?? '<anonymous>'); // TODO: write library name
+      writeWord(name?.text ?? '<anonymous>'); // TODO: write library name
     }
   }
 
@@ -1458,7 +1458,7 @@
       if (!first) {
         writeComma();
       }
-      writeWord('${fieldRef.asField.name.name}');
+      writeWord('${fieldRef.asField.name.text}');
       writeSymbol(':');
       writeExpression(value);
       first = false;
@@ -2366,7 +2366,7 @@
     writeList(node.fieldValues.entries,
         (core.MapEntry<Reference, Constant> entry) {
       if (entry.key.node != null) {
-        writeWord('${entry.key.asField.name.name}');
+        writeWord('${entry.key.asField.name.text}');
       } else {
         writeWord('${entry.key.canonicalName.name}');
       }
diff --git a/pkg/kernel/lib/text/text_serializer.dart b/pkg/kernel/lib/text/text_serializer.dart
index 59d13a0..ef7c689 100644
--- a/pkg/kernel/lib/text/text_serializer.dart
+++ b/pkg/kernel/lib/text/text_serializer.dart
@@ -21,10 +21,10 @@
 }
 
 TextSerializer<Name> publicName =
-    Wrapped((w) => w.name, (u) => Name(u), const DartString());
+    Wrapped((w) => w.text, (u) => Name(u), const DartString());
 
 TextSerializer<Name> privateName = Wrapped(
-    (w) => Tuple2(w.name, w.library.canonicalName),
+    (w) => Tuple2(w.text, w.library.canonicalName),
     (u) => Name.byReference(u.first, u.second.getReference()),
     Tuple2Serializer(DartString(), CanonicalNameSerializer()));
 
diff --git a/pkg/kernel/lib/transformations/mixin_full_resolution.dart b/pkg/kernel/lib/transformations/mixin_full_resolution.dart
index f075b34..374651e 100644
--- a/pkg/kernel/lib/transformations/mixin_full_resolution.dart
+++ b/pkg/kernel/lib/transformations/mixin_full_resolution.dart
@@ -153,7 +153,7 @@
 
     for (var field in class_.mixin.fields) {
       Field clone =
-          cloner.cloneField(field, indexedClass?.lookupField(field.name.name));
+          cloner.cloneField(field, indexedClass?.lookupField(field.name.text));
       Procedure setter = setters[field.name];
       if (setter != null) {
         setters.remove(field.name);
@@ -187,10 +187,10 @@
       Procedure referenceFrom;
       if (procedure.isSetter) {
         referenceFrom =
-            indexedClass?.lookupProcedureSetter(procedure.name.name);
+            indexedClass?.lookupProcedureSetter(procedure.name.text);
       } else {
         referenceFrom =
-            indexedClass?.lookupProcedureNotSetter(procedure.name.name);
+            indexedClass?.lookupProcedureNotSetter(procedure.name.text);
       }
 
       // Linear search for a forwarding stub with the same name.
@@ -270,7 +270,7 @@
       return new DirectPropertyGet(new ThisExpression(), target)
         ..fileOffset = node.fileOffset;
     } else {
-      return _callNoSuchMethod(node.name.name, new Arguments.empty(), node,
+      return _callNoSuchMethod(node.name.text, new Arguments.empty(), node,
           isGetter: true, isSuper: true);
     }
   }
@@ -287,7 +287,7 @@
       VariableDeclaration rightHandSide =
           new VariableDeclaration.forValue(visit(node.value));
       Expression result = _callNoSuchMethod(
-          node.name.name, new Arguments([new VariableGet(rightHandSide)]), node,
+          node.name.text, new Arguments([new VariableGet(rightHandSide)]), node,
           isSetter: true, isSuper: true);
       VariableDeclaration call = new VariableDeclaration.forValue(result);
       return new Let(
@@ -306,7 +306,7 @@
         ..fileOffset = node.fileOffset;
     } else if (target == null || (target is Procedure && !target.isAccessor)) {
       // Target not found at all, or call was illegal.
-      return _callNoSuchMethod(node.name.name, visitedArguments, node,
+      return _callNoSuchMethod(node.name.text, visitedArguments, node,
           isSuper: true);
     } else {
       return new MethodInvocation(
diff --git a/pkg/kernel/lib/transformations/track_widget_constructor_locations.dart b/pkg/kernel/lib/transformations/track_widget_constructor_locations.dart
index 5cc3962..d4212e5 100644
--- a/pkg/kernel/lib/transformations/track_widget_constructor_locations.dart
+++ b/pkg/kernel/lib/transformations/track_widget_constructor_locations.dart
@@ -360,7 +360,7 @@
   void _transformClassImplementingWidget(
       Class clazz, ChangedStructureNotifier changedStructureNotifier) {
     if (clazz.fields
-        .any((Field field) => field.name.name == _locationFieldName)) {
+        .any((Field field) => field.name.text == _locationFieldName)) {
       // This class has already been transformed. Skip
       return;
     }
diff --git a/pkg/kernel/lib/transformations/value_class.dart b/pkg/kernel/lib/transformations/value_class.dart
index dfea2de..c760a89 100644
--- a/pkg/kernel/lib/transformations/value_class.dart
+++ b/pkg/kernel/lib/transformations/value_class.dart
@@ -39,7 +39,7 @@
   HashCombineMethodsScanner() : super(null);
 
   bool predicate(Procedure node) {
-    return node.name.name == "combine" || node.name.name == "finish";
+    return node.name.text == "combine" || node.name.text == "finish";
   }
 }
 
@@ -73,7 +73,7 @@
     Class cls, CoreTypes coreTypes, Constructor syntheticConstructor) {
   Constructor superConstructor = null;
   for (Constructor constructor in cls.superclass.constructors) {
-    if (constructor.name.name == "") {
+    if (constructor.name.text == "") {
       superConstructor = constructor;
     }
   }
@@ -83,14 +83,14 @@
         ..parent = syntheticConstructor.function)
       .toList();
   Map<String, VariableDeclaration> ownFields = Map.fromIterable(cls.fields,
-      key: (f) => f.name.name,
+      key: (f) => f.name.text,
       value: (f) =>
-          VariableDeclaration(f.name.name, type: f.type, isRequired: true)
+          VariableDeclaration(f.name.text, type: f.type, isRequired: true)
             ..parent = syntheticConstructor.function);
 
   List<Initializer> initializersConstructor = cls.fields
       .map<Initializer>((f) =>
-          FieldInitializer(f, VariableGet(ownFields[f.name.name]))
+          FieldInitializer(f, VariableGet(ownFields[f.name.text]))
             ..parent = syntheticConstructor)
       .toList();
 
@@ -124,7 +124,7 @@
     List<VariableDeclaration> allVariables) {
   for (Procedure procedure in cls.procedures) {
     if (procedure.kind == ProcedureKind.Operator &&
-        procedure.name.name == "==") {
+        procedure.name.text == "==") {
       // ==operator is already implemented, spec is to do nothing
       return;
     }
@@ -180,7 +180,7 @@
     List<VariableDeclaration> allVariables) {
   for (Procedure procedure in cls.procedures) {
     if (procedure.kind == ProcedureKind.Getter &&
-        procedure.name.name == "hashCode") {
+        procedure.name.text == "hashCode") {
       // hashCode getter is already implemented, spec is to do nothing
       return;
     }
@@ -198,8 +198,8 @@
       jenkinsScanner.scan(cls.enclosingLibrary.enclosingComponent);
   for (Class clazz in hashMethodsResult.targets.keys) {
     for (Procedure procedure in hashMethodsResult.targets[clazz].targets.keys) {
-      if (procedure.name.name == "combine") hashCombine = procedure;
-      if (procedure.name.name == "finish") hashFinish = procedure;
+      if (procedure.name.text == "combine") hashCombine = procedure;
+      if (procedure.name.text == "finish") hashFinish = procedure;
     }
   }
 
@@ -280,7 +280,7 @@
 List<VariableDeclaration> queryAllInstanceVariables(Class cls) {
   Constructor superConstructor = null;
   for (Constructor constructor in cls.superclass.constructors) {
-    if (constructor.name.name == "") {
+    if (constructor.name.text == "") {
       superConstructor = constructor;
     }
   }
@@ -289,5 +289,5 @@
           (f) => VariableDeclaration(f.name, type: f.type))
       .toList()
         ..addAll(cls.fields.map<VariableDeclaration>(
-            (f) => VariableDeclaration(f.name.name, type: f.type)));
+            (f) => VariableDeclaration(f.name.text, type: f.type)));
 }
diff --git a/pkg/kernel/lib/type_checker.dart b/pkg/kernel/lib/type_checker.dart
index 5db606b..d3869e2 100644
--- a/pkg/kernel/lib/type_checker.dart
+++ b/pkg/kernel/lib/type_checker.dart
@@ -622,11 +622,11 @@
     var target = node.interfaceTarget;
     if (target == null) {
       var receiver = visitExpression(node.receiver);
-      if (node.name.name == '==') {
+      if (node.name.text == '==') {
         visitExpression(node.arguments.positional.single);
         return environment.coreTypes.boolLegacyRawType;
       }
-      if (node.name.name == 'call' && receiver is FunctionType) {
+      if (node.name.text == 'call' && receiver is FunctionType) {
         return handleFunctionCall(node, receiver, node.arguments);
       }
       checkUnresolvedInvocation(receiver, node);
diff --git a/pkg/kernel/lib/type_environment.dart b/pkg/kernel/lib/type_environment.dart
index a6f70ca..4ccf611 100644
--- a/pkg/kernel/lib/type_environment.dart
+++ b/pkg/kernel/lib/type_environment.dart
@@ -156,7 +156,7 @@
       if (class_ == coreTypes.intClass ||
           class_ == coreTypes.numClass ||
           class_ == coreTypes.doubleClass) {
-        String name = member.name.name;
+        String name = member.name.text;
         return name == '+' ||
             name == '-' ||
             name == '*' ||
@@ -166,7 +166,7 @@
     } else {
       Class class_ = member.enclosingClass;
       if (class_ == coreTypes.intClass || class_ == coreTypes.numClass) {
-        String name = member.name.name;
+        String name = member.name.text;
         return name == '+' ||
             name == '-' ||
             name == '*' ||
@@ -184,7 +184,7 @@
     if (isNonNullableByDefault) {
       Class class_ = member.enclosingClass;
       if (class_ == coreTypes.intClass || class_ == coreTypes.numClass) {
-        String name = member.name.name;
+        String name = member.name.text;
         return name == 'clamp';
       }
     }
diff --git a/pkg/kernel/lib/verifier.dart b/pkg/kernel/lib/verifier.dart
index 5ad6c85..1e02a78 100644
--- a/pkg/kernel/lib/verifier.dart
+++ b/pkg/kernel/lib/verifier.dart
@@ -273,11 +273,11 @@
     var oldParent = enterParent(node);
     bool isTopLevel = node.parent == currentLibrary;
     if (isTopLevel && !node.isStatic) {
-      problem(node, "The top-level field '${node.name.name}' should be static",
+      problem(node, "The top-level field '${node.name.text}' should be static",
           context: node);
     }
     if (node.isConst && !node.isStatic) {
-      problem(node, "The const field '${node.name.name}' should be static",
+      problem(node, "The const field '${node.name.text}' should be static",
           context: node);
     }
     classTypeParametersAreInScope = !node.isStatic;
diff --git a/pkg/vm/lib/bytecode/gen_bytecode.dart b/pkg/vm/lib/bytecode/gen_bytecode.dart
index b44d6ad..2a54a62 100644
--- a/pkg/vm/lib/bytecode/gen_bytecode.dart
+++ b/pkg/vm/lib/bytecode/gen_bytecode.dart
@@ -1610,7 +1610,7 @@
       return;
     }
     if (condition is MethodInvocation &&
-        condition.name.name == '==' &&
+        condition.name.text == '==' &&
         (condition.receiver is NullLiteral ||
             condition.arguments.positional.single is NullLiteral)) {
       if (condition.receiver is NullLiteral) {
@@ -1855,7 +1855,7 @@
 
   // Generate additional code for 'operator ==' to handle nulls.
   void _genEqualsOperatorNullHandling(Member member) {
-    if (member.name.name != '==' ||
+    if (member.name.text != '==' ||
         locals.numParameters != 2 ||
         member.enclosingClass == coreTypes.objectClass) {
       return;
@@ -3525,7 +3525,7 @@
     if (target == null) {
       final int temp = locals.tempIndexInFrame(node);
       _genNoSuchMethodForSuperCall(
-          node.name.name,
+          node.name.text,
           temp,
           cp.addArgDescByArguments(args, hasReceiver: true),
           args.types,
@@ -3549,7 +3549,7 @@
         hierarchy.getDispatchTarget(enclosingClass.superclass, node.name);
     if (target == null) {
       final int temp = locals.tempIndexInFrame(node);
-      _genNoSuchMethodForSuperCall(node.name.name, temp, cp.addArgDesc(1), [],
+      _genNoSuchMethodForSuperCall(node.name.text, temp, cp.addArgDesc(1), [],
           <Expression>[new ThisExpression()]);
       return;
     }
@@ -3566,7 +3566,7 @@
     final Member target = hierarchy
         .getDispatchTarget(enclosingClass.superclass, node.name, setter: true);
     if (target == null) {
-      _genNoSuchMethodForSuperCall(node.name.name, temp, cp.addArgDesc(2), [],
+      _genNoSuchMethodForSuperCall(node.name.text, temp, cp.addArgDesc(2), [],
           <Expression>[new ThisExpression(), node.value],
           storeLastArgumentToTemp: hasResult);
     } else {
@@ -3838,7 +3838,7 @@
         // closure call needs one temporary, so withTemp lets us use this
         // VariableGet's temporary when visiting the initializer.
         assert(init is MethodInvocation &&
-            init.name.name == "call" &&
+            init.name.text == "call" &&
             init.arguments.positional.length == 0);
         locals.withTemp(
             init, locals.tempIndexInFrame(node), () => _generateNode(init));
diff --git a/pkg/vm/lib/bytecode/generics.dart b/pkg/vm/lib/bytecode/generics.dart
index 6399d99..6fc5829 100644
--- a/pkg/vm/lib/bytecode/generics.dart
+++ b/pkg/vm/lib/bytecode/generics.dart
@@ -306,6 +306,6 @@
 /// function type. Such invocations can omit argument type checks.
 bool isUncheckedClosureCall(MethodInvocation node,
         StaticTypeContext staticTypeContext, BytecodeOptions options) =>
-    node.name.name == 'call' &&
+    node.name.text == 'call' &&
     getStaticType(node.receiver, staticTypeContext) is FunctionType &&
     !options.avoidClosureCallInstructions;
diff --git a/pkg/vm/lib/bytecode/object_table.dart b/pkg/vm/lib/bytecode/object_table.dart
index 734c26e..8db0792 100644
--- a/pkg/vm/lib/bytecode/object_table.dart
+++ b/pkg/vm/lib/bytecode/object_table.dart
@@ -1805,7 +1805,7 @@
   }
 
   String mangleMemberName(Member member, bool isGetter, bool isSetter) {
-    final name = member.name.name;
+    final name = member.name.text;
     if (isGetter || (member is Procedure && member.isGetter)) {
       return mangleGetterName(name);
     }
@@ -1862,7 +1862,7 @@
   ObjectHandle getSelectorNameHandle(Name name,
       {bool isGetter: false, bool isSetter: false}) {
     return getNameHandle(
-        name.library, mangleSelectorName(name.name, isGetter, isSetter));
+        name.library, mangleSelectorName(name.text, isGetter, isSetter));
   }
 
   ObjectHandle getTopLevelClassHandle(Library library) {
diff --git a/pkg/vm/lib/bytecode/recognized_methods.dart b/pkg/vm/lib/bytecode/recognized_methods.dart
index a237c1f..f73ce50 100644
--- a/pkg/vm/lib/bytecode/recognized_methods.dart
+++ b/pkg/vm/lib/bytecode/recognized_methods.dart
@@ -61,7 +61,7 @@
     }
 
     final Expression receiver = node.receiver;
-    final String selector = node.name.name;
+    final String selector = node.name.text;
 
     switch (args.positional.length) {
       case 0:
diff --git a/pkg/vm/lib/transformations/call_site_annotator.dart b/pkg/vm/lib/transformations/call_site_annotator.dart
index b93b258..324401f 100644
--- a/pkg/vm/lib/transformations/call_site_annotator.dart
+++ b/pkg/vm/lib/transformations/call_site_annotator.dart
@@ -67,7 +67,7 @@
 
     // TODO(34162): We don't need to save the type here for calls, just whether
     // or not it's a statically-checked call.
-    if (node.name.name == 'call' ||
+    if (node.name.text == 'call' ||
         hasGenericCovariantParameters(node.interfaceTarget)) {
       annotateWithType(node, node.receiver);
     }
diff --git a/pkg/vm/lib/transformations/ffi_definitions.dart b/pkg/vm/lib/transformations/ffi_definitions.dart
index 8ec1805..0027255 100644
--- a/pkg/vm/lib/transformations/ffi_definitions.dart
+++ b/pkg/vm/lib/transformations/ffi_definitions.dart
@@ -203,9 +203,9 @@
       if (f is Field) {
         if (f.initializer is! NullLiteral) {
           diagnosticReporter.report(
-              templateFfiFieldInitializer.withArguments(f.name.name),
+              templateFfiFieldInitializer.withArguments(f.name.text),
               f.fileOffset,
-              f.name.name.length,
+              f.name.text.length,
               f.fileUri);
         }
       }
@@ -214,16 +214,16 @@
       if (_isPointerType(type)) {
         if (nativeTypeAnnos.length != 0) {
           diagnosticReporter.report(
-              templateFfiFieldNoAnnotation.withArguments(f.name.name),
+              templateFfiFieldNoAnnotation.withArguments(f.name.text),
               f.fileOffset,
-              f.name.name.length,
+              f.name.text.length,
               f.fileUri);
         }
       } else if (nativeTypeAnnos.length != 1) {
         diagnosticReporter.report(
-            templateFfiFieldAnnotation.withArguments(f.name.name),
+            templateFfiFieldAnnotation.withArguments(f.name.text),
             f.fileOffset,
-            f.name.name.length,
+            f.name.text.length,
             f.fileUri);
       } else {
         final DartType nativeType = InterfaceType(
@@ -258,7 +258,7 @@
         if (i is FieldInitializer) {
           toRemove.add(i);
           diagnosticReporter.report(
-              templateFfiFieldInitializer.withArguments(i.field.name.name),
+              templateFfiFieldInitializer.withArguments(i.field.name.text),
               i.fileOffset,
               1,
               i.location.file);
@@ -274,7 +274,7 @@
     // C.#fromPointer(Pointer<Void> address) : super.fromPointer(address);
     final VariableDeclaration pointer = new VariableDeclaration("#pointer");
     final name = Name("#fromPointer");
-    final referenceFrom = indexedClass?.lookupConstructor(name.name);
+    final referenceFrom = indexedClass?.lookupConstructor(name.text);
     final Constructor ctor = Constructor(
         FunctionNode(EmptyStatement(), positionalParameters: [pointer]),
         name: name,
@@ -463,7 +463,7 @@
         FunctionNode(getterStatement, returnType: field.type),
         fileUri: field.fileUri,
         reference:
-            indexedClass?.lookupProcedureNotSetter(field.name.name)?.reference)
+            indexedClass?.lookupProcedureNotSetter(field.name.text)?.reference)
       ..fileOffset = field.fileOffset
       ..isNonNullableByDefault = field.isNonNullableByDefault;
 
@@ -481,7 +481,7 @@
               returnType: VoidType(), positionalParameters: [argument]),
           fileUri: field.fileUri,
           reference:
-              indexedClass?.lookupProcedureSetter(field.name.name)?.reference)
+              indexedClass?.lookupProcedureSetter(field.name.text)?.reference)
         ..fileOffset = field.fileOffset
         ..isNonNullableByDefault = field.isNonNullableByDefault;
     }
@@ -503,7 +503,7 @@
         initializer: _runtimeBranchOnLayout(sizes),
         type: InterfaceType(intClass, Nullability.legacy),
         fileUri: struct.fileUri,
-        reference: indexedClass?.lookupField(name.name)?.reference)
+        reference: indexedClass?.lookupField(name.text)?.reference)
       ..fileOffset = struct.fileOffset;
     _makeEntryPoint(sizeOf);
     struct.addMember(sizeOf);
diff --git a/pkg/vm/lib/transformations/ffi_use_sites.dart b/pkg/vm/lib/transformations/ffi_use_sites.dart
index f23c669..e198b10 100644
--- a/pkg/vm/lib/transformations/ffi_use_sites.dart
+++ b/pkg/vm/lib/transformations/ffi_use_sites.dart
@@ -342,7 +342,7 @@
         isStatic: true,
         isFinal: true,
         fileUri: currentLibrary.fileUri,
-        reference: currentLibraryIndex?.lookupField(name.name)?.reference)
+        reference: currentLibraryIndex?.lookupField(name.text)?.reference)
       ..fileOffset = node.fileOffset;
     currentLibrary.addMember(field);
     return StaticGet(field);
@@ -434,7 +434,7 @@
       return;
     }
     diagnosticReporter.report(
-        templateFfiNotStatic.withArguments(fromFunctionMethod.name.name),
+        templateFfiNotStatic.withArguments(fromFunctionMethod.name.text),
         node.fileOffset,
         1,
         node.location.file);
diff --git a/pkg/vm/lib/transformations/no_dynamic_invocations_annotator.dart b/pkg/vm/lib/transformations/no_dynamic_invocations_annotator.dart
index fd6484ca..d2b01c3 100644
--- a/pkg/vm/lib/transformations/no_dynamic_invocations_annotator.dart
+++ b/pkg/vm/lib/transformations/no_dynamic_invocations_annotator.dart
@@ -81,7 +81,7 @@
   }
 
   visitField(Field node) {
-    if (node.isStatic || node.name.name == 'call') {
+    if (node.isStatic || node.name.text == 'call') {
       return;
     }
 
@@ -104,7 +104,7 @@
   }
 
   visitProcedure(Procedure node) {
-    if (node.isStatic || node.name.name == 'call') {
+    if (node.isStatic || node.name.text == 'call') {
       return;
     }
 
diff --git a/pkg/vm/lib/transformations/obfuscation_prohibitions_annotator.dart b/pkg/vm/lib/transformations/obfuscation_prohibitions_annotator.dart
index b059fd3..98592ef 100644
--- a/pkg/vm/lib/transformations/obfuscation_prohibitions_annotator.dart
+++ b/pkg/vm/lib/transformations/obfuscation_prohibitions_annotator.dart
@@ -51,16 +51,16 @@
 
   @override
   visitConstructor(Constructor ctor) {
-    _addIfEntryPoint(ctor.annotations, ctor.name.name, ctor);
+    _addIfEntryPoint(ctor.annotations, ctor.name.text, ctor);
   }
 
   @override
   visitProcedure(Procedure proc) {
-    _addIfEntryPoint(proc.annotations, proc.name.name, proc);
+    _addIfEntryPoint(proc.annotations, proc.name.text, proc);
   }
 
   @override
   visitField(Field field) {
-    _addIfEntryPoint(field.annotations, field.name.name, field);
+    _addIfEntryPoint(field.annotations, field.name.text, field);
   }
 }
diff --git a/pkg/vm/lib/transformations/protobuf_aware_treeshaker/transformer.dart b/pkg/vm/lib/transformations/protobuf_aware_treeshaker/transformer.dart
index 2704c99..7aad1d8 100644
--- a/pkg/vm/lib/transformations/protobuf_aware_treeshaker/transformer.dart
+++ b/pkg/vm/lib/transformations/protobuf_aware_treeshaker/transformer.dart
@@ -71,7 +71,7 @@
   final biClass =
       protobufLib.classes.where((klass) => klass.name == 'BuilderInfo').single;
   final addMethod =
-      biClass.members.singleWhere((Member member) => member.name.name == 'add');
+      biClass.members.singleWhere((Member member) => member.name.text == 'add');
 
   component.accept(collector);
 
@@ -125,9 +125,9 @@
   _UnusedFieldMetadataPruner(this.tagNumberClass, this.builderInfoClass,
       this.addMethod, Set<Selector> dynamicSelectors, this.coreTypes, this.info)
       : tagNumberField = tagNumberClass.fields
-            .firstWhere((f) => f.name.name == 'tagNumber')
+            .firstWhere((f) => f.name.text == 'tagNumber')
             .reference {
-    dynamicNames.addAll(dynamicSelectors.map((sel) => sel.target.name));
+    dynamicNames.addAll(dynamicSelectors.map((sel) => sel.target.text));
   }
 
   /// If a proto message field is never accessed (neither read nor written to),
@@ -140,7 +140,7 @@
       TransformationInfo info) {
     for (final klass in gmSubclasses) {
       final selectors = invokedMethods[klass] ?? Set<Selector>();
-      final builderInfoFields = klass.fields.where((f) => f.name.name == '_i');
+      final builderInfoFields = klass.fields.where((f) => f.name.text == '_i');
       if (builderInfoFields.isEmpty) {
         continue;
       }
@@ -152,7 +152,7 @@
   void _pruneBuilderInfoField(
       Field field, Set<Selector> selectors, Class gmSubclass) {
     names.clear();
-    names.addAll(selectors.map((sel) => sel.target.name));
+    names.addAll(selectors.map((sel) => sel.target.text));
     visitedClass = gmSubclass;
     _computeUsedTagNumbers(gmSubclass);
     field.initializer.accept(this);
@@ -166,7 +166,7 @@
           final constant = annotation.constant;
           if (constant is InstanceConstant &&
               constant.classReference == tagNumberClass.reference) {
-            final name = procedure.name.name;
+            final name = procedure.name.text;
             if (dynamicNames.contains(name) || names.contains(name)) {
               usedTagNumbers.add(
                   (constant.fieldValues[tagNumberField] as IntConstant).value);
@@ -216,7 +216,7 @@
   void _changeCascadeEntry(Expression initializer) {
     if (initializer is MethodInvocation &&
         initializer.interfaceTarget?.enclosingClass == builderInfoClass &&
-        fieldAddingMethods.contains(initializer.name.name)) {
+        fieldAddingMethods.contains(initializer.name.text)) {
       final tagNumber =
           (initializer.arguments.positional[0] as IntLiteral).value;
       if (!usedTagNumbers.contains(tagNumber)) {
diff --git a/pkg/vm/lib/transformations/type_flow/analysis.dart b/pkg/vm/lib/transformations/type_flow/analysis.dart
index d35e0a0..8cd2e73 100644
--- a/pkg/vm/lib/transformations/type_flow/analysis.dart
+++ b/pkg/vm/lib/transformations/type_flow/analysis.dart
@@ -467,7 +467,7 @@
     }
 
     // TODO(alexmarkov): handle closures more precisely
-    if ((selector is DynamicSelector) && (selector.name.name == "call")) {
+    if ((selector is DynamicSelector) && (selector.name.text == "call")) {
       tracePrint("Possible closure call, result is dynamic");
       result = new Type.nullableAny();
     }
diff --git a/pkg/vm/lib/transformations/type_flow/protobuf_handler.dart b/pkg/vm/lib/transformations/type_flow/protobuf_handler.dart
index 1e98f46..22729ee 100644
--- a/pkg/vm/lib/transformations/type_flow/protobuf_handler.dart
+++ b/pkg/vm/lib/transformations/type_flow/protobuf_handler.dart
@@ -81,7 +81,7 @@
       return;
     }
     final messageClass = (_messageClasses[cls] ??= _MessageClass());
-    if (member is Field && member.name.name == metadataFieldName) {
+    if (member is Field && member.name.text == metadataFieldName) {
       // Update contents of static field initializer of metadata field (_i).
       // according to the used tag numbers.
       assertx(member.isStatic);
@@ -146,7 +146,7 @@
   bool _isUnusedMetadata(_MessageClass cls, MethodInvocation node) {
     if (node.interfaceTarget != null &&
         node.interfaceTarget.enclosingClass == _builderInfoClass &&
-        fieldAddingMethods.contains(node.name.name)) {
+        fieldAddingMethods.contains(node.name.text)) {
       final tagNumber = (node.arguments.positional[0] as IntLiteral).value;
       return !cls._usedTags.contains(tagNumber);
     }
diff --git a/pkg/vm/lib/transformations/type_flow/summary_collector.dart b/pkg/vm/lib/transformations/type_flow/summary_collector.dart
index d76503d..fb59b0c 100644
--- a/pkg/vm/lib/transformations/type_flow/summary_collector.dart
+++ b/pkg/vm/lib/transformations/type_flow/summary_collector.dart
@@ -762,7 +762,7 @@
         }
       }
 
-      if (member.name.name == '==') {
+      if (member.name.text == '==') {
         // In addition to what is returned from the function body,
         // operator == performs implicit comparison with null
         // and returns bool.
@@ -1350,7 +1350,7 @@
       return;
     } else if (node is MethodInvocation &&
         node.receiver is VariableGet &&
-        node.name.name == '==') {
+        node.name.text == '==') {
       assertx(node.arguments.positional.length == 1 &&
           node.arguments.types.isEmpty &&
           node.arguments.named.isEmpty);
@@ -1639,7 +1639,7 @@
     final receiver = _visit(receiverNode);
     final args = _visitArguments(receiver, node.arguments);
     final target = node.interfaceTarget;
-    if (receiverNode is ConstantExpression && node.name.name == '[]') {
+    if (receiverNode is ConstantExpression && node.name.text == '[]') {
       Constant constant = receiverNode.constant;
       if (constant is ListConstant) {
         return _handleIndexingIntoListConstant(constant);
@@ -1647,11 +1647,11 @@
     }
     TypeExpr result;
     if (target == null) {
-      if (node.name.name == '==') {
+      if (node.name.text == '==') {
         _makeCall(node, new DynamicSelector(CallKind.Method, node.name), args);
         return new Type.nullable(_boolType);
       }
-      if (node.name.name == 'call') {
+      if (node.name.text == 'call') {
         final recvType = _staticDartType(node.receiver);
         if ((recvType is FunctionType) ||
             (recvType == _environment.functionLegacyRawType)) {
diff --git a/pkg/vm/lib/transformations/type_flow/utils.dart b/pkg/vm/lib/transformations/type_flow/utils.dart
index 79e7d7d..409194b 100644
--- a/pkg/vm/lib/transformations/type_flow/utils.dart
+++ b/pkg/vm/lib/transformations/type_flow/utils.dart
@@ -322,7 +322,7 @@
     (expr is ConstantExpression && expr.constant is NullConstant);
 
 Expression getArgumentOfComparisonWithNull(MethodInvocation node) {
-  if (node.name.name == '==') {
+  if (node.name.text == '==') {
     final lhs = node.receiver;
     final rhs = node.arguments.positional.single;
     if (isNullLiteral(lhs)) {
diff --git a/runtime/vm/dart.cc b/runtime/vm/dart.cc
index d901ed9..8805154 100644
--- a/runtime/vm/dart.cc
+++ b/runtime/vm/dart.cc
@@ -69,6 +69,7 @@
 Dart_FileWriteCallback Dart::file_write_callback_ = NULL;
 Dart_FileCloseCallback Dart::file_close_callback_ = NULL;
 Dart_EntropySource Dart::entropy_source_callback_ = NULL;
+Dart_GCEventCallback Dart::gc_event_callback_ = nullptr;
 
 // Structure for managing read-only global handles allocation used for
 // creating global read-only handles that are pre created and initialized
diff --git a/runtime/vm/dart.h b/runtime/vm/dart.h
index 78f7547..27ad70d 100644
--- a/runtime/vm/dart.h
+++ b/runtime/vm/dart.h
@@ -6,6 +6,7 @@
 #define RUNTIME_VM_DART_H_
 
 #include "include/dart_api.h"
+#include "include/dart_tools_api.h"
 #include "vm/allocation.h"
 #include "vm/snapshot.h"
 
@@ -140,6 +141,11 @@
     return entropy_source_callback_;
   }
 
+  static void set_gc_event_callback(Dart_GCEventCallback gc_event) {
+    gc_event_callback_ = gc_event;
+  }
+  static Dart_GCEventCallback gc_event_callback() { return gc_event_callback_; }
+
  private:
   static constexpr const char* kVmIsolateName = "vm-isolate";
 
@@ -158,6 +164,7 @@
   static Dart_FileWriteCallback file_write_callback_;
   static Dart_FileCloseCallback file_close_callback_;
   static Dart_EntropySource entropy_source_callback_;
+  static Dart_GCEventCallback gc_event_callback_;
 };
 
 }  // namespace dart
diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc
index 1440eaa..63ba037 100644
--- a/runtime/vm/dart_api_impl.cc
+++ b/runtime/vm/dart_api_impl.cc
@@ -6380,7 +6380,7 @@
 }
 
 DART_EXPORT void Dart_SetGCEventCallback(Dart_GCEventCallback callback) {
-  Isolate::Current()->heap()->SetGCEventCallback(callback);
+  Dart::set_gc_event_callback(callback);
 }
 
 DART_EXPORT char* Dart_SetFileModifiedCallback(
diff --git a/runtime/vm/heap/heap.cc b/runtime/vm/heap/heap.cc
index dad7079..b2dd597 100644
--- a/runtime/vm/heap/heap.cc
+++ b/runtime/vm/heap/heap.cc
@@ -10,6 +10,7 @@
 #include "platform/assert.h"
 #include "platform/utils.h"
 #include "vm/compiler/jit/compiler.h"
+#include "vm/dart.h"
 #include "vm/flags.h"
 #include "vm/heap/pages.h"
 #include "vm/heap/safepoint.h"
@@ -67,8 +68,7 @@
       read_only_(false),
       last_gc_was_old_space_(false),
       assume_scavenge_will_fail_(false),
-      gc_on_nth_allocation_(kNoForcedGarbageCollection),
-      gc_event_callback_(nullptr) {
+      gc_on_nth_allocation_(kNoForcedGarbageCollection) {
   UpdateGlobalMaxUsed();
   for (int sel = 0; sel < kNumWeakSelectors; sel++) {
     new_weak_tables_[sel] = new WeakTable();
@@ -1026,7 +1026,7 @@
     });
   }
 #endif  // !PRODUCT
-  if (gc_event_callback_ != nullptr) {
+  if (Dart::gc_event_callback() != nullptr) {
     isolate_group_->ForEachIsolate([&](Isolate* isolate) {
       if (!Isolate::IsSystemIsolate(isolate)) {
         Dart_GCEvent event;
@@ -1072,7 +1072,7 @@
               AvgCollectionPeriod(isolate_uptime_micros, old_space_collections);
         }
 
-        (*gc_event_callback_)(&event);
+        (*Dart::gc_event_callback())(&event);
       }
     });
   }
diff --git a/runtime/vm/heap/heap.h b/runtime/vm/heap/heap.h
index 0ea8e09..7e42b75 100644
--- a/runtime/vm/heap/heap.h
+++ b/runtime/vm/heap/heap.h
@@ -322,10 +322,6 @@
 
   void MergeFrom(Heap* donor);
 
-  void SetGCEventCallback(Dart_GCEventCallback callback) {
-    gc_event_callback_ = callback;
-  }
-
  private:
   class GCStats : public ValueObject {
    public:
@@ -422,8 +418,6 @@
   // sensitive codepaths.
   intptr_t gc_on_nth_allocation_;
 
-  Dart_GCEventCallback gc_event_callback_;
-
   friend class Become;       // VisitObjectPointers
   friend class GCCompactor;  // VisitObjectPointers
   friend class Precompiler;  // VisitObjects
diff --git a/tools/VERSION b/tools/VERSION
index 287371e..c35c4a8 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 10
 PATCH 0
-PRERELEASE 138
+PRERELEASE 139
 PRERELEASE_PATCH 0
\ No newline at end of file