diff --git a/DEPS b/DEPS
index 276e2bd..f9788c5 100644
--- a/DEPS
+++ b/DEPS
@@ -142,7 +142,7 @@
   "process_rev": "56ece43b53b64c63ae51ec184b76bd5360c28d0b",
   "protobuf_rev": "c1eb6cb51af39ccbaa1a8e19349546586a5c8e31",
   "pub_rev": "8f5ab7b1aba3b9f66b56246d77e167990339d317",
-  "pub_semver_rev": "a43ad72fb6b7869607581b5fedcb186d1e74276a",
+  "pub_semver_rev": "ea6c54019948dc03042c595ce9413e17aaf7aa38",
   "root_certificates_rev": "692f6d6488af68e0121317a9c2c9eb393eb0ee50",
   "rust_revision": "b7856f695d65a8ebc846754f97d15814bcb1c244",
   "shelf_static_rev": "202ec1a53c9a830c17cf3b718d089cf7eba568ad",
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/api/builders.dart b/pkg/_fe_analyzer_shared/lib/src/macros/api/builders.dart
index 36b560b..03669ef 100644
--- a/pkg/_fe_analyzer_shared/lib/src/macros/api/builders.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/api/builders.dart
@@ -8,9 +8,23 @@
 /// as augment existing ones.
 abstract class Builder {}
 
+/// Allows you to resolve arbitrary [Identifier]s.
+///
+/// This class will likely disappear entirely once we have a different
+/// mechanism.
+abstract class IdentifierResolver {
+  /// Returns an [Identifier] for a top level [name] in [library].
+  ///
+  /// You should only do this for libraries that are definitely in the
+  /// transitive import graph of the library you are generating code into.
+  @Deprecated(
+      'This api should eventually be replaced with a different, safer API.')
+  Future<Identifier> resolveIdentifier(Uri library, String name);
+}
+
 /// The api used by [Macro]s to contribute new type declarations to the
 /// current library, and get [TypeAnnotation]s from runtime [Type] objects.
