diff --git a/pkg/front_end/lib/src/fasta/builder/builder.dart b/pkg/front_end/lib/src/fasta/builder/builder.dart
index b0fa8e8..f933d9f 100644
--- a/pkg/front_end/lib/src/fasta/builder/builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/builder.dart
@@ -36,6 +36,8 @@
 
   bool get isGetter;
 
+  bool get isExternal;
+
   /// Returns `true` if this builder is an extension declaration.
   ///
   /// For instance `B` in:
@@ -277,6 +279,9 @@
   bool get isStatic => false;
 
   @override
+  bool get isExternal => false;
+
+  @override
   bool get isSynthetic => false;
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/builder/enum_builder.dart b/pkg/front_end/lib/src/fasta/builder/enum_builder.dart
index 98e54de..3822c10 100644
--- a/pkg/front_end/lib/src/fasta/builder/enum_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/enum_builder.dart
@@ -55,8 +55,8 @@
 
 import '../scope.dart';
 
+import '../source/name_scheme.dart';
 import '../source/source_class_builder.dart' show SourceClassBuilder;
-
 import '../source/source_library_builder.dart' show SourceLibraryBuilder;
 
 import 'builder.dart';
@@ -189,7 +189,7 @@
     ///   String toString() => _name;
     /// }
 
-    FieldNameScheme instanceFieldNameScheme = new FieldNameScheme(
+    NameScheme instanceFieldNameScheme = new NameScheme(
         isInstanceMember: true,
         className: name,
         isExtensionMember: false,
@@ -198,7 +198,7 @@
             ? referencesFromIndexed.library.reference
             : parent.library.reference);
 
-    FieldNameScheme staticFieldNameScheme = new FieldNameScheme(
+    NameScheme staticFieldNameScheme = new NameScheme(
         isInstanceMember: false,
         className: name,
         isExtensionMember: false,
@@ -207,8 +207,9 @@
             ? referencesFromIndexed.library.reference
             : parent.library.reference);
 
-    ProcedureNameScheme procedureNameScheme = new ProcedureNameScheme(
-        isStatic: false,
+    NameScheme procedureNameScheme = new NameScheme(
+        isInstanceMember: true,
+        className: name,
         isExtensionMember: false,
         extensionName: null,
         libraryReference: referencesFromIndexed != null
@@ -254,7 +255,6 @@
         charOffset,
         charOffset,
         instanceFieldNameScheme,
-        isInstanceMember: true,
         fieldGetterReference: indexGetterReference,
         fieldSetterReference: indexSetterReference);
     members["index"] = indexBuilder;
@@ -268,7 +268,6 @@
         charOffset,
         charOffset,
         instanceFieldNameScheme,
-        isInstanceMember: true,
         fieldGetterReference: _nameGetterReference,
         fieldSetterReference: _nameSetterReference);
     members["_name"] = nameBuilder;
@@ -302,7 +301,6 @@
         charOffset,
         charOffset,
         staticFieldNameScheme,
-        isInstanceMember: false,
         fieldGetterReference: valuesGetterReference,
         fieldSetterReference: valuesSetterReference);
     members["values"] = valuesBuilder;
@@ -384,7 +382,6 @@
             enumConstantInfo.charOffset,
             enumConstantInfo.charOffset,
             staticFieldNameScheme,
-            isInstanceMember: false,
             fieldGetterReference: getterReference,
             fieldSetterReference: setterReference);
         members[name] = fieldBuilder..next = existing;
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 d0250bf..4ac03ac 100644
--- a/pkg/front_end/lib/src/fasta/builder/extension_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/extension_builder.dart
@@ -15,6 +15,7 @@
 
 import 'builder.dart';
 import 'declaration_builder.dart';
+import 'field_builder.dart';
 import 'library_builder.dart';
 import 'member_builder.dart';
 import 'metadata_builder.dart';
@@ -181,9 +182,21 @@
       {bool setter: false, bool required: false}) {
     Builder? builder =
         lookupLocalMember(name.text, setter: setter, required: required);
+    if (builder == null && setter) {
+      // When looking up setters, we include assignable fields.
+      builder = lookupLocalMember(name.text, setter: false, required: required);
+      if (builder is! FieldBuilder || !builder.isAssignable) {
+        builder = null;
+      }
+    }
     if (builder != null) {
       if (name.isPrivate && library.library != name.library) {
         builder = null;
+      } else if (builder is FieldBuilder &&
+          !builder.isStatic &&
+          !builder.isExternal) {
+        // Non-external extension instance fields are invalid.
+        builder = null;
       } else if (builder.isDuplicate) {
         // Duplicates are not visible in the instance scope.
         builder = null;
diff --git a/pkg/front_end/lib/src/fasta/builder/factory_builder.dart b/pkg/front_end/lib/src/fasta/builder/factory_builder.dart
index 14c0575..f375735 100644
--- a/pkg/front_end/lib/src/fasta/builder/factory_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/factory_builder.dart
@@ -23,6 +23,7 @@
 
 import '../problems.dart' show unexpected, unhandled;
 
+import '../source/name_scheme.dart';
 import '../source/source_library_builder.dart' show SourceLibraryBuilder;
 
 import '../type_inference/type_inferrer.dart';
@@ -36,7 +37,6 @@
 import 'function_builder.dart';
 import 'member_builder.dart';
 import 'metadata_builder.dart';
-import 'procedure_builder.dart';
 import 'type_builder.dart';
 import 'type_variable_builder.dart';
 
@@ -67,10 +67,10 @@
       int charEndOffset,
       Reference? procedureReference,
       AsyncMarker asyncModifier,
-      ProcedureNameScheme procedureNameScheme,
+      NameScheme nameScheme,
       {String? nativeMethodName})
       : _procedureInternal = new Procedure(
-            procedureNameScheme.getName(ProcedureKind.Factory, name),
+            nameScheme.getProcedureName(ProcedureKind.Factory, name),
             ProcedureKind.Factory,
             new FunctionNode(null),
             fileUri: libraryBuilder.fileUri,
@@ -273,7 +273,7 @@
       int charOpenParenOffset,
       int charEndOffset,
       Reference? procedureReference,
-      ProcedureNameScheme procedureNameScheme,
+      NameScheme nameScheme,
       String? nativeMethodName,
       this.redirectionTarget)
       : super(
@@ -290,7 +290,7 @@
             charEndOffset,
             procedureReference,
             AsyncMarker.Sync,
-            procedureNameScheme,
+            nameScheme,
             nativeMethodName: nativeMethodName);
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/builder/field_builder.dart b/pkg/front_end/lib/src/fasta/builder/field_builder.dart
index 1915d6c..e3b28d2 100644
--- a/pkg/front_end/lib/src/fasta/builder/field_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/field_builder.dart
@@ -9,6 +9,7 @@
 import 'package:kernel/ast.dart';
 import 'package:kernel/core_types.dart';
 import 'package:kernel/src/legacy_erasure.dart';
+import 'package:kernel/type_algebra.dart';
 
 import '../constant_context.dart' show ConstantContext;
 
@@ -27,8 +28,9 @@
 
 import '../scope.dart' show Scope;
 
+import '../source/name_scheme.dart';
+import '../source/source_extension_builder.dart';
 import '../source/source_library_builder.dart' show SourceLibraryBuilder;
-
 import '../source/source_loader.dart' show SourceLoader;
 
 import '../type_inference/type_inference_engine.dart'
@@ -117,9 +119,8 @@
       SourceLibraryBuilder libraryBuilder,
       int charOffset,
       int charEndOffset,
-      FieldNameScheme fieldNameScheme,
-      {required bool isInstanceMember,
-      Reference? fieldGetterReference,
+      NameScheme fieldNameScheme,
+      {Reference? fieldGetterReference,
       Reference? fieldSetterReference,
       Reference? lateIsSetGetterReference,
       Reference? lateIsSetSetterReference,
@@ -128,8 +129,7 @@
       Token? constInitializerToken})
       : _constInitializerToken = constInitializerToken,
         super(libraryBuilder, charOffset) {
-    // ignore: unnecessary_null_comparison
-    assert(isInstanceMember != null);
+    bool isInstanceMember = fieldNameScheme.isInstanceMember;
 
     Uri fileUri = libraryBuilder.fileUri;
     // If in mixed mode, late lowerings cannot use `null` as a sentinel on
@@ -143,6 +143,7 @@
       assert(lateGetterReference == null);
       assert(lateSetterReference == null);
       _fieldEncoding = new AbstractOrExternalFieldEncoding(
+          this,
           name,
           fieldNameScheme,
           fileUri,
@@ -393,7 +394,7 @@
       // notInstanceContext is set to true for extension fields as they
       // ultimately become static.
       fieldType = type!.build(libraryBuilder,
-          nonInstanceContext: isStatic || isExtensionMember);
+          nonInstanceContext: isStatic || (isExtensionMember && !isExternal));
     }
     _fieldEncoding.build(libraryBuilder, this);
   }
@@ -520,86 +521,6 @@
   @override
   List<ClassMember> get localSetters =>
       _localSetters ??= _fieldEncoding.getLocalSetters(this);
-
-  static String createFieldName(FieldNameType type, String name,
-      {required bool isInstanceMember,
-      required String? className,
-      bool isExtensionMethod: false,
-      String? extensionName,
-      bool isSynthesized: false}) {
-    assert(isSynthesized || type == FieldNameType.Field,
-        "Unexpected field name type for non-synthesized field: $type");
-    // ignore: unnecessary_null_comparison
-    assert(isExtensionMethod || isInstanceMember != null,
-        "`isInstanceMember` is null for class member.");
-    assert(!(isExtensionMethod && extensionName == null),
-        "No extension name provided for extension member.");
-    // ignore: unnecessary_null_comparison
-    assert(isInstanceMember == null || !(isInstanceMember && className == null),
-        "No class name provided for instance member.");
-    String baseName;
-    if (!isExtensionMethod) {
-      baseName = name;
-    } else {
-      baseName = "${extensionName}|${name}";
-    }
-
-    if (!isSynthesized) {
-      return baseName;
-    } else {
-      String namePrefix = late_lowering.lateFieldPrefix;
-      if (isInstanceMember) {
-        namePrefix = '$namePrefix${className}#';
-      }
-      switch (type) {
-        case FieldNameType.Field:
-          return "$namePrefix$baseName";
-        case FieldNameType.Getter:
-          return baseName;
-        case FieldNameType.Setter:
-          return baseName;
-        case FieldNameType.IsSetField:
-          return "$namePrefix$baseName${late_lowering.lateIsSetSuffix}";
-      }
-    }
-  }
-}
-
-enum FieldNameType { Field, Getter, Setter, IsSetField }
-
-class FieldNameScheme {
-  final bool isInstanceMember;
-  final String? className;
-  final bool isExtensionMember;
-  final String? extensionName;
-  final Reference? libraryReference;
-
-  FieldNameScheme(
-      {required this.isInstanceMember,
-      required this.className,
-      required this.isExtensionMember,
-      required this.extensionName,
-      required this.libraryReference})
-      // ignore: unnecessary_null_comparison
-      : assert(isInstanceMember != null),
-        // ignore: unnecessary_null_comparison
-        assert(isExtensionMember != null),
-        // ignore: unnecessary_null_comparison
-        assert(!isExtensionMember || extensionName != null),
-        // ignore: unnecessary_null_comparison
-        assert(libraryReference != null);
-
-  Name getName(FieldNameType type, String name, {required bool isSynthesized}) {
-    // ignore: unnecessary_null_comparison
-    assert(isSynthesized != null);
-    String text = SourceFieldBuilder.createFieldName(type, name,
-        isInstanceMember: isInstanceMember,
-        className: className,
-        isExtensionMethod: isExtensionMember,
-        extensionName: extensionName,
-        isSynthesized: isSynthesized);
-    return new Name.byReference(text, libraryReference);
-  }
 }
 
 /// Strategy pattern for creating different encodings of a declared field.