-abstract class TypeBuilder implements Builder {
+abstract class TypeBuilder implements Builder, IdentifierResolver {
   /// Adds a new type declaration to the surrounding library.
   ///
   /// The [name] must match the name of the new [typeDeclaration] (this does
@@ -75,7 +89,7 @@
 ///
 /// Can also be used to do subtype checks on types.
 abstract class DeclarationBuilder
-    implements Builder, TypeResolver, ClassIntrospector {
+    implements Builder, IdentifierResolver, TypeResolver, ClassIntrospector {
   /// Adds a new regular declaration to the surrounding library.
   ///
   /// Note that type declarations are not supported.
@@ -106,6 +120,7 @@
 abstract class DefinitionBuilder
     implements
         Builder,
+        IdentifierResolver,
         TypeResolver,
         ClassIntrospector,
         TypeDeclarationResolver {}
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/bootstrap.dart b/pkg/_fe_analyzer_shared/lib/src/macros/bootstrap.dart
index ed29787..a645eae 100644
--- a/pkg/_fe_analyzer_shared/lib/src/macros/bootstrap.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/bootstrap.dart
@@ -202,8 +202,13 @@
       throw new StateError('Unrecognized macro instance \${request.macro}\\n'
           'Known instances: \$_macroInstances)');
     }
+    var identifierResolver = ClientIdentifierResolver(
+        sendRequest,
+        remoteInstance: request.identifierResolver,
+        serializationZoneId: request.serializationZoneId);
 
-    var result = await executeTypesMacro(instance, request.declaration);
+    var result = await executeTypesMacro(
+        instance, request.declaration, identifierResolver);
     return new SerializableResponse(
         responseType: MessageType.macroExecutionResult,
         response: result,
@@ -228,6 +233,10 @@
       throw new StateError('Unrecognized macro instance \${request.macro}\\n'
           'Known instances: \$_macroInstances)');
     }
+    var identifierResolver = ClientIdentifierResolver(
+        sendRequest,
+        remoteInstance: request.identifierResolver,
+        serializationZoneId: request.serializationZoneId);
     var classIntrospector = ClientClassIntrospector(
         sendRequest,
         remoteInstance: request.classIntrospector,
@@ -238,7 +247,8 @@
         serializationZoneId: request.serializationZoneId);
 
     var result = await executeDeclarationsMacro(
-        instance, request.declaration, classIntrospector, typeResolver);
+        instance, request.declaration, identifierResolver, classIntrospector,
+        typeResolver);
     return new SerializableResponse(
         responseType: MessageType.macroExecutionResult,
         response: result,
@@ -263,6 +273,10 @@
       throw new StateError('Unrecognized macro instance \${request.macro}\\n'
           'Known instances: \$_macroInstances)');
     }
+    var identifierResolver = ClientIdentifierResolver(
+        sendRequest,
+        remoteInstance: request.identifierResolver,
+        serializationZoneId: request.serializationZoneId);
     var typeResolver = ClientTypeResolver(
         sendRequest,
         remoteInstance: request.typeResolver,
@@ -277,8 +291,8 @@
         serializationZoneId: request.serializationZoneId);
 
     var result = await executeDefinitionMacro(
-        instance, request.declaration, classIntrospector, typeResolver,
-        typeDeclarationResolver);
+        instance, request.declaration, identifierResolver, classIntrospector,
+        typeResolver, typeDeclarationResolver);
     return new SerializableResponse(
         responseType: MessageType.macroExecutionResult,
         response: result,
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/executor.dart b/pkg/_fe_analyzer_shared/lib/src/macros/executor.dart
index 8fde94e..c80c9a5 100644
--- a/pkg/_fe_analyzer_shared/lib/src/macros/executor.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/executor.dart
@@ -44,8 +44,8 @@
   /// Runs the type phase for [macro] on a given [declaration].
   ///
   /// Throws an exception if there is an error executing the macro.
-  Future<MacroExecutionResult> executeTypesPhase(
-      MacroInstanceIdentifier macro, covariant Declaration declaration);
+  Future<MacroExecutionResult> executeTypesPhase(MacroInstanceIdentifier macro,
+      covariant Declaration declaration, IdentifierResolver identifierResolver);
 
   /// Runs the declarations phase for [macro] on a given [declaration].
   ///
@@ -53,6 +53,7 @@
   Future<MacroExecutionResult> executeDeclarationsPhase(
       MacroInstanceIdentifier macro,
       covariant Declaration declaration,
+      IdentifierResolver identifierResolver,
       TypeResolver typeResolver,
       ClassIntrospector classIntrospector);
 
@@ -62,6 +63,7 @@
   Future<MacroExecutionResult> executeDefinitionsPhase(
       MacroInstanceIdentifier macro,
       covariant Declaration declaration,
+      IdentifierResolver identifierResolver,
       TypeResolver typeResolver,
       ClassIntrospector classIntrospector,
       TypeDeclarationResolver typeDeclarationResolver);
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/executor/builder_impls.dart b/pkg/_fe_analyzer_shared/lib/src/macros/executor/builder_impls.dart
index 5225d79..6f522e0 100644
--- a/pkg/_fe_analyzer_shared/lib/src/macros/executor/builder_impls.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/executor/builder_impls.dart
@@ -10,7 +10,7 @@
 import '../api.dart';
 import 'response_impls.dart';
 
-class TypeBuilderBase {
+class TypeBuilderBase implements IdentifierResolver {
   /// The final result, will be built up over `augment` calls.
   final List<DeclarationCode> _libraryAugmentations;
 
@@ -20,6 +20,8 @@
   /// The names of any new types added in [_libraryAugmentations].
   final List<String> _newTypeNames = [];
 
+  final IdentifierResolver identifierResolver;
+
   /// Creates and returns a [MacroExecutionResult] out of the [_augmentations]
   /// created by this builder.
   MacroExecutionResult get result => new MacroExecutionResultImpl(
@@ -28,14 +30,22 @@
         newTypeNames: _newTypeNames,
       );
 
-  TypeBuilderBase(
+  TypeBuilderBase(this.identifierResolver,
       {Map<String, List<DeclarationCode>>? parentClassAugmentations,
       List<DeclarationCode>? parentLibraryAugmentations})
       : _classAugmentations = parentClassAugmentations ?? {},
         _libraryAugmentations = parentLibraryAugmentations ?? [];
+
+  @override
+  Future<Identifier> resolveIdentifier(Uri library, String identifier) =>
+      // ignore: deprecated_member_use_from_same_package
+      identifierResolver.resolveIdentifier(library, identifier);
 }
 
 class TypeBuilderImpl extends TypeBuilderBase implements TypeBuilder {
+  TypeBuilderImpl(IdentifierResolver identifierResolver)
+      : super(identifierResolver);
+
   @override
   void declareType(String name, DeclarationCode typeDeclaration) {
     _newTypeNames.add(name);
@@ -49,10 +59,11 @@
   final ClassIntrospector classIntrospector;
   final TypeResolver typeResolver;
 
-  DeclarationBuilderBase(this.classIntrospector, this.typeResolver,
+  DeclarationBuilderBase(IdentifierResolver identifierResolver,
+      this.classIntrospector, this.typeResolver,
       {Map<String, List<DeclarationCode>>? parentClassAugmentations,
       List<DeclarationCode>? parentLibraryAugmentations})
-      : super(
+      : super(identifierResolver,
             parentClassAugmentations: parentClassAugmentations,
             parentLibraryAugmentations: parentLibraryAugmentations);
 
@@ -87,9 +98,9 @@
 
 class DeclarationBuilderImpl extends DeclarationBuilderBase
     implements DeclarationBuilder {
-  DeclarationBuilderImpl(
+  DeclarationBuilderImpl(IdentifierResolver identifierResolver,
       ClassIntrospector classIntrospector, TypeResolver typeResolver)
-      : super(classIntrospector, typeResolver);
+      : super(identifierResolver, classIntrospector, typeResolver);
 
   @override
   void declareInLibrary(DeclarationCode declaration) {
@@ -101,9 +112,12 @@
     implements ClassMemberDeclarationBuilder {
   final Identifier definingClass;
 
-  ClassMemberDeclarationBuilderImpl(this.definingClass,
-      ClassIntrospector classIntrospector, TypeResolver typeResolver)
-      : super(classIntrospector, typeResolver);
+  ClassMemberDeclarationBuilderImpl(
+      this.definingClass,
+      IdentifierResolver identifierResolver,
+      ClassIntrospector classIntrospector,
+      TypeResolver typeResolver)
+      : super(identifierResolver, classIntrospector, typeResolver);
 
   @override
   void declareInClass(DeclarationCode declaration) {
@@ -118,11 +132,14 @@
     implements TypeDeclarationResolver {
   final TypeDeclarationResolver typeDeclarationResolver;
 
-  DefinitionBuilderBase(ClassIntrospector classIntrospector,
-      TypeResolver typeResolver, this.typeDeclarationResolver,
+  DefinitionBuilderBase(
+      IdentifierResolver identifierResolver,
+      ClassIntrospector classIntrospector,
+      TypeResolver typeResolver,
+      this.typeDeclarationResolver,
       {Map<String, List<DeclarationCode>>? parentClassAugmentations,
       List<DeclarationCode>? parentLibraryAugmentations})
-      : super(classIntrospector, typeResolver,
+      : super(identifierResolver, classIntrospector, typeResolver,
             parentClassAugmentations: parentClassAugmentations,
             parentLibraryAugmentations: parentLibraryAugmentations);
 
@@ -138,12 +155,14 @@
 
   ClassDefinitionBuilderImpl(
       this.declaration,
+      IdentifierResolver identifierResolver,
       ClassIntrospector classIntrospector,
       TypeResolver typeResolver,
       TypeDeclarationResolver typeDeclarationResolver,
       {Map<String, List<DeclarationCode>>? parentClassAugmentations,
       List<DeclarationCode>? parentLibraryAugmentations})
-      : super(classIntrospector, typeResolver, typeDeclarationResolver,
+      : super(identifierResolver, classIntrospector, typeResolver,
+            typeDeclarationResolver,
             parentClassAugmentations: parentClassAugmentations,
             parentLibraryAugmentations: parentLibraryAugmentations);
 
@@ -153,8 +172,8 @@
     ConstructorDeclaration constructor =
         (await classIntrospector.constructorsOf(declaration))
             .firstWhere((constructor) => constructor.identifier == identifier);
-    return new ConstructorDefinitionBuilderImpl(
-        constructor, classIntrospector, typeResolver, typeDeclarationResolver,
+    return new ConstructorDefinitionBuilderImpl(constructor, identifierResolver,
+        classIntrospector, typeResolver, typeDeclarationResolver,
         parentClassAugmentations: _classAugmentations,
         parentLibraryAugmentations: _libraryAugmentations);
   }
@@ -163,8 +182,8 @@
   Future<VariableDefinitionBuilder> buildField(Identifier identifier) async {
     FieldDeclaration field = (await classIntrospector.fieldsOf(declaration))
         .firstWhere((field) => field.identifier == identifier);
-    return new VariableDefinitionBuilderImpl(
-        field, classIntrospector, typeResolver, typeDeclarationResolver,
+    return new VariableDefinitionBuilderImpl(field, identifierResolver,
+        classIntrospector, typeResolver, typeDeclarationResolver,
         parentClassAugmentations: _classAugmentations,
         parentLibraryAugmentations: _libraryAugmentations);
   }
@@ -173,8 +192,8 @@
   Future<FunctionDefinitionBuilder> buildMethod(Identifier identifier) async {
     MethodDeclaration method = (await classIntrospector.methodsOf(declaration))
         .firstWhere((method) => method.identifier == identifier);
-    return new FunctionDefinitionBuilderImpl(
-        method, classIntrospector, typeResolver, typeDeclarationResolver,
+    return new FunctionDefinitionBuilderImpl(method, identifierResolver,
+        classIntrospector, typeResolver, typeDeclarationResolver,
         parentClassAugmentations: _classAugmentations,
         parentLibraryAugmentations: _libraryAugmentations);
   }
@@ -187,12 +206,14 @@
 
   FunctionDefinitionBuilderImpl(
       this.declaration,
+      IdentifierResolver identifierResolver,
       ClassIntrospector classIntrospector,
       TypeResolver typeResolver,
       TypeDeclarationResolver typeDeclarationResolver,
       {Map<String, List<DeclarationCode>>? parentClassAugmentations,
       List<DeclarationCode>? parentLibraryAugmentations})
-      : super(classIntrospector, typeResolver, typeDeclarationResolver,
+      : super(identifierResolver, classIntrospector, typeResolver,
+            typeDeclarationResolver,
             parentClassAugmentations: parentClassAugmentations,
             parentLibraryAugmentations: parentLibraryAugmentations);
 
@@ -217,12 +238,14 @@
 
   ConstructorDefinitionBuilderImpl(
       this.declaration,
+      IdentifierResolver identifierResolver,
       ClassIntrospector classIntrospector,
       TypeResolver typeResolver,
       TypeDeclarationResolver typeDeclarationResolver,
       {Map<String, List<DeclarationCode>>? parentClassAugmentations,
       List<DeclarationCode>? parentLibraryAugmentations})
-      : super(classIntrospector, typeResolver, typeDeclarationResolver,
+      : super(identifierResolver, classIntrospector, typeResolver,
+            typeDeclarationResolver,
             parentClassAugmentations: parentClassAugmentations,
             parentLibraryAugmentations: parentLibraryAugmentations);
 
@@ -245,12 +268,14 @@
 
   VariableDefinitionBuilderImpl(
       this.declaration,
+      IdentifierResolver identifierResolver,
       ClassIntrospector classIntrospector,
       TypeResolver typeResolver,
       TypeDeclarationResolver typeDeclarationResolver,
       {Map<String, List<DeclarationCode>>? parentClassAugmentations,
       List<DeclarationCode>? parentLibraryAugmentations})
-      : super(classIntrospector, typeResolver, typeDeclarationResolver,
+      : super(identifierResolver, classIntrospector, typeResolver,
+            typeDeclarationResolver,
             parentClassAugmentations: parentClassAugmentations,
             parentLibraryAugmentations: parentLibraryAugmentations);
 
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/executor/execute_macro.dart b/pkg/_fe_analyzer_shared/lib/src/macros/executor/execute_macro.dart
index 13ec76e..af3224f 100644
--- a/pkg/_fe_analyzer_shared/lib/src/macros/executor/execute_macro.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/executor/execute_macro.dart
@@ -7,9 +7,9 @@
 import 'package:_fe_analyzer_shared/src/macros/api.dart';
 
 /// Runs [macro] in the types phase and returns a  [MacroExecutionResult].
-Future<MacroExecutionResult> executeTypesMacro(
-    Macro macro, Declaration declaration) async {
-  TypeBuilderImpl builder = new TypeBuilderImpl();
+Future<MacroExecutionResult> executeTypesMacro(Macro macro,
+    Declaration declaration, IdentifierResolver identifierResolver) async {
+  TypeBuilderImpl builder = new TypeBuilderImpl(identifierResolver);
   if (declaration is FunctionDeclaration) {
     if (macro is ConstructorTypesMacro &&
         declaration is ConstructorDeclaration) {
@@ -42,18 +42,19 @@
 Future<MacroExecutionResult> executeDeclarationsMacro(
     Macro macro,
     Declaration declaration,
+    IdentifierResolver identifierResolver,
     ClassIntrospector classIntrospector,
     TypeResolver typeResolver) async {
   if (declaration is ClassDeclaration && macro is ClassDeclarationsMacro) {
     ClassMemberDeclarationBuilderImpl builder =
-        new ClassMemberDeclarationBuilderImpl(
-            declaration.identifier, classIntrospector, typeResolver);
+        new ClassMemberDeclarationBuilderImpl(declaration.identifier,
+            identifierResolver, classIntrospector, typeResolver);
     await macro.buildDeclarationsForClass(declaration, builder);
     return builder.result;
   } else if (declaration is ClassMemberDeclaration) {
     ClassMemberDeclarationBuilderImpl builder =
-        new ClassMemberDeclarationBuilderImpl(
-            declaration.definingClass, classIntrospector, typeResolver);
+        new ClassMemberDeclarationBuilderImpl(declaration.definingClass,
+            identifierResolver, classIntrospector, typeResolver);
     if (declaration is FunctionDeclaration) {
       if (macro is ConstructorDeclarationsMacro &&
           declaration is ConstructorDeclaration) {
@@ -73,16 +74,16 @@
         await macro.buildDeclarationsForField(declaration, builder);
         return builder.result;
       } else if (macro is VariableDeclarationsMacro) {
-        DeclarationBuilderImpl builder =
-            new DeclarationBuilderImpl(classIntrospector, typeResolver);
+        DeclarationBuilderImpl builder = new DeclarationBuilderImpl(
+            identifierResolver, classIntrospector, typeResolver);
         await macro.buildDeclarationsForVariable(
             declaration as VariableDeclaration, builder);
         return builder.result;
       }
     }
   } else {
-    DeclarationBuilderImpl builder =
-        new DeclarationBuilderImpl(classIntrospector, typeResolver);
+    DeclarationBuilderImpl builder = new DeclarationBuilderImpl(
+        identifierResolver, classIntrospector, typeResolver);
     if (declaration is FunctionDeclaration &&
         macro is FunctionDeclarationsMacro) {
       await macro.buildDeclarationsForFunction(declaration, builder);
@@ -101,6 +102,7 @@
 Future<MacroExecutionResult> executeDefinitionMacro(
     Macro macro,
     Declaration declaration,
+    IdentifierResolver identifierResolver,
     ClassIntrospector classIntrospector,
     TypeResolver typeResolver,
     TypeDeclarationResolver typeDeclarationResolver) async {
@@ -108,13 +110,14 @@
     if (macro is ConstructorDefinitionMacro &&
         declaration is ConstructorDeclaration) {
       ConstructorDefinitionBuilderImpl builder =
-          new ConstructorDefinitionBuilderImpl(declaration, classIntrospector,
-              typeResolver, typeDeclarationResolver);
+          new ConstructorDefinitionBuilderImpl(declaration, identifierResolver,
+              classIntrospector, typeResolver, typeDeclarationResolver);
       await macro.buildDefinitionForConstructor(declaration, builder);
       return builder.result;
     } else {
       FunctionDefinitionBuilderImpl builder = new FunctionDefinitionBuilderImpl(
           declaration,
+          identifierResolver,
           classIntrospector,
           typeResolver,
           typeDeclarationResolver);
@@ -128,7 +131,11 @@
     }
   } else if (declaration is VariableDeclaration) {
     VariableDefinitionBuilderImpl builder = new VariableDefinitionBuilderImpl(
-        declaration, classIntrospector, typeResolver, typeDeclarationResolver);
+        declaration,
+        identifierResolver,
+        classIntrospector,
+        typeResolver,
+        typeDeclarationResolver);
     if (macro is FieldDefinitionMacro && declaration is FieldDeclaration) {
       await macro.buildDefinitionForField(declaration, builder);
       return builder.result;
@@ -138,7 +145,11 @@
     }
   } else if (macro is ClassDefinitionMacro && declaration is ClassDeclaration) {
     ClassDefinitionBuilderImpl builder = new ClassDefinitionBuilderImpl(
-        declaration, classIntrospector, typeResolver, typeDeclarationResolver);
+        declaration,
+        identifierResolver,
+        classIntrospector,
+        typeResolver,
+        typeDeclarationResolver);
     await macro.buildDefinitionForClass(declaration, builder);
     return builder.result;
   }
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/executor/executor_base.dart b/pkg/_fe_analyzer_shared/lib/src/macros/executor/executor_base.dart
index 018b47a..940fa5a 100644
--- a/pkg/_fe_analyzer_shared/lib/src/macros/executor/executor_base.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/executor/executor_base.dart
@@ -64,6 +64,34 @@
               }
               completer.complete(response);
               break;
+            case MessageType.resolveIdentifierRequest:
+              ResolveIdentifierRequest request =
+                  new ResolveIdentifierRequest.deserialize(
+                      deserializer, zoneId);
+              SerializableResponse response;
+              try {
+                IdentifierImpl identifier = await (request
+                            .identifierResolver.instance as IdentifierResolver)
+                        // ignore: deprecated_member_use_from_same_package
+                        .resolveIdentifier(request.library, request.name)
+                    as IdentifierImpl;
+                response = new SerializableResponse(
+                    response: identifier,
+                    requestId: request.id,
+                    responseType: MessageType.remoteInstance,
+                    serializationZoneId: zoneId);
+              } catch (error, stackTrace) {
+                response = new SerializableResponse(
+                    error: '$error',
+                    stackTrace: '$stackTrace',
+                    requestId: request.id,
+                    responseType: MessageType.error,
+                    serializationZoneId: zoneId);
+              }
+              Serializer serializer = serializerFactory();
+              response.serialize(serializer);
+              sendResult(serializer);
+              break;
             case MessageType.resolveTypeRequest:
               ResolveTypeRequest request =
                   new ResolveTypeRequest.deserialize(deserializer, zoneId);
@@ -258,12 +286,17 @@
   Future<MacroExecutionResult> executeDeclarationsPhase(
           MacroInstanceIdentifier macro,
           DeclarationImpl declaration,
+          IdentifierResolver identifierResolver,
           TypeResolver typeResolver,
           ClassIntrospector classIntrospector) =>
       _sendRequest((zoneId) => new ExecuteDeclarationsPhaseRequest(
           macro,
           declaration,
           new RemoteInstanceImpl(
+              instance: identifierResolver,
+              id: RemoteInstance.uniqueId,
+              kind: RemoteInstanceKind.identifierResolver),
+          new RemoteInstanceImpl(
               instance: typeResolver,
               id: RemoteInstance.uniqueId,
               kind: RemoteInstanceKind.typeResolver),
@@ -277,6 +310,7 @@
   Future<MacroExecutionResult> executeDefinitionsPhase(
           MacroInstanceIdentifier macro,
           DeclarationImpl declaration,
+          IdentifierResolver identifierResolver,
           TypeResolver typeResolver,
           ClassIntrospector classIntrospector,
           TypeDeclarationResolver typeDeclarationResolver) =>
@@ -284,6 +318,10 @@
           macro,
           declaration,
           new RemoteInstanceImpl(
+              instance: identifierResolver,
+              id: RemoteInstance.uniqueId,
+              kind: RemoteInstanceKind.identifierResolver),
+          new RemoteInstanceImpl(
               instance: typeResolver,
               id: RemoteInstance.uniqueId,
               kind: RemoteInstanceKind.typeResolver),
@@ -298,9 +336,15 @@
           serializationZoneId: zoneId));
 
   @override
-  Future<MacroExecutionResult> executeTypesPhase(
-          MacroInstanceIdentifier macro, DeclarationImpl declaration) =>
-      _sendRequest((zoneId) => new ExecuteTypesPhaseRequest(macro, declaration,
+  Future<MacroExecutionResult> executeTypesPhase(MacroInstanceIdentifier macro,
+          DeclarationImpl declaration, IdentifierResolver identifierResolver) =>
+      _sendRequest((zoneId) => new ExecuteTypesPhaseRequest(
+          macro,
+          declaration,
+          new RemoteInstanceImpl(
+              instance: identifierResolver,
+              id: RemoteInstance.uniqueId,
+              kind: RemoteInstanceKind.identifierResolver),
           serializationZoneId: zoneId));
 
   @override
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/executor/multi_executor.dart b/pkg/_fe_analyzer_shared/lib/src/macros/executor/multi_executor.dart
index 81b8107..aa7c907 100644
--- a/pkg/_fe_analyzer_shared/lib/src/macros/executor/multi_executor.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/executor/multi_executor.dart
@@ -36,25 +36,33 @@
   Future<MacroExecutionResult> executeDeclarationsPhase(
           MacroInstanceIdentifier macro,
           DeclarationImpl declaration,
+          IdentifierResolver identifierResolver,
           TypeResolver typeResolver,
           ClassIntrospector classIntrospector) =>
-      _executors[macro]!.executeDeclarationsPhase(
-          macro, declaration, typeResolver, classIntrospector);
+      _executors[macro]!.executeDeclarationsPhase(macro, declaration,
+          identifierResolver, typeResolver, classIntrospector);
 
   @override
   Future<MacroExecutionResult> executeDefinitionsPhase(
           MacroInstanceIdentifier macro,
           DeclarationImpl declaration,
+          IdentifierResolver identifierResolver,
           TypeResolver typeResolver,
           ClassIntrospector classIntrospector,
           TypeDeclarationResolver typeDeclarationResolver) =>
-      _executors[macro]!.executeDefinitionsPhase(macro, declaration,
-          typeResolver, classIntrospector, typeDeclarationResolver);
+      _executors[macro]!.executeDefinitionsPhase(
+          macro,
+          declaration,
+          identifierResolver,
+          typeResolver,
+          classIntrospector,
+          typeDeclarationResolver);
 
   @override
-  Future<MacroExecutionResult> executeTypesPhase(
-          MacroInstanceIdentifier macro, DeclarationImpl declaration) =>
-      _executors[macro]!.executeTypesPhase(macro, declaration);
+  Future<MacroExecutionResult> executeTypesPhase(MacroInstanceIdentifier macro,
+          DeclarationImpl declaration, IdentifierResolver identifierResolver) =>
+      _executors[macro]!
+          .executeTypesPhase(macro, declaration, identifierResolver);
 
   @override
   Future<MacroInstanceIdentifier> instantiateMacro(
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/executor/protocol.dart b/pkg/_fe_analyzer_shared/lib/src/macros/executor/protocol.dart
index fa6d608..73d051c6 100644
--- a/pkg/_fe_analyzer_shared/lib/src/macros/executor/protocol.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/executor/protocol.dart
@@ -248,8 +248,10 @@
 class ExecuteTypesPhaseRequest extends Request {
   final MacroInstanceIdentifier macro;
   final DeclarationImpl declaration;
+  final RemoteInstanceImpl identifierResolver;
 
-  ExecuteTypesPhaseRequest(this.macro, this.declaration,
+  ExecuteTypesPhaseRequest(
+      this.macro, this.declaration, this.identifierResolver,
       {required int serializationZoneId})
       : super(serializationZoneId: serializationZoneId);
 
@@ -259,12 +261,14 @@
       Deserializer deserializer, int serializationZoneId)
       : macro = new MacroInstanceIdentifierImpl.deserialize(deserializer),
         declaration = RemoteInstance.deserialize(deserializer),
+        identifierResolver = RemoteInstance.deserialize(deserializer),
         super.deserialize(deserializer, serializationZoneId);
 
   void serialize(Serializer serializer) {
     serializer.addInt(MessageType.executeTypesPhaseRequest.index);
     macro.serialize(serializer);
     declaration.serialize(serializer);
+    identifierResolver.serialize(serializer);
 
     super.serialize(serializer);
   }
@@ -276,11 +280,12 @@
   final MacroInstanceIdentifier macro;
   final DeclarationImpl declaration;
 
+  final RemoteInstanceImpl identifierResolver;
   final RemoteInstanceImpl typeResolver;
   final RemoteInstanceImpl classIntrospector;
 
-  ExecuteDeclarationsPhaseRequest(
-      this.macro, this.declaration, this.typeResolver, this.classIntrospector,
+  ExecuteDeclarationsPhaseRequest(this.macro, this.declaration,
+      this.identifierResolver, this.typeResolver, this.classIntrospector,
       {required int serializationZoneId})
       : super(serializationZoneId: serializationZoneId);
 
@@ -290,6 +295,7 @@
       Deserializer deserializer, int serializationZoneId)
       : macro = new MacroInstanceIdentifierImpl.deserialize(deserializer),
         declaration = RemoteInstance.deserialize(deserializer),
+        identifierResolver = RemoteInstance.deserialize(deserializer),
         typeResolver = RemoteInstance.deserialize(deserializer),
         classIntrospector = RemoteInstance.deserialize(deserializer),
         super.deserialize(deserializer, serializationZoneId);
@@ -298,6 +304,7 @@
     serializer.addInt(MessageType.executeDeclarationsPhaseRequest.index);
     macro.serialize(serializer);
     declaration.serialize(serializer);
+    identifierResolver.serialize(serializer);
     typeResolver.serialize(serializer);
     classIntrospector.serialize(serializer);
 
@@ -311,12 +318,18 @@
   final MacroInstanceIdentifier macro;
   final DeclarationImpl declaration;
 
+  final RemoteInstanceImpl identifierResolver;
   final RemoteInstanceImpl typeResolver;
   final RemoteInstanceImpl classIntrospector;
   final RemoteInstanceImpl typeDeclarationResolver;
 
-  ExecuteDefinitionsPhaseRequest(this.macro, this.declaration,
-      this.typeResolver, this.classIntrospector, this.typeDeclarationResolver,
+  ExecuteDefinitionsPhaseRequest(
+      this.macro,
+      this.declaration,
+      this.identifierResolver,
+      this.typeResolver,
+      this.classIntrospector,
+      this.typeDeclarationResolver,
       {required int serializationZoneId})
       : super(serializationZoneId: serializationZoneId);
 
@@ -326,6 +339,7 @@
       Deserializer deserializer, int serializationZoneId)
       : macro = new MacroInstanceIdentifierImpl.deserialize(deserializer),
         declaration = RemoteInstance.deserialize(deserializer),
+        identifierResolver = RemoteInstance.deserialize(deserializer),
         typeResolver = RemoteInstance.deserialize(deserializer),
         classIntrospector = RemoteInstance.deserialize(deserializer),
         typeDeclarationResolver = RemoteInstance.deserialize(deserializer),
@@ -335,6 +349,7 @@
     serializer.addInt(MessageType.executeDefinitionsPhaseRequest.index);
     macro.serialize(serializer);
     declaration.serialize(serializer);
+    identifierResolver.serialize(serializer);
     typeResolver.serialize(serializer);
     classIntrospector.serialize(serializer);
     typeDeclarationResolver.serialize(serializer);
@@ -343,6 +358,37 @@
   }
 }
 
+/// A request to create a resolved identifier.
+class ResolveIdentifierRequest extends Request {
+  final Uri library;
+  final String name;
+
+  final RemoteInstanceImpl identifierResolver;
+
+  /// When deserializing we have already consumed the message type, so we don't
+  /// consume it again.
+  ResolveIdentifierRequest(this.library, this.name, this.identifierResolver,
+      {required int serializationZoneId})
+      : super(serializationZoneId: serializationZoneId);
+
+  ResolveIdentifierRequest.deserialize(
+      Deserializer deserializer, int serializationZoneId)
+      : library = Uri.parse((deserializer..moveNext()).expectString()),
+        name = (deserializer..moveNext()).expectString(),
+        identifierResolver = RemoteInstance.deserialize(deserializer),
+        super.deserialize(deserializer, serializationZoneId);
+
+  void serialize(Serializer serializer) {
+    serializer
+      ..addInt(MessageType.resolveIdentifierRequest.index)
+      ..addString(library.toString())
+      ..addString(name);
+    identifierResolver.serialize(serializer);
+
+    super.serialize(serializer);
+  }
+}
+
 /// A request to resolve on a type annotation code object
 class ResolveTypeRequest extends Request {
   final TypeAnnotationCode typeAnnotationCode;
@@ -473,6 +519,32 @@
   }
 }
 
+/// Client side implementation of an [IdentifierResolver], which creates a
+/// [ResolveIdentifierRequest] and passes it to a given [sendRequest] function
+/// which can return the [Response].
+class ClientIdentifierResolver implements IdentifierResolver {
+  /// The actual remote instance of this type resolver.
+  final RemoteInstanceImpl remoteInstance;
+
+  /// The ID of the zone in which to find the original type resolver.
+  final int serializationZoneId;
+
+  /// A function that can send a request and return a response using an
+  /// arbitrary communication channel.
+  final Future<Response> Function(Request request) _sendRequest;
+
+  ClientIdentifierResolver(this._sendRequest,
+      {required this.remoteInstance, required this.serializationZoneId});
+
+  @override
+  Future<Identifier> resolveIdentifier(Uri library, String name) async {
+    ResolveIdentifierRequest request = new ResolveIdentifierRequest(
+        library, name, remoteInstance,
+        serializationZoneId: serializationZoneId);
+    return _handleResponse(await _sendRequest(request));
+  }
+}
+
 /// Client side implementation of a [TypeResolver], which creates a
 /// [ResolveTypeRequest] and passes it to a given [sendRequest] function which
 /// can return the [Response].
@@ -699,6 +771,7 @@
   executeDefinitionsPhaseRequest,
   executeTypesPhaseRequest,
   instantiateMacroRequest,
+  resolveIdentifierRequest,
   resolveTypeRequest,
   isExactlyTypeRequest,
   isSubtypeOfRequest,
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/executor/remote_instance.dart b/pkg/_fe_analyzer_shared/lib/src/macros/executor/remote_instance.dart
index 3940b7e..fc45704 100644
--- a/pkg/_fe_analyzer_shared/lib/src/macros/executor/remote_instance.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/executor/remote_instance.dart
@@ -96,6 +96,7 @@
   functionDeclaration,
   functionTypeAnnotation,
   identifier,
+  identifierResolver,
   namedStaticType,
   methodDeclaration,
   namedTypeAnnotation,
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/executor/serialization_extensions.dart b/pkg/_fe_analyzer_shared/lib/src/macros/executor/serialization_extensions.dart
index cf3ff21..d039f7d 100644
--- a/pkg/_fe_analyzer_shared/lib/src/macros/executor/serialization_extensions.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/executor/serialization_extensions.dart
@@ -17,6 +17,7 @@
     RemoteInstanceKind kind = RemoteInstanceKind.values[expectInt()];
     switch (kind) {
       case RemoteInstanceKind.classIntrospector:
+      case RemoteInstanceKind.identifierResolver:
       case RemoteInstanceKind.namedStaticType:
       case RemoteInstanceKind.staticType:
       case RemoteInstanceKind.typeDeclarationResolver:
diff --git a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
index 779de84..a9ec81e 100644
--- a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
@@ -1902,15 +1902,6 @@
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Null> codeContinueLabelNotTarget = messageContinueLabelNotTarget;
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const MessageCode messageContinueLabelNotTarget = const MessageCode(
-    "ContinueLabelNotTarget",
-    analyzerCodes: <String>["LABEL_UNDEFINED"],
-    problemMessage: r"""Target of continue must be a label.""");
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeContinueOutsideOfLoop = messageContinueOutsideOfLoop;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
diff --git a/pkg/_fe_analyzer_shared/test/macros/api/api_test_data.dart b/pkg/_fe_analyzer_shared/test/macros/api/api_test_data.dart
index b0fca36..5a96c10 100644
--- a/pkg/_fe_analyzer_shared/test/macros/api/api_test_data.dart
+++ b/pkg/_fe_analyzer_shared/test/macros/api/api_test_data.dart
@@ -6,6 +6,10 @@
 
 main() {}
 
+var field;
+get getter => null;
+set setter(_) => null;
+
 @ClassMacro()
 class Class1 {}
 
diff --git a/pkg/_fe_analyzer_shared/test/macros/api/api_test_expectations.dart b/pkg/_fe_analyzer_shared/test/macros/api/api_test_expectations.dart
index 388a6cc..c826563 100644
--- a/pkg/_fe_analyzer_shared/test/macros/api/api_test_expectations.dart
+++ b/pkg/_fe_analyzer_shared/test/macros/api/api_test_expectations.dart
@@ -44,6 +44,15 @@
   }
 }
 
+Future<void> throws(Future<void> Function() f, property) async {
+  try {
+    await f();
+  } catch (_) {
+    return;
+  }
+  throw 'Expected throws on $property';
+}
+
 void checkTypeAnnotation(
     TypeData expected, TypeAnnotation typeAnnotation, String context) {
   expect(expected.isNullable, typeAnnotation.isNullable, '$context.isNullable');
@@ -121,6 +130,37 @@
   }
 }
 
+Future<void> checkIdentifierResolver(
+    IdentifierResolver identifierResolver) async {
+  Uri dartCore = Uri.parse('dart:core');
+  Uri macroApiData = Uri.parse('package:macro_api_test/api_test_data.dart');
+
+  Future<void> check(Uri uri, String name, {bool expectThrows: false}) async {
+    if (expectThrows) {
+      await throws(() async {
+        await identifierResolver.resolveIdentifier(uri, name);
+      }, '$name from $uri');
+    } else {
+      Identifier result = await identifierResolver.resolveIdentifier(uri, name);
+      expect(name, result.name, '$name from $uri');
+    }
+  }
+
+  await check(dartCore, 'Object');
+  await check(dartCore, 'String');
+  await check(dartCore, 'override');
+
+  await check(macroApiData, 'Class1');
+  await check(macroApiData, 'getter');
+  await check(macroApiData, 'setter=');
+  await check(macroApiData, 'field');
+
+  await check(macroApiData, 'non-existing', expectThrows: true);
+  await check(macroApiData, 'getter=', expectThrows: true);
+  await check(macroApiData, 'setter', expectThrows: true);
+  await check(macroApiData, 'field=', expectThrows: true);
+}
+
 class ClassData {
   final bool isAbstract;
   final bool isExternal;
diff --git a/pkg/_fe_analyzer_shared/test/macros/api/api_test_macro.dart b/pkg/_fe_analyzer_shared/test/macros/api/api_test_macro.dart
index de593f8..d54db3b 100644
--- a/pkg/_fe_analyzer_shared/test/macros/api/api_test_macro.dart
+++ b/pkg/_fe_analyzer_shared/test/macros/api/api_test_macro.dart
@@ -36,17 +36,20 @@
   const FunctionMacro();
 
   FutureOr<void> buildTypesForFunction(
-      FunctionDeclaration function, TypeBuilder builder) {
+      FunctionDeclaration function, TypeBuilder builder) async {
     checkFunctionDeclaration(function);
+    await checkIdentifierResolver(builder);
   }
 
   FutureOr<void> buildDeclarationsForFunction(
-      FunctionDeclaration function, DeclarationBuilder builder) {
+      FunctionDeclaration function, DeclarationBuilder builder) async {
     checkFunctionDeclaration(function);
+    await checkIdentifierResolver(builder);
   }
 
   FutureOr<void> buildDefinitionForFunction(
-      FunctionDeclaration function, FunctionDefinitionBuilder builder) {
+      FunctionDeclaration function, FunctionDefinitionBuilder builder) async {
     checkFunctionDeclaration(function);
+    await checkIdentifierResolver(builder);
   }
 }
diff --git a/pkg/_fe_analyzer_shared/test/macros/executor/executor_test.dart b/pkg/_fe_analyzer_shared/test/macros/executor/executor_test.dart
index f4e5601..13b54ac 100644
--- a/pkg/_fe_analyzer_shared/test/macros/executor/executor_test.dart
+++ b/pkg/_fe_analyzer_shared/test/macros/executor/executor_test.dart
@@ -109,7 +109,7 @@
             group('in the types phase', () {
               test('on functions', () async {
                 var result = await executor.executeTypesPhase(
-                    instanceId, Fixtures.myFunction);
+                    instanceId, Fixtures.myFunction, FakeIdentifierResolver());
                 expect(result.classAugmentations, isEmpty);
                 expect(
                     result.libraryAugmentations.single.debugString().toString(),
@@ -118,7 +118,7 @@
 
               test('on methods', () async {
                 var result = await executor.executeTypesPhase(
-                    instanceId, Fixtures.myMethod);
+                    instanceId, Fixtures.myMethod, FakeIdentifierResolver());
                 expect(result.classAugmentations, isEmpty);
                 expect(
                     result.libraryAugmentations.single.debugString().toString(),
@@ -126,10 +126,8 @@
               });
 
               test('on getters', () async {
-                var result = await executor.executeTypesPhase(
-                  instanceId,
-                  Fixtures.myVariableGetter,
-                );
+                var result = await executor.executeTypesPhase(instanceId,
+                    Fixtures.myVariableGetter, FakeIdentifierResolver());
                 expect(result.classAugmentations, isEmpty);
                 expect(
                     result.libraryAugmentations.single.debugString().toString(),
@@ -138,10 +136,8 @@
               });
 
               test('on setters', () async {
-                var result = await executor.executeTypesPhase(
-                  instanceId,
-                  Fixtures.myVariableSetter,
-                );
+                var result = await executor.executeTypesPhase(instanceId,
+                    Fixtures.myVariableSetter, FakeIdentifierResolver());
                 expect(result.classAugmentations, isEmpty);
                 expect(
                     result.libraryAugmentations.single.debugString().toString(),
@@ -151,9 +147,7 @@
 
               test('on variables', () async {
                 var result = await executor.executeTypesPhase(
-                  instanceId,
-                  Fixtures.myVariable,
-                );
+                    instanceId, Fixtures.myVariable, FakeIdentifierResolver());
                 expect(result.classAugmentations, isEmpty);
                 expect(
                     result.libraryAugmentations.single.debugString().toString(),
@@ -162,8 +156,8 @@
               });
 
               test('on constructors', () async {
-                var result = await executor.executeTypesPhase(
-                    instanceId, Fixtures.myConstructor);
+                var result = await executor.executeTypesPhase(instanceId,
+                    Fixtures.myConstructor, FakeIdentifierResolver());
                 expect(result.classAugmentations, isEmpty);
                 expect(
                     result.libraryAugmentations.single.debugString().toString(),
@@ -173,7 +167,7 @@
 
               test('on fields', () async {
                 var result = await executor.executeTypesPhase(
-                    instanceId, Fixtures.myField);
+                    instanceId, Fixtures.myField, FakeIdentifierResolver());
                 expect(result.classAugmentations, isEmpty);
                 expect(
                     result.libraryAugmentations.single.debugString().toString(),
@@ -182,7 +176,7 @@
 
               test('on classes', () async {
                 var result = await executor.executeTypesPhase(
-                    instanceId, Fixtures.myClass);
+                    instanceId, Fixtures.myClass, FakeIdentifierResolver());
                 expect(result.classAugmentations, isEmpty);
                 expect(
                     result.libraryAugmentations.single.debugString().toString(),
@@ -196,6 +190,7 @@
                 var result = await executor.executeDeclarationsPhase(
                     instanceId,
                     Fixtures.myFunction,
+                    FakeIdentifierResolver(),
                     Fixtures.testTypeResolver,
                     Fixtures.testClassIntrospector);
                 expect(result.classAugmentations, isEmpty);
@@ -209,6 +204,7 @@
                 var result = await executor.executeDeclarationsPhase(
                     instanceId,
                     Fixtures.myMethod,
+                    FakeIdentifierResolver(),
                     Fixtures.testTypeResolver,
                     Fixtures.testClassIntrospector);
                 expect(result.classAugmentations, isEmpty);
@@ -222,6 +218,7 @@
                 var result = await executor.executeDeclarationsPhase(
                     instanceId,
                     Fixtures.myConstructor,
+                    FakeIdentifierResolver(),
                     Fixtures.testTypeResolver,
                     Fixtures.testClassIntrospector);
                 expect(result.classAugmentations, hasLength(1));
@@ -239,6 +236,7 @@
                 var result = await executor.executeDeclarationsPhase(
                     instanceId,
                     Fixtures.myVariableGetter,
+                    FakeIdentifierResolver(),
                     Fixtures.testTypeResolver,
                     Fixtures.testClassIntrospector);
                 expect(result.classAugmentations, isEmpty);
@@ -252,6 +250,7 @@
                 var result = await executor.executeDeclarationsPhase(
                     instanceId,
                     Fixtures.myVariableSetter,
+                    FakeIdentifierResolver(),
                     Fixtures.testTypeResolver,
                     Fixtures.testClassIntrospector);
                 expect(result.classAugmentations, isEmpty);
@@ -265,6 +264,7 @@
                 var result = await executor.executeDeclarationsPhase(
                     instanceId,
                     Fixtures.myVariable,
+                    FakeIdentifierResolver(),
                     Fixtures.testTypeResolver,
                     Fixtures.testClassIntrospector);
                 expect(result.classAugmentations, isEmpty);
@@ -278,6 +278,7 @@
                 var result = await executor.executeDeclarationsPhase(
                     instanceId,
                     Fixtures.myField,
+                    FakeIdentifierResolver(),
                     Fixtures.testTypeResolver,
                     Fixtures.testClassIntrospector);
                 expect(result.classAugmentations, hasLength(1));
@@ -295,6 +296,7 @@
                 var result = await executor.executeDeclarationsPhase(
                     instanceId,
                     Fixtures.myClass,
+                    FakeIdentifierResolver(),
                     Fixtures.testTypeResolver,
                     Fixtures.testClassIntrospector);
                 expect(result.classAugmentations, hasLength(1));
@@ -314,6 +316,7 @@
                 var result = await executor.executeDefinitionsPhase(
                     instanceId,
                     Fixtures.myFunction,
+                    FakeIdentifierResolver(),
                     Fixtures.testTypeResolver,
                     Fixtures.testClassIntrospector,
                     Fixtures.testTypeDeclarationResolver);
@@ -335,6 +338,7 @@
                 var definitionResult = await executor.executeDefinitionsPhase(
                     instanceId,
                     Fixtures.myMethod,
+                    FakeIdentifierResolver(),
                     Fixtures.testTypeResolver,
                     Fixtures.testClassIntrospector,
                     Fixtures.testTypeDeclarationResolver);
@@ -352,6 +356,7 @@
                 var definitionResult = await executor.executeDefinitionsPhase(
                     instanceId,
                     Fixtures.myConstructor,
+                    FakeIdentifierResolver(),
                     Fixtures.testTypeResolver,
                     Fixtures.testClassIntrospector,
                     Fixtures.testTypeDeclarationResolver);
@@ -368,6 +373,7 @@
                 var result = await executor.executeDefinitionsPhase(
                     instanceId,
                     Fixtures.myVariableGetter,
+                    FakeIdentifierResolver(),
                     Fixtures.testTypeResolver,
                     Fixtures.testClassIntrospector,
                     Fixtures.testTypeDeclarationResolver);
@@ -389,6 +395,7 @@
                 var result = await executor.executeDefinitionsPhase(
                     instanceId,
                     Fixtures.myVariableSetter,
+                    FakeIdentifierResolver(),
                     Fixtures.testTypeResolver,
                     Fixtures.testClassIntrospector,
                     Fixtures.testTypeDeclarationResolver);
@@ -411,6 +418,7 @@
                 var result = await executor.executeDefinitionsPhase(
                     instanceId,
                     Fixtures.myVariable,
+                    FakeIdentifierResolver(),
                     Fixtures.testTypeResolver,
                     Fixtures.testClassIntrospector,
                     Fixtures.testTypeDeclarationResolver);
@@ -441,6 +449,7 @@
                 var definitionResult = await executor.executeDefinitionsPhase(
                     instanceId,
                     Fixtures.myField,
+                    FakeIdentifierResolver(),
                     Fixtures.testTypeResolver,
                     Fixtures.testClassIntrospector,
                     Fixtures.testTypeDeclarationResolver);
@@ -456,6 +465,7 @@
                 var definitionResult = await executor.executeDefinitionsPhase(
                     instanceId,
                     Fixtures.myClass,
+                    FakeIdentifierResolver(),
                     Fixtures.testTypeResolver,
                     Fixtures.testClassIntrospector,
                     Fixtures.testTypeDeclarationResolver);
diff --git a/pkg/_fe_analyzer_shared/test/macros/util.dart b/pkg/_fe_analyzer_shared/test/macros/util.dart
index 0907c70..edb0788 100644
--- a/pkg/_fe_analyzer_shared/test/macros/util.dart
+++ b/pkg/_fe_analyzer_shared/test/macros/util.dart
@@ -62,6 +62,8 @@
       superclass[clazz];
 }
 
+class FakeIdentifierResolver extends Fake implements IdentifierResolver {}
+
 class FakeTypeDeclarationResolver extends Fake
     implements TypeDeclarationResolver {}
 
diff --git a/pkg/dart2wasm/lib/target.dart b/pkg/dart2wasm/lib/target.dart
index a7827e1..fa68680 100644
--- a/pkg/dart2wasm/lib/target.dart
+++ b/pkg/dart2wasm/lib/target.dart
@@ -9,7 +9,7 @@
 import 'package:kernel/reference_from_index.dart';
 import 'package:kernel/target/changed_structure_notifier.dart';
 import 'package:kernel/target/targets.dart';
-import 'package:kernel/transformations/mixin_full_resolution.dart'
+import 'package:vm/transformations/mixin_full_resolution.dart'
     as transformMixins show transformLibraries;
 
 import 'package:dart2wasm/constants_backend.dart';
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 6ac5cec..5d7f537 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -6596,8 +6596,7 @@
       SwitchCase current = cases[i] = pop() as SwitchCase;
       if (labels != null) {
         for (Label label in labels) {
-          JumpTarget? target =
-              switchScope!.lookupLabel(label.name) as JumpTarget?;
+          JumpTarget? target = switchScope!.lookupLabel(label.name);
           if (target != null) {
             target.resolveGotos(forest, current);
           }
@@ -6656,7 +6655,7 @@
     if (hasTarget) {
       identifier = pop() as Identifier;
       name = identifier.name;
-      target = scope.lookupLabel(name) as JumpTarget?;
+      target = scope.lookupLabel(name);
     }
     if (target == null && name == null) {
       push(problemInLoopOrSwitch = buildProblemStatement(
@@ -6709,15 +6708,7 @@
     if (hasTarget) {
       identifier = pop() as Identifier;
       name = identifier.name;
-      Builder? namedTarget = scope.lookupLabel(identifier.name);
-      if (namedTarget != null && namedTarget is! JumpTarget) {
-        Token labelToken = continueKeyword.next!;
-        push(problemInLoopOrSwitch = buildProblemStatement(
-            fasta.messageContinueLabelNotTarget, labelToken.charOffset,
-            length: labelToken.length));
-        return;
-      }
-      target = namedTarget as JumpTarget?;
+      target = scope.lookupLabel(identifier.name);
       if (target == null) {
         if (switchScope == null) {
           push(buildProblemStatement(
@@ -7527,23 +7518,20 @@
   String toString() => "operator($name)";
 }
 
-class JumpTarget extends BuilderImpl {
+class JumpTarget {
   final List<Statement> users = <Statement>[];
 
   final JumpTargetKind kind;
 
   final int functionNestingLevel;
 
-  @override
   final MemberBuilder parent;
 
-  @override
   final int charOffset;
 
   JumpTarget(
       this.kind, this.functionNestingLevel, this.parent, this.charOffset);
 
-  @override
   Uri get fileUri => parent.fileUri!;
 
   bool get isBreakTarget => kind == JumpTargetKind.Break;
@@ -7603,11 +7591,10 @@
     users.clear();
   }
 
-  @override
   String get fullNameForErrors => "<jump-target>";
 }
 
-class LabelTarget extends BuilderImpl implements JumpTarget {
+class LabelTarget implements JumpTarget {
   @override
   final MemberBuilder parent;
 
diff --git a/pkg/front_end/lib/src/fasta/kernel/constructor_tearoff_lowering.dart b/pkg/front_end/lib/src/fasta/kernel/constructor_tearoff_lowering.dart
index 0cbb45a..f456a4d 100644
--- a/pkg/front_end/lib/src/fasta/kernel/constructor_tearoff_lowering.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/constructor_tearoff_lowering.dart
@@ -326,7 +326,7 @@
 Procedure _createTearOffProcedure(SourceLibraryBuilder libraryBuilder,
     Name name, Uri fileUri, int fileOffset, Reference? reference) {
   return new Procedure(name, ProcedureKind.Method, new FunctionNode(null),
-      fileUri: fileUri, isStatic: true, reference: reference)
+      fileUri: fileUri, isStatic: true, isSynthetic: true, reference: reference)
     ..startFileOffset = fileOffset
     ..fileOffset = fileOffset
     ..fileEndOffset = fileOffset
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 0c41ecf..342dd2c 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
@@ -496,7 +496,7 @@
       if (macroApplications != null) {
         benchmarker?.enterPhase(BenchmarkPhases.outline_applyTypeMacros);
         List<SourceLibraryBuilder> augmentationLibraries =
-            await macroApplications.applyTypeMacros();
+            await macroApplications.applyTypeMacros(loader);
         benchmarker
             ?.enterPhase(BenchmarkPhases.outline_buildMacroTypesForPhase1);
         await _buildForPhase1(augmentationLibraries);
diff --git a/pkg/front_end/lib/src/fasta/kernel/macro.dart b/pkg/front_end/lib/src/fasta/kernel/macro.dart
index 85449b2..0b2bb54 100644
--- a/pkg/front_end/lib/src/fasta/kernel/macro.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/macro.dart
@@ -29,6 +29,7 @@
 import '../source/source_factory_builder.dart';
 import '../source/source_field_builder.dart';
 import '../source/source_library_builder.dart';
+import '../source/source_loader.dart';
 import '../source/source_procedure_builder.dart';
 import 'hierarchy/hierarchy_builder.dart';
 import 'hierarchy/hierarchy_node.dart';
@@ -348,7 +349,9 @@
           .shouldExecute(_declarationKind(declaration), macro.Phase.types)) {
         macro.MacroExecutionResult result =
             await _macroExecutor.executeTypesPhase(
-                macroApplication.instanceIdentifier, declaration);
+                macroApplication.instanceIdentifier,
+                declaration,
+                identifierResolver);
         if (result.isNotEmpty) {
           results.add(result);
         }
@@ -366,7 +369,12 @@
     return results;
   }
 
-  Future<List<SourceLibraryBuilder>> applyTypeMacros() async {
+  late macro.IdentifierResolver identifierResolver;
+  late SourceLoader sourceLoader;
+
+  Future<List<SourceLibraryBuilder>> applyTypeMacros(
+      SourceLoader sourceLoader) async {
+    identifierResolver = new _IdentifierResolver(sourceLoader);
     List<SourceLibraryBuilder> augmentationLibraries = [];
     Map<SourceLibraryBuilder, List<macro.MacroExecutionResult>> results = {};
     for (_ApplicationData macroApplication in _applicationData) {
@@ -411,6 +419,7 @@
             await _macroExecutor.executeDeclarationsPhase(
                 macroApplication.instanceIdentifier,
                 declaration,
+                identifierResolver,
                 typeResolver,
                 classIntrospector);
         if (result.isNotEmpty) {
@@ -463,6 +472,7 @@
             await _macroExecutor.executeDefinitionsPhase(
                 macroApplication.instanceIdentifier,
                 declaration,
+                identifierResolver,
                 typeResolver,
                 classIntrospector,
                 typeDeclarationResolver);
@@ -914,6 +924,51 @@
   }
 }
 
+class _IdentifierResolver implements macro.IdentifierResolver {
+  final SourceLoader sourceLoader;
+
+  _IdentifierResolver(this.sourceLoader);
+
+  @override
+  Future<macro.Identifier> resolveIdentifier(Uri library, String name) {
+    LibraryBuilder? libraryBuilder = sourceLoader.lookupLibraryBuilder(library);
+    if (libraryBuilder == null) {
+      return new Future.error(
+          new ArgumentError('Library at uri $library could not be resolved.'),
+          StackTrace.current);
+    }
+    bool isSetter = false;
+    String memberName = name;
+    if (name.endsWith('=')) {
+      memberName = name.substring(0, name.length - 1);
+      isSetter = true;
+    }
+    Builder? builder =
+        libraryBuilder.scope.lookupLocalMember(memberName, setter: isSetter);
+    if (builder == null) {
+      return new Future.error(
+          new ArgumentError(
+              'Unable to find top level identifier "$name" in $library'),
+          StackTrace.current);
+    } else if (builder is TypeDeclarationBuilder) {
+      return new Future.value(new _IdentifierImpl.forTypeDeclarationBuilder(
+          typeDeclarationBuilder: builder,
+          libraryBuilder: libraryBuilder,
+          id: macro.RemoteInstance.uniqueId,
+          name: name));
+    } else if (builder is MemberBuilder) {
+      return new Future.value(new _IdentifierImpl.forMemberBuilder(
+          memberBuilder: builder,
+          id: macro.RemoteInstance.uniqueId,
+          name: name));
+    } else {
+      return new Future.error(
+          new UnsupportedError('Unsupported identifier kind $builder'),
+          StackTrace.current);
+    }
+  }
+}
+
 class _TypeResolver implements macro.TypeResolver {
   final MacroApplications macroApplications;
 
diff --git a/pkg/front_end/lib/src/fasta/scope.dart b/pkg/front_end/lib/src/fasta/scope.dart
index c431fd6..300080b 100644
--- a/pkg/front_end/lib/src/fasta/scope.dart
+++ b/pkg/front_end/lib/src/fasta/scope.dart
@@ -469,7 +469,7 @@
     return forwardDeclaredLabels;
   }
 
-  Builder? lookupLabel(String name) {
+  JumpTarget? lookupLabel(String name) {
     return labels?[name] ?? _parent?.lookupLabel(name);
   }
 
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index 1c92e8b..8f83875 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -1153,10 +1153,6 @@
       }
     }
 
-ContinueLabelNotTarget:
-  problemMessage: "Target of continue must be a label."
-  analyzerCode: LABEL_UNDEFINED
-
 ContinueWithoutLabelInCase:
   index: 64
   problemMessage: "A continue statement in a switch statement must have a label as a target."
diff --git a/pkg/front_end/test/macros/macro_test.dart b/pkg/front_end/test/macros/macro_test.dart
index 7ee8ddf..01f9653 100644
--- a/pkg/front_end/test/macros/macro_test.dart
+++ b/pkg/front_end/test/macros/macro_test.dart
@@ -308,6 +308,7 @@
   Future<MacroExecutionResult> executeDeclarationsPhase(
       MacroInstanceIdentifier macro,
       Declaration declaration,
+      IdentifierResolver identifierResolver,
       TypeResolver typeResolver,
       ClassIntrospector classIntrospector) async {
     return new _MacroExecutionResult();
@@ -317,6 +318,7 @@
   Future<MacroExecutionResult> executeDefinitionsPhase(
       MacroInstanceIdentifier macro,
       Declaration declaration,
+      IdentifierResolver identifierResolver,
       TypeResolver typeResolver,
       ClassIntrospector classIntrospector,
       TypeDeclarationResolver typeDeclarationResolver) async {
@@ -324,8 +326,8 @@
   }
 
   @override
-  Future<MacroExecutionResult> executeTypesPhase(
-      MacroInstanceIdentifier macro, Declaration declaration) async {
+  Future<MacroExecutionResult> executeTypesPhase(MacroInstanceIdentifier macro,
+      Declaration declaration, IdentifierResolver identifierResolver) async {
     return new _MacroExecutionResult();
   }
 
diff --git a/pkg/front_end/test/spell_checking_list_code.txt b/pkg/front_end/test/spell_checking_list_code.txt
index cc0957e..f1532f1 100644
--- a/pkg/front_end/test/spell_checking_list_code.txt
+++ b/pkg/front_end/test/spell_checking_list_code.txt
@@ -1100,6 +1100,7 @@
 rs
 runnable
 s
+safer
 sandboxed
 sanitizing
 saw
diff --git a/pkg/vm/lib/target/vm.dart b/pkg/vm/lib/target/vm.dart
index 79d5d64..16571c0 100644
--- a/pkg/vm/lib/target/vm.dart
+++ b/pkg/vm/lib/target/vm.dart
@@ -9,15 +9,15 @@
 import 'package:kernel/reference_from_index.dart';
 import 'package:kernel/target/changed_structure_notifier.dart';
 import 'package:kernel/target/targets.dart';
-import 'package:kernel/transformations/mixin_full_resolution.dart'
-    as transformMixins show transformLibraries;
-import 'package:kernel/transformations/continuation.dart' as transformAsync
-    show transformLibraries, transformProcedure;
 import 'package:kernel/type_environment.dart';
 
 import '../transformations/call_site_annotator.dart' as callSiteAnnotator;
+import '../transformations/continuation.dart' as transformAsync
+    show transformLibraries, transformProcedure;
 import '../transformations/lowering.dart' as lowering
     show transformLibraries, transformProcedure;
+import '../transformations/mixin_full_resolution.dart' as transformMixins
+    show transformLibraries;
 import '../transformations/ffi/common.dart' as ffiHelper
     show calculateTransitiveImportsOfDartFfiIfUsed;
 import '../transformations/ffi/definitions.dart' as transformFfiDefinitions
diff --git a/pkg/kernel/lib/transformations/async.dart b/pkg/vm/lib/transformations/async.dart
similarity index 99%
rename from pkg/kernel/lib/transformations/async.dart
rename to pkg/vm/lib/transformations/async.dart
index a9d5f6a..e117bc6 100644
--- a/pkg/kernel/lib/transformations/async.dart
+++ b/pkg/vm/lib/transformations/async.dart
@@ -2,10 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-library kernel.transformations.async;
-
-import '../kernel.dart';
-import '../type_environment.dart';
+import 'package:kernel/kernel.dart';
+import 'package:kernel/type_environment.dart';
 import 'continuation.dart';
 
 /// A transformer that introduces temporary variables for all subexpressions
diff --git a/pkg/kernel/lib/transformations/continuation.dart b/pkg/vm/lib/transformations/continuation.dart
similarity index 99%
rename from pkg/kernel/lib/transformations/continuation.dart
rename to pkg/vm/lib/transformations/continuation.dart
index 3fb6474..b5c3949 100644
--- a/pkg/kernel/lib/transformations/continuation.dart
+++ b/pkg/vm/lib/transformations/continuation.dart
@@ -2,14 +2,12 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-library kernel.transformations.continuation;
-
 import 'dart:math' as math;
 
-import '../ast.dart';
-import '../core_types.dart';
-import '../type_algebra.dart' show Substitution;
-import '../type_environment.dart';
+import 'package:kernel/ast.dart';
+import 'package:kernel/core_types.dart';
+import 'package:kernel/type_algebra.dart' show Substitution;
+import 'package:kernel/type_environment.dart';
 
 import 'async.dart';
 
diff --git a/pkg/vm/lib/transformations/lowering.dart b/pkg/vm/lib/transformations/lowering.dart
index f9e8fe3..4242ff4 100644
--- a/pkg/vm/lib/transformations/lowering.dart
+++ b/pkg/vm/lib/transformations/lowering.dart
@@ -5,13 +5,15 @@
 import 'package:kernel/ast.dart';
 import 'package:kernel/class_hierarchy.dart' show ClassHierarchy;
 import 'package:kernel/core_types.dart' show CoreTypes;
-import 'package:kernel/transformations/type_casts_optimizer.dart'
-    as typeCastsOptimizer show transformAsExpression;
 import 'package:kernel/type_environment.dart'
     show StaticTypeContext, TypeEnvironment;
+
 import 'package:vm/transformations/specializer/factory_specializer.dart';
+
 import 'late_var_init_transformer.dart' show LateVarInitTransformer;
 import 'list_literals_lowering.dart' show ListLiteralsLowering;
+import 'type_casts_optimizer.dart' as typeCastsOptimizer
+    show transformAsExpression;
 
 /// VM-specific lowering transformations and optimizations combined into a
 /// single transformation pass.
diff --git a/pkg/kernel/lib/transformations/mixin_full_resolution.dart b/pkg/vm/lib/transformations/mixin_full_resolution.dart
similarity index 96%
rename from pkg/kernel/lib/transformations/mixin_full_resolution.dart
rename to pkg/vm/lib/transformations/mixin_full_resolution.dart
index 5af5475..27b156a 100644
--- a/pkg/kernel/lib/transformations/mixin_full_resolution.dart
+++ b/pkg/vm/lib/transformations/mixin_full_resolution.dart
@@ -2,15 +2,13 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-library kernel.transformations.mixin_full_resolution;
-
-import '../ast.dart';
-import '../class_hierarchy.dart';
-import '../clone.dart';
-import '../core_types.dart';
-import '../reference_from_index.dart';
-import '../target/targets.dart' show Target;
-import '../type_algebra.dart';
+import 'package:kernel/ast.dart';
+import 'package:kernel/class_hierarchy.dart';
+import 'package:kernel/clone.dart';
+import 'package:kernel/core_types.dart';
+import 'package:kernel/reference_from_index.dart';
+import 'package:kernel/target/targets.dart' show Target;
+import 'package:kernel/type_algebra.dart';
 
 /// Transforms the libraries in [libraries].
 /// Note that [referenceFromIndex] can be null, and is generally only needed
diff --git a/pkg/kernel/lib/transformations/type_casts_optimizer.dart b/pkg/vm/lib/transformations/type_casts_optimizer.dart
similarity index 100%
rename from pkg/kernel/lib/transformations/type_casts_optimizer.dart
rename to pkg/vm/lib/transformations/type_casts_optimizer.dart
diff --git a/runtime/bin/platform_macos.cc b/runtime/bin/platform_macos.cc
index 0c22675..b78112e 100644
--- a/runtime/bin/platform_macos.cc
+++ b/runtime/bin/platform_macos.cc
@@ -13,6 +13,7 @@
 #if !DART_HOST_OS_IOS
 #include <crt_externs.h>  // NOLINT
 #endif                    // !DART_HOST_OS_IOS
+#include <dlfcn.h>        // NOLINT
 #include <errno.h>        // NOLINT
 #include <mach-o/dyld.h>
 #include <signal.h>        // NOLINT
@@ -251,7 +252,98 @@
   return path_size;
 }
 
-void Platform::SetProcessName(const char* name) {}
+void Platform::SetProcessName(const char* name) {
+  pthread_setname_np(name);
+
+#if !defined(DART_HOST_OS_IOS) && !defined(DART_PRECOMPILED_RUNTIME)
+  // Attempt to set the name displayed in ActivityMonitor.
+  // https://codereview.chromium.org/659007/
+
+  class ScopedDLHandle : public ValueObject {
+   public:
+    explicit ScopedDLHandle(void* handle) : handle_(handle) {}
+    ~ScopedDLHandle() {
+      if (handle_ != NULL) dlclose(handle_);
+    }
+    void* get() const { return handle_; }
+
+   private:
+    void* handle_;
+    DISALLOW_COPY_AND_ASSIGN(ScopedDLHandle);
+  };
+
+  class ScopedCFStringRef : public ValueObject {
+   public:
+    explicit ScopedCFStringRef(const char* s)
+        : ref_(CFStringCreateWithCString(NULL, (s), kCFStringEncodingUTF8)) {}
+    ~ScopedCFStringRef() {
+      if (ref_ != NULL) CFRelease(ref_);
+    }
+    CFStringRef get() const { return ref_; }
+
+   private:
+    CFStringRef ref_;
+    DISALLOW_COPY_AND_ASSIGN(ScopedCFStringRef);
+  };
+
+  ScopedDLHandle application_services_handle(
+      dlopen("/System/Library/Frameworks/ApplicationServices.framework/"
+             "Versions/A/ApplicationServices",
+             RTLD_LAZY | RTLD_LOCAL));
+  if (application_services_handle.get() == NULL) return;
+
+  ScopedCFStringRef launch_services_bundle_name("com.apple.LaunchServices");
+  CFBundleRef launch_services_bundle =
+      CFBundleGetBundleWithIdentifier(launch_services_bundle_name.get());
+  if (launch_services_bundle == NULL) return;
+
+#define GET_FUNC(name, cstr)                                                   \
+  ScopedCFStringRef name##_id(cstr);                                           \
+  *reinterpret_cast<void**>(&name) = CFBundleGetFunctionPointerForName(        \
+      launch_services_bundle, name##_id.get());                                \
+  if (name == NULL) return;
+
+#define GET_DATA(name, cstr)                                                   \
+  ScopedCFStringRef name##_id(cstr);                                           \
+  *reinterpret_cast<void**>(&name) =                                           \
+      CFBundleGetDataPointerForName(launch_services_bundle, name##_id.get());  \
+  if (name == NULL) return;
+
+  CFTypeRef (*_LSGetCurrentApplicationASN)(void);
+  GET_FUNC(_LSGetCurrentApplicationASN, "_LSGetCurrentApplicationASN");
+
+  OSStatus (*_LSSetApplicationInformationItem)(int, CFTypeRef, CFStringRef,
+                                               CFStringRef, CFDictionaryRef*);
+  GET_FUNC(_LSSetApplicationInformationItem,
+           "_LSSetApplicationInformationItem");
+
+  CFDictionaryRef (*_LSApplicationCheckIn)(int, CFDictionaryRef);
+  GET_FUNC(_LSApplicationCheckIn, "_LSApplicationCheckIn");
+
+  void (*_LSSetApplicationLaunchServicesServerConnectionStatus)(uint64_t,
+                                                                void*);
+  GET_FUNC(_LSSetApplicationLaunchServicesServerConnectionStatus,
+           "_LSSetApplicationLaunchServicesServerConnectionStatus");
+
+  CFStringRef* _kLSDisplayNameKey;
+  GET_DATA(_kLSDisplayNameKey, "_kLSDisplayNameKey");
+  if (*_kLSDisplayNameKey == NULL) return;
+
+  _LSSetApplicationLaunchServicesServerConnectionStatus(0, NULL);
+
+  _LSApplicationCheckIn(-2, CFBundleGetInfoDictionary(CFBundleGetMainBundle()));
+
+  CFTypeRef asn;
+  asn = _LSGetCurrentApplicationASN();
+  if (asn == NULL) return;
+
+  ScopedCFStringRef cf_name(name);
+  _LSSetApplicationInformationItem(-2, asn, *_kLSDisplayNameKey, cf_name.get(),
+                                   NULL);
+#undef GET_DATA
+#undef GET_FUNC
+#endif  // !defined(DART_HOST_OS_IOS)
+}
 
 void Platform::Exit(int exit_code) {
   Console::RestoreConfig();
diff --git a/tools/VERSION b/tools/VERSION
index c4a61b5..f2a49b1 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 17
 PATCH 0
-PRERELEASE 169
+PRERELEASE 170
 PRERELEASE_PATCH 0
\ No newline at end of file