@@ -671,8 +592,8 @@
 class RegularFieldEncoding implements FieldEncoding {
   late final Field _field;
 
-  RegularFieldEncoding(String name, FieldNameScheme fieldNameScheme,
-      Uri fileUri, int charOffset, int charEndOffset,
+  RegularFieldEncoding(String name, NameScheme nameScheme, Uri fileUri,
+      int charOffset, int charEndOffset,
       {required bool isFinal,
       required bool isConst,
       required bool isLate,
@@ -692,7 +613,7 @@
         isLate ? (isFinal && hasInitializer) : (isFinal || isConst);
     _field = isImmutable
         ? new Field.immutable(
-            fieldNameScheme.getName(FieldNameType.Field, name,
+            nameScheme.getFieldName(FieldNameType.Field, name,
                 isSynthesized: false),
             isFinal: isFinal,
             isConst: isConst,
@@ -700,7 +621,7 @@
             fileUri: fileUri,
             getterReference: getterReference)
         : new Field.mutable(
-            fieldNameScheme.getName(FieldNameType.Field, name,
+            nameScheme.getFieldName(FieldNameType.Field, name,
                 isSynthesized: false),
             isFinal: isFinal,
             isLate: isLate,
@@ -883,7 +804,7 @@
 
   AbstractLateFieldEncoding(
       this.name,
-      FieldNameScheme fieldNameScheme,
+      NameScheme nameScheme,
       Uri fileUri,
       int charOffset,
       int charEndOffset,
@@ -901,7 +822,7 @@
         _forceIncludeIsSetField =
             isSetStrategy == late_lowering.IsSetStrategy.forceUseIsSetField {
     _field = new Field.mutable(
-        fieldNameScheme.getName(FieldNameType.Field, name, isSynthesized: true),
+        nameScheme.getFieldName(FieldNameType.Field, name, isSynthesized: true),
         fileUri: fileUri,
         getterReference: fieldGetterReference,
         setterReference: fieldSetterReference)
@@ -917,7 +838,7 @@
       case late_lowering.IsSetStrategy.forceUseIsSetField:
       case late_lowering.IsSetStrategy.useIsSetFieldOrNull:
         _lateIsSetField = new Field.mutable(
-            fieldNameScheme.getName(FieldNameType.IsSetField, name,
+            nameScheme.getFieldName(FieldNameType.IsSetField, name,
                 isSynthesized: true),
             fileUri: fileUri,
             getterReference: lateIsSetGetterReference,
@@ -929,7 +850,7 @@
         break;
     }
     _lateGetter = new Procedure(
-        fieldNameScheme.getName(FieldNameType.Getter, name,
+        nameScheme.getFieldName(FieldNameType.Getter, name,
             isSynthesized: true),
         ProcedureKind.Getter,
         new FunctionNode(null)
@@ -941,7 +862,7 @@
       ..fileEndOffset = charEndOffset
       ..isNonNullableByDefault = true;
     _lateSetter = _createSetter(
-        fieldNameScheme.getName(FieldNameType.Setter, name,
+        nameScheme.getFieldName(FieldNameType.Setter, name,
             isSynthesized: true),
         fileUri,
         charOffset,
@@ -1267,7 +1188,7 @@
     with NonFinalLate, LateWithoutInitializer {
   LateFieldWithoutInitializerEncoding(
       String name,
-      FieldNameScheme fieldNameScheme,
+      NameScheme nameScheme,
       Uri fileUri,
       int charOffset,
       int charEndOffset,
@@ -1281,7 +1202,7 @@
       late_lowering.IsSetStrategy isSetStrategy)
       : super(
             name,
-            fieldNameScheme,
+            nameScheme,
             fileUri,
             charOffset,
             charEndOffset,
@@ -1299,7 +1220,7 @@
     with NonFinalLate {
   LateFieldWithInitializerEncoding(
       String name,
-      FieldNameScheme fieldNameScheme,
+      NameScheme nameScheme,
       Uri fileUri,
       int charOffset,
       int charEndOffset,
@@ -1313,7 +1234,7 @@
       late_lowering.IsSetStrategy isSetStrategy)
       : super(
             name,
-            fieldNameScheme,
+            nameScheme,
             fileUri,
             charOffset,
             charEndOffset,
@@ -1346,7 +1267,7 @@
     with LateWithoutInitializer {
   LateFinalFieldWithoutInitializerEncoding(
       String name,
-      FieldNameScheme fieldNameScheme,
+      NameScheme nameScheme,
       Uri fileUri,
       int charOffset,
       int charEndOffset,
@@ -1360,7 +1281,7 @@
       late_lowering.IsSetStrategy isSetStrategy)
       : super(
             name,
-            fieldNameScheme,
+            nameScheme,
             fileUri,
             charOffset,
             charEndOffset,
@@ -1394,7 +1315,7 @@
 class LateFinalFieldWithInitializerEncoding extends AbstractLateFieldEncoding {
   LateFinalFieldWithInitializerEncoding(
       String name,
-      FieldNameScheme fieldNameScheme,
+      NameScheme nameScheme,
       Uri fileUri,
       int charOffset,
       int charEndOffset,
@@ -1408,7 +1329,7 @@
       late_lowering.IsSetStrategy isSetStrategy)
       : super(
             name,
-            fieldNameScheme,
+            nameScheme,
             fileUri,
             charOffset,
             charEndOffset,
@@ -1595,15 +1516,19 @@
 }
 
 class AbstractOrExternalFieldEncoding implements FieldEncoding {
+  final SourceFieldBuilder _fieldBuilder;
   final bool isAbstract;
   final bool isExternal;
+  final bool _isExtensionInstanceMember;
 
   late Procedure _getter;
   Procedure? _setter;
+  DartType? _type;
 
   AbstractOrExternalFieldEncoding(
+      this._fieldBuilder,
       String name,
-      FieldNameScheme fieldNameScheme,
+      NameScheme nameScheme,
       Uri fileUri,
       int charOffset,
       int charEndOffset,
@@ -1623,45 +1548,138 @@
         // ignore: unnecessary_null_comparison
         assert(isCovariant != null),
         // ignore: unnecessary_null_comparison
-        assert(isNonNullableByDefault != null) {
-    _getter = new Procedure(
-        fieldNameScheme.getName(FieldNameType.Getter, name,
-            isSynthesized: true),
-        ProcedureKind.Getter,
-        new FunctionNode(null),
-        fileUri: fileUri,
-        reference: getterReference)
-      ..fileOffset = charOffset
-      ..fileEndOffset = charEndOffset
-      ..isNonNullableByDefault = isNonNullableByDefault;
-    if (!isFinal) {
-      VariableDeclaration parameter =
-          new VariableDeclaration("#externalFieldValue")
-            ..isCovariant = isCovariant
-            ..fileOffset = charOffset;
-      _setter = new Procedure(
-          fieldNameScheme.getName(FieldNameType.Setter, name,
-              isSynthesized: true),
-          ProcedureKind.Setter,
-          new FunctionNode(null,
-              positionalParameters: [parameter], returnType: const VoidType())
-            ..fileOffset = charOffset
-            ..fileEndOffset = charEndOffset,
+        assert(isNonNullableByDefault != null),
+        _isExtensionInstanceMember = isExternal &&
+            nameScheme.isExtensionMember &&
+            nameScheme.isInstanceMember {
+    if (_isExtensionInstanceMember) {
+      _getter = new Procedure(
+          nameScheme.getProcedureName(ProcedureKind.Getter, name),
+          ProcedureKind.Method,
+          new FunctionNode(null, positionalParameters: [
+            new VariableDeclaration(extensionThisName)..fileOffset
+          ]),
           fileUri: fileUri,
-          reference: setterReference)
+          reference: getterReference)
         ..fileOffset = charOffset
         ..fileEndOffset = charEndOffset
         ..isNonNullableByDefault = isNonNullableByDefault;
+      if (!isFinal) {
+        VariableDeclaration parameter =
+            new VariableDeclaration("#externalFieldValue")
+              ..isCovariant = isCovariant
+              ..fileOffset = charOffset;
+        _setter = new Procedure(
+            nameScheme.getProcedureName(ProcedureKind.Setter, name),
+            ProcedureKind.Method,
+            new FunctionNode(null,
+                positionalParameters: [
+                  new VariableDeclaration(extensionThisName)..fileOffset,
+                  parameter
+                ],
+                returnType: const VoidType())
+              ..fileOffset = charOffset
+              ..fileEndOffset = charEndOffset,
+            fileUri: fileUri,
+            reference: setterReference)
+          ..fileOffset = charOffset
+          ..fileEndOffset = charEndOffset
+          ..isNonNullableByDefault = isNonNullableByDefault;
+      }
+    } else {
+      _getter = new Procedure(
+          nameScheme.getFieldName(FieldNameType.Getter, name,
+              isSynthesized: true),
+          ProcedureKind.Getter,
+          new FunctionNode(null),
+          fileUri: fileUri,
+          reference: getterReference)
+        ..fileOffset = charOffset
+        ..fileEndOffset = charEndOffset
+        ..isNonNullableByDefault = isNonNullableByDefault;
+      if (!isFinal) {
+        VariableDeclaration parameter =
+            new VariableDeclaration("#externalFieldValue")
+              ..isCovariant = isCovariant
+              ..fileOffset = charOffset;
+        _setter = new Procedure(
+            nameScheme.getFieldName(FieldNameType.Setter, name,
+                isSynthesized: true),
+            ProcedureKind.Setter,
+            new FunctionNode(null,
+                positionalParameters: [parameter], returnType: const VoidType())
+              ..fileOffset = charOffset
+              ..fileEndOffset = charEndOffset,
+            fileUri: fileUri,
+            reference: setterReference)
+          ..fileOffset = charOffset
+          ..fileEndOffset = charEndOffset
+          ..isNonNullableByDefault = isNonNullableByDefault;
+      }
     }
   }
 
   @override
-  DartType get type => _getter.function.returnType;
+  DartType get type {
+    assert(_type != null,
+        "Type has not been computed for field ${_fieldBuilder.name}.");
+    return _type!;
+  }
 
   @override
   void set type(DartType value) {
-    _getter.function.returnType = value;
-    _setter?.function.positionalParameters.first.type = value;
+    assert(_type == null || _type is ImplicitFieldType,
+        "Type has already been computed for field ${_fieldBuilder.name}.");
+    _type = value;
+    if (value is! ImplicitFieldType) {
+      if (_isExtensionInstanceMember) {
+        SourceExtensionBuilder extensionBuilder =
+            _fieldBuilder.parent as SourceExtensionBuilder;
+        DartType onType = extensionBuilder.extension.onType;
+        List<TypeParameter> typeParameters =
+            extensionBuilder.extension.typeParameters;
+        if (typeParameters.isNotEmpty) {
+          FreshTypeParameters getterTypeParameters =
+              getFreshTypeParameters(typeParameters);
+          _getter.function.positionalParameters.first.type =
+              getterTypeParameters.substitute(onType);
+          _getter.function.returnType = getterTypeParameters.substitute(value);
+          _getter.function.typeParameters =
+              getterTypeParameters.freshTypeParameters;
+          setParents(
+              getterTypeParameters.freshTypeParameters, _getter.function);
+
+          Procedure? setter = _setter;
+          if (setter != null) {
+            FreshTypeParameters setterTypeParameters =
+                getFreshTypeParameters(typeParameters);
+            setter.function.positionalParameters.first.type =
+                setterTypeParameters.substitute(onType);
+            setter.function.positionalParameters[1].type =
+                setterTypeParameters.substitute(value);
+            setter.function.typeParameters =
+                setterTypeParameters.freshTypeParameters;
+            setParents(
+                setterTypeParameters.freshTypeParameters, setter.function);
+          }
+        } else {
+          _getter.function.returnType = value;
+          _setter?.function.positionalParameters[1].type = value;
+          _getter.function.positionalParameters.first.type = onType;
+          _setter?.function.positionalParameters.first.type = onType;
+        }
+      } else {
+        _getter.function.returnType = value;
+        Procedure? setter = _setter;
+        if (setter != null) {
+          if (setter.kind == ProcedureKind.Method) {
+            setter.function.positionalParameters[1].type = value;
+          } else {
+            setter.function.positionalParameters.first.type = value;
+          }
+        }
+      }
+    }
   }
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/builder/member_builder.dart b/pkg/front_end/lib/src/fasta/builder/member_builder.dart
index bae23b9..f164ecc 100644
--- a/pkg/front_end/lib/src/fasta/builder/member_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/member_builder.dart
@@ -68,6 +68,7 @@
   // TODO(johnniwinther): Remove this and create a [ProcedureBuilder] interface.
   ProcedureKind? get kind;
 
+  @override
   bool get isExternal;
 
   bool get isAbstract;
diff --git a/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart b/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart
index bccd75e..8c5b997 100644
--- a/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart
@@ -276,7 +276,7 @@
   // TODO(johnniwinther): Store [origin] on the built type.
   DartType buildInternal(LibraryBuilder library,
       {TypedefType? origin,
-      bool? nonInstanceContext,
+      required bool? nonInstanceContext,
       required bool forTypeLiteral}) {
     assert(declaration != null, "Declaration has not been resolved on $this.");
     // TODO(johnniwinther): Change `nonInstanceContext == true` to
diff --git a/pkg/front_end/lib/src/fasta/builder/procedure_builder.dart b/pkg/front_end/lib/src/fasta/builder/procedure_builder.dart
index 741445c..48b6cd4 100644
--- a/pkg/front_end/lib/src/fasta/builder/procedure_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/procedure_builder.dart
@@ -10,6 +10,7 @@
 
 import '../loader.dart' show Loader;
 
+import '../source/name_scheme.dart';
 import '../source/source_library_builder.dart' show SourceLibraryBuilder;
 
 import 'builder.dart';
@@ -94,7 +95,7 @@
       Reference? procedureReference,
       this._tearOffReference,
       AsyncMarker asyncModifier,
-      ProcedureNameScheme procedureNameScheme,
+      NameScheme nameScheme,
       {required bool isExtensionMember,
       required bool isInstanceMember,
       String? nativeMethodName})
@@ -107,7 +108,7 @@
         super(metadata, modifiers, returnType, name, typeVariables, formals,
             libraryBuilder, charOffset, nativeMethodName) {
     _procedure = new Procedure(
-        procedureNameScheme.getName(kind, name),
+        nameScheme.getProcedureName(kind, name),
         isExtensionInstanceMember ? ProcedureKind.Method : kind,
         new FunctionNode(null),
         fileUri: libraryBuilder.fileUri,
@@ -119,7 +120,7 @@
     this.asyncModifier = asyncModifier;
     if (isExtensionMember && isInstanceMember && kind == ProcedureKind.Method) {
       _extensionTearOff ??= new Procedure(
-          procedureNameScheme.getName(ProcedureKind.Getter, name),
+          nameScheme.getProcedureName(ProcedureKind.Getter, name),
           ProcedureKind.Method,
           new FunctionNode(null),
           isStatic: true,
@@ -310,35 +311,6 @@
     return _procedure;
   }
 
-  static String createProcedureName(bool isExtensionMethod, bool isStatic,
-      ProcedureKind kind, String? extensionName, String name) {
-    if (isExtensionMethod) {
-      String kindInfix = '';
-      if (!isStatic) {
-        // Instance getter and setter are converted to methods so we use an
-        // infix to make their names unique.
-        switch (kind) {
-          case ProcedureKind.Getter:
-            kindInfix = 'get#';
-            break;
-          case ProcedureKind.Setter:
-            kindInfix = 'set#';
-            break;
-          case ProcedureKind.Method:
-          case ProcedureKind.Operator:
-            kindInfix = '';
-            break;
-          case ProcedureKind.Factory:
-            throw new UnsupportedError(
-                'Unexpected extension method kind ${kind}');
-        }
-      }
-      return '${extensionName}|${kindInfix}${name}';
-    } else {
-      return name;
-    }
-  }
-
   /// Creates a top level function that creates a tear off of an extension
   /// instance method.
   ///
@@ -591,33 +563,3 @@
         memberBuilder == other.memberBuilder;
   }
 }
-
-class ProcedureNameScheme {
-  final bool isExtensionMember;
-  final bool isStatic;
-  final String? extensionName;
-  final Reference libraryReference;
-
-  ProcedureNameScheme(
-      {required this.isExtensionMember,
-      required this.isStatic,
-      this.extensionName,
-      required this.libraryReference})
-      // ignore: unnecessary_null_comparison
-      : assert(isExtensionMember != null),
-        // ignore: unnecessary_null_comparison
-        assert(isStatic != null),
-        // ignore: unnecessary_null_comparison
-        assert(!isExtensionMember || extensionName != null),
-        // ignore: unnecessary_null_comparison
-        assert(libraryReference != null);
-
-  Name getName(ProcedureKind kind, String name) {
-    // ignore: unnecessary_null_comparison
-    assert(kind != null);
-    return new Name.byReference(
-        SourceProcedureBuilder.createProcedureName(
-            isExtensionMember, isStatic, kind, extensionName, name),
-        libraryReference);
-  }
-}
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 0db0a7a..2a2955a 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -6845,7 +6845,8 @@
           builder.declaration as TypeVariableBuilder;
       TypeParameter typeParameter = typeParameterBuilder.parameter;
       LocatedMessage message;
-      bool extensionField = member.isExtensionMember && member.isField;
+      bool extensionField =
+          member.isExtensionMember && member.isField && !member.isExternal;
       if ((extensionField || !isDeclarationInstanceContext) &&
           (typeParameter.parent is Class ||
               typeParameter.parent is Extension)) {
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 dd26634..49d92a1 100644
--- a/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
@@ -1942,6 +1942,10 @@
         assert(!getterBuilder.isStatic);
         MemberBuilder memberBuilder = getterBuilder as MemberBuilder;
         invokeTarget = memberBuilder.invokeTarget as Procedure?;
+      } else if (getterBuilder.isField) {
+        assert(!getterBuilder.isStatic);
+        MemberBuilder memberBuilder = getterBuilder as MemberBuilder;
+        readTarget = memberBuilder.invokeTarget as Procedure?;
       } else {
         return unhandled(
             "$getterBuilder (${getterBuilder.runtimeType})",
@@ -1959,6 +1963,10 @@
         assert(!setterBuilder.isStatic);
         MemberBuilder memberBuilder = setterBuilder as MemberBuilder;
         writeTarget = memberBuilder.writeTarget as Procedure?;
+      } else if (setterBuilder.isField) {
+        assert(!setterBuilder.isStatic);
+        MemberBuilder memberBuilder = setterBuilder as MemberBuilder;
+        writeTarget = memberBuilder.writeTarget as Procedure?;
       } else {
         return unhandled(
             "$setterBuilder (${setterBuilder.runtimeType})",
@@ -2598,7 +2606,7 @@
   Generator _createInstanceAccess(Token token, Name name,
       {bool isNullAware: false}) {
     Builder? getter = extensionBuilder.lookupLocalMemberByName(name);
-    if (getter != null && (getter.isStatic || getter.isField)) {
+    if (getter != null && getter.isStatic) {
       getter = null;
     }
     Builder? setter =
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 64ce17a..f38b46b 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
@@ -67,6 +67,7 @@
         templateSuperclassHasNoDefaultConstructor;
 import '../problems.dart' show unhandled;
 import '../scope.dart' show AmbiguousBuilder;
+import '../source/name_scheme.dart';
 import '../source/source_class_builder.dart' show SourceClassBuilder;
 import '../source/source_library_builder.dart'
     show LanguageVersion, SourceLibraryBuilder;
@@ -1185,7 +1186,7 @@
     assert(() {
       Set<String> patchFieldNames = {};
       builder.forEachDeclaredField((String name, FieldBuilder fieldBuilder) {
-        patchFieldNames.add(SourceFieldBuilder.createFieldName(
+        patchFieldNames.add(NameScheme.createFieldName(
           FieldNameType.Field,
           name,
           isInstanceMember: fieldBuilder.isClassInstanceMember,
diff --git a/pkg/front_end/lib/src/fasta/source/name_scheme.dart b/pkg/front_end/lib/src/fasta/source/name_scheme.dart
new file mode 100644
index 0000000..65bcfe7
--- /dev/null
+++ b/pkg/front_end/lib/src/fasta/source/name_scheme.dart
@@ -0,0 +1,137 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// 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.
+
+import 'package:kernel/ast.dart';
+
+import '../kernel/late_lowering.dart' as late_lowering;
+
+enum FieldNameType { Field, Getter, Setter, IsSetField }
+
+class NameScheme {
+  final bool isInstanceMember;
+  final String? className;
+  final bool isExtensionMember;
+  final String? extensionName;
+  final Reference? libraryReference;
+
+  NameScheme(
+      {required this.isInstanceMember,
+      required this.className,
+      required this.isExtensionMember,
+      required this.extensionName,
+      required this.libraryReference})
+      // ignore: unnecessary_null_comparison
+      : assert(isInstanceMember != null),
+        // ignore: unnecessary_null_comparison
+        assert(isExtensionMember != null),
+        // ignore: unnecessary_null_comparison
+        assert(!isExtensionMember || extensionName != null),
+        // ignore: unnecessary_null_comparison
+        assert(libraryReference != null);
+
+  bool get isStatic => !isInstanceMember;
+
+  Name getFieldName(FieldNameType type, String name,
+      {required bool isSynthesized}) {
+    // ignore: unnecessary_null_comparison
+    assert(isSynthesized != null);
+    String text = createFieldName(type, name,
+        isInstanceMember: isInstanceMember,
+        className: className,
+        isExtensionMethod: isExtensionMember,
+        extensionName: extensionName,
+        isSynthesized: isSynthesized);
+    return new Name.byReference(text, libraryReference);
+  }
+
+  static String createFieldName(FieldNameType type, String name,
+      {required bool isInstanceMember,
+      required String? className,
+      bool isExtensionMethod: false,
+      String? extensionName,
+      bool isSynthesized: false}) {
+    assert(isSynthesized || type == FieldNameType.Field,
+        "Unexpected field name type for non-synthesized field: $type");
+    // ignore: unnecessary_null_comparison
+    assert(isExtensionMethod || isInstanceMember != null,
+        "`isInstanceMember` is null for class member.");
+    assert(!(isExtensionMethod && extensionName == null),
+        "No extension name provided for extension member.");
+    // ignore: unnecessary_null_comparison
+    assert(isInstanceMember == null || !(isInstanceMember && className == null),
+        "No class name provided for instance member.");
+    String baseName;
+    if (!isExtensionMethod) {
+      baseName = name;
+    } else {
+      baseName = "${extensionName}|${name}";
+    }
+
+    if (!isSynthesized) {
+      return baseName;
+    } else {
+      String namePrefix = late_lowering.lateFieldPrefix;
+      if (isInstanceMember) {
+        namePrefix = '$namePrefix${className}#';
+      }
+      switch (type) {
+        case FieldNameType.Field:
+          return "$namePrefix$baseName";
+        case FieldNameType.Getter:
+          return baseName;
+        case FieldNameType.Setter:
+          return baseName;
+        case FieldNameType.IsSetField:
+          return "$namePrefix$baseName${late_lowering.lateIsSetSuffix}";
+      }
+    }
+  }
+
+  Name getProcedureName(ProcedureKind kind, String name) {
+    // ignore: unnecessary_null_comparison
+    assert(kind != null);
+    return new Name.byReference(
+        createProcedureName(
+            isExtensionMethod: isExtensionMember,
+            isStatic: isStatic,
+            kind: kind,
+            extensionName: extensionName,
+            name: name),
+        libraryReference);
+  }
+
+  static String createProcedureName(
+      {required bool isExtensionMethod,
+      required bool isStatic,
+      required ProcedureKind kind,
+      String? extensionName,
+      required String name}) {
+    if (isExtensionMethod) {
+      assert(extensionName != null);
+      String kindInfix = '';
+      if (!isStatic) {
+        // Instance getter and setter are converted to methods so we use an
+        // infix to make their names unique.
+        switch (kind) {
+          case ProcedureKind.Getter:
+            kindInfix = 'get#';
+            break;
+          case ProcedureKind.Setter:
+            kindInfix = 'set#';
+            break;
+          case ProcedureKind.Method:
+          case ProcedureKind.Operator:
+            kindInfix = '';
+            break;
+          case ProcedureKind.Factory:
+            throw new UnsupportedError(
+                'Unexpected extension method kind ${kind}');
+        }
+      }
+      return '${extensionName}|${kindInfix}${name}';
+    } else {
+      return name;
+    }
+  }
+}
diff --git a/pkg/front_end/lib/src/fasta/source/source_extension_builder.dart b/pkg/front_end/lib/src/fasta/source/source_extension_builder.dart
index d528324..180e20c 100644
--- a/pkg/front_end/lib/src/fasta/source/source_extension_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_extension_builder.dart
@@ -93,6 +93,8 @@
   Extension build(
       SourceLibraryBuilder libraryBuilder, LibraryBuilder coreLibrary,
       {required bool addMembersToLibrary}) {
+    _extension.onType = onType.build(libraryBuilder);
+
     SourceLibraryBuilder.checkMemberConflicts(library, scope,
         checkForInstanceVsStaticConflict: true,
         checkForMethodVsSetterConflict: true);
@@ -191,8 +193,6 @@
 
     scope.forEach(buildBuilders);
 
-    _extension.onType = onType.build(libraryBuilder);
-
     return _extension;
   }
 
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 3cf100e..76d8d26 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
@@ -122,12 +122,10 @@
 
 import '../type_inference/type_inferrer.dart' show TypeInferrerImpl;
 
+import 'name_scheme.dart';
 import 'source_class_builder.dart' show SourceClassBuilder;
-
 import 'source_extension_builder.dart' show SourceExtensionBuilder;
-
 import 'source_loader.dart' show SourceLoader;
-
 import 'source_type_alias_builder.dart';
 
 class SourceLibraryBuilder extends LibraryBuilderImpl {
@@ -2227,7 +2225,7 @@
     Reference? lateGetterReference;
     Reference? lateSetterReference;
 
-    FieldNameScheme fieldNameScheme = new FieldNameScheme(
+    NameScheme nameScheme = new NameScheme(
         isInstanceMember: isInstanceMember,
         className: className,
         isExtensionMember: isExtensionMember,
@@ -2236,14 +2234,14 @@
     if (referencesFrom != null) {
       IndexedContainer indexedContainer =
           (_currentClassReferencesFromIndexed ?? referencesFromIndexed)!;
-      Name nameToLookupName = fieldNameScheme.getName(FieldNameType.Field, name,
+      Name nameToLookupName = nameScheme.getFieldName(FieldNameType.Field, name,
           isSynthesized: fieldIsLateWithLowering);
       fieldGetterReference =
           indexedContainer.lookupGetterReference(nameToLookupName);
       fieldSetterReference =
           indexedContainer.lookupSetterReference(nameToLookupName);
       if (fieldIsLateWithLowering) {
-        Name lateIsSetNameName = fieldNameScheme.getName(
+        Name lateIsSetNameName = nameScheme.getFieldName(
             FieldNameType.IsSetField, name,
             isSynthesized: fieldIsLateWithLowering);
         lateIsSetGetterReference =
@@ -2251,10 +2249,10 @@
         lateIsSetSetterReference =
             indexedContainer.lookupSetterReference(lateIsSetNameName);
         lateGetterReference = indexedContainer.lookupGetterReference(
-            fieldNameScheme.getName(FieldNameType.Getter, name,
+            nameScheme.getFieldName(FieldNameType.Getter, name,
                 isSynthesized: fieldIsLateWithLowering));
         lateSetterReference = indexedContainer.lookupSetterReference(
-            fieldNameScheme.getName(FieldNameType.Setter, name,
+            nameScheme.getFieldName(FieldNameType.Setter, name,
                 isSynthesized: fieldIsLateWithLowering));
       }
     }
@@ -2268,8 +2266,7 @@
         this,
         charOffset,
         charEndOffset,
-        fieldNameScheme,
-        isInstanceMember: isInstanceMember,
+        nameScheme,
         fieldGetterReference: fieldGetterReference,
         fieldSetterReference: fieldSetterReference,
         lateIsSetGetterReference: lateIsSetGetterReference,
@@ -2371,12 +2368,16 @@
     assert(!isExtensionMember ||
         currentTypeParameterScopeBuilder.kind ==
             TypeParameterScopeKind.extensionDeclaration);
+    String? className = (isInstanceMember && !isExtensionMember)
+        ? currentTypeParameterScopeBuilder.name
+        : null;
     String? extensionName =
         isExtensionMember ? currentTypeParameterScopeBuilder.name : null;
-    ProcedureNameScheme procedureNameScheme = new ProcedureNameScheme(
+    NameScheme nameScheme = new NameScheme(
         isExtensionMember: isExtensionMember,
+        className: className,
         extensionName: extensionName,
-        isStatic: !isInstanceMember,
+        isInstanceMember: isInstanceMember,
         libraryReference: referencesFrom?.reference ?? library.reference);
 
     if (returnType == null) {
@@ -2390,7 +2391,7 @@
     Reference? procedureReference;
     Reference? tearOffReference;
     if (referencesFrom != null) {
-      Name nameToLookup = procedureNameScheme.getName(kind, name);
+      Name nameToLookup = nameScheme.getProcedureName(kind, name);
       if (_currentClassReferencesFromIndexed != null) {
         if (kind == ProcedureKind.Setter) {
           procedureReference = _currentClassReferencesFromIndexed!
@@ -2411,7 +2412,7 @@
         }
         if (isExtensionMember && kind == ProcedureKind.Method) {
           tearOffReference = referencesFromIndexed!.lookupGetterReference(
-              procedureNameScheme.getName(ProcedureKind.Getter, name));
+              nameScheme.getProcedureName(ProcedureKind.Getter, name));
         }
       }
     }
@@ -2431,7 +2432,7 @@
         procedureReference,
         tearOffReference,
         asyncModifier,
-        procedureNameScheme,
+        nameScheme,
         isExtensionMember: isExtensionMember,
         isInstanceMember: isInstanceMember,
         nativeMethodName: nativeMethodName);
@@ -2474,10 +2475,11 @@
       procedureName = name as String;
     }
 
-    ProcedureNameScheme procedureNameScheme = new ProcedureNameScheme(
+    NameScheme procedureNameScheme = new NameScheme(
         isExtensionMember: false,
+        className: null,
         extensionName: null,
-        isStatic: true,
+        isInstanceMember: false,
         libraryReference: referencesFrom != null
             ? (_currentClassReferencesFromIndexed ?? referencesFromIndexed)!
                 .library
diff --git a/pkg/front_end/lib/src/fasta/source/source_loader.dart b/pkg/front_end/lib/src/fasta/source/source_loader.dart
index 308ab12..110567c 100644
--- a/pkg/front_end/lib/src/fasta/source/source_loader.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_loader.dart
@@ -106,8 +106,6 @@
 
 import '../problems.dart' show internalProblem;
 
-import '../source/stack_listener_impl.dart' show offsetForToken;
-
 import '../type_inference/type_inference_engine.dart';
 import '../type_inference/type_inferrer.dart';
 
@@ -115,10 +113,12 @@
 
 import 'diet_listener.dart' show DietListener;
 import 'diet_parser.dart' show DietParser, useImplicitCreationExpressionInCfe;
+import 'name_scheme.dart';
 import 'outline_builder.dart' show OutlineBuilder;
 import 'source_class_builder.dart' show SourceClassBuilder;
 import 'source_library_builder.dart' show SourceLibraryBuilder;
 import 'source_type_alias_builder.dart';
+import 'stack_listener_impl.dart' show offsetForToken;
 
 class SourceLoader extends Loader {
   /// The [FileSystem] which should be used to access files.
@@ -551,9 +551,11 @@
         null,
         null,
         AsyncMarker.Sync,
-        new ProcedureNameScheme(
+        new NameScheme(
+            className: null,
+            extensionName: null,
             isExtensionMember: false,
-            isStatic: true,
+            isInstanceMember: false,
             libraryReference: libraryBuilder.library.reference),
         isInstanceMember: false,
         isExtensionMember: false)
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 4a559f2..d76c881 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
@@ -1039,22 +1039,31 @@
 
         if (typeSchemaEnvironment.isSubtypeOf(
             receiverType, onType, SubtypeCheckMode.withNullabilities)) {
+          ObjectAccessTarget target = const ObjectAccessTarget.missing();
+          if (thisBuilder != null && !thisBuilder.isStatic) {
+            if (thisBuilder.isField) {
+              if (thisBuilder.isExternal) {
+                target = new ObjectAccessTarget.extensionMember(
+                    setter ? thisBuilder.writeTarget! : thisBuilder.readTarget!,
+                    thisBuilder.readTarget,
+                    setter ? ProcedureKind.Setter : ProcedureKind.Getter,
+                    inferredTypeArguments,
+                    isPotentiallyNullable: isPotentiallyNullableAccess);
+              }
+            } else {
+              target = new ObjectAccessTarget.extensionMember(
+                  setter ? thisBuilder.writeTarget! : thisBuilder.invokeTarget!,
+                  thisBuilder.readTarget,
+                  thisBuilder.kind!,
+                  inferredTypeArguments,
+                  isPotentiallyNullable: isPotentiallyNullableAccess);
+            }
+          }
           ExtensionAccessCandidate candidate = new ExtensionAccessCandidate(
               (thisBuilder ?? otherBuilder)!,
               onType,
               onTypeInstantiateToBounds,
-              thisBuilder != null &&
-                      !thisBuilder.isField &&
-                      !thisBuilder.isStatic
-                  ? new ObjectAccessTarget.extensionMember(
-                      setter
-                          ? thisBuilder.writeTarget!
-                          : thisBuilder.invokeTarget!,
-                      thisBuilder.readTarget,
-                      thisBuilder.kind!,
-                      inferredTypeArguments,
-                      isPotentiallyNullable: isPotentiallyNullableAccess)
-                  : const ObjectAccessTarget.missing(),
+              target,
               isPlatform: extensionBuilder.library.importUri.scheme == 'dart');
           if (noneMoreSpecific.isNotEmpty) {
             bool isMostSpecific = true;
diff --git a/pkg/front_end/testcases/extensions/external.dart b/pkg/front_end/testcases/extensions/external.dart
new file mode 100644
index 0000000..29f5ed2
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/external.dart
@@ -0,0 +1,63 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// 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.
+
+extension Extension<T extends num> on List<T> {
+  external T field;
+  external static int staticField;
+  external final T finalField;
+  external static final int staticFinalField;
+  external T method();
+  external static int staticMethod();
+  external T get getter;
+  external static int get staticGetter;
+  external void set setter(T value);
+  external static void set staticSetter(int value);
+  external T get property;
+  external void set property(T value);
+  external static int get staticProperty;
+  external static void set staticProperty(int value);
+  external final T fieldSetter;
+  external void set fieldSetter(T value);
+  external static final int staticFieldSetter;
+  external static void set staticFieldSetter(int value);
+}
+
+test() {
+  List<int> list = [];
+  int value = list.field;
+  list.field = value;
+  value = list.finalField;
+  value = list.method();
+  value = list.getter;
+  list.setter = value;
+  value = list.property;
+  list.property = value;
+  value = list.fieldSetter;
+  list.fieldSetter = value;
+
+  List<int> iterable = list;
+  num n = Extension<num>(iterable).field;
+  Extension<num>(iterable).field = n;
+  n = Extension<num>(iterable).finalField;
+  n = Extension<num>(iterable).method();
+  n = Extension<num>(iterable).getter;
+  Extension<num>(iterable).setter = n;
+  n = Extension<num>(iterable).property;
+  Extension<num>(iterable).property = n;
+  n = Extension<num>(iterable).fieldSetter;
+  Extension<num>(iterable).fieldSetter = n;
+
+  value = Extension.staticField;
+  Extension.staticField = value;
+  value = Extension.staticFinalField;
+  value = Extension.staticMethod();
+  value = Extension.staticGetter;
+  Extension.staticSetter = value;
+  value = Extension.staticProperty;
+  Extension.staticProperty = value;
+  value = Extension.staticFieldSetter;
+  Extension.staticFieldSetter = value;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/extensions/external.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/external.dart.textual_outline.expect
new file mode 100644
index 0000000..8a7d6d9
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/external.dart.textual_outline.expect
@@ -0,0 +1,23 @@
+extension Extension<T extends num> on List<T> {
+  external T field;
+  external static int staticField;
+  external final T finalField;
+  external static final int staticFinalField;
+  external T method();
+  external static int staticMethod();
+  external T get getter;
+  external static int get staticGetter;
+  external void set setter(T value);
+  external static void set staticSetter(int value);
+  external T get property;
+  external void set property(T value);
+  external static int get staticProperty;
+  external static void set staticProperty(int value);
+  external final T fieldSetter;
+  external void set fieldSetter(T value);
+  external static final int staticFieldSetter;
+  external static void set staticFieldSetter(int value);
+}
+
+test() {}
+main() {}
diff --git a/pkg/front_end/testcases/extensions/external.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/external.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..e84ee4c
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/external.dart.textual_outline_modelled.expect
@@ -0,0 +1,23 @@
+extension Extension<T extends num> on List<T> {
+  external T field;
+  external T get getter;
+  external T get property;
+  external T method();
+  external final T fieldSetter;
+  external final T finalField;
+  external static final int staticFieldSetter;
+  external static final int staticFinalField;
+  external static int get staticGetter;
+  external static int get staticProperty;
+  external static int staticField;
+  external static int staticMethod();
+  external static void set staticFieldSetter(int value);
+  external static void set staticProperty(int value);
+  external static void set staticSetter(int value);
+  external void set fieldSetter(T value);
+  external void set property(T value);
+  external void set setter(T value);
+}
+
+main() {}
+test() {}
diff --git a/pkg/front_end/testcases/extensions/external.dart.weak.expect b/pkg/front_end/testcases/extensions/external.dart.weak.expect
new file mode 100644
index 0000000..f9c3590
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/external.dart.weak.expect
@@ -0,0 +1,84 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+extension Extension<T extends core::num> on core::List<T> {
+  get field = self::Extension|get#field;
+  set field = self::Extension|set#field;
+  static get staticField = get self::Extension|staticField;
+  static set staticField = set self::Extension|staticField;
+  get finalField = self::Extension|get#finalField;
+  static get staticFinalField = get self::Extension|staticFinalField;
+  method method = self::Extension|method;
+  tearoff method = self::Extension|get#method;
+  static method staticMethod = self::Extension|staticMethod;
+  get getter = self::Extension|get#getter;
+  static get staticGetter = get self::Extension|staticGetter;
+  get property = self::Extension|get#property;
+  static get staticProperty = get self::Extension|staticProperty;
+  get fieldSetter = self::Extension|get#fieldSetter;
+  static get staticFieldSetter = get self::Extension|staticFieldSetter;
+  set setter = self::Extension|set#setter;
+  static set staticSetter = set self::Extension|staticSetter;
+  set property = self::Extension|set#property;
+  static set staticProperty = set self::Extension|staticProperty;
+  set fieldSetter = self::Extension|set#fieldSetter;
+  static set staticFieldSetter = set self::Extension|staticFieldSetter;
+}
+external static method Extension|get#field<T extends core::num>(core::List<self::Extension|get#field::T> #this) → self::Extension|get#field::T;
+external static method Extension|set#field<T extends core::num>(core::List<self::Extension|set#field::T> #this, self::Extension|set#field::T #externalFieldValue) → void;
+external static get Extension|staticField() → core::int;
+external static set Extension|staticField(core::int #externalFieldValue) → void;
+external static method Extension|get#finalField<T extends core::num>(core::List<self::Extension|get#finalField::T> #this) → self::Extension|get#finalField::T;
+external static get Extension|staticFinalField() → core::int;
+external static method Extension|method<T extends core::num>(lowered final core::List<self::Extension|method::T> #this) → self::Extension|method::T;
+static method Extension|get#method<T extends core::num>(lowered final core::List<self::Extension|get#method::T> #this) → () → self::Extension|get#method::T
+  return () → self::Extension|get#method::T => self::Extension|method<self::Extension|get#method::T>(#this);
+external static method Extension|staticMethod() → core::int;
+external static method Extension|get#getter<T extends core::num>(lowered final core::List<self::Extension|get#getter::T> #this) → self::Extension|get#getter::T;
+external static get Extension|staticGetter() → core::int;
+external static method Extension|set#setter<T extends core::num>(lowered final core::List<self::Extension|set#setter::T> #this, self::Extension|set#setter::T value) → void;
+external static set Extension|staticSetter(core::int value) → void;
+external static method Extension|get#property<T extends core::num>(lowered final core::List<self::Extension|get#property::T> #this) → self::Extension|get#property::T;
+external static method Extension|set#property<T extends core::num>(lowered final core::List<self::Extension|set#property::T> #this, self::Extension|set#property::T value) → void;
+external static get Extension|staticProperty() → core::int;
+external static set Extension|staticProperty(core::int value) → void;
+external static method Extension|get#fieldSetter<T extends core::num>(core::List<self::Extension|get#fieldSetter::T> #this) → self::Extension|get#fieldSetter::T;
+external static method Extension|set#fieldSetter<T extends core::num>(lowered final core::List<self::Extension|set#fieldSetter::T> #this, self::Extension|set#fieldSetter::T value) → void;
+external static get Extension|staticFieldSetter() → core::int;
+external static set Extension|staticFieldSetter(core::int value) → void;
+static method test() → dynamic {
+  core::List<core::int> list = <core::int>[];
+  core::int value = self::Extension|get#field<core::int>(list);
+  self::Extension|set#field<core::int>(list, value);
+  value = self::Extension|get#finalField<core::int>(list);
+  value = self::Extension|method<core::int>(list);
+  value = self::Extension|get#getter<core::int>(list);
+  self::Extension|set#setter<core::int>(list, value);
+  value = self::Extension|get#property<core::int>(list);
+  self::Extension|set#property<core::int>(list, value);
+  value = self::Extension|get#fieldSetter<core::int>(list);
+  self::Extension|set#fieldSetter<core::int>(list, value);
+  core::List<core::int> iterable = list;
+  core::num n = self::Extension|get#field<core::num>(iterable);
+  self::Extension|set#field<core::num>(iterable, n);
+  n = self::Extension|get#finalField<core::num>(iterable);
+  n = self::Extension|method<core::num>(iterable);
+  n = self::Extension|get#getter<core::num>(iterable);
+  self::Extension|set#setter<core::num>(iterable, n);
+  n = self::Extension|get#property<core::num>(iterable);
+  self::Extension|set#property<core::num>(iterable, n);
+  n = self::Extension|get#fieldSetter<core::num>(iterable);
+  self::Extension|set#fieldSetter<core::num>(iterable, n);
+  value = self::Extension|staticField;
+  self::Extension|staticField = value;
+  value = self::Extension|staticFinalField;
+  value = self::Extension|staticMethod();
+  value = self::Extension|staticGetter;
+  self::Extension|staticSetter = value;
+  value = self::Extension|staticProperty;
+  self::Extension|staticProperty = value;
+  value = self::Extension|staticFieldSetter;
+  self::Extension|staticFieldSetter = value;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/external.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/external.dart.weak.outline.expect
new file mode 100644
index 0000000..9dc219e
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/external.dart.weak.outline.expect
@@ -0,0 +1,53 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+extension Extension<T extends core::num> on core::List<T> {
+  get field = self::Extension|get#field;
+  set field = self::Extension|set#field;
+  static get staticField = get self::Extension|staticField;
+  static set staticField = set self::Extension|staticField;
+  get finalField = self::Extension|get#finalField;
+  static get staticFinalField = get self::Extension|staticFinalField;
+  method method = self::Extension|method;
+  tearoff method = self::Extension|get#method;
+  static method staticMethod = self::Extension|staticMethod;
+  get getter = self::Extension|get#getter;
+  static get staticGetter = get self::Extension|staticGetter;
+  get property = self::Extension|get#property;
+  static get staticProperty = get self::Extension|staticProperty;
+  get fieldSetter = self::Extension|get#fieldSetter;
+  static get staticFieldSetter = get self::Extension|staticFieldSetter;
+  set setter = self::Extension|set#setter;
+  static set staticSetter = set self::Extension|staticSetter;
+  set property = self::Extension|set#property;
+  static set staticProperty = set self::Extension|staticProperty;
+  set fieldSetter = self::Extension|set#fieldSetter;
+  static set staticFieldSetter = set self::Extension|staticFieldSetter;
+}
+external static method Extension|get#field<T extends core::num>(core::List<self::Extension|get#field::T> #this) → self::Extension|get#field::T;
+external static method Extension|set#field<T extends core::num>(core::List<self::Extension|set#field::T> #this, self::Extension|set#field::T #externalFieldValue) → void;
+external static get Extension|staticField() → core::int;
+external static set Extension|staticField(core::int #externalFieldValue) → void;
+external static method Extension|get#finalField<T extends core::num>(core::List<self::Extension|get#finalField::T> #this) → self::Extension|get#finalField::T;
+external static get Extension|staticFinalField() → core::int;
+external static method Extension|method<T extends core::num>(lowered final core::List<self::Extension|method::T> #this) → self::Extension|method::T;
+static method Extension|get#method<T extends core::num>(lowered final core::List<self::Extension|get#method::T> #this) → () → self::Extension|get#method::T
+  return () → self::Extension|get#method::T => self::Extension|method<self::Extension|get#method::T>(#this);
+external static method Extension|staticMethod() → core::int;
+external static method Extension|get#getter<T extends core::num>(lowered final core::List<self::Extension|get#getter::T> #this) → self::Extension|get#getter::T;
+external static get Extension|staticGetter() → core::int;
+external static method Extension|set#setter<T extends core::num>(lowered final core::List<self::Extension|set#setter::T> #this, self::Extension|set#setter::T value) → void;
+external static set Extension|staticSetter(core::int value) → void;
+external static method Extension|get#property<T extends core::num>(lowered final core::List<self::Extension|get#property::T> #this) → self::Extension|get#property::T;
+external static method Extension|set#property<T extends core::num>(lowered final core::List<self::Extension|set#property::T> #this, self::Extension|set#property::T value) → void;
+external static get Extension|staticProperty() → core::int;
+external static set Extension|staticProperty(core::int value) → void;
+external static method Extension|get#fieldSetter<T extends core::num>(core::List<self::Extension|get#fieldSetter::T> #this) → self::Extension|get#fieldSetter::T;
+external static method Extension|set#fieldSetter<T extends core::num>(lowered final core::List<self::Extension|set#fieldSetter::T> #this, self::Extension|set#fieldSetter::T value) → void;
+external static get Extension|staticFieldSetter() → core::int;
+external static set Extension|staticFieldSetter(core::int value) → void;
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/extensions/external.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/external.dart.weak.transformed.expect
new file mode 100644
index 0000000..e19cd2d
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/external.dart.weak.transformed.expect
@@ -0,0 +1,84 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+extension Extension<T extends core::num> on core::List<T> {
+  get field = self::Extension|get#field;
+  set field = self::Extension|set#field;
+  static get staticField = get self::Extension|staticField;
+  static set staticField = set self::Extension|staticField;
+  get finalField = self::Extension|get#finalField;
+  static get staticFinalField = get self::Extension|staticFinalField;
+  method method = self::Extension|method;
+  tearoff method = self::Extension|get#method;
+  static method staticMethod = self::Extension|staticMethod;
+  get getter = self::Extension|get#getter;
+  static get staticGetter = get self::Extension|staticGetter;
+  get property = self::Extension|get#property;
+  static get staticProperty = get self::Extension|staticProperty;
+  get fieldSetter = self::Extension|get#fieldSetter;
+  static get staticFieldSetter = get self::Extension|staticFieldSetter;
+  set setter = self::Extension|set#setter;
+  static set staticSetter = set self::Extension|staticSetter;
+  set property = self::Extension|set#property;
+  static set staticProperty = set self::Extension|staticProperty;
+  set fieldSetter = self::Extension|set#fieldSetter;
+  static set staticFieldSetter = set self::Extension|staticFieldSetter;
+}
+external static method Extension|get#field<T extends core::num>(core::List<self::Extension|get#field::T> #this) → self::Extension|get#field::T;
+external static method Extension|set#field<T extends core::num>(core::List<self::Extension|set#field::T> #this, self::Extension|set#field::T #externalFieldValue) → void;
+external static get Extension|staticField() → core::int;
+external static set Extension|staticField(core::int #externalFieldValue) → void;
+external static method Extension|get#finalField<T extends core::num>(core::List<self::Extension|get#finalField::T> #this) → self::Extension|get#finalField::T;
+external static get Extension|staticFinalField() → core::int;
+external static method Extension|method<T extends core::num>(lowered final core::List<self::Extension|method::T> #this) → self::Extension|method::T;
+static method Extension|get#method<T extends core::num>(lowered final core::List<self::Extension|get#method::T> #this) → () → self::Extension|get#method::T
+  return () → self::Extension|get#method::T => self::Extension|method<self::Extension|get#method::T>(#this);
+external static method Extension|staticMethod() → core::int;
+external static method Extension|get#getter<T extends core::num>(lowered final core::List<self::Extension|get#getter::T> #this) → self::Extension|get#getter::T;
+external static get Extension|staticGetter() → core::int;
+external static method Extension|set#setter<T extends core::num>(lowered final core::List<self::Extension|set#setter::T> #this, self::Extension|set#setter::T value) → void;
+external static set Extension|staticSetter(core::int value) → void;
+external static method Extension|get#property<T extends core::num>(lowered final core::List<self::Extension|get#property::T> #this) → self::Extension|get#property::T;
+external static method Extension|set#property<T extends core::num>(lowered final core::List<self::Extension|set#property::T> #this, self::Extension|set#property::T value) → void;
+external static get Extension|staticProperty() → core::int;
+external static set Extension|staticProperty(core::int value) → void;
+external static method Extension|get#fieldSetter<T extends core::num>(core::List<self::Extension|get#fieldSetter::T> #this) → self::Extension|get#fieldSetter::T;
+external static method Extension|set#fieldSetter<T extends core::num>(lowered final core::List<self::Extension|set#fieldSetter::T> #this, self::Extension|set#fieldSetter::T value) → void;
+external static get Extension|staticFieldSetter() → core::int;
+external static set Extension|staticFieldSetter(core::int value) → void;
+static method test() → dynamic {
+  core::List<core::int> list = core::_GrowableList::•<core::int>(0);
+  core::int value = self::Extension|get#field<core::int>(list);
+  self::Extension|set#field<core::int>(list, value);
+  value = self::Extension|get#finalField<core::int>(list);
+  value = self::Extension|method<core::int>(list);
+  value = self::Extension|get#getter<core::int>(list);
+  self::Extension|set#setter<core::int>(list, value);
+  value = self::Extension|get#property<core::int>(list);
+  self::Extension|set#property<core::int>(list, value);
+  value = self::Extension|get#fieldSetter<core::int>(list);
+  self::Extension|set#fieldSetter<core::int>(list, value);
+  core::List<core::int> iterable = list;
+  core::num n = self::Extension|get#field<core::num>(iterable);
+  self::Extension|set#field<core::num>(iterable, n);
+  n = self::Extension|get#finalField<core::num>(iterable);
+  n = self::Extension|method<core::num>(iterable);
+  n = self::Extension|get#getter<core::num>(iterable);
+  self::Extension|set#setter<core::num>(iterable, n);
+  n = self::Extension|get#property<core::num>(iterable);
+  self::Extension|set#property<core::num>(iterable, n);
+  n = self::Extension|get#fieldSetter<core::num>(iterable);
+  self::Extension|set#fieldSetter<core::num>(iterable, n);
+  value = self::Extension|staticField;
+  self::Extension|staticField = value;
+  value = self::Extension|staticFinalField;
+  value = self::Extension|staticMethod();
+  value = self::Extension|staticGetter;
+  self::Extension|staticSetter = value;
+  value = self::Extension|staticProperty;
+  self::Extension|staticProperty = value;
+  value = self::Extension|staticFieldSetter;
+  self::Extension|staticFieldSetter = value;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/external_field_errors.dart.strong.expect b/pkg/front_end/testcases/nnbd/external_field_errors.dart.strong.expect
index 5d4f518..ec21f8d 100644
--- a/pkg/front_end/testcases/nnbd/external_field_errors.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/external_field_errors.dart.strong.expect
@@ -101,9 +101,9 @@
   external static get finalStaticField() → core::int;
 }
 extension Extension on self::A {
-  get extensionInstanceField = get self::Extension|extensionInstanceField;
-  set extensionInstanceField = set self::Extension|extensionInstanceField;
-  get finalExtensionInstanceField = get self::Extension|finalExtensionInstanceField;
+  get extensionInstanceField = self::Extension|get#extensionInstanceField;
+  set extensionInstanceField = self::Extension|set#extensionInstanceField;
+  get finalExtensionInstanceField = self::Extension|get#finalExtensionInstanceField;
   static get extensionStaticField = get self::Extension|extensionStaticField;
   static set extensionStaticField = set self::Extension|extensionStaticField;
   static get finalExtensionStaticField = get self::Extension|finalExtensionStaticField;
@@ -113,9 +113,9 @@
 external static get finalTopLevelField() → core::int;
 external static get constField() → core::int;
 external static set constField(core::int #externalFieldValue) → void;
-external static get Extension|extensionInstanceField() → core::int;
-external static set Extension|extensionInstanceField(core::int #externalFieldValue) → void;
-external static get Extension|finalExtensionInstanceField() → core::int;
+external static method Extension|get#extensionInstanceField(self::A #this) → core::int;
+external static method Extension|set#extensionInstanceField(self::A #this, core::int #externalFieldValue) → void;
+external static method Extension|get#finalExtensionInstanceField(self::A #this) → core::int;
 external static get Extension|extensionStaticField() → core::int;
 external static set Extension|extensionStaticField(core::int #externalFieldValue) → void;
 external static get Extension|finalExtensionStaticField() → core::int;
diff --git a/pkg/front_end/testcases/nnbd/external_field_errors.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/external_field_errors.dart.strong.transformed.expect
index 5d4f518..ec21f8d 100644
--- a/pkg/front_end/testcases/nnbd/external_field_errors.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/external_field_errors.dart.strong.transformed.expect
@@ -101,9 +101,9 @@
   external static get finalStaticField() → core::int;
 }
 extension Extension on self::A {
-  get extensionInstanceField = get self::Extension|extensionInstanceField;
-  set extensionInstanceField = set self::Extension|extensionInstanceField;
-  get finalExtensionInstanceField = get self::Extension|finalExtensionInstanceField;
+  get extensionInstanceField = self::Extension|get#extensionInstanceField;
+  set extensionInstanceField = self::Extension|set#extensionInstanceField;
+  get finalExtensionInstanceField = self::Extension|get#finalExtensionInstanceField;
   static get extensionStaticField = get self::Extension|extensionStaticField;
   static set extensionStaticField = set self::Extension|extensionStaticField;
   static get finalExtensionStaticField = get self::Extension|finalExtensionStaticField;
@@ -113,9 +113,9 @@
 external static get finalTopLevelField() → core::int;
 external static get constField() → core::int;
 external static set constField(core::int #externalFieldValue) → void;
-external static get Extension|extensionInstanceField() → core::int;
-external static set Extension|extensionInstanceField(core::int #externalFieldValue) → void;
-external static get Extension|finalExtensionInstanceField() → core::int;
+external static method Extension|get#extensionInstanceField(self::A #this) → core::int;
+external static method Extension|set#extensionInstanceField(self::A #this, core::int #externalFieldValue) → void;
+external static method Extension|get#finalExtensionInstanceField(self::A #this) → core::int;
 external static get Extension|extensionStaticField() → core::int;
 external static set Extension|extensionStaticField(core::int #externalFieldValue) → void;
 external static get Extension|finalExtensionStaticField() → core::int;
diff --git a/pkg/front_end/testcases/nnbd/external_field_errors.dart.weak.expect b/pkg/front_end/testcases/nnbd/external_field_errors.dart.weak.expect
index 5d4f518..ec21f8d 100644
--- a/pkg/front_end/testcases/nnbd/external_field_errors.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/external_field_errors.dart.weak.expect
@@ -101,9 +101,9 @@
   external static get finalStaticField() → core::int;
 }
 extension Extension on self::A {
-  get extensionInstanceField = get self::Extension|extensionInstanceField;
-  set extensionInstanceField = set self::Extension|extensionInstanceField;
-  get finalExtensionInstanceField = get self::Extension|finalExtensionInstanceField;
+  get extensionInstanceField = self::Extension|get#extensionInstanceField;
+  set extensionInstanceField = self::Extension|set#extensionInstanceField;
+  get finalExtensionInstanceField = self::Extension|get#finalExtensionInstanceField;
   static get extensionStaticField = get self::Extension|extensionStaticField;
   static set extensionStaticField = set self::Extension|extensionStaticField;
   static get finalExtensionStaticField = get self::Extension|finalExtensionStaticField;
@@ -113,9 +113,9 @@
 external static get finalTopLevelField() → core::int;
 external static get constField() → core::int;
 external static set constField(core::int #externalFieldValue) → void;
-external static get Extension|extensionInstanceField() → core::int;
-external static set Extension|extensionInstanceField(core::int #externalFieldValue) → void;
-external static get Extension|finalExtensionInstanceField() → core::int;
+external static method Extension|get#extensionInstanceField(self::A #this) → core::int;
+external static method Extension|set#extensionInstanceField(self::A #this, core::int #externalFieldValue) → void;
+external static method Extension|get#finalExtensionInstanceField(self::A #this) → core::int;
 external static get Extension|extensionStaticField() → core::int;
 external static set Extension|extensionStaticField(core::int #externalFieldValue) → void;
 external static get Extension|finalExtensionStaticField() → core::int;
diff --git a/pkg/front_end/testcases/nnbd/external_field_errors.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/external_field_errors.dart.weak.outline.expect
index d92b2fe..994b1f9 100644
--- a/pkg/front_end/testcases/nnbd/external_field_errors.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/external_field_errors.dart.weak.outline.expect
@@ -21,9 +21,9 @@
   external static get finalStaticField() → core::int;
 }
 extension Extension on self::A {
-  get extensionInstanceField = get self::Extension|extensionInstanceField;
-  set extensionInstanceField = set self::Extension|extensionInstanceField;
-  get finalExtensionInstanceField = get self::Extension|finalExtensionInstanceField;
+  get extensionInstanceField = self::Extension|get#extensionInstanceField;
+  set extensionInstanceField = self::Extension|set#extensionInstanceField;
+  get finalExtensionInstanceField = self::Extension|get#finalExtensionInstanceField;
   static get extensionStaticField = get self::Extension|extensionStaticField;
   static set extensionStaticField = set self::Extension|extensionStaticField;
   static get finalExtensionStaticField = get self::Extension|finalExtensionStaticField;
@@ -33,9 +33,9 @@
 external static get finalTopLevelField() → core::int;
 external static get constField() → core::int;
 external static set constField(core::int #externalFieldValue) → void;
-external static get Extension|extensionInstanceField() → core::int;
-external static set Extension|extensionInstanceField(core::int #externalFieldValue) → void;
-external static get Extension|finalExtensionInstanceField() → core::int;
+external static method Extension|get#extensionInstanceField(self::A #this) → core::int;
+external static method Extension|set#extensionInstanceField(self::A #this, core::int #externalFieldValue) → void;
+external static method Extension|get#finalExtensionInstanceField(self::A #this) → core::int;
 external static get Extension|extensionStaticField() → core::int;
 external static set Extension|extensionStaticField(core::int #externalFieldValue) → void;
 external static get Extension|finalExtensionStaticField() → core::int;
diff --git a/pkg/front_end/testcases/nnbd/external_field_errors.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/external_field_errors.dart.weak.transformed.expect
index 5d4f518..ec21f8d 100644
--- a/pkg/front_end/testcases/nnbd/external_field_errors.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/external_field_errors.dart.weak.transformed.expect
@@ -101,9 +101,9 @@
   external static get finalStaticField() → core::int;
 }
 extension Extension on self::A {
-  get extensionInstanceField = get self::Extension|extensionInstanceField;
-  set extensionInstanceField = set self::Extension|extensionInstanceField;
-  get finalExtensionInstanceField = get self::Extension|finalExtensionInstanceField;
+  get extensionInstanceField = self::Extension|get#extensionInstanceField;
+  set extensionInstanceField = self::Extension|set#extensionInstanceField;
+  get finalExtensionInstanceField = self::Extension|get#finalExtensionInstanceField;
   static get extensionStaticField = get self::Extension|extensionStaticField;
   static set extensionStaticField = set self::Extension|extensionStaticField;
   static get finalExtensionStaticField = get self::Extension|finalExtensionStaticField;
@@ -113,9 +113,9 @@
 external static get finalTopLevelField() → core::int;
 external static get constField() → core::int;
 external static set constField(core::int #externalFieldValue) → void;
-external static get Extension|extensionInstanceField() → core::int;
-external static set Extension|extensionInstanceField(core::int #externalFieldValue) → void;
-external static get Extension|finalExtensionInstanceField() → core::int;
+external static method Extension|get#extensionInstanceField(self::A #this) → core::int;
+external static method Extension|set#extensionInstanceField(self::A #this, core::int #externalFieldValue) → void;
+external static method Extension|get#finalExtensionInstanceField(self::A #this) → core::int;
 external static get Extension|extensionStaticField() → core::int;
 external static set Extension|extensionStaticField(core::int #externalFieldValue) → void;
 external static get Extension|finalExtensionStaticField() → core::int;
diff --git a/pkg/front_end/testcases/nnbd/external_fields.dart.strong.expect b/pkg/front_end/testcases/nnbd/external_fields.dart.strong.expect
index 660d848..27fd69e 100644
--- a/pkg/front_end/testcases/nnbd/external_fields.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/external_fields.dart.strong.expect
@@ -78,15 +78,15 @@
   external set untypedCovariantInstanceField(covariant dynamic #externalFieldValue) → void;
 }
 extension Extension on self::A {
-  get extensionInstanceField = get self::Extension|extensionInstanceField;
-  set extensionInstanceField = set self::Extension|extensionInstanceField;
-  get finalExtensionInstanceField = get self::Extension|finalExtensionInstanceField;
+  get extensionInstanceField = self::Extension|get#extensionInstanceField;
+  set extensionInstanceField = self::Extension|set#extensionInstanceField;
+  get finalExtensionInstanceField = self::Extension|get#finalExtensionInstanceField;
   static get extensionStaticField = get self::Extension|extensionStaticField;
   static set extensionStaticField = set self::Extension|extensionStaticField;
   static get finalExtensionStaticField = get self::Extension|finalExtensionStaticField;
-  get untypedExtensionInstanceField = get self::Extension|untypedExtensionInstanceField;
-  set untypedExtensionInstanceField = set self::Extension|untypedExtensionInstanceField;
-  get untypedFinalExtensionInstanceField = get self::Extension|untypedFinalExtensionInstanceField;
+  get untypedExtensionInstanceField = self::Extension|get#untypedExtensionInstanceField;
+  set untypedExtensionInstanceField = self::Extension|set#untypedExtensionInstanceField;
+  get untypedFinalExtensionInstanceField = self::Extension|get#untypedFinalExtensionInstanceField;
   static get untypedExtensionStaticField = get self::Extension|untypedExtensionStaticField;
   static set untypedExtensionStaticField = set self::Extension|untypedExtensionStaticField;
   static get untypedFinalExtensionStaticField = get self::Extension|untypedFinalExtensionStaticField;
@@ -101,20 +101,20 @@
 external static set untypedTopLevelField(dynamic #externalFieldValue) → void;
 external static get untypedFinalTopLevelField() → dynamic;
 @#C1
-external static get Extension|extensionInstanceField() → core::int;
+external static method Extension|get#extensionInstanceField(self::A #this) → core::int;
 @#C1
-external static set Extension|extensionInstanceField(core::int #externalFieldValue) → void;
+external static method Extension|set#extensionInstanceField(self::A #this, core::int #externalFieldValue) → void;
 @#C1
-external static get Extension|finalExtensionInstanceField() → core::int;
+external static method Extension|get#finalExtensionInstanceField(self::A #this) → core::int;
 @#C1
 external static get Extension|extensionStaticField() → core::int;
 @#C1
 external static set Extension|extensionStaticField(core::int #externalFieldValue) → void;
 @#C1
 external static get Extension|finalExtensionStaticField() → core::int;
-external static get Extension|untypedExtensionInstanceField() → dynamic;
-external static set Extension|untypedExtensionInstanceField(dynamic #externalFieldValue) → void;
-external static get Extension|untypedFinalExtensionInstanceField() → dynamic;
+external static method Extension|get#untypedExtensionInstanceField(self::A #this) → dynamic;
+external static method Extension|set#untypedExtensionInstanceField(self::A #this, dynamic #externalFieldValue) → void;
+external static method Extension|get#untypedFinalExtensionInstanceField(self::A #this) → dynamic;
 external static get Extension|untypedExtensionStaticField() → dynamic;
 external static set Extension|untypedExtensionStaticField(dynamic #externalFieldValue) → void;
 external static get Extension|untypedFinalExtensionStaticField() → dynamic;
diff --git a/pkg/front_end/testcases/nnbd/external_fields.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/external_fields.dart.strong.transformed.expect
index 660d848..27fd69e 100644
--- a/pkg/front_end/testcases/nnbd/external_fields.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/external_fields.dart.strong.transformed.expect
@@ -78,15 +78,15 @@
   external set untypedCovariantInstanceField(covariant dynamic #externalFieldValue) → void;
 }
 extension Extension on self::A {
-  get extensionInstanceField = get self::Extension|extensionInstanceField;
-  set extensionInstanceField = set self::Extension|extensionInstanceField;
-  get finalExtensionInstanceField = get self::Extension|finalExtensionInstanceField;
+  get extensionInstanceField = self::Extension|get#extensionInstanceField;
+  set extensionInstanceField = self::Extension|set#extensionInstanceField;
+  get finalExtensionInstanceField = self::Extension|get#finalExtensionInstanceField;
   static get extensionStaticField = get self::Extension|extensionStaticField;
   static set extensionStaticField = set self::Extension|extensionStaticField;
   static get finalExtensionStaticField = get self::Extension|finalExtensionStaticField;
-  get untypedExtensionInstanceField = get self::Extension|untypedExtensionInstanceField;
-  set untypedExtensionInstanceField = set self::Extension|untypedExtensionInstanceField;
-  get untypedFinalExtensionInstanceField = get self::Extension|untypedFinalExtensionInstanceField;
+  get untypedExtensionInstanceField = self::Extension|get#untypedExtensionInstanceField;
+  set untypedExtensionInstanceField = self::Extension|set#untypedExtensionInstanceField;
+  get untypedFinalExtensionInstanceField = self::Extension|get#untypedFinalExtensionInstanceField;
   static get untypedExtensionStaticField = get self::Extension|untypedExtensionStaticField;
   static set untypedExtensionStaticField = set self::Extension|untypedExtensionStaticField;
   static get untypedFinalExtensionStaticField = get self::Extension|untypedFinalExtensionStaticField;
@@ -101,20 +101,20 @@
 external static set untypedTopLevelField(dynamic #externalFieldValue) → void;
 external static get untypedFinalTopLevelField() → dynamic;
 @#C1
-external static get Extension|extensionInstanceField() → core::int;
+external static method Extension|get#extensionInstanceField(self::A #this) → core::int;
 @#C1
-external static set Extension|extensionInstanceField(core::int #externalFieldValue) → void;
+external static method Extension|set#extensionInstanceField(self::A #this, core::int #externalFieldValue) → void;
 @#C1
-external static get Extension|finalExtensionInstanceField() → core::int;
+external static method Extension|get#finalExtensionInstanceField(self::A #this) → core::int;
 @#C1
 external static get Extension|extensionStaticField() → core::int;
 @#C1
 external static set Extension|extensionStaticField(core::int #externalFieldValue) → void;
 @#C1
 external static get Extension|finalExtensionStaticField() → core::int;
-external static get Extension|untypedExtensionInstanceField() → dynamic;
-external static set Extension|untypedExtensionInstanceField(dynamic #externalFieldValue) → void;
-external static get Extension|untypedFinalExtensionInstanceField() → dynamic;
+external static method Extension|get#untypedExtensionInstanceField(self::A #this) → dynamic;
+external static method Extension|set#untypedExtensionInstanceField(self::A #this, dynamic #externalFieldValue) → void;
+external static method Extension|get#untypedFinalExtensionInstanceField(self::A #this) → dynamic;
 external static get Extension|untypedExtensionStaticField() → dynamic;
 external static set Extension|untypedExtensionStaticField(dynamic #externalFieldValue) → void;
 external static get Extension|untypedFinalExtensionStaticField() → dynamic;
diff --git a/pkg/front_end/testcases/nnbd/external_fields.dart.weak.expect b/pkg/front_end/testcases/nnbd/external_fields.dart.weak.expect
index 660d848..27fd69e 100644
--- a/pkg/front_end/testcases/nnbd/external_fields.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/external_fields.dart.weak.expect
@@ -78,15 +78,15 @@
   external set untypedCovariantInstanceField(covariant dynamic #externalFieldValue) → void;
 }
 extension Extension on self::A {
-  get extensionInstanceField = get self::Extension|extensionInstanceField;
-  set extensionInstanceField = set self::Extension|extensionInstanceField;
-  get finalExtensionInstanceField = get self::Extension|finalExtensionInstanceField;
+  get extensionInstanceField = self::Extension|get#extensionInstanceField;
+  set extensionInstanceField = self::Extension|set#extensionInstanceField;
+  get finalExtensionInstanceField = self::Extension|get#finalExtensionInstanceField;
   static get extensionStaticField = get self::Extension|extensionStaticField;
   static set extensionStaticField = set self::Extension|extensionStaticField;
   static get finalExtensionStaticField = get self::Extension|finalExtensionStaticField;
-  get untypedExtensionInstanceField = get self::Extension|untypedExtensionInstanceField;
-  set untypedExtensionInstanceField = set self::Extension|untypedExtensionInstanceField;
-  get untypedFinalExtensionInstanceField = get self::Extension|untypedFinalExtensionInstanceField;
+  get untypedExtensionInstanceField = self::Extension|get#untypedExtensionInstanceField;
+  set untypedExtensionInstanceField = self::Extension|set#untypedExtensionInstanceField;
+  get untypedFinalExtensionInstanceField = self::Extension|get#untypedFinalExtensionInstanceField;
   static get untypedExtensionStaticField = get self::Extension|untypedExtensionStaticField;
   static set untypedExtensionStaticField = set self::Extension|untypedExtensionStaticField;
   static get untypedFinalExtensionStaticField = get self::Extension|untypedFinalExtensionStaticField;
@@ -101,20 +101,20 @@
 external static set untypedTopLevelField(dynamic #externalFieldValue) → void;
 external static get untypedFinalTopLevelField() → dynamic;
 @#C1
-external static get Extension|extensionInstanceField() → core::int;
+external static method Extension|get#extensionInstanceField(self::A #this) → core::int;
 @#C1
-external static set Extension|extensionInstanceField(core::int #externalFieldValue) → void;
+external static method Extension|set#extensionInstanceField(self::A #this, core::int #externalFieldValue) → void;
 @#C1
-external static get Extension|finalExtensionInstanceField() → core::int;
+external static method Extension|get#finalExtensionInstanceField(self::A #this) → core::int;
 @#C1
 external static get Extension|extensionStaticField() → core::int;
 @#C1
 external static set Extension|extensionStaticField(core::int #externalFieldValue) → void;
 @#C1
 external static get Extension|finalExtensionStaticField() → core::int;
-external static get Extension|untypedExtensionInstanceField() → dynamic;
-external static set Extension|untypedExtensionInstanceField(dynamic #externalFieldValue) → void;
-external static get Extension|untypedFinalExtensionInstanceField() → dynamic;
+external static method Extension|get#untypedExtensionInstanceField(self::A #this) → dynamic;
+external static method Extension|set#untypedExtensionInstanceField(self::A #this, dynamic #externalFieldValue) → void;
+external static method Extension|get#untypedFinalExtensionInstanceField(self::A #this) → dynamic;
 external static get Extension|untypedExtensionStaticField() → dynamic;
 external static set Extension|untypedExtensionStaticField(dynamic #externalFieldValue) → void;
 external static get Extension|untypedFinalExtensionStaticField() → dynamic;
diff --git a/pkg/front_end/testcases/nnbd/external_fields.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/external_fields.dart.weak.outline.expect
index 99614fc..3b1721d 100644
--- a/pkg/front_end/testcases/nnbd/external_fields.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/external_fields.dart.weak.outline.expect
@@ -76,15 +76,15 @@
   external set untypedCovariantInstanceField(covariant dynamic #externalFieldValue) → void;
 }
 extension Extension on self::A {
-  get extensionInstanceField = get self::Extension|extensionInstanceField;
-  set extensionInstanceField = set self::Extension|extensionInstanceField;
-  get finalExtensionInstanceField = get self::Extension|finalExtensionInstanceField;
+  get extensionInstanceField = self::Extension|get#extensionInstanceField;
+  set extensionInstanceField = self::Extension|set#extensionInstanceField;
+  get finalExtensionInstanceField = self::Extension|get#finalExtensionInstanceField;
   static get extensionStaticField = get self::Extension|extensionStaticField;
   static set extensionStaticField = set self::Extension|extensionStaticField;
   static get finalExtensionStaticField = get self::Extension|finalExtensionStaticField;
-  get untypedExtensionInstanceField = get self::Extension|untypedExtensionInstanceField;
-  set untypedExtensionInstanceField = set self::Extension|untypedExtensionInstanceField;
-  get untypedFinalExtensionInstanceField = get self::Extension|untypedFinalExtensionInstanceField;
+  get untypedExtensionInstanceField = self::Extension|get#untypedExtensionInstanceField;
+  set untypedExtensionInstanceField = self::Extension|set#untypedExtensionInstanceField;
+  get untypedFinalExtensionInstanceField = self::Extension|get#untypedFinalExtensionInstanceField;
   static get untypedExtensionStaticField = get self::Extension|untypedExtensionStaticField;
   static set untypedExtensionStaticField = set self::Extension|untypedExtensionStaticField;
   static get untypedFinalExtensionStaticField = get self::Extension|untypedFinalExtensionStaticField;
@@ -99,20 +99,20 @@
 external static set untypedTopLevelField(dynamic #externalFieldValue) → void;
 external static get untypedFinalTopLevelField() → dynamic;
 @self::Annotation::•()
-external static get Extension|extensionInstanceField() → core::int;
+external static method Extension|get#extensionInstanceField(self::A #this) → core::int;
 @self::Annotation::•()
-external static set Extension|extensionInstanceField(core::int #externalFieldValue) → void;
+external static method Extension|set#extensionInstanceField(self::A #this, core::int #externalFieldValue) → void;
 @self::Annotation::•()
-external static get Extension|finalExtensionInstanceField() → core::int;
+external static method Extension|get#finalExtensionInstanceField(self::A #this) → core::int;
 @self::Annotation::•()
 external static get Extension|extensionStaticField() → core::int;
 @self::Annotation::•()
 external static set Extension|extensionStaticField(core::int #externalFieldValue) → void;
 @self::Annotation::•()
 external static get Extension|finalExtensionStaticField() → core::int;
-external static get Extension|untypedExtensionInstanceField() → dynamic;
-external static set Extension|untypedExtensionInstanceField(dynamic #externalFieldValue) → void;
-external static get Extension|untypedFinalExtensionInstanceField() → dynamic;
+external static method Extension|get#untypedExtensionInstanceField(self::A #this) → dynamic;
+external static method Extension|set#untypedExtensionInstanceField(self::A #this, dynamic #externalFieldValue) → void;
+external static method Extension|get#untypedFinalExtensionInstanceField(self::A #this) → dynamic;
 external static get Extension|untypedExtensionStaticField() → dynamic;
 external static set Extension|untypedExtensionStaticField(dynamic #externalFieldValue) → void;
 external static get Extension|untypedFinalExtensionStaticField() → dynamic;
diff --git a/pkg/front_end/testcases/nnbd/external_fields.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/external_fields.dart.weak.transformed.expect
index 660d848..27fd69e 100644
--- a/pkg/front_end/testcases/nnbd/external_fields.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/external_fields.dart.weak.transformed.expect
@@ -78,15 +78,15 @@
   external set untypedCovariantInstanceField(covariant dynamic #externalFieldValue) → void;
 }
 extension Extension on self::A {
-  get extensionInstanceField = get self::Extension|extensionInstanceField;
-  set extensionInstanceField = set self::Extension|extensionInstanceField;
-  get finalExtensionInstanceField = get self::Extension|finalExtensionInstanceField;
+  get extensionInstanceField = self::Extension|get#extensionInstanceField;
+  set extensionInstanceField = self::Extension|set#extensionInstanceField;
+  get finalExtensionInstanceField = self::Extension|get#finalExtensionInstanceField;
   static get extensionStaticField = get self::Extension|extensionStaticField;
   static set extensionStaticField = set self::Extension|extensionStaticField;
   static get finalExtensionStaticField = get self::Extension|finalExtensionStaticField;
-  get untypedExtensionInstanceField = get self::Extension|untypedExtensionInstanceField;
-  set untypedExtensionInstanceField = set self::Extension|untypedExtensionInstanceField;
-  get untypedFinalExtensionInstanceField = get self::Extension|untypedFinalExtensionInstanceField;
+  get untypedExtensionInstanceField = self::Extension|get#untypedExtensionInstanceField;
+  set untypedExtensionInstanceField = self::Extension|set#untypedExtensionInstanceField;
+  get untypedFinalExtensionInstanceField = self::Extension|get#untypedFinalExtensionInstanceField;
   static get untypedExtensionStaticField = get self::Extension|untypedExtensionStaticField;
   static set untypedExtensionStaticField = set self::Extension|untypedExtensionStaticField;
   static get untypedFinalExtensionStaticField = get self::Extension|untypedFinalExtensionStaticField;
@@ -101,20 +101,20 @@
 external static set untypedTopLevelField(dynamic #externalFieldValue) → void;
 external static get untypedFinalTopLevelField() → dynamic;
 @#C1
-external static get Extension|extensionInstanceField() → core::int;
+external static method Extension|get#extensionInstanceField(self::A #this) → core::int;
 @#C1
-external static set Extension|extensionInstanceField(core::int #externalFieldValue) → void;
+external static method Extension|set#extensionInstanceField(self::A #this, core::int #externalFieldValue) → void;
 @#C1
-external static get Extension|finalExtensionInstanceField() → core::int;
+external static method Extension|get#finalExtensionInstanceField(self::A #this) → core::int;
 @#C1
 external static get Extension|extensionStaticField() → core::int;
 @#C1
 external static set Extension|extensionStaticField(core::int #externalFieldValue) → void;
 @#C1
 external static get Extension|finalExtensionStaticField() → core::int;
-external static get Extension|untypedExtensionInstanceField() → dynamic;
-external static set Extension|untypedExtensionInstanceField(dynamic #externalFieldValue) → void;
-external static get Extension|untypedFinalExtensionInstanceField() → dynamic;
+external static method Extension|get#untypedExtensionInstanceField(self::A #this) → dynamic;
+external static method Extension|set#untypedExtensionInstanceField(self::A #this, dynamic #externalFieldValue) → void;
+external static method Extension|get#untypedFinalExtensionInstanceField(self::A #this) → dynamic;
 external static get Extension|untypedExtensionStaticField() → dynamic;
 external static set Extension|untypedExtensionStaticField(dynamic #externalFieldValue) → void;
 external static get Extension|untypedFinalExtensionStaticField() → dynamic;
