Version 2.12.0-133.0.dev

Merge commit '86e598808f6538baeaa674e1103162ac75bbf4a3' into 'dev'
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/add_async.dart b/pkg/analysis_server/lib/src/services/correction/dart/add_async.dart
index 59739f3..2e73adb 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/add_async.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/add_async.dart
@@ -28,10 +28,10 @@
       DartType returnType;
       FunctionBody body;
       if (parent is FunctionDeclaration) {
-        returnType = parent.returnType.type;
+        returnType = parent.declaredElement.returnType;
         body = parent.functionExpression.body;
       } else if (parent is MethodDeclaration) {
-        returnType = parent.returnType.type;
+        returnType = parent.declaredElement.returnType;
         body = parent.body;
       }
       if (body == null) {
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/encapsulate_field.dart b/pkg/analysis_server/lib/src/services/correction/dart/encapsulate_field.dart
index 6f1065a..23d6686 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/encapsulate_field.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/encapsulate_field.dart
@@ -51,11 +51,17 @@
     if (nameNode != node) {
       return;
     }
+
+    // Should be in a class or mixin.
+    if (fieldDeclaration.parent is! ClassOrMixinDeclaration) {
+      return;
+    }
+    var classDeclaration = fieldDeclaration.parent as ClassOrMixinDeclaration;
+
     await builder.addDartFileEdit(file, (builder) {
       // rename field
       builder.addSimpleReplacement(range.node(nameNode), '_$name');
       // update references in constructors
-      ClassOrMixinDeclaration classDeclaration = fieldDeclaration.parent;
       for (var member in classDeclaration.members) {
         if (member is ConstructorDeclaration) {
           for (var parameter in member.parameters.parameters) {
diff --git a/pkg/analysis_server/test/src/services/correction/assist/encapsulate_field_test.dart b/pkg/analysis_server/test/src/services/correction/assist/encapsulate_field_test.dart
index 3ab99bf..5817ae2 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/encapsulate_field_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/encapsulate_field_test.dart
@@ -58,6 +58,16 @@
 ''');
   }
 
+  Future<void> test_extension_hasType() async {
+    verifyNoTestUnitErrors = false;
+    await resolveTestCode('''
+extension E on int {
+  int test = 42;
+}
+''');
+    await assertNoAssistAt('test = 42');
+  }
+
   Future<void> test_final() async {
     await resolveTestCode('''
 class A {
@@ -94,6 +104,25 @@
 ''');
   }
 
+  Future<void> test_mixin_hasType() async {
+    await resolveTestCode('''
+mixin M {
+  int test = 42;
+}
+''');
+    await assertHasAssistAt('test = 42', '''
+mixin M {
+  int _test = 42;
+
+  int get test => _test;
+
+  set test(int test) {
+    _test = test;
+  }
+}
+''');
+  }
+
   Future<void> test_multipleFields() async {
     await resolveTestCode('''
 class A {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_async_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_async_test.dart
index 185a291..bb382ff 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_async_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_async_test.dart
@@ -248,6 +248,21 @@
     await assertNoFix();
   }
 
+  Future<void> test_missingReturn_method_notVoid_inherited() async {
+    await resolveTestCode('''
+abstract class A {
+  Future<int> foo();
+}
+
+class B implements A {
+  foo() {
+  print('');
+  }
+}
+''');
+    await assertNoFix();
+  }
+
   Future<void> test_missingReturn_method_void() async {
     await resolveTestCode('''
 class C {
@@ -265,6 +280,31 @@
 ''');
   }
 
+  Future<void> test_missingReturn_method_void_inherited() async {
+    await resolveTestCode('''
+abstract class A {
+  Future<void> foo();
+}
+
+class B implements A {
+  foo() {
+  print('');
+  }
+}
+''');
+    await assertHasFix('''
+abstract class A {
+  Future<void> foo();
+}
+
+class B implements A {
+  foo() async {
+  print('');
+  }
+}
+''');
+  }
+
   Future<void> test_missingReturn_topLevel_hasReturn() async {
     await resolveTestCode('''
 Future<int> f(bool b) {
diff --git a/pkg/analyzer/lib/src/dart/analysis/file_state.dart b/pkg/analyzer/lib/src/dart/analysis/file_state.dart
index 5b8e8b6..a37f6a7 100644
--- a/pkg/analyzer/lib/src/dart/analysis/file_state.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/file_state.dart
@@ -285,7 +285,7 @@
   LibraryCycle get libraryCycle {
     if (isPart) {
       var library = this.library;
-      if (library != null) {
+      if (library != null && !identical(library, this)) {
         return library.libraryCycle;
       }
     }
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index faf322e..1f98644 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -138,28 +138,6 @@
   T accept<T>(ElementVisitor<T> visitor) => visitor.visitClassElement(this);
 
   @override
-  ElementImpl getChild(String identifier) {
-    //
-    // The casts in this method are safe because the set methods would have
-    // thrown a CCE if any of the elements in the arrays were not of the
-    // expected types.
-    //
-    for (PropertyAccessorElement accessor in accessors) {
-      PropertyAccessorElementImpl accessorImpl = accessor;
-      if (accessorImpl.identifier == identifier) {
-        return accessorImpl;
-      }
-    }
-    for (FieldElement field in fields) {
-      FieldElementImpl fieldImpl = field;
-      if (fieldImpl.identifier == identifier) {
-        return fieldImpl;
-      }
-    }
-    return null;
-  }
-
-  @override
   FieldElement getField(String name) {
     for (FieldElement fieldElement in fields) {
       if (name == fieldElement.name) {
@@ -899,38 +877,6 @@
   }
 
   @override
-  ElementImpl getChild(String identifier) {
-    ElementImpl child = super.getChild(identifier);
-    if (child != null) {
-      return child;
-    }
-    //
-    // The casts in this method are safe because the set methods would have
-    // thrown a CCE if any of the elements in the arrays were not of the
-    // expected types.
-    //
-    for (ConstructorElement constructor in constructors) {
-      ConstructorElementImpl constructorImpl = constructor;
-      if (constructorImpl.identifier == identifier) {
-        return constructorImpl;
-      }
-    }
-    for (MethodElement method in methods) {
-      MethodElementImpl methodImpl = method;
-      if (methodImpl.identifier == identifier) {
-        return methodImpl;
-      }
-    }
-    for (TypeParameterElement typeParameter in typeParameters) {
-      TypeParameterElementImpl typeParameterImpl = typeParameter;
-      if (typeParameterImpl.identifier == identifier) {
-        return typeParameterImpl;
-      }
-    }
-    return null;
-  }
-
-  @override
   ConstructorElement getNamedConstructor(String name) =>
       getNamedConstructorFromList(name, constructors);
 
@@ -1563,51 +1509,6 @@
   }
 
   @override
-  ElementImpl getChild(String identifier) {
-    //
-    // The casts in this method are safe because the set methods would have
-    // thrown a CCE if any of the elements in the arrays were not of the
-    // expected types.
-    //
-    for (PropertyAccessorElement accessor in accessors) {
-      PropertyAccessorElementImpl accessorImpl = accessor;
-      if (accessorImpl.identifier == identifier) {
-        return accessorImpl;
-      }
-    }
-    for (TopLevelVariableElement variable in topLevelVariables) {
-      TopLevelVariableElementImpl variableImpl = variable;
-      if (variableImpl.identifier == identifier) {
-        return variableImpl;
-      }
-    }
-    for (FunctionElement function in functions) {
-      FunctionElementImpl functionImpl = function;
-      if (functionImpl.identifier == identifier) {
-        return functionImpl;
-      }
-    }
-    for (TypeAliasElementImpl typeAlias in typeAliases) {
-      if (typeAlias.identifier == identifier) {
-        return typeAlias;
-      }
-    }
-    for (ClassElement type in types) {
-      ClassElementImpl typeImpl = type;
-      if (typeImpl.name == identifier) {
-        return typeImpl;
-      }
-    }
-    for (ClassElement type in enums) {
-      EnumElementImpl typeImpl = type;
-      if (typeImpl.identifier == identifier) {
-        return typeImpl;
-      }
-    }
-    return null;
-  }
-
-  @override
   ClassElement getEnum(String enumName) {
     for (ClassElement enumDeclaration in enums) {
       if (enumDeclaration.name == enumName) {
@@ -3074,10 +2975,6 @@
     }
   }
 
-  /// Return the child of this element that is uniquely identified by the given
-  /// [identifier], or `null` if there is no such child.
-  ElementImpl getChild(String identifier) => null;
-
   @override
   String getDisplayString({@required bool withNullability}) {
     var builder = ElementDisplayStringBuilder(
@@ -3785,17 +3682,6 @@
   }
 
   @override
-  ElementImpl getChild(String identifier) {
-    for (ParameterElement parameter in parameters) {
-      ParameterElementImpl parameterImpl = parameter;
-      if (parameterImpl.identifier == identifier) {
-        return parameterImpl;
-      }
-    }
-    return null;
-  }
-
-  @override
   void visitChildren(ElementVisitor visitor) {
     super.visitChildren(visitor);
     _safelyVisitPossibleChild(returnType, visitor);
@@ -5393,33 +5279,6 @@
           ..returnType = typeProvider.futureDynamicType;
   }
 
-  @override
-  ElementImpl getChild(String identifier) {
-    CompilationUnitElementImpl unitImpl = _definingCompilationUnit;
-    if (unitImpl.identifier == identifier) {
-      return unitImpl;
-    }
-    for (CompilationUnitElement part in _parts) {
-      CompilationUnitElementImpl partImpl = part;
-      if (partImpl.identifier == identifier) {
-        return partImpl;
-      }
-    }
-    for (ImportElement importElement in imports) {
-      ImportElementImpl importElementImpl = importElement;
-      if (importElementImpl.identifier == identifier) {
-        return importElementImpl;
-      }
-    }
-    for (ExportElement exportElement in exports) {
-      ExportElementImpl exportElementImpl = exportElement;
-      if (exportElementImpl.identifier == identifier) {
-        return exportElementImpl;
-      }
-    }
-    return null;
-  }
-
   ClassElement getEnum(String name) {
     ClassElement element = _definingCompilationUnit.getEnum(name);
     if (element != null) {
@@ -7234,17 +7093,6 @@
   }
 
   @override
-  ElementImpl getChild(String identifier) {
-    for (TypeParameterElement typeParameter in typeParameters) {
-      TypeParameterElementImpl typeParameterImpl = typeParameter;
-      if (typeParameterImpl.identifier == identifier) {
-        return typeParameterImpl;
-      }
-    }
-    return null;
-  }
-
-  @override
   DartType instantiate({
     List<DartType> typeArguments,
     NullabilitySuffix nullabilitySuffix,
diff --git a/pkg/analyzer/test/generated/invalid_code_test.dart b/pkg/analyzer/test/generated/invalid_code_test.dart
index 7a8dc86..6fd7955 100644
--- a/pkg/analyzer/test/generated/invalid_code_test.dart
+++ b/pkg/analyzer/test/generated/invalid_code_test.dart
@@ -313,6 +313,13 @@
 ''');
   }
 
+  test_invalidPart_withPart() async {
+    await _assertCanBeAnalyzed('''
+part of a;
+part 'test.dart';
+''');
+  }
+
   test_keywordInConstructorInitializer_assert() async {
     await _assertCanBeAnalyzed('''
 class C {
diff --git a/pkg/analyzer/test/src/dart/analysis/file_state_test.dart b/pkg/analyzer/test/src/dart/analysis/file_state_test.dart
index b2a098a..bcea8e7 100644
--- a/pkg/analyzer/test/src/dart/analysis/file_state_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/file_state_test.dart
@@ -506,6 +506,19 @@
     _assertLibraryCycle(fb, [fb], [fa.libraryCycle]);
   }
 
+  test_libraryCycle_invalidPart_withPart() {
+    var pa = convertPath('/aaa/lib/a.dart');
+
+    newFile(pa, content: r'''
+part of lib;
+part 'a.dart';
+''');
+
+    var fa = fileSystemState.getFileForPath(pa);
+
+    _assertLibraryCycle(fa, [fa], []);
+  }
+
   test_referencedNames() {
     String path = convertPath('/aaa/lib/a.dart');
     newFile(path, content: r'''
diff --git a/pkg/analyzer_cli/lib/src/build_mode.dart b/pkg/analyzer_cli/lib/src/build_mode.dart
index 76679f5..ec2ad2b 100644
--- a/pkg/analyzer_cli/lib/src/build_mode.dart
+++ b/pkg/analyzer_cli/lib/src/build_mode.dart
@@ -28,10 +28,10 @@
 import 'package:analyzer/src/summary/package_bundle_reader.dart';
 import 'package:analyzer/src/summary/summary_sdk.dart' show SummaryBasedDartSdk;
 import 'package:analyzer/src/summary2/bundle_reader.dart';
-import 'package:analyzer/src/summary2/link.dart' as summary2;
-import 'package:analyzer/src/summary2/linked_element_factory.dart' as summary2;
+import 'package:analyzer/src/summary2/link.dart';
+import 'package:analyzer/src/summary2/linked_element_factory.dart';
 import 'package:analyzer/src/summary2/package_bundle_format.dart';
-import 'package:analyzer/src/summary2/reference.dart' as summary2;
+import 'package:analyzer/src/summary2/reference.dart';
 import 'package:analyzer_cli/src/context_cache.dart';
 import 'package:analyzer_cli/src/driver.dart';
 import 'package:analyzer_cli/src/error_formatter.dart';
@@ -174,7 +174,7 @@
   DeclaredVariables declaredVariables;
   AnalysisDriver analysisDriver;
 
-  summary2.LinkedElementFactory elementFactory;
+  LinkedElementFactory elementFactory;
 
   // May be null.
   final DependencyTracker dependencyTracker;
@@ -285,7 +285,7 @@
   /// in [explicitSources] to produce linked summary bytes.
   Uint8List _computeLinkedLibraries2() {
     return logger.run('Link output summary2', () {
-      var inputLibraries = <summary2.LinkInputLibrary>[];
+      var inputLibraries = <LinkInputLibrary>[];
 
       for (var librarySource in explicitSources) {
         var path = librarySource.fullName;
@@ -301,9 +301,9 @@
           continue;
         }
 
-        var inputUnits = <summary2.LinkInputUnit>[];
+        var inputUnits = <LinkInputUnit>[];
         inputUnits.add(
-          summary2.LinkInputUnit(null, librarySource, false, unit),
+          LinkInputUnit(null, librarySource, false, unit),
         );
 
         for (var directive in unit.directives) {
@@ -315,7 +315,7 @@
             if (partSource == null) {
               var unit = analysisDriver.fsState.unresolvedFile.parse();
               inputUnits.add(
-                summary2.LinkInputUnit(partUri, null, true, unit),
+                LinkInputUnit(partUri, null, true, unit),
               );
               continue;
             }
@@ -326,7 +326,7 @@
               throw ArgumentError('No parsed unit for part $partPath in $path');
             }
             inputUnits.add(
-              summary2.LinkInputUnit(
+              LinkInputUnit(
                 partUri,
                 partSource,
                 false,
@@ -337,11 +337,11 @@
         }
 
         inputLibraries.add(
-          summary2.LinkInputLibrary(librarySource, inputUnits),
+          LinkInputLibrary(librarySource, inputUnits),
         );
       }
 
-      var linkResult = summary2.link(elementFactory, inputLibraries, false);
+      var linkResult = link(elementFactory, inputLibraries, false);
 
       var bundleBuilder = PackageBundleBuilder();
       for (var library in inputLibraries) {
@@ -444,10 +444,10 @@
       sourceFactory,
     );
 
-    elementFactory = summary2.LinkedElementFactory(
+    elementFactory = LinkedElementFactory(
       analysisContext,
       AnalysisSessionImpl(null),
-      summary2.Reference.root(),
+      Reference.root(),
     );
 
     for (var bundle in summaryDataStore.bundles) {
diff --git a/pkg/compiler/lib/src/compiler.dart b/pkg/compiler/lib/src/compiler.dart
index 6cb97b4..05bf1ff 100644
--- a/pkg/compiler/lib/src/compiler.dart
+++ b/pkg/compiler/lib/src/compiler.dart
@@ -230,12 +230,18 @@
         });
       });
 
+  bool get onlyPerformGlobalTypeInference {
+    return options.readClosedWorldUri != null &&
+        options.readDataUri == null &&
+        options.readCodegenUri == null;
+  }
+
   Future runInternal(Uri uri) async {
     clearState();
     assert(uri != null);
     reporter.log('Compiling $uri (${options.buildId})');
 
-    if (options.readClosedWorldUri != null) {
+    if (onlyPerformGlobalTypeInference) {
       ir.Component component =
           await serializationTask.deserializeComponentAndUpdateOptions();
       JsClosedWorld closedWorld =
@@ -250,9 +256,20 @@
       }
       await generateJavaScriptCode(globalTypeInferenceResults);
     } else if (options.readDataUri != null) {
-      GlobalTypeInferenceResults globalTypeInferenceResults =
-          await serializationTask.deserializeGlobalTypeInference(
-              environment, abstractValueStrategy);
+      GlobalTypeInferenceResults globalTypeInferenceResults;
+      if (options.readClosedWorldUri != null) {
+        ir.Component component =
+            await serializationTask.deserializeComponentAndUpdateOptions();
+        JsClosedWorld closedWorld =
+            await serializationTask.deserializeClosedWorld(
+                environment, abstractValueStrategy, component);
+        globalTypeInferenceResults =
+            await serializationTask.deserializeGlobalAnalysis(
+                environment, abstractValueStrategy, component, closedWorld);
+      } else {
+        globalTypeInferenceResults = await serializationTask
+            .deserializeGlobalTypeInference(environment, abstractValueStrategy);
+      }
       if (options.debugGlobalInference) {
         performGlobalTypeInference(globalTypeInferenceResults.closedWorld);
         return;
diff --git a/pkg/compiler/lib/src/dart2js.dart b/pkg/compiler/lib/src/dart2js.dart
index 76191aa..11b8c5d 100644
--- a/pkg/compiler/lib/src/dart2js.dart
+++ b/pkg/compiler/lib/src/dart2js.dart
@@ -723,6 +723,12 @@
       readDataUri ??= Uri.base.resolve('$scriptName.data');
       options.add('${Flags.readData}=${readDataUri}');
       break;
+    case ReadStrategy.fromDataAndClosedWorld:
+      readClosedWorldUri ??= Uri.base.resolve('$scriptName.world');
+      options.add('${Flags.readClosedWorld}=${readClosedWorldUri}');
+      readDataUri ??= Uri.base.resolve('$scriptName.data');
+      options.add('${Flags.readData}=${readDataUri}');
+      break;
     case ReadStrategy.fromCodegen:
       readDataUri ??= Uri.base.resolve('$scriptName.data');
       options.add('${Flags.readData}=${readDataUri}');
@@ -736,6 +742,21 @@
       }
       options.add('${Flags.codegenShards}=$codegenShards');
       break;
+    case ReadStrategy.fromCodegenAndClosedWorld:
+      readClosedWorldUri ??= Uri.base.resolve('$scriptName.world');
+      options.add('${Flags.readClosedWorld}=${readClosedWorldUri}');
+      readDataUri ??= Uri.base.resolve('$scriptName.data');
+      options.add('${Flags.readData}=${readDataUri}');
+      readCodegenUri ??= Uri.base.resolve('$scriptName.code');
+      options.add('${Flags.readCodegen}=${readCodegenUri}');
+      if (codegenShards == null) {
+        fail("Cannot write serialized codegen without setting "
+            "${Flags.codegenShards}.");
+      } else if (codegenShards <= 0) {
+        fail("${Flags.codegenShards} must be a positive integer.");
+      }
+      options.add('${Flags.codegenShards}=$codegenShards');
+      break;
   }
   options.add('--out=$out');
   if (writeStrategy == WriteStrategy.toJs) {
@@ -784,6 +805,15 @@
             fe.relativizeUri(Uri.base, readDataUri, Platform.isWindows);
         summary = 'Data files $input and $dataInput ';
         break;
+      case ReadStrategy.fromDataAndClosedWorld:
+        inputName = 'bytes data';
+        inputSize = inputProvider.dartCharactersRead;
+        String worldInput =
+            fe.relativizeUri(Uri.base, readClosedWorldUri, Platform.isWindows);
+        String dataInput =
+            fe.relativizeUri(Uri.base, readDataUri, Platform.isWindows);
+        summary = 'Data files $input, $worldInput, and $dataInput ';
+        break;
       case ReadStrategy.fromCodegen:
         inputName = 'bytes data';
         inputSize = inputProvider.dartCharactersRead;
@@ -794,6 +824,18 @@
         summary = 'Data files $input, $dataInput and '
             '${codeInput}[0-${codegenShards - 1}] ';
         break;
+      case ReadStrategy.fromCodegenAndClosedWorld:
+        inputName = 'bytes data';
+        inputSize = inputProvider.dartCharactersRead;
+        String worldInput =
+            fe.relativizeUri(Uri.base, readClosedWorldUri, Platform.isWindows);
+        String dataInput =
+            fe.relativizeUri(Uri.base, readDataUri, Platform.isWindows);
+        String codeInput =
+            fe.relativizeUri(Uri.base, readCodegenUri, Platform.isWindows);
+        summary = 'Data files $input, $worldInput, $dataInput and '
+            '${codeInput}[0-${codegenShards - 1}] ';
+        break;
     }
 
     switch (writeStrategy) {
@@ -1314,5 +1356,12 @@
   });
 }
 
-enum ReadStrategy { fromDart, fromClosedWorld, fromData, fromCodegen }
+enum ReadStrategy {
+  fromDart,
+  fromClosedWorld,
+  fromData,
+  fromDataAndClosedWorld,
+  fromCodegen,
+  fromCodegenAndClosedWorld
+}
 enum WriteStrategy { toKernel, toClosedWorld, toData, toCodegen, toJs }
diff --git a/pkg/compiler/lib/src/serialization/task.dart b/pkg/compiler/lib/src/serialization/task.dart
index 32d936c..28d3224 100644
--- a/pkg/compiler/lib/src/serialization/task.dart
+++ b/pkg/compiler/lib/src/serialization/task.dart
@@ -34,6 +34,20 @@
   sink.close();
 }
 
+GlobalTypeInferenceResults deserializeGlobalAnalysisFromSource(
+    CompilerOptions options,
+    DiagnosticReporter reporter,
+    Environment environment,
+    AbstractValueStrategy abstractValueStrategy,
+    ir.Component component,
+    JsClosedWorld newClosedWorld,
+    DataSource source) {
+  InferredData newInferredData =
+      InferredData.readFromDataSource(source, newClosedWorld);
+  return GlobalTypeInferenceResults.readFromDataSource(
+      source, newClosedWorld.elementMap, newClosedWorld, newInferredData);
+}
+
 GlobalTypeInferenceResults deserializeGlobalTypeInferenceResultsFromSource(
     CompilerOptions options,
     DiagnosticReporter reporter,
@@ -185,6 +199,21 @@
     });
   }
 
+  Future<GlobalTypeInferenceResults> deserializeGlobalAnalysis(
+      Environment environment,
+      AbstractValueStrategy abstractValueStrategy,
+      ir.Component component,
+      JsClosedWorld closedWorld) async {
+    return await measureIoSubtask('deserialize data', () async {
+      _reporter.log('Reading data from ${_options.readDataUri}');
+      api.Input<List<int>> dataInput = await _provider
+          .readFromUri(_options.readDataUri, inputKind: api.InputKind.binary);
+      DataSource source = BinarySourceImpl(dataInput.data);
+      return deserializeGlobalAnalysisFromSource(_options, _reporter,
+          environment, abstractValueStrategy, component, closedWorld, source);
+    });
+  }
+
   void serializeCodegen(
       BackendStrategy backendStrategy, CodegenResults codegenResults) {
     GlobalTypeInferenceResults globalTypeInferenceResults =
diff --git a/pkg/compiler/tool/modular_test_suite.dart b/pkg/compiler/tool/modular_test_suite.dart
index 0fe73be..2809f33 100644
--- a/pkg/compiler/tool/modular_test_suite.dart
+++ b/pkg/compiler/tool/modular_test_suite.dart
@@ -53,12 +53,13 @@
         _options,
         new IOPipeline([
           SourceToDillStep(),
-          LegacyGlobalAnalysisStep(),
-          Dart2jsCodegenStep(codeId0),
-          Dart2jsCodegenStep(codeId1),
-          Dart2jsEmissionStep(),
+          ComputeClosedWorldStep(),
+          GlobalAnalysisStep(),
+          LegacyDart2jsCodegenStep(codeId0),
+          LegacyDart2jsCodegenStep(codeId1),
+          LegacyDart2jsEmissionStep(),
           RunD8(),
-        ], cacheSharedModules: true))
+        ], cacheSharedModules: true)),
   ]);
 }
 
@@ -326,22 +327,26 @@
   }
 }
 
-// Step that invokes the dart2js global analysis on the main module by providing
-// the .dill files of all transitive modules as inputs.
-// NOTE: This is the legacy combined closed world computation alongside global
-// inference.
-class LegacyGlobalAnalysisStep implements IOModularStep {
+// Step that invokes the dart2js code generation on the main module given the
+// results of the global analysis step and produces one shard of the codegen
+// output.
+class Dart2jsCodegenStep implements IOModularStep {
+  final ShardDataId codeId;
+
+  Dart2jsCodegenStep(this.codeId);
+
   @override
-  List<DataId> get resultData => const [globalDataId, updatedDillId];
+  List<DataId> get resultData => [codeId];
 
   @override
   bool get needsSources => false;
 
   @override
-  List<DataId> get dependencyDataNeeded => const [dillId];
+  List<DataId> get dependencyDataNeeded => const [];
 
   @override
-  List<DataId> get moduleDataNeeded => const [dillId];
+  List<DataId> get moduleDataNeeded =>
+      const [updatedDillId, closedWorldId, globalDataId];
 
   @override
   bool get onlyOnMain => true;
@@ -349,20 +354,18 @@
   @override
   Future<void> execute(Module module, Uri root, ModuleDataToRelativeUri toUri,
       List<String> flags) async {
-    if (_options.verbose) print("\nstep: dart2js global analysis on $module");
-    Set<Module> transitiveDependencies = computeTransitiveDependencies(module);
-    Iterable<String> dillDependencies =
-        transitiveDependencies.map((m) => '${toUri(m, dillId)}');
+    if (_options.verbose) print("\nstep: dart2js backend on $module");
     List<String> args = [
       '--packages=${sdkRoot.toFilePath()}/.packages',
       _dart2jsScript,
-      // TODO(sigmund): remove this dependency on libraries.json
       if (_options.useSdk) '--libraries-spec=$_librarySpecForSnapshot',
-      '${toUri(module, dillId)}',
+      '${toUri(module, updatedDillId)}',
       for (String flag in flags) '--enable-experiment=$flag',
-      '${Flags.dillDependencies}=${dillDependencies.join(',')}',
-      '${Flags.writeData}=${toUri(module, globalDataId)}',
-      '--out=${toUri(module, updatedDillId)}',
+      '${Flags.readClosedWorld}=${toUri(module, closedWorldId)}',
+      '${Flags.readData}=${toUri(module, globalDataId)}',
+      '${Flags.writeCodegen}=${toUri(module, codeId.dataId)}',
+      '${Flags.codegenShard}=${codeId.shard}',
+      '${Flags.codegenShards}=${codeId.dataId.shards}',
     ];
     var result =
         await _runProcess(Platform.resolvedExecutable, args, root.toFilePath());
@@ -372,18 +375,65 @@
 
   @override
   void notifyCached(Module module) {
-    if (_options.verbose)
-      print("\ncached step: dart2js global analysis on $module");
+    if (_options.verbose) print("cached step: dart2js backend on $module");
+  }
+}
+
+// Step that invokes the dart2js codegen enqueuer and emitter on the main module
+// given the results of the global analysis step and codegen shards.
+class Dart2jsEmissionStep implements IOModularStep {
+  @override
+  List<DataId> get resultData => const [jsId];
+
+  @override
+  bool get needsSources => false;
+
+  @override
+  List<DataId> get dependencyDataNeeded => const [];
+
+  @override
+  List<DataId> get moduleDataNeeded =>
+      const [updatedDillId, closedWorldId, globalDataId, codeId0, codeId1];
+
+  @override
+  bool get onlyOnMain => true;
+
+  @override
+  Future<void> execute(Module module, Uri root, ModuleDataToRelativeUri toUri,
+      List<String> flags) async {
+    if (_options.verbose) print("step: dart2js backend on $module");
+    List<String> args = [
+      '--packages=${sdkRoot.toFilePath()}/.packages',
+      _dart2jsScript,
+      if (_options.useSdk) '--libraries-spec=$_librarySpecForSnapshot',
+      '${toUri(module, updatedDillId)}',
+      for (String flag in flags) '${Flags.enableLanguageExperiments}=$flag',
+      '${Flags.readClosedWorld}=${toUri(module, closedWorldId)}',
+      '${Flags.readData}=${toUri(module, globalDataId)}',
+      '${Flags.readCodegen}=${toUri(module, codeId)}',
+      '${Flags.codegenShards}=${codeId.shards}',
+      '--out=${toUri(module, jsId)}',
+    ];
+    var result =
+        await _runProcess(Platform.resolvedExecutable, args, root.toFilePath());
+
+    _checkExitCode(result, this, module);
+  }
+
+  @override
+  void notifyCached(Module module) {
+    if (_options.verbose) print("\ncached step: dart2js backend on $module");
   }
 }
 
 // Step that invokes the dart2js code generation on the main module given the
 // results of the global analysis step and produces one shard of the codegen
 // output.
-class Dart2jsCodegenStep implements IOModularStep {
+// Note: Legacy.
+class LegacyDart2jsCodegenStep implements IOModularStep {
   final ShardDataId codeId;
 
-  Dart2jsCodegenStep(this.codeId);
+  LegacyDart2jsCodegenStep(this.codeId);
 
   @override
   List<DataId> get resultData => [codeId];
@@ -429,7 +479,8 @@
 
 // Step that invokes the dart2js codegen enqueuer and emitter on the main module
 // given the results of the global analysis step and codegen shards.
-class Dart2jsEmissionStep implements IOModularStep {
+// Note: Legacy.
+class LegacyDart2jsEmissionStep implements IOModularStep {
   @override
   List<DataId> get resultData => const [jsId];
 
diff --git a/pkg/front_end/lib/src/api_prototype/lowering_predicates.dart b/pkg/front_end/lib/src/api_prototype/lowering_predicates.dart
index 1d521a5..28122d7 100644
--- a/pkg/front_end/lib/src/api_prototype/lowering_predicates.dart
+++ b/pkg/front_end/lib/src/api_prototype/lowering_predicates.dart
@@ -4,8 +4,7 @@
 
 import 'package:kernel/ast.dart';
 import '../fasta/kernel/late_lowering.dart';
-
-// TODO(johnniwinther): Add support for recognizing late lowered locals?
+import '../fasta/source/source_extension_builder.dart' show extensionThisName;
 
 /// Returns `true` if [node] is the field holding the value of a lowered late
 /// field.
@@ -147,29 +146,30 @@
 /// where '#local' is the local variable holding that value.
 ///
 /// The default value of this variable is `null`.
-// TODO(johnniwinther): Enable these if the name of late locals is changed
-//  to  '${lateLocalPrefix}${name}'. See
-// backends can benefit from identifying late locals.
-/*bool isLateLoweredLocal(VariableDeclaration node) {
-  return node.name != null && isLateLoweredLocalName(node.name);
+bool isLateLoweredLocal(VariableDeclaration node) {
+  assert(node.isLowered ||
+      node.name == null ||
+      !isLateLoweredLocalName(node.name));
+  return node.isLowered && isLateLoweredLocalName(node.name);
 }
 
 /// Returns `true` if [name] is the name of a local variable holding the value
 /// of a lowered late variable.
 bool isLateLoweredLocalName(String name) {
-  return name.startsWith(lateLocalPrefix) &&
-      !(name.endsWith(lateIsSetSuffix) ||
-          name.endsWith(lateLocalGetterSuffix) ||
-          name.endsWith(lateLocalSetterSuffix));
+  return name != extensionThisName &&
+      name.startsWith(lateLocalPrefix) &&
+      !name.endsWith(lateIsSetSuffix) &&
+      !name.endsWith(lateLocalGetterSuffix) &&
+      !name.endsWith(lateLocalSetterSuffix);
 }
 
 /// Returns the name of the original late local variable from the [name] of the
 /// local variable holding the value of the lowered late variable.
 ///
 /// This method assumes that `isLateLoweredLocalName(name)` is `true`.
-String extractLateLoweredLocalNameFrom(String name) {
+String extractLocalNameFromLateLoweredLocal(String name) {
   return name.substring(lateLocalPrefix.length);
-}*/
+}
 
 /// Returns `true` if [node] is the local variable holding the marker for
 /// whether a lowered late local variable has been set or not.
@@ -192,12 +192,15 @@
 ///
 /// The default value of this variable is `false`.
 bool isLateLoweredIsSetLocal(VariableDeclaration node) {
-  return node.name != null && isLateLoweredIsSetName(node.name);
+  assert(node.isLowered ||
+      node.name == null ||
+      !isLateLoweredIsSetLocalName(node.name));
+  return node.isLowered && isLateLoweredIsSetLocalName(node.name);
 }
 
 /// Returns `true` if [name] is the name of a local variable holding the marker
 /// for whether a lowered late local variable has been set or not.
-bool isLateLoweredIsSetName(String name) {
+bool isLateLoweredIsSetLocalName(String name) {
   return name.startsWith(lateLocalPrefix) && name.endsWith(lateIsSetSuffix);
 }
 
@@ -228,12 +231,15 @@
 ///
 /// where '#local#get' is the local function for reading the variable.
 bool isLateLoweredLocalGetter(VariableDeclaration node) {
-  return node.name != null && isLateLoweredGetterName(node.name);
+  assert(node.isLowered ||
+      node.name == null ||
+      !isLateLoweredLocalGetterName(node.name));
+  return node.isLowered && isLateLoweredLocalGetterName(node.name);
 }
 
 /// Returns `true` if [name] is the name of the local variable for the local
 /// function for reading the value of a lowered late variable.
-bool isLateLoweredGetterName(String name) {
+bool isLateLoweredLocalGetterName(String name) {
   return name.startsWith(lateLocalPrefix) &&
       name.endsWith(lateLocalGetterSuffix);
 }
@@ -266,12 +272,15 @@
 /// where '#local#set' is the local function for setting the value of the
 /// variable.
 bool isLateLoweredLocalSetter(VariableDeclaration node) {
-  return node.name != null && isLateLoweredSetterName(node.name);
+  assert(node.isLowered ||
+      node.name == null ||
+      !isLateLoweredLocalSetterName(node.name));
+  return node.isLowered && isLateLoweredLocalSetterName(node.name);
 }
 
 /// Returns `true` if [name] is the name of the local variable for the local
 /// function for setting the value of a lowered late variable.
-bool isLateLoweredSetterName(String name) {
+bool isLateLoweredLocalSetterName(String name) {
   return name.startsWith(lateLocalPrefix) &&
       name.endsWith(lateLocalSetterSuffix);
 }
@@ -285,3 +294,84 @@
   return name.substring(
       lateLocalPrefix.length, name.length - lateLocalSetterSuffix.length);
 }
+
+/// Returns `true` if [node] is the synthetic parameter holding the `this` value
+/// in the encoding of extension instance members.
+///
+/// For instance
+///
+///     extension Extension on int {
+///        int method() => this;
+///     }
+///
+/// is encoded as
+///
+///     int Extension|method(int #this) => #this;
+///
+/// where '#this' is the synthetic "extension this" parameter.
+bool isExtensionThis(VariableDeclaration node) {
+  assert(
+      node.isLowered || node.name == null || !isExtensionThisName(node.name));
+  return node.isLowered && isExtensionThisName(node.name);
+}
+
+/// Returns `true` if [name] is the name of the synthetic parameter holding the
+/// `this` value in the encoding of extension instance members.
+bool isExtensionThisName(String name) {
+  return name == extensionThisName;
+}
+
+/// Returns the name of the original variable from the [name] of the synthetic
+/// parameter holding the `this` value in the encoding of extension instance
+/// members.
+///
+/// This method assumes that `isExtensionThisName(name)` is `true`.
+String extractLocalNameForExtensionThis(String name) {
+  return 'this';
+}
+
+/// Returns the original name of the variable [node].
+///
+/// If [node] is a lowered variable then the name before lowering is returned.
+/// Otherwise the name of the variable itself is returned.
+///
+/// Note that the name can be `null` in case of a synthetic variable created
+/// for instance for encoding of `?.`.
+String extractLocalNameFromVariable(VariableDeclaration node) {
+  if (node.isLowered) {
+    String name = _extractLocalName(node.name);
+    if (name == null) {
+      throw new UnsupportedError("Unrecognized lowered local $node");
+    }
+    return name;
+  }
+  return node.name;
+}
+
+/// Returns the original name of a variable by the given [name].
+///
+/// If [name] is the name of a lowered variable then the name before lowering is
+/// returned. Otherwise the name of the variable itself is returned.
+///
+/// This assumed that [name] is non-null.
+String extractLocalName(String name) {
+  return _extractLocalName(name) ?? name;
+}
+
+/// Returns the original name of a lowered variable by the given [name].
+///
+/// If [name] doesn't correspond to a lowered name `null` is returned.
+String _extractLocalName(String name) {
+  if (isExtensionThisName(name)) {
+    return extractLocalNameForExtensionThis(name);
+  } else if (isLateLoweredLocalName(name)) {
+    return extractLocalNameFromLateLoweredLocal(name);
+  } else if (isLateLoweredLocalGetterName(name)) {
+    return extractLocalNameFromLateLoweredGetter(name);
+  } else if (isLateLoweredLocalSetterName(name)) {
+    return extractLocalNameFromLateLoweredSetter(name);
+  } else if (isLateLoweredIsSetLocalName(name)) {
+    return extractLocalNameFromLateLoweredIsSet(name);
+  }
+  return null;
+}
diff --git a/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart b/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart
index ff976c0..626190e 100644
--- a/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart
@@ -74,9 +74,11 @@
   /// True if the initializer was declared by the programmer.
   bool hasDeclaredInitializer = false;
 
+  final bool isExtensionThis;
+
   FormalParameterBuilder(this.metadata, this.modifiers, this.type, this.name,
       LibraryBuilder compilationUnit, int charOffset,
-      [Uri fileUri])
+      {Uri fileUri, this.isExtensionThis: false})
       : super(compilationUnit, charOffset, fileUri);
 
   String get debugName => "FormalParameterBuilder";
@@ -122,7 +124,8 @@
           isFieldFormal: isInitializingFormal,
           isCovariant: isCovariant,
           isRequired: isNamedRequired,
-          hasDeclaredInitializer: hasDeclaredInitializer)
+          hasDeclaredInitializer: hasDeclaredInitializer,
+          isLowered: isExtensionThis)
         ..fileOffset = charOffset;
     }
     return variable;
@@ -131,8 +134,9 @@
   FormalParameterBuilder clone(List<TypeBuilder> newTypes) {
     // TODO(dmitryas):  It's not clear how [metadata] is used currently, and
     // how it should be cloned.  Consider cloning it instead of reusing it.
-    return new FormalParameterBuilder(metadata, modifiers,
-        type?.clone(newTypes), name, parent, charOffset, fileUri)
+    return new FormalParameterBuilder(
+        metadata, modifiers, type?.clone(newTypes), name, parent, charOffset,
+        fileUri: fileUri, isExtensionThis: isExtensionThis)
       ..kind = kind;
   }
 
@@ -147,7 +151,8 @@
             name,
             null,
             charOffset,
-            fileUri)
+            fileUri: fileUri,
+            isExtensionThis: isExtensionThis)
           ..parent = parent
           ..variable = variable);
   }
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 f4962fb..4857e5e 100644
--- a/pkg/front_end/lib/src/fasta/builder/procedure_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/procedure_builder.dart
@@ -482,7 +482,9 @@
         VariableDeclaration parameter, DartType type,
         {bool isOptional}) {
       VariableDeclaration newParameter = new VariableDeclaration(parameter.name,
-          type: type, isFinal: parameter.isFinal)
+          type: type,
+          isFinal: parameter.isFinal,
+          isLowered: parameter.isLowered)
         ..fileOffset = parameter.fileOffset;
       _extensionTearOffParameterMap[parameter] = newParameter;
       return newParameter;
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 8971d25..ede2b69 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -1394,7 +1394,8 @@
     for (int i = 0; i < parameters.positionalParameters.length; i++) {
       VariableDeclaration formal = parameters.positionalParameters[i];
       formals[i] = new FormalParameterBuilder(
-          null, 0, null, formal.name, libraryBuilder, formal.fileOffset, uri)
+          null, 0, null, formal.name, libraryBuilder, formal.fileOffset,
+          fileUri: uri)
         ..variable = formal;
     }
     enterLocalScope(
@@ -3567,7 +3568,8 @@
       }
     } else {
       parameter = new FormalParameterBuilder(null, modifiers, type?.builder,
-          name?.name, libraryBuilder, offsetForToken(nameToken), uri)
+          name?.name, libraryBuilder, offsetForToken(nameToken),
+          fileUri: uri)
         ..hasDeclaredInitializer = (initializerStart != null);
     }
     VariableDeclaration variable = parameter.build(
diff --git a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
index 89baa79..76afeea 100644
--- a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
@@ -5807,7 +5807,8 @@
         isSetVariable = new VariableDeclaration(
             late_lowering.computeLateLocalIsSetName(node.name),
             initializer: new BoolLiteral(false)..fileOffset = fileOffset,
-            type: inferrer.coreTypes.boolRawType(inferrer.library.nonNullable))
+            type: inferrer.coreTypes.boolRawType(inferrer.library.nonNullable),
+            isLowered: true)
           ..fileOffset = fileOffset;
         result.add(isSetVariable);
       }
@@ -5828,7 +5829,8 @@
           new VariableSet(isSetVariable, value);
 
       VariableDeclaration getVariable = new VariableDeclaration(
-          late_lowering.computeLateLocalGetterName(node.name))
+          late_lowering.computeLateLocalGetterName(node.name),
+          isLowered: true)
         ..fileOffset = fileOffset;
       FunctionDeclaration getter = new FunctionDeclaration(
           getVariable,
@@ -5875,7 +5877,8 @@
         node.isLateFinalWithoutInitializer =
             node.isFinal && node.initializer == null;
         VariableDeclaration setVariable = new VariableDeclaration(
-            late_lowering.computeLateLocalSetterName(node.name))
+            late_lowering.computeLateLocalSetterName(node.name),
+            isLowered: true)
           ..fileOffset = fileOffset;
         VariableDeclaration setterParameter =
             new VariableDeclaration(null, type: node.type)
@@ -5927,6 +5930,7 @@
       }
       node.type = inferrer.computeNullable(node.type);
       node.lateName = node.name;
+      node.isLowered = true;
       node.name = late_lowering.computeLateLocalName(node.name);
 
       return new StatementInferenceResult.multiple(node.fileOffset, result);
diff --git a/pkg/front_end/lib/src/fasta/kernel/internal_ast.dart b/pkg/front_end/lib/src/fasta/kernel/internal_ast.dart
index b7c839b..9504a6e 100644
--- a/pkg/front_end/lib/src/fasta/kernel/internal_ast.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/internal_ast.dart
@@ -1428,6 +1428,7 @@
       bool isLocalFunction: false,
       bool isLate: false,
       bool isRequired: false,
+      bool isLowered: false,
       this.isStaticLate: false})
       : isImplicitlyTyped = type == null,
         isLocalFunction = isLocalFunction,
@@ -1439,7 +1440,8 @@
             isFieldFormal: isFieldFormal,
             isCovariant: isCovariant,
             isLate: isLate,
-            isRequired: isRequired);
+            isRequired: isRequired,
+            isLowered: isLowered);
 
   VariableDeclarationImpl.forEffect(Expression initializer)
       : forSyntheticToken = false,
diff --git a/pkg/front_end/lib/src/fasta/kernel/late_lowering.dart b/pkg/front_end/lib/src/fasta/kernel/late_lowering.dart
index ce8d986..02ee9f2 100644
--- a/pkg/front_end/lib/src/fasta/kernel/late_lowering.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/late_lowering.dart
@@ -593,9 +593,7 @@
 /// Returns the name used for the variable that holds the value of a late
 /// lowered local by the given [name].
 String computeLateLocalName(String name) {
-  // TODO(johnniwinther): Change this to '${lateLocalPrefix}${name}' if
-  // backends can benefit from identifying late locals.
-  return name;
+  return '${lateLocalPrefix}$name';
 }
 
 /// Returns the name used for the 'isSet' variable of a late lowered local by
diff --git a/pkg/front_end/lib/src/fasta/kernel/type_algorithms.dart b/pkg/front_end/lib/src/fasta/kernel/type_algorithms.dart
index e93756e..48a5c3f 100644
--- a/pkg/front_end/lib/src/fasta/kernel/type_algorithms.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/type_algorithms.dart
@@ -351,7 +351,8 @@
               formal.name,
               formal.parent,
               formal.charOffset,
-              formal.fileUri);
+              fileUri: formal.fileUri,
+              isExtensionThis: formal.isExtensionThis);
           changed = true;
         } else {
           formals[i] = formal;
diff --git a/pkg/front_end/lib/src/fasta/kernel/type_builder_computer.dart b/pkg/front_end/lib/src/fasta/kernel/type_builder_computer.dart
index 43402ad..ee11a13 100644
--- a/pkg/front_end/lib/src/fasta/kernel/type_builder_computer.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/type_builder_computer.dart
@@ -163,15 +163,25 @@
       if (i >= node.requiredParameterCount) {
         kind = FormalParameterKind.optionalPositional;
       }
-      formals[i] =
-          new FormalParameterBuilder(null, 0, type, null, null, -1, null)
-            ..kind = kind;
+      formals[i] = new FormalParameterBuilder(
+          /* metadata = */ null,
+          /* modifiers = */ 0,
+          type,
+          /* name = */ null,
+          /* compilationUnit = */ null,
+          /* charOffset = */ TreeNode.noOffset)
+        ..kind = kind;
     }
     for (int i = 0; i < namedParameters.length; i++) {
       NamedType parameter = namedParameters[i];
       TypeBuilder type = parameter.type.accept(this);
       formals[i + positionalParameters.length] = new FormalParameterBuilder(
-          null, 0, type, parameter.name, null, -1, null)
+          /* metadata = */ null,
+          /* modifiers = */ 0,
+          type,
+          parameter.name,
+          /* compilationUnit = */ null,
+          /* charOffset = */ TreeNode.noOffset)
         ..kind = FormalParameterKind.optionalNamed;
     }
     return new FunctionTypeBuilder(
@@ -180,7 +190,7 @@
         formals,
         new NullabilityBuilder.fromNullability(node.nullability),
         /* fileUri = */ null,
-        /* charOffset = */ null);
+        /* charOffset = */ TreeNode.noOffset);
   }
 
   TypeBuilder visitTypeParameterType(TypeParameterType node) {
diff --git a/pkg/front_end/lib/src/fasta/source/outline_builder.dart b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
index 07a4d49..98a5907 100644
--- a/pkg/front_end/lib/src/fasta/source/outline_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
@@ -80,6 +80,8 @@
 
 import '../problems.dart' show unhandled;
 
+import 'source_extension_builder.dart';
+
 import 'source_library_builder.dart'
     show
         TypeParameterScopeBuilder,
@@ -1170,7 +1172,8 @@
         libraryBuilder.boundlessTypeVariables.addAll(unboundTypeVariables);
       }
       synthesizedFormals.add(new FormalParameterBuilder(
-          null, finalMask, thisType, "#this", null, charOffset, uri));
+          null, finalMask, thisType, extensionThisName, null, charOffset,
+          fileUri: uri, isExtensionThis: true));
       if (formals != null) {
         synthesizedFormals.addAll(formals);
       }
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 f3c9943..28b3fb8 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
@@ -35,6 +35,8 @@
 
 import 'source_library_builder.dart';
 
+const String extensionThisName = '#this';
+
 class SourceExtensionBuilder extends ExtensionBuilderImpl {
   final Extension _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 3ee8253..fdc6b3a 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
@@ -2587,7 +2587,8 @@
       modifiers |= initializingFormalMask;
     }
     FormalParameterBuilder formal = new FormalParameterBuilder(
-        metadata, modifiers, type, name, this, charOffset, fileUri)
+        metadata, modifiers, type, name, this, charOffset,
+        fileUri: fileUri)
       ..initializerToken = initializerToken
       ..hasDeclaredInitializer = (initializerToken != null);
     return formal;
diff --git a/pkg/front_end/test/predicates/data/extension.dart b/pkg/front_end/test/predicates/data/extension.dart
new file mode 100644
index 0000000..ac1dd00
--- /dev/null
+++ b/pkg/front_end/test/predicates/data/extension.dart
@@ -0,0 +1,17 @@
+// Copyright (c) 2020, 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 on int {
+  int /*extensionThis*/ instanceMethod() => this;
+
+  int get /*extensionThis*/ instanceGetter => this;
+
+  void set /*extensionThis*/ instanceSetter(int value) {}
+
+  static int staticMethod() => 42;
+
+  static int get staticGetter => 42;
+
+  static void set staticSetter(int value) {}
+}
diff --git a/pkg/front_end/test/predicates/data/late.dart b/pkg/front_end/test/predicates/data/late.dart
index ebf80a8..55cfbb6 100644
--- a/pkg/front_end/test/predicates/data/late.dart
+++ b/pkg/front_end/test/predicates/data/late.dart
@@ -122,51 +122,63 @@
 }
 
 method() {
-  late int /*
+  late int
+      /*
    lateIsSetLocal,
+   lateLocal,
    lateLocalGetter,
    lateLocalSetter
   */
       localNonNullableWithoutInitializer;
   late final int
       /*
-   lateIsSetLocal,
-   lateLocalGetter,
-   lateLocalSetter
-  */
+       lateIsSetLocal,
+       lateLocal,
+       lateLocalGetter,
+       lateLocalSetter
+      */
       finalLocalNonNullableWithoutInitializer;
-  late int? /*
+  late int?
+      /*
    lateIsSetLocal,
+   lateLocal,
    lateLocalGetter,
    lateLocalSetter
   */
       localNullableWithoutInitializer;
   late final int?
       /*
-   lateIsSetLocal,
-   lateLocalGetter,
-   lateLocalSetter
-  */
+       lateIsSetLocal,
+       lateLocal,
+       lateLocalGetter,
+       lateLocalSetter
+      */
       finalLocalNullableWithoutInitializer;
-  late int /*
+  late int
+      /*
    lateIsSetLocal,
+   lateLocal,
    lateLocalGetter,
    lateLocalSetter
   */
       localNonNullableWithInitializer = 0;
   late final int /*
    lateIsSetLocal,
+   lateLocal,
    lateLocalGetter
   */
       finalLocalNonNullableWithInitializer = 0;
-  late int? /*
+  late int?
+      /*
    lateIsSetLocal,
+   lateLocal,
    lateLocalGetter,
    lateLocalSetter
   */
       localNullableWithInitializer = 0;
   late final int? /*
    lateIsSetLocal,
+   lateLocal,
    lateLocalGetter
   */
       finalLocalNullableWithInitializer = 0;
diff --git a/pkg/front_end/test/predicates/predicate_test.dart b/pkg/front_end/test/predicates/predicate_test.dart
index 2f45e4e..f62f803 100644
--- a/pkg/front_end/test/predicates/predicate_test.dart
+++ b/pkg/front_end/test/predicates/predicate_test.dart
@@ -41,6 +41,8 @@
   static const String lateIsSetLocal = 'lateIsSetLocal';
   static const String lateLocalGetter = 'lateLocalGetter';
   static const String lateLocalSetter = 'lateLocalSetter';
+
+  static const String extensionThis = 'extensionThis';
 }
 
 class PredicateDataComputer extends DataComputer<Features> {
@@ -129,7 +131,10 @@
   void visitVariableDeclaration(VariableDeclaration node) {
     String name;
     String tag;
-    if (isLateLoweredIsSetLocal(node)) {
+    if (isLateLoweredLocal(node)) {
+      name = extractLocalNameFromLateLoweredLocal(node.name);
+      tag = Tags.lateLocal;
+    } else if (isLateLoweredIsSetLocal(node)) {
       name = extractLocalNameFromLateLoweredIsSet(node.name);
       tag = Tags.lateIsSetLocal;
     } else if (isLateLoweredLocalGetter(node)) {
@@ -138,6 +143,9 @@
     } else if (isLateLoweredLocalSetter(node)) {
       name = extractLocalNameFromLateLoweredSetter(node.name);
       tag = Tags.lateLocalSetter;
+    } else if (isExtensionThis(node)) {
+      name = extractLocalNameForExtensionThis(node.name);
+      tag = Tags.extensionThis;
     } else if (node.name != null) {
       name = node.name;
     }
@@ -152,4 +160,16 @@
     }
     super.visitVariableDeclaration(node);
   }
+
+  @override
+  ActualData<Features> mergeData(
+      ActualData<Features> value1, ActualData<Features> value2) {
+    if ('${value1.value}' == '${value2.value}') {
+      // The extension this parameter is seen twice in the extension method
+      // and the corresponding tearoff. The features are identical, though, so
+      // we just use the first.
+      return value1;
+    }
+    return null;
+  }
 }
diff --git a/pkg/front_end/testcases/extensions/ambiguous.dart.outline.expect b/pkg/front_end/testcases/extensions/ambiguous.dart.outline.expect
index 5ee4ba9..8ac03b2 100644
--- a/pkg/front_end/testcases/extensions/ambiguous.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/ambiguous.dart.outline.expect
@@ -36,37 +36,37 @@
   set setter = self::B|set#setter;
   set property = self::B|set#property;
 }
-static method A|method(final self::C* #this) → void
+static method A|method(lowered final self::C* #this) → void
   ;
-static method A|get#method(final self::C* #this) → () →* void
+static method A|get#method(lowered final self::C* #this) → () →* void
   return () → void => self::A|method(#this);
-static method A|get#getter(final self::C* #this) → core::int*
+static method A|get#getter(lowered final self::C* #this) → core::int*
   ;
-static method A|set#setter(final self::C* #this, core::int* value) → void
+static method A|set#setter(lowered final self::C* #this, core::int* value) → void
   ;
-static method A|get#property(final self::C* #this) → core::int*
+static method A|get#property(lowered final self::C* #this) → core::int*
   ;
-static method A|+(final self::C* #this, core::int* i) → core::int*
+static method A|+(lowered final self::C* #this, core::int* i) → core::int*
   ;
-static method A|unary-(final self::C* #this) → core::int*
+static method A|unary-(lowered final self::C* #this) → core::int*
   ;
-static method A|[](final self::C* #this, core::int* i) → core::int*
+static method A|[](lowered final self::C* #this, core::int* i) → core::int*
   ;
-static method B|method(final self::C* #this) → void
+static method B|method(lowered final self::C* #this) → void
   ;
-static method B|get#method(final self::C* #this) → () →* void
+static method B|get#method(lowered final self::C* #this) → () →* void
   return () → void => self::B|method(#this);
-static method B|get#getter(final self::C* #this) → core::int*
+static method B|get#getter(lowered final self::C* #this) → core::int*
   ;
-static method B|set#setter(final self::C* #this, core::int* value) → void
+static method B|set#setter(lowered final self::C* #this, core::int* value) → void
   ;
-static method B|set#property(final self::C* #this, core::int* value) → void
+static method B|set#property(lowered final self::C* #this, core::int* value) → void
   ;
-static method B|+(final self::C* #this, core::int* i) → core::int*
+static method B|+(lowered final self::C* #this, core::int* i) → core::int*
   ;
-static method B|unary-(final self::C* #this) → core::int*
+static method B|unary-(lowered final self::C* #this) → core::int*
   ;
-static method B|[]=(final self::C* #this, core::int* i, core::int* j) → void
+static method B|[]=(lowered final self::C* #this, core::int* i, core::int* j) → void
   ;
 static method errors(self::C* c) → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/ambiguous.dart.strong.expect b/pkg/front_end/testcases/extensions/ambiguous.dart.strong.expect
index a54a55b..3797b04 100644
--- a/pkg/front_end/testcases/extensions/ambiguous.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/ambiguous.dart.strong.expect
@@ -184,32 +184,32 @@
   set setter = self::B|set#setter;
   set property = self::B|set#property;
 }
-static method A|method(final self::C* #this) → void {}
-static method A|get#method(final self::C* #this) → () →* void
+static method A|method(lowered final self::C* #this) → void {}
+static method A|get#method(lowered final self::C* #this) → () →* void
   return () → void => self::A|method(#this);
-static method A|get#getter(final self::C* #this) → core::int*
+static method A|get#getter(lowered final self::C* #this) → core::int*
   return 42;
-static method A|set#setter(final self::C* #this, core::int* value) → void {}
-static method A|get#property(final self::C* #this) → core::int*
+static method A|set#setter(lowered final self::C* #this, core::int* value) → void {}
+static method A|get#property(lowered final self::C* #this) → core::int*
   return 42;
-static method A|+(final self::C* #this, core::int* i) → core::int*
+static method A|+(lowered final self::C* #this, core::int* i) → core::int*
   return i;
-static method A|unary-(final self::C* #this) → core::int*
+static method A|unary-(lowered final self::C* #this) → core::int*
   return 0;
-static method A|[](final self::C* #this, core::int* i) → core::int*
+static method A|[](lowered final self::C* #this, core::int* i) → core::int*
   return i;
-static method B|method(final self::C* #this) → void {}
-static method B|get#method(final self::C* #this) → () →* void
+static method B|method(lowered final self::C* #this) → void {}
+static method B|get#method(lowered final self::C* #this) → () →* void
   return () → void => self::B|method(#this);
-static method B|get#getter(final self::C* #this) → core::int*
+static method B|get#getter(lowered final self::C* #this) → core::int*
   return 42;
-static method B|set#setter(final self::C* #this, core::int* value) → void {}
-static method B|set#property(final self::C* #this, core::int* value) → void {}
-static method B|+(final self::C* #this, core::int* i) → core::int*
+static method B|set#setter(lowered final self::C* #this, core::int* value) → void {}
+static method B|set#property(lowered final self::C* #this, core::int* value) → void {}
+static method B|+(lowered final self::C* #this, core::int* i) → core::int*
   return i;
-static method B|unary-(final self::C* #this) → core::int*
+static method B|unary-(lowered final self::C* #this) → core::int*
   return 0;
-static method B|[]=(final self::C* #this, core::int* i, core::int* j) → void {}
+static method B|[]=(lowered final self::C* #this, core::int* i, core::int* j) → void {}
 static method errors(self::C* c) → dynamic {
   invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:28:5: Error: The method 'method' is defined in multiple extensions for 'C' and neither is more specific.
  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
diff --git a/pkg/front_end/testcases/extensions/ambiguous.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/ambiguous.dart.strong.transformed.expect
index a54a55b..3797b04 100644
--- a/pkg/front_end/testcases/extensions/ambiguous.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/ambiguous.dart.strong.transformed.expect
@@ -184,32 +184,32 @@
   set setter = self::B|set#setter;
   set property = self::B|set#property;
 }
-static method A|method(final self::C* #this) → void {}
-static method A|get#method(final self::C* #this) → () →* void
+static method A|method(lowered final self::C* #this) → void {}
+static method A|get#method(lowered final self::C* #this) → () →* void
   return () → void => self::A|method(#this);
-static method A|get#getter(final self::C* #this) → core::int*
+static method A|get#getter(lowered final self::C* #this) → core::int*
   return 42;
-static method A|set#setter(final self::C* #this, core::int* value) → void {}
-static method A|get#property(final self::C* #this) → core::int*
+static method A|set#setter(lowered final self::C* #this, core::int* value) → void {}
+static method A|get#property(lowered final self::C* #this) → core::int*
   return 42;
-static method A|+(final self::C* #this, core::int* i) → core::int*
+static method A|+(lowered final self::C* #this, core::int* i) → core::int*
   return i;
-static method A|unary-(final self::C* #this) → core::int*
+static method A|unary-(lowered final self::C* #this) → core::int*
   return 0;
-static method A|[](final self::C* #this, core::int* i) → core::int*
+static method A|[](lowered final self::C* #this, core::int* i) → core::int*
   return i;
-static method B|method(final self::C* #this) → void {}
-static method B|get#method(final self::C* #this) → () →* void
+static method B|method(lowered final self::C* #this) → void {}
+static method B|get#method(lowered final self::C* #this) → () →* void
   return () → void => self::B|method(#this);
-static method B|get#getter(final self::C* #this) → core::int*
+static method B|get#getter(lowered final self::C* #this) → core::int*
   return 42;
-static method B|set#setter(final self::C* #this, core::int* value) → void {}
-static method B|set#property(final self::C* #this, core::int* value) → void {}
-static method B|+(final self::C* #this, core::int* i) → core::int*
+static method B|set#setter(lowered final self::C* #this, core::int* value) → void {}
+static method B|set#property(lowered final self::C* #this, core::int* value) → void {}
+static method B|+(lowered final self::C* #this, core::int* i) → core::int*
   return i;
-static method B|unary-(final self::C* #this) → core::int*
+static method B|unary-(lowered final self::C* #this) → core::int*
   return 0;
-static method B|[]=(final self::C* #this, core::int* i, core::int* j) → void {}
+static method B|[]=(lowered final self::C* #this, core::int* i, core::int* j) → void {}
 static method errors(self::C* c) → dynamic {
   invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:28:5: Error: The method 'method' is defined in multiple extensions for 'C' and neither is more specific.
  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
diff --git a/pkg/front_end/testcases/extensions/annotations.dart.outline.expect b/pkg/front_end/testcases/extensions/annotations.dart.outline.expect
index ff75d1b..8a6129e 100644
--- a/pkg/front_end/testcases/extensions/annotations.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/annotations.dart.outline.expect
@@ -28,9 +28,9 @@
   static method extensionStaticMethod = self::Extension|extensionStaticMethod;
 }
 @core::pragma::_("dart2js:noInline")
-static method Extension|extensionInstanceMethod(final self::Class* #this) → dynamic
+static method Extension|extensionInstanceMethod(lowered final self::Class* #this) → dynamic
   ;
-static method Extension|get#extensionInstanceMethod(final self::Class* #this) → () →* dynamic
+static method Extension|get#extensionInstanceMethod(lowered final self::Class* #this) → () →* dynamic
   return () → dynamic => self::Extension|extensionInstanceMethod(#this);
 @core::pragma::_("dart2js:noInline")
 static method Extension|extensionStaticMethod() → dynamic
diff --git a/pkg/front_end/testcases/extensions/annotations.dart.strong.expect b/pkg/front_end/testcases/extensions/annotations.dart.strong.expect
index 44c7c8a..441d5bd 100644
--- a/pkg/front_end/testcases/extensions/annotations.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/annotations.dart.strong.expect
@@ -27,8 +27,8 @@
   static method extensionStaticMethod = self::Extension|extensionStaticMethod;
 }
 @#C3
-static method Extension|extensionInstanceMethod(final self::Class* #this) → dynamic {}
-static method Extension|get#extensionInstanceMethod(final self::Class* #this) → () →* dynamic
+static method Extension|extensionInstanceMethod(lowered final self::Class* #this) → dynamic {}
+static method Extension|get#extensionInstanceMethod(lowered final self::Class* #this) → () →* dynamic
   return () → dynamic => self::Extension|extensionInstanceMethod(#this);
 @#C3
 static method Extension|extensionStaticMethod() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/annotations.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/annotations.dart.strong.transformed.expect
index 44c7c8a..441d5bd 100644
--- a/pkg/front_end/testcases/extensions/annotations.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/annotations.dart.strong.transformed.expect
@@ -27,8 +27,8 @@
   static method extensionStaticMethod = self::Extension|extensionStaticMethod;
 }
 @#C3
-static method Extension|extensionInstanceMethod(final self::Class* #this) → dynamic {}
-static method Extension|get#extensionInstanceMethod(final self::Class* #this) → () →* dynamic
+static method Extension|extensionInstanceMethod(lowered final self::Class* #this) → dynamic {}
+static method Extension|get#extensionInstanceMethod(lowered final self::Class* #this) → () →* dynamic
   return () → dynamic => self::Extension|extensionInstanceMethod(#this);
 @#C3
 static method Extension|extensionStaticMethod() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/async_extensions.dart.outline.expect b/pkg/front_end/testcases/extensions/async_extensions.dart.outline.expect
index 18fc103..cc28afd 100644
--- a/pkg/front_end/testcases/extensions/async_extensions.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/async_extensions.dart.outline.expect
@@ -10,17 +10,17 @@
   method asyncStarMethod = self::Extension|asyncStarMethod;
   tearoff asyncStarMethod = self::Extension|get#asyncStarMethod;
 }
-static method Extension|syncStarMethod(final core::int* #this) → dynamic sync* 
+static method Extension|syncStarMethod(lowered final core::int* #this) → dynamic sync* 
   ;
-static method Extension|get#syncStarMethod(final core::int* #this) → () →* dynamic
+static method Extension|get#syncStarMethod(lowered final core::int* #this) → () →* dynamic
   return () → dynamic => self::Extension|syncStarMethod(#this);
-static method Extension|asyncMethod(final core::int* #this) → dynamic async 
+static method Extension|asyncMethod(lowered final core::int* #this) → dynamic async 
   ;
-static method Extension|get#asyncMethod(final core::int* #this) → () →* dynamic
+static method Extension|get#asyncMethod(lowered final core::int* #this) → () →* dynamic
   return () → dynamic => self::Extension|asyncMethod(#this);
-static method Extension|asyncStarMethod(final core::int* #this) → dynamic async* 
+static method Extension|asyncStarMethod(lowered final core::int* #this) → dynamic async* 
   ;
-static method Extension|get#asyncStarMethod(final core::int* #this) → () →* dynamic
+static method Extension|get#asyncStarMethod(lowered final core::int* #this) → () →* dynamic
   return () → dynamic => self::Extension|asyncStarMethod(#this);
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/async_extensions.dart.strong.expect b/pkg/front_end/testcases/extensions/async_extensions.dart.strong.expect
index fd5e869..f053e58 100644
--- a/pkg/front_end/testcases/extensions/async_extensions.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/async_extensions.dart.strong.expect
@@ -10,14 +10,14 @@
   method asyncStarMethod = self::Extension|asyncStarMethod;
   tearoff asyncStarMethod = self::Extension|get#asyncStarMethod;
 }
-static method Extension|syncStarMethod(final core::int* #this) → dynamic sync* {}
-static method Extension|get#syncStarMethod(final core::int* #this) → () →* dynamic
+static method Extension|syncStarMethod(lowered final core::int* #this) → dynamic sync* {}
+static method Extension|get#syncStarMethod(lowered final core::int* #this) → () →* dynamic
   return () → dynamic => self::Extension|syncStarMethod(#this);
-static method Extension|asyncMethod(final core::int* #this) → dynamic async {}
-static method Extension|get#asyncMethod(final core::int* #this) → () →* dynamic
+static method Extension|asyncMethod(lowered final core::int* #this) → dynamic async {}
+static method Extension|get#asyncMethod(lowered final core::int* #this) → () →* dynamic
   return () → dynamic => self::Extension|asyncMethod(#this);
-static method Extension|asyncStarMethod(final core::int* #this) → dynamic async* {}
-static method Extension|get#asyncStarMethod(final core::int* #this) → () →* dynamic
+static method Extension|asyncStarMethod(lowered final core::int* #this) → dynamic async* {}
+static method Extension|get#asyncStarMethod(lowered final core::int* #this) → () →* dynamic
   return () → dynamic => self::Extension|asyncStarMethod(#this);
 static method main() → dynamic {
   self::Extension|syncStarMethod(0);
diff --git a/pkg/front_end/testcases/extensions/async_extensions.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/async_extensions.dart.strong.transformed.expect
index 2fab1ff..769d43f 100644
--- a/pkg/front_end/testcases/extensions/async_extensions.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/async_extensions.dart.strong.transformed.expect
@@ -11,7 +11,7 @@
   method asyncStarMethod = self::Extension|asyncStarMethod;
   tearoff asyncStarMethod = self::Extension|get#asyncStarMethod;
 }
-static method Extension|syncStarMethod(final core::int* #this) → dynamic /* originally sync* */ {
+static method Extension|syncStarMethod(lowered final core::int* #this) → dynamic /* originally sync* */ {
   function :sync_op_gen() → (core::_SyncIterator<dynamic>*, dynamic, dynamic) →* core::bool* {
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
@@ -23,9 +23,9 @@
   }
   return new core::_SyncIterable::•<dynamic>(:sync_op_gen);
 }
-static method Extension|get#syncStarMethod(final core::int* #this) → () →* dynamic
+static method Extension|get#syncStarMethod(lowered final core::int* #this) → () →* dynamic
   return () → dynamic => self::Extension|syncStarMethod(#this);
-static method Extension|asyncMethod(final core::int* #this) → dynamic /* originally async */ {
+static method Extension|asyncMethod(lowered final core::int* #this) → dynamic /* originally async */ {
   final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   FutureOr<dynamic>* :return_value;
@@ -49,9 +49,9 @@
   :is_sync = true;
   return :async_future;
 }
-static method Extension|get#asyncMethod(final core::int* #this) → () →* dynamic
+static method Extension|get#asyncMethod(lowered final core::int* #this) → () →* dynamic
   return () → dynamic => self::Extension|asyncMethod(#this);
-static method Extension|asyncStarMethod(final core::int* #this) → dynamic /* originally async* */ {
+static method Extension|asyncStarMethod(lowered final core::int* #this) → dynamic /* originally async* */ {
   asy::_AsyncStarStreamController<dynamic>* :controller;
   dynamic :controller_stream;
   (dynamic) →* dynamic :async_op_then;
@@ -77,7 +77,7 @@
   :controller_stream = :controller.{asy::_AsyncStarStreamController::stream};
   return :controller_stream;
 }
-static method Extension|get#asyncStarMethod(final core::int* #this) → () →* dynamic
+static method Extension|get#asyncStarMethod(lowered final core::int* #this) → () →* dynamic
   return () → dynamic => self::Extension|asyncStarMethod(#this);
 static method main() → dynamic {
   self::Extension|syncStarMethod(0);
diff --git a/pkg/front_end/testcases/extensions/bounds.dart.outline.expect b/pkg/front_end/testcases/extensions/bounds.dart.outline.expect
index 6c07498..460599a 100644
--- a/pkg/front_end/testcases/extensions/bounds.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/bounds.dart.outline.expect
@@ -42,69 +42,69 @@
   method method4 = self::Extension4|method4;
   tearoff method4 = self::Extension4|get#method4;
 }
-static method Extension1|method1<T extends core::Object* = core::Object*, S extends core::Object* = core::Object*>(final self::Extension1|method1::T* #this) → dynamic
+static method Extension1|method1<T extends core::Object* = core::Object*, S extends core::Object* = core::Object*>(lowered final self::Extension1|method1::T* #this) → dynamic
   ;
-static method Extension1|get#method1<T extends core::Object* = core::Object*>(final self::Extension1|get#method1::T* #this) → <S extends core::Object* = core::Object*>() →* dynamic
+static method Extension1|get#method1<T extends core::Object* = core::Object*>(lowered final self::Extension1|get#method1::T* #this) → <S extends core::Object* = core::Object*>() →* dynamic
   return <S extends core::Object* = core::Object*>() → dynamic => self::Extension1|method1<self::Extension1|get#method1::T*, S*>(#this);
-static method Extension1|method2<T extends core::Object* = core::Object*, S extends core::String* = core::String*>(final self::Extension1|method2::T* #this) → dynamic
+static method Extension1|method2<T extends core::Object* = core::Object*, S extends core::String* = core::String*>(lowered final self::Extension1|method2::T* #this) → dynamic
   ;
-static method Extension1|get#method2<T extends core::Object* = core::Object*>(final self::Extension1|get#method2::T* #this) → <S extends core::String* = core::String*>() →* dynamic
+static method Extension1|get#method2<T extends core::Object* = core::Object*>(lowered final self::Extension1|get#method2::T* #this) → <S extends core::String* = core::String*>() →* dynamic
   return <S extends core::String* = core::String*>() → dynamic => self::Extension1|method2<self::Extension1|get#method2::T*, S*>(#this);
-static method Extension1|method3<T extends core::Object* = core::Object*, S extends dynamic = dynamic>(final self::Extension1|method3::T* #this) → dynamic
+static method Extension1|method3<T extends core::Object* = core::Object*, S extends dynamic = dynamic>(lowered final self::Extension1|method3::T* #this) → dynamic
   ;
-static method Extension1|get#method3<T extends core::Object* = core::Object*>(final self::Extension1|get#method3::T* #this) → <S extends dynamic = dynamic>() →* dynamic
+static method Extension1|get#method3<T extends core::Object* = core::Object*>(lowered final self::Extension1|get#method3::T* #this) → <S extends dynamic = dynamic>() →* dynamic
   return <S extends dynamic = dynamic>() → dynamic => self::Extension1|method3<self::Extension1|get#method3::T*, S%>(#this);
-static method Extension1|method4<T extends core::Object* = core::Object*, S extends core::Object* = dynamic>(final self::Extension1|method4::T* #this) → dynamic
+static method Extension1|method4<T extends core::Object* = core::Object*, S extends core::Object* = dynamic>(lowered final self::Extension1|method4::T* #this) → dynamic
   ;
-static method Extension1|get#method4<T extends core::Object* = core::Object*>(final self::Extension1|get#method4::T* #this) → <S extends core::Object* = dynamic>() →* dynamic
+static method Extension1|get#method4<T extends core::Object* = core::Object*>(lowered final self::Extension1|get#method4::T* #this) → <S extends core::Object* = dynamic>() →* dynamic
   return <S extends core::Object* = dynamic>() → dynamic => self::Extension1|method4<self::Extension1|get#method4::T*, S*>(#this);
-static method Extension2|method1<T extends core::String* = core::String*, S extends core::Object* = core::Object*>(final self::Extension2|method1::T* #this) → dynamic
+static method Extension2|method1<T extends core::String* = core::String*, S extends core::Object* = core::Object*>(lowered final self::Extension2|method1::T* #this) → dynamic
   ;
-static method Extension2|get#method1<T extends core::String* = core::String*>(final self::Extension2|get#method1::T* #this) → <S extends core::Object* = core::Object*>() →* dynamic
+static method Extension2|get#method1<T extends core::String* = core::String*>(lowered final self::Extension2|get#method1::T* #this) → <S extends core::Object* = core::Object*>() →* dynamic
   return <S extends core::Object* = core::Object*>() → dynamic => self::Extension2|method1<self::Extension2|get#method1::T*, S*>(#this);
-static method Extension2|method2<T extends core::String* = core::String*, S extends core::String* = core::String*>(final self::Extension2|method2::T* #this) → dynamic
+static method Extension2|method2<T extends core::String* = core::String*, S extends core::String* = core::String*>(lowered final self::Extension2|method2::T* #this) → dynamic
   ;
-static method Extension2|get#method2<T extends core::String* = core::String*>(final self::Extension2|get#method2::T* #this) → <S extends core::String* = core::String*>() →* dynamic
+static method Extension2|get#method2<T extends core::String* = core::String*>(lowered final self::Extension2|get#method2::T* #this) → <S extends core::String* = core::String*>() →* dynamic
   return <S extends core::String* = core::String*>() → dynamic => self::Extension2|method2<self::Extension2|get#method2::T*, S*>(#this);
-static method Extension2|method3<T extends core::String* = core::String*, S extends dynamic = dynamic>(final self::Extension2|method3::T* #this) → dynamic
+static method Extension2|method3<T extends core::String* = core::String*, S extends dynamic = dynamic>(lowered final self::Extension2|method3::T* #this) → dynamic
   ;
-static method Extension2|get#method3<T extends core::String* = core::String*>(final self::Extension2|get#method3::T* #this) → <S extends dynamic = dynamic>() →* dynamic
+static method Extension2|get#method3<T extends core::String* = core::String*>(lowered final self::Extension2|get#method3::T* #this) → <S extends dynamic = dynamic>() →* dynamic
   return <S extends dynamic = dynamic>() → dynamic => self::Extension2|method3<self::Extension2|get#method3::T*, S%>(#this);
-static method Extension2|method4<T extends core::String* = core::String*, S extends core::Object* = dynamic>(final self::Extension2|method4::T* #this) → dynamic
+static method Extension2|method4<T extends core::String* = core::String*, S extends core::Object* = dynamic>(lowered final self::Extension2|method4::T* #this) → dynamic
   ;
-static method Extension2|get#method4<T extends core::String* = core::String*>(final self::Extension2|get#method4::T* #this) → <S extends core::Object* = dynamic>() →* dynamic
+static method Extension2|get#method4<T extends core::String* = core::String*>(lowered final self::Extension2|get#method4::T* #this) → <S extends core::Object* = dynamic>() →* dynamic
   return <S extends core::Object* = dynamic>() → dynamic => self::Extension2|method4<self::Extension2|get#method4::T*, S*>(#this);
-static method Extension3|method1<T extends dynamic = dynamic, S extends core::Object* = core::Object*>(final self::Extension3|method1::T* #this) → dynamic
+static method Extension3|method1<T extends dynamic = dynamic, S extends core::Object* = core::Object*>(lowered final self::Extension3|method1::T* #this) → dynamic
   ;
-static method Extension3|get#method1<T extends dynamic = dynamic>(final self::Extension3|get#method1::T* #this) → <S extends core::Object* = core::Object*>() →* dynamic
+static method Extension3|get#method1<T extends dynamic = dynamic>(lowered final self::Extension3|get#method1::T* #this) → <S extends core::Object* = core::Object*>() →* dynamic
   return <S extends core::Object* = core::Object*>() → dynamic => self::Extension3|method1<self::Extension3|get#method1::T%, S*>(#this);
-static method Extension3|method2<T extends dynamic = dynamic, S extends core::String* = core::String*>(final self::Extension3|method2::T* #this) → dynamic
+static method Extension3|method2<T extends dynamic = dynamic, S extends core::String* = core::String*>(lowered final self::Extension3|method2::T* #this) → dynamic
   ;
-static method Extension3|get#method2<T extends dynamic = dynamic>(final self::Extension3|get#method2::T* #this) → <S extends core::String* = core::String*>() →* dynamic
+static method Extension3|get#method2<T extends dynamic = dynamic>(lowered final self::Extension3|get#method2::T* #this) → <S extends core::String* = core::String*>() →* dynamic
   return <S extends core::String* = core::String*>() → dynamic => self::Extension3|method2<self::Extension3|get#method2::T%, S*>(#this);
-static method Extension3|method3<T extends dynamic = dynamic, S extends dynamic = dynamic>(final self::Extension3|method3::T* #this) → dynamic
+static method Extension3|method3<T extends dynamic = dynamic, S extends dynamic = dynamic>(lowered final self::Extension3|method3::T* #this) → dynamic
   ;
-static method Extension3|get#method3<T extends dynamic = dynamic>(final self::Extension3|get#method3::T* #this) → <S extends dynamic = dynamic>() →* dynamic
+static method Extension3|get#method3<T extends dynamic = dynamic>(lowered final self::Extension3|get#method3::T* #this) → <S extends dynamic = dynamic>() →* dynamic
   return <S extends dynamic = dynamic>() → dynamic => self::Extension3|method3<self::Extension3|get#method3::T%, S%>(#this);
-static method Extension3|method4<T extends dynamic = dynamic, S extends core::Object* = dynamic>(final self::Extension3|method4::T* #this) → dynamic
+static method Extension3|method4<T extends dynamic = dynamic, S extends core::Object* = dynamic>(lowered final self::Extension3|method4::T* #this) → dynamic
   ;
-static method Extension3|get#method4<T extends dynamic = dynamic>(final self::Extension3|get#method4::T* #this) → <S extends core::Object* = dynamic>() →* dynamic
+static method Extension3|get#method4<T extends dynamic = dynamic>(lowered final self::Extension3|get#method4::T* #this) → <S extends core::Object* = dynamic>() →* dynamic
   return <S extends core::Object* = dynamic>() → dynamic => self::Extension3|method4<self::Extension3|get#method4::T%, S*>(#this);
-static method Extension4|method1<T extends core::Object* = dynamic, S extends core::Object* = core::Object*>(final self::Extension4|method1::T* #this) → dynamic
+static method Extension4|method1<T extends core::Object* = dynamic, S extends core::Object* = core::Object*>(lowered final self::Extension4|method1::T* #this) → dynamic
   ;
-static method Extension4|get#method1<T extends core::Object* = dynamic>(final self::Extension4|get#method1::T* #this) → <S extends core::Object* = core::Object*>() →* dynamic
+static method Extension4|get#method1<T extends core::Object* = dynamic>(lowered final self::Extension4|get#method1::T* #this) → <S extends core::Object* = core::Object*>() →* dynamic
   return <S extends core::Object* = core::Object*>() → dynamic => self::Extension4|method1<self::Extension4|get#method1::T*, S*>(#this);
-static method Extension4|method2<T extends core::Object* = dynamic, S extends core::String* = core::String*>(final self::Extension4|method2::T* #this) → dynamic
+static method Extension4|method2<T extends core::Object* = dynamic, S extends core::String* = core::String*>(lowered final self::Extension4|method2::T* #this) → dynamic
   ;
-static method Extension4|get#method2<T extends core::Object* = dynamic>(final self::Extension4|get#method2::T* #this) → <S extends core::String* = core::String*>() →* dynamic
+static method Extension4|get#method2<T extends core::Object* = dynamic>(lowered final self::Extension4|get#method2::T* #this) → <S extends core::String* = core::String*>() →* dynamic
   return <S extends core::String* = core::String*>() → dynamic => self::Extension4|method2<self::Extension4|get#method2::T*, S*>(#this);
-static method Extension4|method3<T extends core::Object* = dynamic, S extends dynamic = dynamic>(final self::Extension4|method3::T* #this) → dynamic
+static method Extension4|method3<T extends core::Object* = dynamic, S extends dynamic = dynamic>(lowered final self::Extension4|method3::T* #this) → dynamic
   ;
-static method Extension4|get#method3<T extends core::Object* = dynamic>(final self::Extension4|get#method3::T* #this) → <S extends dynamic = dynamic>() →* dynamic
+static method Extension4|get#method3<T extends core::Object* = dynamic>(lowered final self::Extension4|get#method3::T* #this) → <S extends dynamic = dynamic>() →* dynamic
   return <S extends dynamic = dynamic>() → dynamic => self::Extension4|method3<self::Extension4|get#method3::T*, S%>(#this);
-static method Extension4|method4<T extends core::Object* = dynamic, S extends core::Object* = dynamic>(final self::Extension4|method4::T* #this) → dynamic
+static method Extension4|method4<T extends core::Object* = dynamic, S extends core::Object* = dynamic>(lowered final self::Extension4|method4::T* #this) → dynamic
   ;
-static method Extension4|get#method4<T extends core::Object* = dynamic>(final self::Extension4|get#method4::T* #this) → <S extends core::Object* = dynamic>() →* dynamic
+static method Extension4|get#method4<T extends core::Object* = dynamic>(lowered final self::Extension4|get#method4::T* #this) → <S extends core::Object* = dynamic>() →* dynamic
   return <S extends core::Object* = dynamic>() → dynamic => self::Extension4|method4<self::Extension4|get#method4::T*, S*>(#this);
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/bounds.dart.strong.expect b/pkg/front_end/testcases/extensions/bounds.dart.strong.expect
index 46c68c7..b7ca556 100644
--- a/pkg/front_end/testcases/extensions/bounds.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/bounds.dart.strong.expect
@@ -42,52 +42,52 @@
   method method4 = self::Extension4|method4;
   tearoff method4 = self::Extension4|get#method4;
 }
-static method Extension1|method1<T extends core::Object* = core::Object*, S extends core::Object* = core::Object*>(final self::Extension1|method1::T* #this) → dynamic {}
-static method Extension1|get#method1<T extends core::Object* = core::Object*>(final self::Extension1|get#method1::T* #this) → <S extends core::Object* = core::Object*>() →* dynamic
+static method Extension1|method1<T extends core::Object* = core::Object*, S extends core::Object* = core::Object*>(lowered final self::Extension1|method1::T* #this) → dynamic {}
+static method Extension1|get#method1<T extends core::Object* = core::Object*>(lowered final self::Extension1|get#method1::T* #this) → <S extends core::Object* = core::Object*>() →* dynamic
   return <S extends core::Object* = core::Object*>() → dynamic => self::Extension1|method1<self::Extension1|get#method1::T*, S*>(#this);
-static method Extension1|method2<T extends core::Object* = core::Object*, S extends core::String* = core::String*>(final self::Extension1|method2::T* #this) → dynamic {}
-static method Extension1|get#method2<T extends core::Object* = core::Object*>(final self::Extension1|get#method2::T* #this) → <S extends core::String* = core::String*>() →* dynamic
+static method Extension1|method2<T extends core::Object* = core::Object*, S extends core::String* = core::String*>(lowered final self::Extension1|method2::T* #this) → dynamic {}
+static method Extension1|get#method2<T extends core::Object* = core::Object*>(lowered final self::Extension1|get#method2::T* #this) → <S extends core::String* = core::String*>() →* dynamic
   return <S extends core::String* = core::String*>() → dynamic => self::Extension1|method2<self::Extension1|get#method2::T*, S*>(#this);
-static method Extension1|method3<T extends core::Object* = core::Object*, S extends dynamic = dynamic>(final self::Extension1|method3::T* #this) → dynamic {}
-static method Extension1|get#method3<T extends core::Object* = core::Object*>(final self::Extension1|get#method3::T* #this) → <S extends dynamic = dynamic>() →* dynamic
+static method Extension1|method3<T extends core::Object* = core::Object*, S extends dynamic = dynamic>(lowered final self::Extension1|method3::T* #this) → dynamic {}
+static method Extension1|get#method3<T extends core::Object* = core::Object*>(lowered final self::Extension1|get#method3::T* #this) → <S extends dynamic = dynamic>() →* dynamic
   return <S extends dynamic = dynamic>() → dynamic => self::Extension1|method3<self::Extension1|get#method3::T*, S%>(#this);
-static method Extension1|method4<T extends core::Object* = core::Object*, S extends core::Object* = dynamic>(final self::Extension1|method4::T* #this) → dynamic {}
-static method Extension1|get#method4<T extends core::Object* = core::Object*>(final self::Extension1|get#method4::T* #this) → <S extends core::Object* = dynamic>() →* dynamic
+static method Extension1|method4<T extends core::Object* = core::Object*, S extends core::Object* = dynamic>(lowered final self::Extension1|method4::T* #this) → dynamic {}
+static method Extension1|get#method4<T extends core::Object* = core::Object*>(lowered final self::Extension1|get#method4::T* #this) → <S extends core::Object* = dynamic>() →* dynamic
   return <S extends core::Object* = dynamic>() → dynamic => self::Extension1|method4<self::Extension1|get#method4::T*, S*>(#this);
-static method Extension2|method1<T extends core::String* = core::String*, S extends core::Object* = core::Object*>(final self::Extension2|method1::T* #this) → dynamic {}
-static method Extension2|get#method1<T extends core::String* = core::String*>(final self::Extension2|get#method1::T* #this) → <S extends core::Object* = core::Object*>() →* dynamic
+static method Extension2|method1<T extends core::String* = core::String*, S extends core::Object* = core::Object*>(lowered final self::Extension2|method1::T* #this) → dynamic {}
+static method Extension2|get#method1<T extends core::String* = core::String*>(lowered final self::Extension2|get#method1::T* #this) → <S extends core::Object* = core::Object*>() →* dynamic
   return <S extends core::Object* = core::Object*>() → dynamic => self::Extension2|method1<self::Extension2|get#method1::T*, S*>(#this);
-static method Extension2|method2<T extends core::String* = core::String*, S extends core::String* = core::String*>(final self::Extension2|method2::T* #this) → dynamic {}
-static method Extension2|get#method2<T extends core::String* = core::String*>(final self::Extension2|get#method2::T* #this) → <S extends core::String* = core::String*>() →* dynamic
+static method Extension2|method2<T extends core::String* = core::String*, S extends core::String* = core::String*>(lowered final self::Extension2|method2::T* #this) → dynamic {}
+static method Extension2|get#method2<T extends core::String* = core::String*>(lowered final self::Extension2|get#method2::T* #this) → <S extends core::String* = core::String*>() →* dynamic
   return <S extends core::String* = core::String*>() → dynamic => self::Extension2|method2<self::Extension2|get#method2::T*, S*>(#this);
-static method Extension2|method3<T extends core::String* = core::String*, S extends dynamic = dynamic>(final self::Extension2|method3::T* #this) → dynamic {}
-static method Extension2|get#method3<T extends core::String* = core::String*>(final self::Extension2|get#method3::T* #this) → <S extends dynamic = dynamic>() →* dynamic
+static method Extension2|method3<T extends core::String* = core::String*, S extends dynamic = dynamic>(lowered final self::Extension2|method3::T* #this) → dynamic {}
+static method Extension2|get#method3<T extends core::String* = core::String*>(lowered final self::Extension2|get#method3::T* #this) → <S extends dynamic = dynamic>() →* dynamic
   return <S extends dynamic = dynamic>() → dynamic => self::Extension2|method3<self::Extension2|get#method3::T*, S%>(#this);
-static method Extension2|method4<T extends core::String* = core::String*, S extends core::Object* = dynamic>(final self::Extension2|method4::T* #this) → dynamic {}
-static method Extension2|get#method4<T extends core::String* = core::String*>(final self::Extension2|get#method4::T* #this) → <S extends core::Object* = dynamic>() →* dynamic
+static method Extension2|method4<T extends core::String* = core::String*, S extends core::Object* = dynamic>(lowered final self::Extension2|method4::T* #this) → dynamic {}
+static method Extension2|get#method4<T extends core::String* = core::String*>(lowered final self::Extension2|get#method4::T* #this) → <S extends core::Object* = dynamic>() →* dynamic
   return <S extends core::Object* = dynamic>() → dynamic => self::Extension2|method4<self::Extension2|get#method4::T*, S*>(#this);
-static method Extension3|method1<T extends dynamic = dynamic, S extends core::Object* = core::Object*>(final self::Extension3|method1::T* #this) → dynamic {}
-static method Extension3|get#method1<T extends dynamic = dynamic>(final self::Extension3|get#method1::T* #this) → <S extends core::Object* = core::Object*>() →* dynamic
+static method Extension3|method1<T extends dynamic = dynamic, S extends core::Object* = core::Object*>(lowered final self::Extension3|method1::T* #this) → dynamic {}
+static method Extension3|get#method1<T extends dynamic = dynamic>(lowered final self::Extension3|get#method1::T* #this) → <S extends core::Object* = core::Object*>() →* dynamic
   return <S extends core::Object* = core::Object*>() → dynamic => self::Extension3|method1<self::Extension3|get#method1::T%, S*>(#this);
-static method Extension3|method2<T extends dynamic = dynamic, S extends core::String* = core::String*>(final self::Extension3|method2::T* #this) → dynamic {}
-static method Extension3|get#method2<T extends dynamic = dynamic>(final self::Extension3|get#method2::T* #this) → <S extends core::String* = core::String*>() →* dynamic
+static method Extension3|method2<T extends dynamic = dynamic, S extends core::String* = core::String*>(lowered final self::Extension3|method2::T* #this) → dynamic {}
+static method Extension3|get#method2<T extends dynamic = dynamic>(lowered final self::Extension3|get#method2::T* #this) → <S extends core::String* = core::String*>() →* dynamic
   return <S extends core::String* = core::String*>() → dynamic => self::Extension3|method2<self::Extension3|get#method2::T%, S*>(#this);
-static method Extension3|method3<T extends dynamic = dynamic, S extends dynamic = dynamic>(final self::Extension3|method3::T* #this) → dynamic {}
-static method Extension3|get#method3<T extends dynamic = dynamic>(final self::Extension3|get#method3::T* #this) → <S extends dynamic = dynamic>() →* dynamic
+static method Extension3|method3<T extends dynamic = dynamic, S extends dynamic = dynamic>(lowered final self::Extension3|method3::T* #this) → dynamic {}
+static method Extension3|get#method3<T extends dynamic = dynamic>(lowered final self::Extension3|get#method3::T* #this) → <S extends dynamic = dynamic>() →* dynamic
   return <S extends dynamic = dynamic>() → dynamic => self::Extension3|method3<self::Extension3|get#method3::T%, S%>(#this);
-static method Extension3|method4<T extends dynamic = dynamic, S extends core::Object* = dynamic>(final self::Extension3|method4::T* #this) → dynamic {}
-static method Extension3|get#method4<T extends dynamic = dynamic>(final self::Extension3|get#method4::T* #this) → <S extends core::Object* = dynamic>() →* dynamic
+static method Extension3|method4<T extends dynamic = dynamic, S extends core::Object* = dynamic>(lowered final self::Extension3|method4::T* #this) → dynamic {}
+static method Extension3|get#method4<T extends dynamic = dynamic>(lowered final self::Extension3|get#method4::T* #this) → <S extends core::Object* = dynamic>() →* dynamic
   return <S extends core::Object* = dynamic>() → dynamic => self::Extension3|method4<self::Extension3|get#method4::T%, S*>(#this);
-static method Extension4|method1<T extends core::Object* = dynamic, S extends core::Object* = core::Object*>(final self::Extension4|method1::T* #this) → dynamic {}
-static method Extension4|get#method1<T extends core::Object* = dynamic>(final self::Extension4|get#method1::T* #this) → <S extends core::Object* = core::Object*>() →* dynamic
+static method Extension4|method1<T extends core::Object* = dynamic, S extends core::Object* = core::Object*>(lowered final self::Extension4|method1::T* #this) → dynamic {}
+static method Extension4|get#method1<T extends core::Object* = dynamic>(lowered final self::Extension4|get#method1::T* #this) → <S extends core::Object* = core::Object*>() →* dynamic
   return <S extends core::Object* = core::Object*>() → dynamic => self::Extension4|method1<self::Extension4|get#method1::T*, S*>(#this);
-static method Extension4|method2<T extends core::Object* = dynamic, S extends core::String* = core::String*>(final self::Extension4|method2::T* #this) → dynamic {}
-static method Extension4|get#method2<T extends core::Object* = dynamic>(final self::Extension4|get#method2::T* #this) → <S extends core::String* = core::String*>() →* dynamic
+static method Extension4|method2<T extends core::Object* = dynamic, S extends core::String* = core::String*>(lowered final self::Extension4|method2::T* #this) → dynamic {}
+static method Extension4|get#method2<T extends core::Object* = dynamic>(lowered final self::Extension4|get#method2::T* #this) → <S extends core::String* = core::String*>() →* dynamic
   return <S extends core::String* = core::String*>() → dynamic => self::Extension4|method2<self::Extension4|get#method2::T*, S*>(#this);
-static method Extension4|method3<T extends core::Object* = dynamic, S extends dynamic = dynamic>(final self::Extension4|method3::T* #this) → dynamic {}
-static method Extension4|get#method3<T extends core::Object* = dynamic>(final self::Extension4|get#method3::T* #this) → <S extends dynamic = dynamic>() →* dynamic
+static method Extension4|method3<T extends core::Object* = dynamic, S extends dynamic = dynamic>(lowered final self::Extension4|method3::T* #this) → dynamic {}
+static method Extension4|get#method3<T extends core::Object* = dynamic>(lowered final self::Extension4|get#method3::T* #this) → <S extends dynamic = dynamic>() →* dynamic
   return <S extends dynamic = dynamic>() → dynamic => self::Extension4|method3<self::Extension4|get#method3::T*, S%>(#this);
-static method Extension4|method4<T extends core::Object* = dynamic, S extends core::Object* = dynamic>(final self::Extension4|method4::T* #this) → dynamic {}
-static method Extension4|get#method4<T extends core::Object* = dynamic>(final self::Extension4|get#method4::T* #this) → <S extends core::Object* = dynamic>() →* dynamic
+static method Extension4|method4<T extends core::Object* = dynamic, S extends core::Object* = dynamic>(lowered final self::Extension4|method4::T* #this) → dynamic {}
+static method Extension4|get#method4<T extends core::Object* = dynamic>(lowered final self::Extension4|get#method4::T* #this) → <S extends core::Object* = dynamic>() →* dynamic
   return <S extends core::Object* = dynamic>() → dynamic => self::Extension4|method4<self::Extension4|get#method4::T*, S*>(#this);
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/bounds.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/bounds.dart.strong.transformed.expect
index 46c68c7..b7ca556 100644
--- a/pkg/front_end/testcases/extensions/bounds.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/bounds.dart.strong.transformed.expect
@@ -42,52 +42,52 @@
   method method4 = self::Extension4|method4;
   tearoff method4 = self::Extension4|get#method4;
 }
-static method Extension1|method1<T extends core::Object* = core::Object*, S extends core::Object* = core::Object*>(final self::Extension1|method1::T* #this) → dynamic {}
-static method Extension1|get#method1<T extends core::Object* = core::Object*>(final self::Extension1|get#method1::T* #this) → <S extends core::Object* = core::Object*>() →* dynamic
+static method Extension1|method1<T extends core::Object* = core::Object*, S extends core::Object* = core::Object*>(lowered final self::Extension1|method1::T* #this) → dynamic {}
+static method Extension1|get#method1<T extends core::Object* = core::Object*>(lowered final self::Extension1|get#method1::T* #this) → <S extends core::Object* = core::Object*>() →* dynamic
   return <S extends core::Object* = core::Object*>() → dynamic => self::Extension1|method1<self::Extension1|get#method1::T*, S*>(#this);
-static method Extension1|method2<T extends core::Object* = core::Object*, S extends core::String* = core::String*>(final self::Extension1|method2::T* #this) → dynamic {}
-static method Extension1|get#method2<T extends core::Object* = core::Object*>(final self::Extension1|get#method2::T* #this) → <S extends core::String* = core::String*>() →* dynamic
+static method Extension1|method2<T extends core::Object* = core::Object*, S extends core::String* = core::String*>(lowered final self::Extension1|method2::T* #this) → dynamic {}
+static method Extension1|get#method2<T extends core::Object* = core::Object*>(lowered final self::Extension1|get#method2::T* #this) → <S extends core::String* = core::String*>() →* dynamic
   return <S extends core::String* = core::String*>() → dynamic => self::Extension1|method2<self::Extension1|get#method2::T*, S*>(#this);
-static method Extension1|method3<T extends core::Object* = core::Object*, S extends dynamic = dynamic>(final self::Extension1|method3::T* #this) → dynamic {}
-static method Extension1|get#method3<T extends core::Object* = core::Object*>(final self::Extension1|get#method3::T* #this) → <S extends dynamic = dynamic>() →* dynamic
+static method Extension1|method3<T extends core::Object* = core::Object*, S extends dynamic = dynamic>(lowered final self::Extension1|method3::T* #this) → dynamic {}
+static method Extension1|get#method3<T extends core::Object* = core::Object*>(lowered final self::Extension1|get#method3::T* #this) → <S extends dynamic = dynamic>() →* dynamic
   return <S extends dynamic = dynamic>() → dynamic => self::Extension1|method3<self::Extension1|get#method3::T*, S%>(#this);
-static method Extension1|method4<T extends core::Object* = core::Object*, S extends core::Object* = dynamic>(final self::Extension1|method4::T* #this) → dynamic {}
-static method Extension1|get#method4<T extends core::Object* = core::Object*>(final self::Extension1|get#method4::T* #this) → <S extends core::Object* = dynamic>() →* dynamic
+static method Extension1|method4<T extends core::Object* = core::Object*, S extends core::Object* = dynamic>(lowered final self::Extension1|method4::T* #this) → dynamic {}
+static method Extension1|get#method4<T extends core::Object* = core::Object*>(lowered final self::Extension1|get#method4::T* #this) → <S extends core::Object* = dynamic>() →* dynamic
   return <S extends core::Object* = dynamic>() → dynamic => self::Extension1|method4<self::Extension1|get#method4::T*, S*>(#this);
-static method Extension2|method1<T extends core::String* = core::String*, S extends core::Object* = core::Object*>(final self::Extension2|method1::T* #this) → dynamic {}
-static method Extension2|get#method1<T extends core::String* = core::String*>(final self::Extension2|get#method1::T* #this) → <S extends core::Object* = core::Object*>() →* dynamic
+static method Extension2|method1<T extends core::String* = core::String*, S extends core::Object* = core::Object*>(lowered final self::Extension2|method1::T* #this) → dynamic {}
+static method Extension2|get#method1<T extends core::String* = core::String*>(lowered final self::Extension2|get#method1::T* #this) → <S extends core::Object* = core::Object*>() →* dynamic
   return <S extends core::Object* = core::Object*>() → dynamic => self::Extension2|method1<self::Extension2|get#method1::T*, S*>(#this);
-static method Extension2|method2<T extends core::String* = core::String*, S extends core::String* = core::String*>(final self::Extension2|method2::T* #this) → dynamic {}
-static method Extension2|get#method2<T extends core::String* = core::String*>(final self::Extension2|get#method2::T* #this) → <S extends core::String* = core::String*>() →* dynamic
+static method Extension2|method2<T extends core::String* = core::String*, S extends core::String* = core::String*>(lowered final self::Extension2|method2::T* #this) → dynamic {}
+static method Extension2|get#method2<T extends core::String* = core::String*>(lowered final self::Extension2|get#method2::T* #this) → <S extends core::String* = core::String*>() →* dynamic
   return <S extends core::String* = core::String*>() → dynamic => self::Extension2|method2<self::Extension2|get#method2::T*, S*>(#this);
-static method Extension2|method3<T extends core::String* = core::String*, S extends dynamic = dynamic>(final self::Extension2|method3::T* #this) → dynamic {}
-static method Extension2|get#method3<T extends core::String* = core::String*>(final self::Extension2|get#method3::T* #this) → <S extends dynamic = dynamic>() →* dynamic
+static method Extension2|method3<T extends core::String* = core::String*, S extends dynamic = dynamic>(lowered final self::Extension2|method3::T* #this) → dynamic {}
+static method Extension2|get#method3<T extends core::String* = core::String*>(lowered final self::Extension2|get#method3::T* #this) → <S extends dynamic = dynamic>() →* dynamic
   return <S extends dynamic = dynamic>() → dynamic => self::Extension2|method3<self::Extension2|get#method3::T*, S%>(#this);
-static method Extension2|method4<T extends core::String* = core::String*, S extends core::Object* = dynamic>(final self::Extension2|method4::T* #this) → dynamic {}
-static method Extension2|get#method4<T extends core::String* = core::String*>(final self::Extension2|get#method4::T* #this) → <S extends core::Object* = dynamic>() →* dynamic
+static method Extension2|method4<T extends core::String* = core::String*, S extends core::Object* = dynamic>(lowered final self::Extension2|method4::T* #this) → dynamic {}
+static method Extension2|get#method4<T extends core::String* = core::String*>(lowered final self::Extension2|get#method4::T* #this) → <S extends core::Object* = dynamic>() →* dynamic
   return <S extends core::Object* = dynamic>() → dynamic => self::Extension2|method4<self::Extension2|get#method4::T*, S*>(#this);
-static method Extension3|method1<T extends dynamic = dynamic, S extends core::Object* = core::Object*>(final self::Extension3|method1::T* #this) → dynamic {}
-static method Extension3|get#method1<T extends dynamic = dynamic>(final self::Extension3|get#method1::T* #this) → <S extends core::Object* = core::Object*>() →* dynamic
+static method Extension3|method1<T extends dynamic = dynamic, S extends core::Object* = core::Object*>(lowered final self::Extension3|method1::T* #this) → dynamic {}
+static method Extension3|get#method1<T extends dynamic = dynamic>(lowered final self::Extension3|get#method1::T* #this) → <S extends core::Object* = core::Object*>() →* dynamic
   return <S extends core::Object* = core::Object*>() → dynamic => self::Extension3|method1<self::Extension3|get#method1::T%, S*>(#this);
-static method Extension3|method2<T extends dynamic = dynamic, S extends core::String* = core::String*>(final self::Extension3|method2::T* #this) → dynamic {}
-static method Extension3|get#method2<T extends dynamic = dynamic>(final self::Extension3|get#method2::T* #this) → <S extends core::String* = core::String*>() →* dynamic
+static method Extension3|method2<T extends dynamic = dynamic, S extends core::String* = core::String*>(lowered final self::Extension3|method2::T* #this) → dynamic {}
+static method Extension3|get#method2<T extends dynamic = dynamic>(lowered final self::Extension3|get#method2::T* #this) → <S extends core::String* = core::String*>() →* dynamic
   return <S extends core::String* = core::String*>() → dynamic => self::Extension3|method2<self::Extension3|get#method2::T%, S*>(#this);
-static method Extension3|method3<T extends dynamic = dynamic, S extends dynamic = dynamic>(final self::Extension3|method3::T* #this) → dynamic {}
-static method Extension3|get#method3<T extends dynamic = dynamic>(final self::Extension3|get#method3::T* #this) → <S extends dynamic = dynamic>() →* dynamic
+static method Extension3|method3<T extends dynamic = dynamic, S extends dynamic = dynamic>(lowered final self::Extension3|method3::T* #this) → dynamic {}
+static method Extension3|get#method3<T extends dynamic = dynamic>(lowered final self::Extension3|get#method3::T* #this) → <S extends dynamic = dynamic>() →* dynamic
   return <S extends dynamic = dynamic>() → dynamic => self::Extension3|method3<self::Extension3|get#method3::T%, S%>(#this);
-static method Extension3|method4<T extends dynamic = dynamic, S extends core::Object* = dynamic>(final self::Extension3|method4::T* #this) → dynamic {}
-static method Extension3|get#method4<T extends dynamic = dynamic>(final self::Extension3|get#method4::T* #this) → <S extends core::Object* = dynamic>() →* dynamic
+static method Extension3|method4<T extends dynamic = dynamic, S extends core::Object* = dynamic>(lowered final self::Extension3|method4::T* #this) → dynamic {}
+static method Extension3|get#method4<T extends dynamic = dynamic>(lowered final self::Extension3|get#method4::T* #this) → <S extends core::Object* = dynamic>() →* dynamic
   return <S extends core::Object* = dynamic>() → dynamic => self::Extension3|method4<self::Extension3|get#method4::T%, S*>(#this);
-static method Extension4|method1<T extends core::Object* = dynamic, S extends core::Object* = core::Object*>(final self::Extension4|method1::T* #this) → dynamic {}
-static method Extension4|get#method1<T extends core::Object* = dynamic>(final self::Extension4|get#method1::T* #this) → <S extends core::Object* = core::Object*>() →* dynamic
+static method Extension4|method1<T extends core::Object* = dynamic, S extends core::Object* = core::Object*>(lowered final self::Extension4|method1::T* #this) → dynamic {}
+static method Extension4|get#method1<T extends core::Object* = dynamic>(lowered final self::Extension4|get#method1::T* #this) → <S extends core::Object* = core::Object*>() →* dynamic
   return <S extends core::Object* = core::Object*>() → dynamic => self::Extension4|method1<self::Extension4|get#method1::T*, S*>(#this);
-static method Extension4|method2<T extends core::Object* = dynamic, S extends core::String* = core::String*>(final self::Extension4|method2::T* #this) → dynamic {}
-static method Extension4|get#method2<T extends core::Object* = dynamic>(final self::Extension4|get#method2::T* #this) → <S extends core::String* = core::String*>() →* dynamic
+static method Extension4|method2<T extends core::Object* = dynamic, S extends core::String* = core::String*>(lowered final self::Extension4|method2::T* #this) → dynamic {}
+static method Extension4|get#method2<T extends core::Object* = dynamic>(lowered final self::Extension4|get#method2::T* #this) → <S extends core::String* = core::String*>() →* dynamic
   return <S extends core::String* = core::String*>() → dynamic => self::Extension4|method2<self::Extension4|get#method2::T*, S*>(#this);
-static method Extension4|method3<T extends core::Object* = dynamic, S extends dynamic = dynamic>(final self::Extension4|method3::T* #this) → dynamic {}
-static method Extension4|get#method3<T extends core::Object* = dynamic>(final self::Extension4|get#method3::T* #this) → <S extends dynamic = dynamic>() →* dynamic
+static method Extension4|method3<T extends core::Object* = dynamic, S extends dynamic = dynamic>(lowered final self::Extension4|method3::T* #this) → dynamic {}
+static method Extension4|get#method3<T extends core::Object* = dynamic>(lowered final self::Extension4|get#method3::T* #this) → <S extends dynamic = dynamic>() →* dynamic
   return <S extends dynamic = dynamic>() → dynamic => self::Extension4|method3<self::Extension4|get#method3::T*, S%>(#this);
-static method Extension4|method4<T extends core::Object* = dynamic, S extends core::Object* = dynamic>(final self::Extension4|method4::T* #this) → dynamic {}
-static method Extension4|get#method4<T extends core::Object* = dynamic>(final self::Extension4|get#method4::T* #this) → <S extends core::Object* = dynamic>() →* dynamic
+static method Extension4|method4<T extends core::Object* = dynamic, S extends core::Object* = dynamic>(lowered final self::Extension4|method4::T* #this) → dynamic {}
+static method Extension4|get#method4<T extends core::Object* = dynamic>(lowered final self::Extension4|get#method4::T* #this) → <S extends core::Object* = dynamic>() →* dynamic
   return <S extends core::Object* = dynamic>() → dynamic => self::Extension4|method4<self::Extension4|get#method4::T*, S*>(#this);
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/call_methods.dart.outline.expect b/pkg/front_end/testcases/extensions/call_methods.dart.outline.expect
index f5610f5..173e1a4 100644
--- a/pkg/front_end/testcases/extensions/call_methods.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/call_methods.dart.outline.expect
@@ -51,11 +51,11 @@
 static field core::String* topLevel5;
 static field self::B* b;
 static field core::String* topLevel6;
-static method _extension#0|get#call(final core::int* #this) → core::String*
+static method _extension#0|get#call(lowered final core::int* #this) → core::String*
   ;
-static method _extension#1|get#call(final core::num* #this) → core::String*
+static method _extension#1|get#call(lowered final core::num* #this) → core::String*
   ;
-static method _extension#2|get#call(final core::String* #this) → () →* core::String*
+static method _extension#2|get#call(lowered final core::String* #this) → () →* core::String*
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/call_methods.dart.strong.expect b/pkg/front_end/testcases/extensions/call_methods.dart.strong.expect
index 6ad9135..e207c34 100644
--- a/pkg/front_end/testcases/extensions/call_methods.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/call_methods.dart.strong.expect
@@ -166,11 +166,11 @@
 Try changing 'call' to a method or explicitly invoke 'call'.
 var topLevel6 = a(2, \"3\");
                  ^" as{TypeError,ForDynamic} core::String*;
-static method _extension#0|get#call(final core::int* #this) → core::String*
+static method _extension#0|get#call(lowered final core::int* #this) → core::String*
   return "My name is int";
-static method _extension#1|get#call(final core::num* #this) → core::String*
+static method _extension#1|get#call(lowered final core::num* #this) → core::String*
   return "My name is num";
-static method _extension#2|get#call(final core::String* #this) → () →* core::String*
+static method _extension#2|get#call(lowered final core::String* #this) → () →* core::String*
   return () → core::String* => "My name is String";
 static method main() → dynamic {
   self::_extension#2|get#call("").call();
diff --git a/pkg/front_end/testcases/extensions/check_bounds.dart.outline.expect b/pkg/front_end/testcases/extensions/check_bounds.dart.outline.expect
index 1a72e8b..b599220 100644
--- a/pkg/front_end/testcases/extensions/check_bounds.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/check_bounds.dart.outline.expect
@@ -73,13 +73,13 @@
 static final field dynamic field27;
 static final field dynamic field28;
 static final field dynamic field29;
-static method Extension|method<T extends self::B* = self::B*>(final self::Class<self::Extension|method::T*>* #this) → dynamic
+static method Extension|method<T extends self::B* = self::B*>(lowered final self::Class<self::Extension|method::T*>* #this) → dynamic
   ;
-static method Extension|get#method<T extends self::B* = self::B*>(final self::Class<self::Extension|get#method::T*>* #this) → () →* dynamic
+static method Extension|get#method<T extends self::B* = self::B*>(lowered final self::Class<self::Extension|get#method::T*>* #this) → () →* dynamic
   return () → dynamic => self::Extension|method<self::Extension|get#method::T*>(#this);
-static method Extension|genericMethod<T extends self::B* = self::B*, S extends self::B* = self::B*>(final self::Class<self::Extension|genericMethod::T*>* #this, self::Extension|genericMethod::S* s) → dynamic
+static method Extension|genericMethod<T extends self::B* = self::B*, S extends self::B* = self::B*>(lowered final self::Class<self::Extension|genericMethod::T*>* #this, self::Extension|genericMethod::S* s) → dynamic
   ;
-static method Extension|get#genericMethod<T extends self::B* = self::B*>(final self::Class<self::Extension|get#genericMethod::T*>* #this) → <S extends self::B* = self::B*>(S*) →* dynamic
+static method Extension|get#genericMethod<T extends self::B* = self::B*>(lowered final self::Class<self::Extension|get#genericMethod::T*>* #this) → <S extends self::B* = self::B*>(S*) →* dynamic
   return <S extends self::B* = self::B*>(S* s) → dynamic => self::Extension|genericMethod<self::Extension|get#genericMethod::T*, S*>(#this, s);
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/check_bounds.dart.strong.expect b/pkg/front_end/testcases/extensions/check_bounds.dart.strong.expect
index 1d88a8a..635468b 100644
--- a/pkg/front_end/testcases/extensions/check_bounds.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/check_bounds.dart.strong.expect
@@ -885,11 +885,11 @@
 static final field dynamic field27 = self::Extension|genericMethod<self::B*, self::A*>(self::classB, self::a);
 static final field dynamic field28 = self::Extension|genericMethod<self::B*, self::A*>(self::classB, self::a);
 static final field dynamic field29 = self::Extension|genericMethod<self::B*, self::B*>(self::classB, self::a as{TypeError} self::B*);
-static method Extension|method<T extends self::B* = self::B*>(final self::Class<self::Extension|method::T*>* #this) → dynamic {}
-static method Extension|get#method<T extends self::B* = self::B*>(final self::Class<self::Extension|get#method::T*>* #this) → () →* dynamic
+static method Extension|method<T extends self::B* = self::B*>(lowered final self::Class<self::Extension|method::T*>* #this) → dynamic {}
+static method Extension|get#method<T extends self::B* = self::B*>(lowered final self::Class<self::Extension|get#method::T*>* #this) → () →* dynamic
   return () → dynamic => self::Extension|method<self::Extension|get#method::T*>(#this);
-static method Extension|genericMethod<T extends self::B* = self::B*, S extends self::B* = self::B*>(final self::Class<self::Extension|genericMethod::T*>* #this, self::Extension|genericMethod::S* s) → dynamic {}
-static method Extension|get#genericMethod<T extends self::B* = self::B*>(final self::Class<self::Extension|get#genericMethod::T*>* #this) → <S extends self::B* = self::B*>(S*) →* dynamic
+static method Extension|genericMethod<T extends self::B* = self::B*, S extends self::B* = self::B*>(lowered final self::Class<self::Extension|genericMethod::T*>* #this, self::Extension|genericMethod::S* s) → dynamic {}
+static method Extension|get#genericMethod<T extends self::B* = self::B*>(lowered final self::Class<self::Extension|get#genericMethod::T*>* #this) → <S extends self::B* = self::B*>(S*) →* dynamic
   return <S extends self::B* = self::B*>(S* s) → dynamic => self::Extension|genericMethod<self::Extension|get#genericMethod::T*, S*>(#this, s);
 static method main() → dynamic {}
 static method test() → dynamic {
diff --git a/pkg/front_end/testcases/extensions/check_bounds.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/check_bounds.dart.strong.transformed.expect
index 1d88a8a..635468b 100644
--- a/pkg/front_end/testcases/extensions/check_bounds.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/check_bounds.dart.strong.transformed.expect
@@ -885,11 +885,11 @@
 static final field dynamic field27 = self::Extension|genericMethod<self::B*, self::A*>(self::classB, self::a);
 static final field dynamic field28 = self::Extension|genericMethod<self::B*, self::A*>(self::classB, self::a);
 static final field dynamic field29 = self::Extension|genericMethod<self::B*, self::B*>(self::classB, self::a as{TypeError} self::B*);
-static method Extension|method<T extends self::B* = self::B*>(final self::Class<self::Extension|method::T*>* #this) → dynamic {}
-static method Extension|get#method<T extends self::B* = self::B*>(final self::Class<self::Extension|get#method::T*>* #this) → () →* dynamic
+static method Extension|method<T extends self::B* = self::B*>(lowered final self::Class<self::Extension|method::T*>* #this) → dynamic {}
+static method Extension|get#method<T extends self::B* = self::B*>(lowered final self::Class<self::Extension|get#method::T*>* #this) → () →* dynamic
   return () → dynamic => self::Extension|method<self::Extension|get#method::T*>(#this);
-static method Extension|genericMethod<T extends self::B* = self::B*, S extends self::B* = self::B*>(final self::Class<self::Extension|genericMethod::T*>* #this, self::Extension|genericMethod::S* s) → dynamic {}
-static method Extension|get#genericMethod<T extends self::B* = self::B*>(final self::Class<self::Extension|get#genericMethod::T*>* #this) → <S extends self::B* = self::B*>(S*) →* dynamic
+static method Extension|genericMethod<T extends self::B* = self::B*, S extends self::B* = self::B*>(lowered final self::Class<self::Extension|genericMethod::T*>* #this, self::Extension|genericMethod::S* s) → dynamic {}
+static method Extension|get#genericMethod<T extends self::B* = self::B*>(lowered final self::Class<self::Extension|get#genericMethod::T*>* #this) → <S extends self::B* = self::B*>(S*) →* dynamic
   return <S extends self::B* = self::B*>(S* s) → dynamic => self::Extension|genericMethod<self::Extension|get#genericMethod::T*, S*>(#this, s);
 static method main() → dynamic {}
 static method test() → dynamic {
diff --git a/pkg/front_end/testcases/extensions/compounds.dart.outline.expect b/pkg/front_end/testcases/extensions/compounds.dart.outline.expect
index a4408ae..3bfb031 100644
--- a/pkg/front_end/testcases/extensions/compounds.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/compounds.dart.outline.expect
@@ -66,25 +66,25 @@
   tearoff testImplicitProperties = self::IntClassExtension|get#testImplicitProperties;
   set property = self::IntClassExtension|set#property;
 }
-static method NumberExtension|+(final self::Number* #this, core::Object* other) → self::Number*
+static method NumberExtension|+(lowered final self::Number* #this, core::Object* other) → self::Number*
   ;
-static method NumberExtension|-(final self::Number* #this, core::Object* other) → self::Number*
+static method NumberExtension|-(lowered final self::Number* #this, core::Object* other) → self::Number*
   ;
-static method ClassExtension|get#property(final self::Class* #this) → self::Number*
+static method ClassExtension|get#property(lowered final self::Class* #this) → self::Number*
   ;
-static method ClassExtension|set#property(final self::Class* #this, self::Number* value) → void
+static method ClassExtension|set#property(lowered final self::Class* #this, self::Number* value) → void
   ;
-static method ClassExtension|testImplicitProperties(final self::Class* #this) → dynamic
+static method ClassExtension|testImplicitProperties(lowered final self::Class* #this) → dynamic
   ;
-static method ClassExtension|get#testImplicitProperties(final self::Class* #this) → () →* dynamic
+static method ClassExtension|get#testImplicitProperties(lowered final self::Class* #this) → () →* dynamic
   return () → dynamic => self::ClassExtension|testImplicitProperties(#this);
-static method IntClassExtension|get#property(final self::IntClass* #this) → core::int*
+static method IntClassExtension|get#property(lowered final self::IntClass* #this) → core::int*
   ;
-static method IntClassExtension|set#property(final self::IntClass* #this, core::int* value) → void
+static method IntClassExtension|set#property(lowered final self::IntClass* #this, core::int* value) → void
   ;
-static method IntClassExtension|testImplicitProperties(final self::IntClass* #this) → dynamic
+static method IntClassExtension|testImplicitProperties(lowered final self::IntClass* #this) → dynamic
   ;
-static method IntClassExtension|get#testImplicitProperties(final self::IntClass* #this) → () →* dynamic
+static method IntClassExtension|get#testImplicitProperties(lowered final self::IntClass* #this) → () →* dynamic
   return () → dynamic => self::IntClassExtension|testImplicitProperties(#this);
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/compounds.dart.strong.expect b/pkg/front_end/testcases/extensions/compounds.dart.strong.expect
index b69e531..5174cae 100644
--- a/pkg/front_end/testcases/extensions/compounds.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/compounds.dart.strong.expect
@@ -69,7 +69,7 @@
   tearoff testImplicitProperties = self::IntClassExtension|get#testImplicitProperties;
   set property = self::IntClassExtension|set#property;
 }
-static method NumberExtension|+(final self::Number* #this, core::Object* other) → self::Number* {
+static method NumberExtension|+(lowered final self::Number* #this, core::Object* other) → self::Number* {
   if(other is core::int*) {
     return new self::Number::•(#this.{self::Number::value}.{core::num::+}(other{core::int*}));
   }
@@ -81,7 +81,7 @@
       throw new core::ArgumentError::•("${other}");
     }
 }
-static method NumberExtension|-(final self::Number* #this, core::Object* other) → self::Number* {
+static method NumberExtension|-(lowered final self::Number* #this, core::Object* other) → self::Number* {
   if(other is core::int*) {
     return new self::Number::•(#this.{self::Number::value}.{core::num::-}(other{core::int*}));
   }
@@ -93,12 +93,12 @@
       throw new core::ArgumentError::•("${other}");
     }
 }
-static method ClassExtension|get#property(final self::Class* #this) → self::Number*
+static method ClassExtension|get#property(lowered final self::Class* #this) → self::Number*
   return #this.{self::Class::field};
-static method ClassExtension|set#property(final self::Class* #this, self::Number* value) → void {
+static method ClassExtension|set#property(lowered final self::Class* #this, self::Number* value) → void {
   #this.{self::Class::field} = value;
 }
-static method ClassExtension|testImplicitProperties(final self::Class* #this) → dynamic {
+static method ClassExtension|testImplicitProperties(lowered final self::Class* #this) → dynamic {
   self::Number* n0 = new self::Number::•(0);
   self::Number* n1 = new self::Number::•(1);
   self::Number* n2 = new self::Number::•(2);
@@ -133,14 +133,14 @@
   self::ClassExtension|set#property(#this, self::NumberExtension|-(self::ClassExtension|get#property(#this), 1));
   self::expect(n0, self::ClassExtension|get#property(#this));
 }
-static method ClassExtension|get#testImplicitProperties(final self::Class* #this) → () →* dynamic
+static method ClassExtension|get#testImplicitProperties(lowered final self::Class* #this) → () →* dynamic
   return () → dynamic => self::ClassExtension|testImplicitProperties(#this);
-static method IntClassExtension|get#property(final self::IntClass* #this) → core::int*
+static method IntClassExtension|get#property(lowered final self::IntClass* #this) → core::int*
   return #this.{self::IntClass::field};
-static method IntClassExtension|set#property(final self::IntClass* #this, core::int* value) → void {
+static method IntClassExtension|set#property(lowered final self::IntClass* #this, core::int* value) → void {
   #this.{self::IntClass::field} = value;
 }
-static method IntClassExtension|testImplicitProperties(final self::IntClass* #this) → dynamic {
+static method IntClassExtension|testImplicitProperties(lowered final self::IntClass* #this) → dynamic {
   core::int* n0 = 0;
   core::int* n1 = 1;
   core::int* n2 = 2;
@@ -175,7 +175,7 @@
   self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::-}(1));
   self::expect(n0, self::IntClassExtension|get#property(#this));
 }
-static method IntClassExtension|get#testImplicitProperties(final self::IntClass* #this) → () →* dynamic
+static method IntClassExtension|get#testImplicitProperties(lowered final self::IntClass* #this) → () →* dynamic
   return () → dynamic => self::IntClassExtension|testImplicitProperties(#this);
 static method main() → dynamic {
   self::testLocals();
diff --git a/pkg/front_end/testcases/extensions/compounds.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/compounds.dart.strong.transformed.expect
index b69e531..5174cae 100644
--- a/pkg/front_end/testcases/extensions/compounds.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/compounds.dart.strong.transformed.expect
@@ -69,7 +69,7 @@
   tearoff testImplicitProperties = self::IntClassExtension|get#testImplicitProperties;
   set property = self::IntClassExtension|set#property;
 }
-static method NumberExtension|+(final self::Number* #this, core::Object* other) → self::Number* {
+static method NumberExtension|+(lowered final self::Number* #this, core::Object* other) → self::Number* {
   if(other is core::int*) {
     return new self::Number::•(#this.{self::Number::value}.{core::num::+}(other{core::int*}));
   }
@@ -81,7 +81,7 @@
       throw new core::ArgumentError::•("${other}");
     }
 }
-static method NumberExtension|-(final self::Number* #this, core::Object* other) → self::Number* {
+static method NumberExtension|-(lowered final self::Number* #this, core::Object* other) → self::Number* {
   if(other is core::int*) {
     return new self::Number::•(#this.{self::Number::value}.{core::num::-}(other{core::int*}));
   }
@@ -93,12 +93,12 @@
       throw new core::ArgumentError::•("${other}");
     }
 }
-static method ClassExtension|get#property(final self::Class* #this) → self::Number*
+static method ClassExtension|get#property(lowered final self::Class* #this) → self::Number*
   return #this.{self::Class::field};
-static method ClassExtension|set#property(final self::Class* #this, self::Number* value) → void {
+static method ClassExtension|set#property(lowered final self::Class* #this, self::Number* value) → void {
   #this.{self::Class::field} = value;
 }
-static method ClassExtension|testImplicitProperties(final self::Class* #this) → dynamic {
+static method ClassExtension|testImplicitProperties(lowered final self::Class* #this) → dynamic {
   self::Number* n0 = new self::Number::•(0);
   self::Number* n1 = new self::Number::•(1);
   self::Number* n2 = new self::Number::•(2);
@@ -133,14 +133,14 @@
   self::ClassExtension|set#property(#this, self::NumberExtension|-(self::ClassExtension|get#property(#this), 1));
   self::expect(n0, self::ClassExtension|get#property(#this));
 }
-static method ClassExtension|get#testImplicitProperties(final self::Class* #this) → () →* dynamic
+static method ClassExtension|get#testImplicitProperties(lowered final self::Class* #this) → () →* dynamic
   return () → dynamic => self::ClassExtension|testImplicitProperties(#this);
-static method IntClassExtension|get#property(final self::IntClass* #this) → core::int*
+static method IntClassExtension|get#property(lowered final self::IntClass* #this) → core::int*
   return #this.{self::IntClass::field};
-static method IntClassExtension|set#property(final self::IntClass* #this, core::int* value) → void {
+static method IntClassExtension|set#property(lowered final self::IntClass* #this, core::int* value) → void {
   #this.{self::IntClass::field} = value;
 }
-static method IntClassExtension|testImplicitProperties(final self::IntClass* #this) → dynamic {
+static method IntClassExtension|testImplicitProperties(lowered final self::IntClass* #this) → dynamic {
   core::int* n0 = 0;
   core::int* n1 = 1;
   core::int* n2 = 2;
@@ -175,7 +175,7 @@
   self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::-}(1));
   self::expect(n0, self::IntClassExtension|get#property(#this));
 }
-static method IntClassExtension|get#testImplicitProperties(final self::IntClass* #this) → () →* dynamic
+static method IntClassExtension|get#testImplicitProperties(lowered final self::IntClass* #this) → () →* dynamic
   return () → dynamic => self::IntClassExtension|testImplicitProperties(#this);
 static method main() → dynamic {
   self::testLocals();
diff --git a/pkg/front_end/testcases/extensions/conflict_with_object.dart.outline.expect b/pkg/front_end/testcases/extensions/conflict_with_object.dart.outline.expect
index 4d46ff2..500096d 100644
--- a/pkg/front_end/testcases/extensions/conflict_with_object.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/conflict_with_object.dart.outline.expect
@@ -33,15 +33,15 @@
   static method toString = self::Extension|toString;
   set hashCode = self::Extension|set#hashCode;
 }
-static method Extension|get#noSuchMethod(final core::String* #this) → core::int*
+static method Extension|get#noSuchMethod(lowered final core::String* #this) → core::int*
   ;
-static method Extension|set#hashCode(final core::String* #this, core::int* value) → void
+static method Extension|set#hashCode(lowered final core::String* #this, core::int* value) → void
   ;
-static method Extension|runtimeType(final core::String* #this) → core::int*
+static method Extension|runtimeType(lowered final core::String* #this) → core::int*
   ;
-static method Extension|get#runtimeType(final core::String* #this) → () →* core::int*
+static method Extension|get#runtimeType(lowered final core::String* #this) → () →* core::int*
   return () → core::int* => self::Extension|runtimeType(#this);
-static method Extension|==(final core::String* #this, dynamic other) → dynamic
+static method Extension|==(lowered final core::String* #this, dynamic other) → dynamic
   ;
 static method Extension|toString() → core::String*
   ;
diff --git a/pkg/front_end/testcases/extensions/conflict_with_object.dart.strong.expect b/pkg/front_end/testcases/extensions/conflict_with_object.dart.strong.expect
index 891feb9..f363804 100644
--- a/pkg/front_end/testcases/extensions/conflict_with_object.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/conflict_with_object.dart.strong.expect
@@ -48,13 +48,13 @@
   static method toString = self::Extension|toString;
   set hashCode = self::Extension|set#hashCode;
 }
-static method Extension|get#noSuchMethod(final core::String* #this) → core::int*
+static method Extension|get#noSuchMethod(lowered final core::String* #this) → core::int*
   return 42;
-static method Extension|set#hashCode(final core::String* #this, core::int* value) → void {}
-static method Extension|runtimeType(final core::String* #this) → core::int* {}
-static method Extension|get#runtimeType(final core::String* #this) → () →* core::int*
+static method Extension|set#hashCode(lowered final core::String* #this, core::int* value) → void {}
+static method Extension|runtimeType(lowered final core::String* #this) → core::int* {}
+static method Extension|get#runtimeType(lowered final core::String* #this) → () →* core::int*
   return () → core::int* => self::Extension|runtimeType(#this);
-static method Extension|==(final core::String* #this, dynamic other) → dynamic
+static method Extension|==(lowered final core::String* #this, dynamic other) → dynamic
   return false;
 static method Extension|toString() → core::String*
   return "Foo";
diff --git a/pkg/front_end/testcases/extensions/conflict_with_object.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/conflict_with_object.dart.strong.transformed.expect
index 55715f8..b53449f 100644
--- a/pkg/front_end/testcases/extensions/conflict_with_object.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/conflict_with_object.dart.strong.transformed.expect
@@ -48,13 +48,13 @@
   static method toString = self::Extension|toString;
   set hashCode = self::Extension|set#hashCode;
 }
-static method Extension|get#noSuchMethod(final core::String* #this) → core::int*
+static method Extension|get#noSuchMethod(lowered final core::String* #this) → core::int*
   return 42;
-static method Extension|set#hashCode(final core::String* #this, core::int* value) → void {}
-static method Extension|runtimeType(final core::String* #this) → core::int* {}
-static method Extension|get#runtimeType(final core::String* #this) → () →* core::int*
+static method Extension|set#hashCode(lowered final core::String* #this, core::int* value) → void {}
+static method Extension|runtimeType(lowered final core::String* #this) → core::int* {}
+static method Extension|get#runtimeType(lowered final core::String* #this) → () →* core::int*
   return () → core::int* => self::Extension|runtimeType(#this);
-static method Extension|==(final core::String* #this, dynamic other) → dynamic
+static method Extension|==(lowered final core::String* #this, dynamic other) → dynamic
   return false;
 static method Extension|toString() → core::String*
   return "Foo";
diff --git a/pkg/front_end/testcases/extensions/conflicts.dart.outline.expect b/pkg/front_end/testcases/extensions/conflicts.dart.outline.expect
index 6fb3b5f..4e95f3b 100644
--- a/pkg/front_end/testcases/extensions/conflicts.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/conflicts.dart.outline.expect
@@ -57,17 +57,17 @@
   method duplicateMethodName1 = self::UniqueExtensionName|duplicateMethodName1;
   tearoff duplicateMethodName1 = self::UniqueExtensionName|get#duplicateMethodName1;
 }
-static method DuplicateExtensionName|uniqueMethod1(final self::Class1* #this) → dynamic
+static method DuplicateExtensionName|uniqueMethod1(lowered final self::Class1* #this) → dynamic
   ;
-static method DuplicateExtensionName|get#uniqueMethod1(final self::Class1* #this) → () →* dynamic
+static method DuplicateExtensionName|get#uniqueMethod1(lowered final self::Class1* #this) → () →* dynamic
   return () → dynamic => self::DuplicateExtensionName|uniqueMethod1(#this);
-static method DuplicateExtensionName|duplicateMethodName2(final self::Class1* #this) → dynamic
+static method DuplicateExtensionName|duplicateMethodName2(lowered final self::Class1* #this) → dynamic
   ;
-static method DuplicateExtensionName|get#duplicateMethodName2(final self::Class1* #this) → () →* dynamic
+static method DuplicateExtensionName|get#duplicateMethodName2(lowered final self::Class1* #this) → () →* dynamic
   return () → dynamic => self::DuplicateExtensionName|duplicateMethodName2(#this);
-static method UniqueExtensionName|duplicateMethodName1(final self::Class1* #this) → dynamic
+static method UniqueExtensionName|duplicateMethodName1(lowered final self::Class1* #this) → dynamic
   ;
-static method UniqueExtensionName|get#duplicateMethodName1(final self::Class1* #this) → () →* dynamic
+static method UniqueExtensionName|get#duplicateMethodName1(lowered final self::Class1* #this) → () →* dynamic
   return () → dynamic => self::UniqueExtensionName|duplicateMethodName1(#this);
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/conflicts.dart.strong.expect b/pkg/front_end/testcases/extensions/conflicts.dart.strong.expect
index 9764dae..a6fe24f 100644
--- a/pkg/front_end/testcases/extensions/conflicts.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/conflicts.dart.strong.expect
@@ -65,16 +65,16 @@
   method duplicateMethodName1 = self::UniqueExtensionName|duplicateMethodName1;
   tearoff duplicateMethodName1 = self::UniqueExtensionName|get#duplicateMethodName1;
 }
-static method DuplicateExtensionName|uniqueMethod1(final self::Class1* #this) → dynamic {}
-static method DuplicateExtensionName|get#uniqueMethod1(final self::Class1* #this) → () →* dynamic
+static method DuplicateExtensionName|uniqueMethod1(lowered final self::Class1* #this) → dynamic {}
+static method DuplicateExtensionName|get#uniqueMethod1(lowered final self::Class1* #this) → () →* dynamic
   return () → dynamic => self::DuplicateExtensionName|uniqueMethod1(#this);
-static method DuplicateExtensionName|duplicateMethodName2(final self::Class1* #this) → dynamic
+static method DuplicateExtensionName|duplicateMethodName2(lowered final self::Class1* #this) → dynamic
   return 1;
-static method DuplicateExtensionName|get#duplicateMethodName2(final self::Class1* #this) → () →* dynamic
+static method DuplicateExtensionName|get#duplicateMethodName2(lowered final self::Class1* #this) → () →* dynamic
   return () → dynamic => self::DuplicateExtensionName|duplicateMethodName2(#this);
-static method UniqueExtensionName|duplicateMethodName1(final self::Class1* #this) → dynamic
+static method UniqueExtensionName|duplicateMethodName1(lowered final self::Class1* #this) → dynamic
   return 1;
-static method UniqueExtensionName|get#duplicateMethodName1(final self::Class1* #this) → () →* dynamic
+static method UniqueExtensionName|get#duplicateMethodName1(lowered final self::Class1* #this) → () →* dynamic
   return () → dynamic => self::UniqueExtensionName|duplicateMethodName1(#this);
 static method main() → dynamic {
   self::Class1* c1 = new self::Class1::•();
diff --git a/pkg/front_end/testcases/extensions/conflicts.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/conflicts.dart.strong.transformed.expect
index 9764dae..a6fe24f 100644
--- a/pkg/front_end/testcases/extensions/conflicts.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/conflicts.dart.strong.transformed.expect
@@ -65,16 +65,16 @@
   method duplicateMethodName1 = self::UniqueExtensionName|duplicateMethodName1;
   tearoff duplicateMethodName1 = self::UniqueExtensionName|get#duplicateMethodName1;
 }
-static method DuplicateExtensionName|uniqueMethod1(final self::Class1* #this) → dynamic {}
-static method DuplicateExtensionName|get#uniqueMethod1(final self::Class1* #this) → () →* dynamic
+static method DuplicateExtensionName|uniqueMethod1(lowered final self::Class1* #this) → dynamic {}
+static method DuplicateExtensionName|get#uniqueMethod1(lowered final self::Class1* #this) → () →* dynamic
   return () → dynamic => self::DuplicateExtensionName|uniqueMethod1(#this);
-static method DuplicateExtensionName|duplicateMethodName2(final self::Class1* #this) → dynamic
+static method DuplicateExtensionName|duplicateMethodName2(lowered final self::Class1* #this) → dynamic
   return 1;
-static method DuplicateExtensionName|get#duplicateMethodName2(final self::Class1* #this) → () →* dynamic
+static method DuplicateExtensionName|get#duplicateMethodName2(lowered final self::Class1* #this) → () →* dynamic
   return () → dynamic => self::DuplicateExtensionName|duplicateMethodName2(#this);
-static method UniqueExtensionName|duplicateMethodName1(final self::Class1* #this) → dynamic
+static method UniqueExtensionName|duplicateMethodName1(lowered final self::Class1* #this) → dynamic
   return 1;
-static method UniqueExtensionName|get#duplicateMethodName1(final self::Class1* #this) → () →* dynamic
+static method UniqueExtensionName|get#duplicateMethodName1(lowered final self::Class1* #this) → () →* dynamic
   return () → dynamic => self::UniqueExtensionName|duplicateMethodName1(#this);
 static method main() → dynamic {
   self::Class1* c1 = new self::Class1::•();
diff --git a/pkg/front_end/testcases/extensions/default_values.dart.outline.expect b/pkg/front_end/testcases/extensions/default_values.dart.outline.expect
index 04ed817..9469573 100644
--- a/pkg/front_end/testcases/extensions/default_values.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/default_values.dart.outline.expect
@@ -27,21 +27,21 @@
   tearoff method3 = self::Extension|get#method3;
   static method staticMethod = self::Extension|staticMethod;
 }
-static method Extension|method0(final self::Class* #this, [dynamic a]) → dynamic
+static method Extension|method0(lowered final self::Class* #this, [dynamic a]) → dynamic
   ;
-static method Extension|get#method0(final self::Class* #this) → ([dynamic]) →* dynamic
+static method Extension|get#method0(lowered final self::Class* #this) → ([dynamic]) →* dynamic
   return ([dynamic a]) → dynamic => self::Extension|method0(#this, a);
-static method Extension|method1(final self::Class* #this, [dynamic a]) → dynamic
+static method Extension|method1(lowered final self::Class* #this, [dynamic a]) → dynamic
   ;
-static method Extension|get#method1(final self::Class* #this) → ([dynamic]) →* dynamic
+static method Extension|get#method1(lowered final self::Class* #this) → ([dynamic]) →* dynamic
   return ([dynamic a]) → dynamic => self::Extension|method1(#this, a);
-static method Extension|method2(final self::Class* #this, {dynamic b}) → dynamic
+static method Extension|method2(lowered final self::Class* #this, {dynamic b}) → dynamic
   ;
-static method Extension|get#method2(final self::Class* #this) → ({b: dynamic}) →* dynamic
+static method Extension|get#method2(lowered final self::Class* #this) → ({b: dynamic}) →* dynamic
   return ({dynamic b}) → dynamic => self::Extension|method2(#this, b: b);
-static method Extension|method3(final self::Class* #this, {dynamic c}) → dynamic
+static method Extension|method3(lowered final self::Class* #this, {dynamic c}) → dynamic
   ;
-static method Extension|get#method3(final self::Class* #this) → ({c: dynamic}) →* dynamic
+static method Extension|get#method3(lowered final self::Class* #this) → ({c: dynamic}) →* dynamic
   return ({dynamic c}) → dynamic => self::Extension|method3(#this, c: c);
 static method Extension|staticMethod() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/default_values.dart.strong.expect b/pkg/front_end/testcases/extensions/default_values.dart.strong.expect
index c31a720..3c37068 100644
--- a/pkg/front_end/testcases/extensions/default_values.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/default_values.dart.strong.expect
@@ -28,21 +28,21 @@
   tearoff method3 = self::Extension|get#method3;
   static method staticMethod = self::Extension|staticMethod;
 }
-static method Extension|method0(final self::Class* #this, [dynamic a = #C1]) → dynamic
+static method Extension|method0(lowered final self::Class* #this, [dynamic a = #C1]) → dynamic
   return a;
-static method Extension|get#method0(final self::Class* #this) → ([dynamic]) →* dynamic
+static method Extension|get#method0(lowered final self::Class* #this) → ([dynamic]) →* dynamic
   return ([dynamic a = #C1]) → dynamic => self::Extension|method0(#this, a);
-static method Extension|method1(final self::Class* #this, [dynamic a = #C2]) → dynamic
+static method Extension|method1(lowered final self::Class* #this, [dynamic a = #C2]) → dynamic
   return a;
-static method Extension|get#method1(final self::Class* #this) → ([dynamic]) →* dynamic
+static method Extension|get#method1(lowered final self::Class* #this) → ([dynamic]) →* dynamic
   return ([dynamic a = #C2]) → dynamic => self::Extension|method1(#this, a);
-static method Extension|method2(final self::Class* #this, {dynamic b = #C3}) → dynamic
+static method Extension|method2(lowered final self::Class* #this, {dynamic b = #C3}) → dynamic
   return b;
-static method Extension|get#method2(final self::Class* #this) → ({b: dynamic}) →* dynamic
+static method Extension|get#method2(lowered final self::Class* #this) → ({b: dynamic}) →* dynamic
   return ({dynamic b = #C3}) → dynamic => self::Extension|method2(#this, b: b);
-static method Extension|method3(final self::Class* #this, {dynamic c = #C4}) → dynamic
+static method Extension|method3(lowered final self::Class* #this, {dynamic c = #C4}) → dynamic
   return c.call();
-static method Extension|get#method3(final self::Class* #this) → ({c: dynamic}) →* dynamic
+static method Extension|get#method3(lowered final self::Class* #this) → ({c: dynamic}) →* dynamic
   return ({dynamic c = #C4}) → dynamic => self::Extension|method3(#this, c: c);
 static method Extension|staticMethod() → dynamic
   return 123;
diff --git a/pkg/front_end/testcases/extensions/default_values.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/default_values.dart.strong.transformed.expect
index c31a720..3c37068 100644
--- a/pkg/front_end/testcases/extensions/default_values.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/default_values.dart.strong.transformed.expect
@@ -28,21 +28,21 @@
   tearoff method3 = self::Extension|get#method3;
   static method staticMethod = self::Extension|staticMethod;
 }
-static method Extension|method0(final self::Class* #this, [dynamic a = #C1]) → dynamic
+static method Extension|method0(lowered final self::Class* #this, [dynamic a = #C1]) → dynamic
   return a;
-static method Extension|get#method0(final self::Class* #this) → ([dynamic]) →* dynamic
+static method Extension|get#method0(lowered final self::Class* #this) → ([dynamic]) →* dynamic
   return ([dynamic a = #C1]) → dynamic => self::Extension|method0(#this, a);
-static method Extension|method1(final self::Class* #this, [dynamic a = #C2]) → dynamic
+static method Extension|method1(lowered final self::Class* #this, [dynamic a = #C2]) → dynamic
   return a;
-static method Extension|get#method1(final self::Class* #this) → ([dynamic]) →* dynamic
+static method Extension|get#method1(lowered final self::Class* #this) → ([dynamic]) →* dynamic
   return ([dynamic a = #C2]) → dynamic => self::Extension|method1(#this, a);
-static method Extension|method2(final self::Class* #this, {dynamic b = #C3}) → dynamic
+static method Extension|method2(lowered final self::Class* #this, {dynamic b = #C3}) → dynamic
   return b;
-static method Extension|get#method2(final self::Class* #this) → ({b: dynamic}) →* dynamic
+static method Extension|get#method2(lowered final self::Class* #this) → ({b: dynamic}) →* dynamic
   return ({dynamic b = #C3}) → dynamic => self::Extension|method2(#this, b: b);
-static method Extension|method3(final self::Class* #this, {dynamic c = #C4}) → dynamic
+static method Extension|method3(lowered final self::Class* #this, {dynamic c = #C4}) → dynamic
   return c.call();
-static method Extension|get#method3(final self::Class* #this) → ({c: dynamic}) →* dynamic
+static method Extension|get#method3(lowered final self::Class* #this) → ({c: dynamic}) →* dynamic
   return ({dynamic c = #C4}) → dynamic => self::Extension|method3(#this, c: c);
 static method Extension|staticMethod() → dynamic
   return 123;
diff --git a/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.outline.expect b/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.outline.expect
index bd4405e..b5db0d7 100644
--- a/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.outline.expect
@@ -38,13 +38,13 @@
   ;
 static method Extension|staticMethod() → core::int*
   ;
-static method Extension|get#property(final core::int* #this) → core::int*
+static method Extension|get#property(lowered final core::int* #this) → core::int*
   ;
-static method Extension|set#property(final core::int* #this, core::int* value) → void
+static method Extension|set#property(lowered final core::int* #this, core::int* value) → void
   ;
-static method Extension|method(final core::int* #this) → core::int*
+static method Extension|method(lowered final core::int* #this) → core::int*
   ;
-static method Extension|get#method(final core::int* #this) → () →* core::int*
+static method Extension|get#method(lowered final core::int* #this) → () →* core::int*
   return () → core::int* => self2::Extension|method(#this);
 static get topLevelProperty() → core::int*
   ;
diff --git a/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.strong.expect b/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.strong.expect
index e9e8aad..eb88dad 100644
--- a/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.strong.expect
@@ -52,14 +52,14 @@
 }
 static method Extension|staticMethod() → core::int*
   return def::Extension|staticField;
-static method Extension|get#property(final core::int* #this) → core::int*
+static method Extension|get#property(lowered final core::int* #this) → core::int*
   return #this.{core::num::+}(def::Extension|staticField);
-static method Extension|set#property(final core::int* #this, core::int* value) → void {
+static method Extension|set#property(lowered final core::int* #this, core::int* value) → void {
   def::Extension|staticField = value;
 }
-static method Extension|method(final core::int* #this) → core::int*
+static method Extension|method(lowered final core::int* #this) → core::int*
   return #this.{core::num::+}(def::Extension|staticField);
-static method Extension|get#method(final core::int* #this) → () →* core::int*
+static method Extension|get#method(lowered final core::int* #this) → () →* core::int*
   return () → core::int* => def::Extension|method(#this);
 static get topLevelProperty() → core::int*
   return def::Extension|staticField;
diff --git a/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.strong.transformed.expect
index cacce17..9a7758f 100644
--- a/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.strong.transformed.expect
@@ -78,14 +78,14 @@
 }
 static method Extension|staticMethod() → core::int*
   return def::Extension|staticField;
-static method Extension|get#property(final core::int* #this) → core::int*
+static method Extension|get#property(lowered final core::int* #this) → core::int*
   return #this.{core::num::+}(def::Extension|staticField);
-static method Extension|set#property(final core::int* #this, core::int* value) → void {
+static method Extension|set#property(lowered final core::int* #this, core::int* value) → void {
   def::Extension|staticField = value;
 }
-static method Extension|method(final core::int* #this) → core::int*
+static method Extension|method(lowered final core::int* #this) → core::int*
   return #this.{core::num::+}(def::Extension|staticField);
-static method Extension|get#method(final core::int* #this) → () →* core::int*
+static method Extension|get#method(lowered final core::int* #this) → () →* core::int*
   return () → core::int* => def::Extension|method(#this);
 static get topLevelProperty() → core::int*
   return def::Extension|staticField;
diff --git a/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.outline.expect b/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.outline.expect
index 92e7dbc..a0ceed4 100644
--- a/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.outline.expect
@@ -30,13 +30,13 @@
   ;
 static method Extension|staticMethod() → core::int*
   ;
-static method Extension|get#property(final core::int* #this) → core::int*
+static method Extension|get#property(lowered final core::int* #this) → core::int*
   ;
-static method Extension|set#property(final core::int* #this, core::int* value) → void
+static method Extension|set#property(lowered final core::int* #this, core::int* value) → void
   ;
-static method Extension|method(final core::int* #this) → core::int*
+static method Extension|method(lowered final core::int* #this) → core::int*
   ;
-static method Extension|get#method(final core::int* #this) → () →* core::int*
+static method Extension|get#method(lowered final core::int* #this) → () →* core::int*
   return () → core::int* => self2::Extension|method(#this);
 static get topLevelProperty() → core::int*
   ;
diff --git a/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.strong.expect b/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.strong.expect
index 310c8c4..614cb6f 100644
--- a/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.strong.expect
@@ -43,14 +43,14 @@
 }
 static method Extension|staticMethod() → core::int*
   return def::Extension|staticField;
-static method Extension|get#property(final core::int* #this) → core::int*
+static method Extension|get#property(lowered final core::int* #this) → core::int*
   return #this.{core::num::+}(def::Extension|staticField);
-static method Extension|set#property(final core::int* #this, core::int* value) → void {
+static method Extension|set#property(lowered final core::int* #this, core::int* value) → void {
   def::Extension|staticField = value;
 }
-static method Extension|method(final core::int* #this) → core::int*
+static method Extension|method(lowered final core::int* #this) → core::int*
   return #this.{core::num::+}(def::Extension|staticField);
-static method Extension|get#method(final core::int* #this) → () →* core::int*
+static method Extension|get#method(lowered final core::int* #this) → () →* core::int*
   return () → core::int* => def::Extension|method(#this);
 static get topLevelProperty() → core::int*
   return def::Extension|staticField;
diff --git a/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.strong.transformed.expect
index c43e5ff..41815d4 100644
--- a/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.strong.transformed.expect
@@ -69,14 +69,14 @@
 }
 static method Extension|staticMethod() → core::int*
   return def::Extension|staticField;
-static method Extension|get#property(final core::int* #this) → core::int*
+static method Extension|get#property(lowered final core::int* #this) → core::int*
   return #this.{core::num::+}(def::Extension|staticField);
-static method Extension|set#property(final core::int* #this, core::int* value) → void {
+static method Extension|set#property(lowered final core::int* #this, core::int* value) → void {
   def::Extension|staticField = value;
 }
-static method Extension|method(final core::int* #this) → core::int*
+static method Extension|method(lowered final core::int* #this) → core::int*
   return #this.{core::num::+}(def::Extension|staticField);
-static method Extension|get#method(final core::int* #this) → () →* core::int*
+static method Extension|get#method(lowered final core::int* #this) → () →* core::int*
   return () → core::int* => def::Extension|method(#this);
 static get topLevelProperty() → core::int*
   return def::Extension|staticField;
diff --git a/pkg/front_end/testcases/extensions/direct_instance_access.dart.outline.expect b/pkg/front_end/testcases/extensions/direct_instance_access.dart.outline.expect
index 2d17121..55a6232 100644
--- a/pkg/front_end/testcases/extensions/direct_instance_access.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/direct_instance_access.dart.outline.expect
@@ -85,103 +85,103 @@
   tearoff getterCalls = self::GenericExtension|get#getterCalls;
   set property = self::GenericExtension|set#property;
 }
-static method Extension|get#readGetter(final self::Class* #this) → () →* dynamic
+static method Extension|get#readGetter(lowered final self::Class* #this) → () →* dynamic
   return () → dynamic => self::Extension|readGetter(#this);
-static method Extension|readGetter(final self::Class* #this) → dynamic
+static method Extension|readGetter(lowered final self::Class* #this) → dynamic
   ;
-static method Extension|writeSetterRequired(final self::Class* #this, dynamic value) → dynamic
+static method Extension|writeSetterRequired(lowered final self::Class* #this, dynamic value) → dynamic
   ;
-static method Extension|get#writeSetterRequired(final self::Class* #this) → (dynamic) →* dynamic
+static method Extension|get#writeSetterRequired(lowered final self::Class* #this) → (dynamic) →* dynamic
   return (dynamic value) → dynamic => self::Extension|writeSetterRequired(#this, value);
-static method Extension|writeSetterOptional(final self::Class* #this, [dynamic value]) → dynamic
+static method Extension|writeSetterOptional(lowered final self::Class* #this, [dynamic value]) → dynamic
   ;
-static method Extension|get#writeSetterOptional(final self::Class* #this) → ([dynamic]) →* dynamic
+static method Extension|get#writeSetterOptional(lowered final self::Class* #this) → ([dynamic]) →* dynamic
   return ([dynamic value]) → dynamic => self::Extension|writeSetterOptional(#this, value);
-static method Extension|writeSetterNamed(final self::Class* #this, {dynamic value}) → dynamic
+static method Extension|writeSetterNamed(lowered final self::Class* #this, {dynamic value}) → dynamic
   ;
-static method Extension|get#writeSetterNamed(final self::Class* #this) → ({value: dynamic}) →* dynamic
+static method Extension|get#writeSetterNamed(lowered final self::Class* #this) → ({value: dynamic}) →* dynamic
   return ({dynamic value}) → dynamic => self::Extension|writeSetterNamed(#this, value: value);
-static method Extension|get#tearOffGetterNoArgs(final self::Class* #this) → dynamic
+static method Extension|get#tearOffGetterNoArgs(lowered final self::Class* #this) → dynamic
   ;
-static method Extension|get#tearOffGetterRequired(final self::Class* #this) → dynamic
+static method Extension|get#tearOffGetterRequired(lowered final self::Class* #this) → dynamic
   ;
-static method Extension|get#tearOffGetterOptional(final self::Class* #this) → dynamic
+static method Extension|get#tearOffGetterOptional(lowered final self::Class* #this) → dynamic
   ;
-static method Extension|get#tearOffGetterNamed(final self::Class* #this) → dynamic
+static method Extension|get#tearOffGetterNamed(lowered final self::Class* #this) → dynamic
   ;
-static method Extension|get#property(final self::Class* #this) → dynamic
+static method Extension|get#property(lowered final self::Class* #this) → dynamic
   ;
-static method Extension|set#property(final self::Class* #this, dynamic value) → void
+static method Extension|set#property(lowered final self::Class* #this, dynamic value) → void
   ;
-static method Extension|invocations(final self::Class* #this, dynamic value) → dynamic
+static method Extension|invocations(lowered final self::Class* #this, dynamic value) → dynamic
   ;
-static method Extension|get#invocations(final self::Class* #this) → (dynamic) →* dynamic
+static method Extension|get#invocations(lowered final self::Class* #this) → (dynamic) →* dynamic
   return (dynamic value) → dynamic => self::Extension|invocations(#this, value);
-static method Extension|get#tearOffs(final self::Class* #this) → (dynamic) →* dynamic
+static method Extension|get#tearOffs(lowered final self::Class* #this) → (dynamic) →* dynamic
   return (dynamic value) → dynamic => self::Extension|tearOffs(#this, value);
-static method Extension|tearOffs(final self::Class* #this, dynamic value) → dynamic
+static method Extension|tearOffs(lowered final self::Class* #this, dynamic value) → dynamic
   ;
-static method Extension|getterCalls(final self::Class* #this, dynamic value) → dynamic
+static method Extension|getterCalls(lowered final self::Class* #this, dynamic value) → dynamic
   ;
-static method Extension|get#getterCalls(final self::Class* #this) → (dynamic) →* dynamic
+static method Extension|get#getterCalls(lowered final self::Class* #this) → (dynamic) →* dynamic
   return (dynamic value) → dynamic => self::Extension|getterCalls(#this, value);
-static method GenericExtension|readGetter<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|readGetter::T*>* #this) → self::GenericExtension|readGetter::T*
+static method GenericExtension|readGetter<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|readGetter::T*>* #this) → self::GenericExtension|readGetter::T*
   ;
-static method GenericExtension|get#readGetter<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#readGetter::T*>* #this) → () →* self::GenericExtension|get#readGetter::T*
+static method GenericExtension|get#readGetter<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#readGetter::T*>* #this) → () →* self::GenericExtension|get#readGetter::T*
   return () → self::GenericExtension|get#readGetter::T* => self::GenericExtension|readGetter<self::GenericExtension|get#readGetter::T*>(#this);
-static method GenericExtension|writeSetterRequired<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|writeSetterRequired::T*>* #this, self::GenericExtension|writeSetterRequired::T* value) → dynamic
+static method GenericExtension|writeSetterRequired<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|writeSetterRequired::T*>* #this, self::GenericExtension|writeSetterRequired::T* value) → dynamic
   ;
-static method GenericExtension|get#writeSetterRequired<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#writeSetterRequired::T*>* #this) → (self::GenericExtension|get#writeSetterRequired::T*) →* dynamic
+static method GenericExtension|get#writeSetterRequired<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#writeSetterRequired::T*>* #this) → (self::GenericExtension|get#writeSetterRequired::T*) →* dynamic
   return (self::GenericExtension|get#writeSetterRequired::T* value) → dynamic => self::GenericExtension|writeSetterRequired<self::GenericExtension|get#writeSetterRequired::T*>(#this, value);
-static method GenericExtension|writeSetterOptional<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|writeSetterOptional::T*>* #this, [self::GenericExtension|writeSetterOptional::T* value]) → dynamic
+static method GenericExtension|writeSetterOptional<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|writeSetterOptional::T*>* #this, [self::GenericExtension|writeSetterOptional::T* value]) → dynamic
   ;
-static method GenericExtension|get#writeSetterOptional<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#writeSetterOptional::T*>* #this) → ([self::GenericExtension|get#writeSetterOptional::T*]) →* dynamic
+static method GenericExtension|get#writeSetterOptional<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#writeSetterOptional::T*>* #this) → ([self::GenericExtension|get#writeSetterOptional::T*]) →* dynamic
   return ([self::GenericExtension|get#writeSetterOptional::T* value]) → dynamic => self::GenericExtension|writeSetterOptional<self::GenericExtension|get#writeSetterOptional::T*>(#this, value);
-static method GenericExtension|writeSetterNamed<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|writeSetterNamed::T*>* #this, {self::GenericExtension|writeSetterNamed::T* value}) → dynamic
+static method GenericExtension|writeSetterNamed<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|writeSetterNamed::T*>* #this, {self::GenericExtension|writeSetterNamed::T* value}) → dynamic
   ;
-static method GenericExtension|get#writeSetterNamed<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#writeSetterNamed::T*>* #this) → ({value: self::GenericExtension|get#writeSetterNamed::T*}) →* dynamic
+static method GenericExtension|get#writeSetterNamed<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#writeSetterNamed::T*>* #this) → ({value: self::GenericExtension|get#writeSetterNamed::T*}) →* dynamic
   return ({self::GenericExtension|get#writeSetterNamed::T* value}) → dynamic => self::GenericExtension|writeSetterNamed<self::GenericExtension|get#writeSetterNamed::T*>(#this, value: value);
-static method GenericExtension|genericWriteSetterRequired<T extends core::Object* = dynamic, S extends self::GenericExtension|genericWriteSetterRequired::T* = dynamic>(final self::GenericClass<self::GenericExtension|genericWriteSetterRequired::T*>* #this, self::GenericExtension|genericWriteSetterRequired::S* value) → dynamic
+static method GenericExtension|genericWriteSetterRequired<T extends core::Object* = dynamic, S extends self::GenericExtension|genericWriteSetterRequired::T* = dynamic>(lowered final self::GenericClass<self::GenericExtension|genericWriteSetterRequired::T*>* #this, self::GenericExtension|genericWriteSetterRequired::S* value) → dynamic
   ;
-static method GenericExtension|get#genericWriteSetterRequired<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#genericWriteSetterRequired::T*>* #this) → <S extends self::GenericExtension|get#genericWriteSetterRequired::T* = dynamic>(S*) →* dynamic
+static method GenericExtension|get#genericWriteSetterRequired<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#genericWriteSetterRequired::T*>* #this) → <S extends self::GenericExtension|get#genericWriteSetterRequired::T* = dynamic>(S*) →* dynamic
   return <S extends self::GenericExtension|get#genericWriteSetterRequired::T* = dynamic>(S* value) → dynamic => self::GenericExtension|genericWriteSetterRequired<self::GenericExtension|get#genericWriteSetterRequired::T*, S*>(#this, value);
-static method GenericExtension|genericWriteSetterOptional<T extends core::Object* = dynamic, S extends self::GenericExtension|genericWriteSetterOptional::T* = dynamic>(final self::GenericClass<self::GenericExtension|genericWriteSetterOptional::T*>* #this, [self::GenericExtension|genericWriteSetterOptional::S* value]) → dynamic
+static method GenericExtension|genericWriteSetterOptional<T extends core::Object* = dynamic, S extends self::GenericExtension|genericWriteSetterOptional::T* = dynamic>(lowered final self::GenericClass<self::GenericExtension|genericWriteSetterOptional::T*>* #this, [self::GenericExtension|genericWriteSetterOptional::S* value]) → dynamic
   ;
-static method GenericExtension|get#genericWriteSetterOptional<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#genericWriteSetterOptional::T*>* #this) → <S extends self::GenericExtension|get#genericWriteSetterOptional::T* = dynamic>([S*]) →* dynamic
+static method GenericExtension|get#genericWriteSetterOptional<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#genericWriteSetterOptional::T*>* #this) → <S extends self::GenericExtension|get#genericWriteSetterOptional::T* = dynamic>([S*]) →* dynamic
   return <S extends self::GenericExtension|get#genericWriteSetterOptional::T* = dynamic>([S* value]) → dynamic => self::GenericExtension|genericWriteSetterOptional<self::GenericExtension|get#genericWriteSetterOptional::T*, S*>(#this, value);
-static method GenericExtension|get#genericWriteSetterNamed<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#genericWriteSetterNamed::T*>* #this) → <S extends self::GenericExtension|get#genericWriteSetterNamed::T* = dynamic>({value: S*}) →* dynamic
+static method GenericExtension|get#genericWriteSetterNamed<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#genericWriteSetterNamed::T*>* #this) → <S extends self::GenericExtension|get#genericWriteSetterNamed::T* = dynamic>({value: S*}) →* dynamic
   return <S extends self::GenericExtension|get#genericWriteSetterNamed::T* = dynamic>({S* value}) → dynamic => self::GenericExtension|genericWriteSetterNamed<self::GenericExtension|get#genericWriteSetterNamed::T*, S*>(#this, value: value);
-static method GenericExtension|genericWriteSetterNamed<T extends core::Object* = dynamic, S extends self::GenericExtension|genericWriteSetterNamed::T* = dynamic>(final self::GenericClass<self::GenericExtension|genericWriteSetterNamed::T*>* #this, {self::GenericExtension|genericWriteSetterNamed::S* value}) → dynamic
+static method GenericExtension|genericWriteSetterNamed<T extends core::Object* = dynamic, S extends self::GenericExtension|genericWriteSetterNamed::T* = dynamic>(lowered final self::GenericClass<self::GenericExtension|genericWriteSetterNamed::T*>* #this, {self::GenericExtension|genericWriteSetterNamed::S* value}) → dynamic
   ;
-static method GenericExtension|get#property<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#property::T*>* #this) → self::GenericExtension|get#property::T*
+static method GenericExtension|get#property<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#property::T*>* #this) → self::GenericExtension|get#property::T*
   ;
-static method GenericExtension|set#property<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|set#property::T*>* #this, self::GenericExtension|set#property::T* value) → void
+static method GenericExtension|set#property<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|set#property::T*>* #this, self::GenericExtension|set#property::T* value) → void
   ;
-static method GenericExtension|get#tearOffGetterNoArgs<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#tearOffGetterNoArgs::T*>* #this) → dynamic
+static method GenericExtension|get#tearOffGetterNoArgs<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#tearOffGetterNoArgs::T*>* #this) → dynamic
   ;
-static method GenericExtension|get#tearOffGetterRequired<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#tearOffGetterRequired::T*>* #this) → dynamic
+static method GenericExtension|get#tearOffGetterRequired<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#tearOffGetterRequired::T*>* #this) → dynamic
   ;
-static method GenericExtension|get#tearOffGetterOptional<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#tearOffGetterOptional::T*>* #this) → dynamic
+static method GenericExtension|get#tearOffGetterOptional<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#tearOffGetterOptional::T*>* #this) → dynamic
   ;
-static method GenericExtension|get#tearOffGetterNamed<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#tearOffGetterNamed::T*>* #this) → dynamic
+static method GenericExtension|get#tearOffGetterNamed<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#tearOffGetterNamed::T*>* #this) → dynamic
   ;
-static method GenericExtension|get#tearOffGetterGenericRequired<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#tearOffGetterGenericRequired::T*>* #this) → dynamic
+static method GenericExtension|get#tearOffGetterGenericRequired<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#tearOffGetterGenericRequired::T*>* #this) → dynamic
   ;
-static method GenericExtension|get#tearOffGetterGenericOptional<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#tearOffGetterGenericOptional::T*>* #this) → dynamic
+static method GenericExtension|get#tearOffGetterGenericOptional<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#tearOffGetterGenericOptional::T*>* #this) → dynamic
   ;
-static method GenericExtension|get#tearOffGetterGenericNamed<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#tearOffGetterGenericNamed::T*>* #this) → dynamic
+static method GenericExtension|get#tearOffGetterGenericNamed<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#tearOffGetterGenericNamed::T*>* #this) → dynamic
   ;
-static method GenericExtension|invocations<T extends core::Object* = dynamic, S extends self::GenericExtension|invocations::T* = dynamic>(final self::GenericClass<self::GenericExtension|invocations::T*>* #this, self::GenericExtension|invocations::S* value) → dynamic
+static method GenericExtension|invocations<T extends core::Object* = dynamic, S extends self::GenericExtension|invocations::T* = dynamic>(lowered final self::GenericClass<self::GenericExtension|invocations::T*>* #this, self::GenericExtension|invocations::S* value) → dynamic
   ;
-static method GenericExtension|get#invocations<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#invocations::T*>* #this) → <S extends self::GenericExtension|get#invocations::T* = dynamic>(S*) →* dynamic
+static method GenericExtension|get#invocations<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#invocations::T*>* #this) → <S extends self::GenericExtension|get#invocations::T* = dynamic>(S*) →* dynamic
   return <S extends self::GenericExtension|get#invocations::T* = dynamic>(S* value) → dynamic => self::GenericExtension|invocations<self::GenericExtension|get#invocations::T*, S*>(#this, value);
-static method GenericExtension|tearOffs<T extends core::Object* = dynamic, S extends self::GenericExtension|tearOffs::T* = dynamic>(final self::GenericClass<self::GenericExtension|tearOffs::T*>* #this, self::GenericExtension|tearOffs::S* value) → dynamic
+static method GenericExtension|tearOffs<T extends core::Object* = dynamic, S extends self::GenericExtension|tearOffs::T* = dynamic>(lowered final self::GenericClass<self::GenericExtension|tearOffs::T*>* #this, self::GenericExtension|tearOffs::S* value) → dynamic
   ;
-static method GenericExtension|get#tearOffs<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#tearOffs::T*>* #this) → <S extends self::GenericExtension|get#tearOffs::T* = dynamic>(S*) →* dynamic
+static method GenericExtension|get#tearOffs<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#tearOffs::T*>* #this) → <S extends self::GenericExtension|get#tearOffs::T* = dynamic>(S*) →* dynamic
   return <S extends self::GenericExtension|get#tearOffs::T* = dynamic>(S* value) → dynamic => self::GenericExtension|tearOffs<self::GenericExtension|get#tearOffs::T*, S*>(#this, value);
-static method GenericExtension|getterCalls<T extends core::Object* = dynamic, S extends self::GenericExtension|getterCalls::T* = dynamic>(final self::GenericClass<self::GenericExtension|getterCalls::T*>* #this, self::GenericExtension|getterCalls::S* value) → dynamic
+static method GenericExtension|getterCalls<T extends core::Object* = dynamic, S extends self::GenericExtension|getterCalls::T* = dynamic>(lowered final self::GenericClass<self::GenericExtension|getterCalls::T*>* #this, self::GenericExtension|getterCalls::S* value) → dynamic
   ;
-static method GenericExtension|get#getterCalls<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#getterCalls::T*>* #this) → <S extends self::GenericExtension|get#getterCalls::T* = dynamic>(S*) →* dynamic
+static method GenericExtension|get#getterCalls<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#getterCalls::T*>* #this) → <S extends self::GenericExtension|get#getterCalls::T* = dynamic>(S*) →* dynamic
   return <S extends self::GenericExtension|get#getterCalls::T* = dynamic>(S* value) → dynamic => self::GenericExtension|getterCalls<self::GenericExtension|get#getterCalls::T*, S*>(#this, value);
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/direct_instance_access.dart.strong.expect b/pkg/front_end/testcases/extensions/direct_instance_access.dart.strong.expect
index 17dadac..394a69b3 100644
--- a/pkg/front_end/testcases/extensions/direct_instance_access.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/direct_instance_access.dart.strong.expect
@@ -87,40 +87,40 @@
   tearoff getterCalls = self::GenericExtension|get#getterCalls;
   set property = self::GenericExtension|set#property;
 }
-static method Extension|get#readGetter(final self::Class* #this) → () →* dynamic
+static method Extension|get#readGetter(lowered final self::Class* #this) → () →* dynamic
   return () → dynamic => self::Extension|readGetter(#this);
-static method Extension|readGetter(final self::Class* #this) → dynamic {
+static method Extension|readGetter(lowered final self::Class* #this) → dynamic {
   return self::Extension|get#property(#this);
 }
-static method Extension|writeSetterRequired(final self::Class* #this, dynamic value) → dynamic {
+static method Extension|writeSetterRequired(lowered final self::Class* #this, dynamic value) → dynamic {
   self::Extension|set#property(#this, value);
 }
-static method Extension|get#writeSetterRequired(final self::Class* #this) → (dynamic) →* dynamic
+static method Extension|get#writeSetterRequired(lowered final self::Class* #this) → (dynamic) →* dynamic
   return (dynamic value) → dynamic => self::Extension|writeSetterRequired(#this, value);
-static method Extension|writeSetterOptional(final self::Class* #this, [dynamic value = #C1]) → dynamic {
+static method Extension|writeSetterOptional(lowered final self::Class* #this, [dynamic value = #C1]) → dynamic {
   self::Extension|set#property(#this, value);
 }
-static method Extension|get#writeSetterOptional(final self::Class* #this) → ([dynamic]) →* dynamic
+static method Extension|get#writeSetterOptional(lowered final self::Class* #this) → ([dynamic]) →* dynamic
   return ([dynamic value = #C1]) → dynamic => self::Extension|writeSetterOptional(#this, value);
-static method Extension|writeSetterNamed(final self::Class* #this, {dynamic value = #C1}) → dynamic {
+static method Extension|writeSetterNamed(lowered final self::Class* #this, {dynamic value = #C1}) → dynamic {
   self::Extension|set#property(#this, value);
 }
-static method Extension|get#writeSetterNamed(final self::Class* #this) → ({value: dynamic}) →* dynamic
+static method Extension|get#writeSetterNamed(lowered final self::Class* #this) → ({value: dynamic}) →* dynamic
   return ({dynamic value = #C1}) → dynamic => self::Extension|writeSetterNamed(#this, value: value);
-static method Extension|get#tearOffGetterNoArgs(final self::Class* #this) → dynamic
+static method Extension|get#tearOffGetterNoArgs(lowered final self::Class* #this) → dynamic
   return self::Extension|get#readGetter(#this);
-static method Extension|get#tearOffGetterRequired(final self::Class* #this) → dynamic
+static method Extension|get#tearOffGetterRequired(lowered final self::Class* #this) → dynamic
   return self::Extension|get#writeSetterRequired(#this);
-static method Extension|get#tearOffGetterOptional(final self::Class* #this) → dynamic
+static method Extension|get#tearOffGetterOptional(lowered final self::Class* #this) → dynamic
   return self::Extension|get#writeSetterOptional(#this);
-static method Extension|get#tearOffGetterNamed(final self::Class* #this) → dynamic
+static method Extension|get#tearOffGetterNamed(lowered final self::Class* #this) → dynamic
   return self::Extension|get#writeSetterNamed(#this);
-static method Extension|get#property(final self::Class* #this) → dynamic
+static method Extension|get#property(lowered final self::Class* #this) → dynamic
   return #this.{self::Class::field};
-static method Extension|set#property(final self::Class* #this, dynamic value) → void {
+static method Extension|set#property(lowered final self::Class* #this, dynamic value) → void {
   #this.{self::Class::field} = value;
 }
-static method Extension|invocations(final self::Class* #this, dynamic value) → dynamic {
+static method Extension|invocations(lowered final self::Class* #this, dynamic value) → dynamic {
   self::Extension|readGetter(#this);
   self::Extension|writeSetterRequired(#this, value);
   self::Extension|writeSetterOptional(#this);
@@ -128,11 +128,11 @@
   self::Extension|writeSetterNamed(#this);
   self::Extension|writeSetterNamed(#this, value: value);
 }
-static method Extension|get#invocations(final self::Class* #this) → (dynamic) →* dynamic
+static method Extension|get#invocations(lowered final self::Class* #this) → (dynamic) →* dynamic
   return (dynamic value) → dynamic => self::Extension|invocations(#this, value);
-static method Extension|get#tearOffs(final self::Class* #this) → (dynamic) →* dynamic
+static method Extension|get#tearOffs(lowered final self::Class* #this) → (dynamic) →* dynamic
   return (dynamic value) → dynamic => self::Extension|tearOffs(#this, value);
-static method Extension|tearOffs(final self::Class* #this, dynamic value) → dynamic {
+static method Extension|tearOffs(lowered final self::Class* #this, dynamic value) → dynamic {
   () →* dynamic tearOffNoArgs = self::Extension|get#readGetter(#this);
   tearOffNoArgs.call();
   (dynamic) →* dynamic tearOffRequired = self::Extension|get#writeSetterRequired(#this);
@@ -144,7 +144,7 @@
   tearOffNamed.call();
   tearOffNamed.call(value: value);
 }
-static method Extension|getterCalls(final self::Class* #this, dynamic value) → dynamic {
+static method Extension|getterCalls(lowered final self::Class* #this, dynamic value) → dynamic {
   self::Extension|get#tearOffGetterNoArgs(#this).call();
   self::Extension|get#tearOffGetterRequired(#this).call(value);
   self::Extension|get#tearOffGetterOptional(#this).call();
@@ -152,63 +152,63 @@
   self::Extension|get#tearOffGetterNamed(#this).call();
   self::Extension|get#tearOffGetterNamed(#this).call(value: value);
 }
-static method Extension|get#getterCalls(final self::Class* #this) → (dynamic) →* dynamic
+static method Extension|get#getterCalls(lowered final self::Class* #this) → (dynamic) →* dynamic
   return (dynamic value) → dynamic => self::Extension|getterCalls(#this, value);
-static method GenericExtension|readGetter<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|readGetter::T*>* #this) → self::GenericExtension|readGetter::T* {
+static method GenericExtension|readGetter<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|readGetter::T*>* #this) → self::GenericExtension|readGetter::T* {
   return self::GenericExtension|get#property<self::GenericExtension|readGetter::T*>(#this);
 }
-static method GenericExtension|get#readGetter<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#readGetter::T*>* #this) → () →* self::GenericExtension|get#readGetter::T*
+static method GenericExtension|get#readGetter<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#readGetter::T*>* #this) → () →* self::GenericExtension|get#readGetter::T*
   return () → self::GenericExtension|get#readGetter::T* => self::GenericExtension|readGetter<self::GenericExtension|get#readGetter::T*>(#this);
-static method GenericExtension|writeSetterRequired<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|writeSetterRequired::T*>* #this, self::GenericExtension|writeSetterRequired::T* value) → dynamic {
+static method GenericExtension|writeSetterRequired<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|writeSetterRequired::T*>* #this, self::GenericExtension|writeSetterRequired::T* value) → dynamic {
   self::GenericExtension|set#property<self::GenericExtension|writeSetterRequired::T*>(#this, value);
 }
-static method GenericExtension|get#writeSetterRequired<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#writeSetterRequired::T*>* #this) → (self::GenericExtension|get#writeSetterRequired::T*) →* dynamic
+static method GenericExtension|get#writeSetterRequired<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#writeSetterRequired::T*>* #this) → (self::GenericExtension|get#writeSetterRequired::T*) →* dynamic
   return (self::GenericExtension|get#writeSetterRequired::T* value) → dynamic => self::GenericExtension|writeSetterRequired<self::GenericExtension|get#writeSetterRequired::T*>(#this, value);
-static method GenericExtension|writeSetterOptional<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|writeSetterOptional::T*>* #this, [self::GenericExtension|writeSetterOptional::T* value = #C1]) → dynamic {
+static method GenericExtension|writeSetterOptional<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|writeSetterOptional::T*>* #this, [self::GenericExtension|writeSetterOptional::T* value = #C1]) → dynamic {
   self::GenericExtension|set#property<self::GenericExtension|writeSetterOptional::T*>(#this, value);
 }
-static method GenericExtension|get#writeSetterOptional<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#writeSetterOptional::T*>* #this) → ([self::GenericExtension|get#writeSetterOptional::T*]) →* dynamic
+static method GenericExtension|get#writeSetterOptional<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#writeSetterOptional::T*>* #this) → ([self::GenericExtension|get#writeSetterOptional::T*]) →* dynamic
   return ([self::GenericExtension|get#writeSetterOptional::T* value = #C1]) → dynamic => self::GenericExtension|writeSetterOptional<self::GenericExtension|get#writeSetterOptional::T*>(#this, value);
-static method GenericExtension|writeSetterNamed<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|writeSetterNamed::T*>* #this, {self::GenericExtension|writeSetterNamed::T* value = #C1}) → dynamic {
+static method GenericExtension|writeSetterNamed<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|writeSetterNamed::T*>* #this, {self::GenericExtension|writeSetterNamed::T* value = #C1}) → dynamic {
   self::GenericExtension|set#property<self::GenericExtension|writeSetterNamed::T*>(#this, value);
 }
-static method GenericExtension|get#writeSetterNamed<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#writeSetterNamed::T*>* #this) → ({value: self::GenericExtension|get#writeSetterNamed::T*}) →* dynamic
+static method GenericExtension|get#writeSetterNamed<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#writeSetterNamed::T*>* #this) → ({value: self::GenericExtension|get#writeSetterNamed::T*}) →* dynamic
   return ({self::GenericExtension|get#writeSetterNamed::T* value = #C1}) → dynamic => self::GenericExtension|writeSetterNamed<self::GenericExtension|get#writeSetterNamed::T*>(#this, value: value);
-static method GenericExtension|genericWriteSetterRequired<T extends core::Object* = dynamic, S extends self::GenericExtension|genericWriteSetterRequired::T* = dynamic>(final self::GenericClass<self::GenericExtension|genericWriteSetterRequired::T*>* #this, self::GenericExtension|genericWriteSetterRequired::S* value) → dynamic {
+static method GenericExtension|genericWriteSetterRequired<T extends core::Object* = dynamic, S extends self::GenericExtension|genericWriteSetterRequired::T* = dynamic>(lowered final self::GenericClass<self::GenericExtension|genericWriteSetterRequired::T*>* #this, self::GenericExtension|genericWriteSetterRequired::S* value) → dynamic {
   self::GenericExtension|set#property<self::GenericExtension|genericWriteSetterRequired::T*>(#this, value);
 }
-static method GenericExtension|get#genericWriteSetterRequired<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#genericWriteSetterRequired::T*>* #this) → <S extends self::GenericExtension|get#genericWriteSetterRequired::T* = dynamic>(S*) →* dynamic
+static method GenericExtension|get#genericWriteSetterRequired<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#genericWriteSetterRequired::T*>* #this) → <S extends self::GenericExtension|get#genericWriteSetterRequired::T* = dynamic>(S*) →* dynamic
   return <S extends self::GenericExtension|get#genericWriteSetterRequired::T* = dynamic>(S* value) → dynamic => self::GenericExtension|genericWriteSetterRequired<self::GenericExtension|get#genericWriteSetterRequired::T*, S*>(#this, value);
-static method GenericExtension|genericWriteSetterOptional<T extends core::Object* = dynamic, S extends self::GenericExtension|genericWriteSetterOptional::T* = dynamic>(final self::GenericClass<self::GenericExtension|genericWriteSetterOptional::T*>* #this, [self::GenericExtension|genericWriteSetterOptional::S* value = #C1]) → dynamic {
+static method GenericExtension|genericWriteSetterOptional<T extends core::Object* = dynamic, S extends self::GenericExtension|genericWriteSetterOptional::T* = dynamic>(lowered final self::GenericClass<self::GenericExtension|genericWriteSetterOptional::T*>* #this, [self::GenericExtension|genericWriteSetterOptional::S* value = #C1]) → dynamic {
   self::GenericExtension|set#property<self::GenericExtension|genericWriteSetterOptional::T*>(#this, value);
 }
-static method GenericExtension|get#genericWriteSetterOptional<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#genericWriteSetterOptional::T*>* #this) → <S extends self::GenericExtension|get#genericWriteSetterOptional::T* = dynamic>([S*]) →* dynamic
+static method GenericExtension|get#genericWriteSetterOptional<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#genericWriteSetterOptional::T*>* #this) → <S extends self::GenericExtension|get#genericWriteSetterOptional::T* = dynamic>([S*]) →* dynamic
   return <S extends self::GenericExtension|get#genericWriteSetterOptional::T* = dynamic>([S* value = #C1]) → dynamic => self::GenericExtension|genericWriteSetterOptional<self::GenericExtension|get#genericWriteSetterOptional::T*, S*>(#this, value);
-static method GenericExtension|get#genericWriteSetterNamed<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#genericWriteSetterNamed::T*>* #this) → <S extends self::GenericExtension|get#genericWriteSetterNamed::T* = dynamic>({value: S*}) →* dynamic
+static method GenericExtension|get#genericWriteSetterNamed<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#genericWriteSetterNamed::T*>* #this) → <S extends self::GenericExtension|get#genericWriteSetterNamed::T* = dynamic>({value: S*}) →* dynamic
   return <S extends self::GenericExtension|get#genericWriteSetterNamed::T* = dynamic>({S* value = #C1}) → dynamic => self::GenericExtension|genericWriteSetterNamed<self::GenericExtension|get#genericWriteSetterNamed::T*, S*>(#this, value: value);
-static method GenericExtension|genericWriteSetterNamed<T extends core::Object* = dynamic, S extends self::GenericExtension|genericWriteSetterNamed::T* = dynamic>(final self::GenericClass<self::GenericExtension|genericWriteSetterNamed::T*>* #this, {self::GenericExtension|genericWriteSetterNamed::S* value = #C1}) → dynamic {
+static method GenericExtension|genericWriteSetterNamed<T extends core::Object* = dynamic, S extends self::GenericExtension|genericWriteSetterNamed::T* = dynamic>(lowered final self::GenericClass<self::GenericExtension|genericWriteSetterNamed::T*>* #this, {self::GenericExtension|genericWriteSetterNamed::S* value = #C1}) → dynamic {
   self::GenericExtension|set#property<self::GenericExtension|genericWriteSetterNamed::T*>(#this, value);
 }
-static method GenericExtension|get#property<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#property::T*>* #this) → self::GenericExtension|get#property::T*
+static method GenericExtension|get#property<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#property::T*>* #this) → self::GenericExtension|get#property::T*
   return #this.{self::GenericClass::field};
-static method GenericExtension|set#property<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|set#property::T*>* #this, self::GenericExtension|set#property::T* value) → void {
+static method GenericExtension|set#property<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|set#property::T*>* #this, self::GenericExtension|set#property::T* value) → void {
   #this.{self::GenericClass::field} = value;
 }
-static method GenericExtension|get#tearOffGetterNoArgs<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#tearOffGetterNoArgs::T*>* #this) → dynamic
+static method GenericExtension|get#tearOffGetterNoArgs<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#tearOffGetterNoArgs::T*>* #this) → dynamic
   return self::GenericExtension|get#readGetter<self::GenericExtension|get#tearOffGetterNoArgs::T*>(#this);
-static method GenericExtension|get#tearOffGetterRequired<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#tearOffGetterRequired::T*>* #this) → dynamic
+static method GenericExtension|get#tearOffGetterRequired<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#tearOffGetterRequired::T*>* #this) → dynamic
   return self::GenericExtension|get#writeSetterRequired<self::GenericExtension|get#tearOffGetterRequired::T*>(#this);
-static method GenericExtension|get#tearOffGetterOptional<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#tearOffGetterOptional::T*>* #this) → dynamic
+static method GenericExtension|get#tearOffGetterOptional<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#tearOffGetterOptional::T*>* #this) → dynamic
   return self::GenericExtension|get#writeSetterOptional<self::GenericExtension|get#tearOffGetterOptional::T*>(#this);
-static method GenericExtension|get#tearOffGetterNamed<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#tearOffGetterNamed::T*>* #this) → dynamic
+static method GenericExtension|get#tearOffGetterNamed<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#tearOffGetterNamed::T*>* #this) → dynamic
   return self::GenericExtension|get#writeSetterNamed<self::GenericExtension|get#tearOffGetterNamed::T*>(#this);
-static method GenericExtension|get#tearOffGetterGenericRequired<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#tearOffGetterGenericRequired::T*>* #this) → dynamic
+static method GenericExtension|get#tearOffGetterGenericRequired<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#tearOffGetterGenericRequired::T*>* #this) → dynamic
   return self::GenericExtension|get#genericWriteSetterRequired<self::GenericExtension|get#tearOffGetterGenericRequired::T*>(#this);
-static method GenericExtension|get#tearOffGetterGenericOptional<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#tearOffGetterGenericOptional::T*>* #this) → dynamic
+static method GenericExtension|get#tearOffGetterGenericOptional<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#tearOffGetterGenericOptional::T*>* #this) → dynamic
   return self::GenericExtension|get#genericWriteSetterOptional<self::GenericExtension|get#tearOffGetterGenericOptional::T*>(#this);
-static method GenericExtension|get#tearOffGetterGenericNamed<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#tearOffGetterGenericNamed::T*>* #this) → dynamic
+static method GenericExtension|get#tearOffGetterGenericNamed<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#tearOffGetterGenericNamed::T*>* #this) → dynamic
   return self::GenericExtension|get#genericWriteSetterNamed<self::GenericExtension|get#tearOffGetterGenericNamed::T*>(#this);
-static method GenericExtension|invocations<T extends core::Object* = dynamic, S extends self::GenericExtension|invocations::T* = dynamic>(final self::GenericClass<self::GenericExtension|invocations::T*>* #this, self::GenericExtension|invocations::S* value) → dynamic {
+static method GenericExtension|invocations<T extends core::Object* = dynamic, S extends self::GenericExtension|invocations::T* = dynamic>(lowered final self::GenericClass<self::GenericExtension|invocations::T*>* #this, self::GenericExtension|invocations::S* value) → dynamic {
   self::GenericExtension|readGetter<self::GenericExtension|invocations::T*>(#this);
   self::GenericExtension|writeSetterRequired<self::GenericExtension|invocations::T*>(#this, value);
   self::GenericExtension|writeSetterOptional<self::GenericExtension|invocations::T*>(#this);
@@ -231,9 +231,9 @@
   self::GenericExtension|genericWriteSetterNamed<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::T*>(#this, value: value);
   self::GenericExtension|genericWriteSetterNamed<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::S*>(#this, value: value);
 }
-static method GenericExtension|get#invocations<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#invocations::T*>* #this) → <S extends self::GenericExtension|get#invocations::T* = dynamic>(S*) →* dynamic
+static method GenericExtension|get#invocations<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#invocations::T*>* #this) → <S extends self::GenericExtension|get#invocations::T* = dynamic>(S*) →* dynamic
   return <S extends self::GenericExtension|get#invocations::T* = dynamic>(S* value) → dynamic => self::GenericExtension|invocations<self::GenericExtension|get#invocations::T*, S*>(#this, value);
-static method GenericExtension|tearOffs<T extends core::Object* = dynamic, S extends self::GenericExtension|tearOffs::T* = dynamic>(final self::GenericClass<self::GenericExtension|tearOffs::T*>* #this, self::GenericExtension|tearOffs::S* value) → dynamic {
+static method GenericExtension|tearOffs<T extends core::Object* = dynamic, S extends self::GenericExtension|tearOffs::T* = dynamic>(lowered final self::GenericClass<self::GenericExtension|tearOffs::T*>* #this, self::GenericExtension|tearOffs::S* value) → dynamic {
   () →* self::GenericExtension|tearOffs::T* tearOffNoArgs = self::GenericExtension|get#readGetter<self::GenericExtension|tearOffs::T*>(#this);
   tearOffNoArgs.call();
   (self::GenericExtension|tearOffs::T*) →* dynamic tearOffRequired = self::GenericExtension|get#writeSetterRequired<self::GenericExtension|tearOffs::T*>(#this);
@@ -263,9 +263,9 @@
   genericTearOffNamed.call<self::GenericExtension|tearOffs::T*>(value: value);
   genericTearOffNamed.call<self::GenericExtension|tearOffs::S*>(value: value);
 }
-static method GenericExtension|get#tearOffs<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#tearOffs::T*>* #this) → <S extends self::GenericExtension|get#tearOffs::T* = dynamic>(S*) →* dynamic
+static method GenericExtension|get#tearOffs<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#tearOffs::T*>* #this) → <S extends self::GenericExtension|get#tearOffs::T* = dynamic>(S*) →* dynamic
   return <S extends self::GenericExtension|get#tearOffs::T* = dynamic>(S* value) → dynamic => self::GenericExtension|tearOffs<self::GenericExtension|get#tearOffs::T*, S*>(#this, value);
-static method GenericExtension|getterCalls<T extends core::Object* = dynamic, S extends self::GenericExtension|getterCalls::T* = dynamic>(final self::GenericClass<self::GenericExtension|getterCalls::T*>* #this, self::GenericExtension|getterCalls::S* value) → dynamic {
+static method GenericExtension|getterCalls<T extends core::Object* = dynamic, S extends self::GenericExtension|getterCalls::T* = dynamic>(lowered final self::GenericClass<self::GenericExtension|getterCalls::T*>* #this, self::GenericExtension|getterCalls::S* value) → dynamic {
   self::GenericExtension|get#tearOffGetterNoArgs<self::GenericExtension|getterCalls::T*>(#this).call();
   self::GenericExtension|get#tearOffGetterRequired<self::GenericExtension|getterCalls::T*>(#this).call(value);
   self::GenericExtension|get#tearOffGetterOptional<self::GenericExtension|getterCalls::T*>(#this).call();
@@ -288,7 +288,7 @@
   self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T*>(#this).call<self::GenericExtension|getterCalls::T*>(value: value);
   self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T*>(#this).call<self::GenericExtension|getterCalls::S*>(value: value);
 }
-static method GenericExtension|get#getterCalls<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#getterCalls::T*>* #this) → <S extends self::GenericExtension|get#getterCalls::T* = dynamic>(S*) →* dynamic
+static method GenericExtension|get#getterCalls<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#getterCalls::T*>* #this) → <S extends self::GenericExtension|get#getterCalls::T* = dynamic>(S*) →* dynamic
   return <S extends self::GenericExtension|get#getterCalls::T* = dynamic>(S* value) → dynamic => self::GenericExtension|getterCalls<self::GenericExtension|get#getterCalls::T*, S*>(#this, value);
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/extensions/direct_instance_access.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/direct_instance_access.dart.strong.transformed.expect
index 17dadac..394a69b3 100644
--- a/pkg/front_end/testcases/extensions/direct_instance_access.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/direct_instance_access.dart.strong.transformed.expect
@@ -87,40 +87,40 @@
   tearoff getterCalls = self::GenericExtension|get#getterCalls;
   set property = self::GenericExtension|set#property;
 }
-static method Extension|get#readGetter(final self::Class* #this) → () →* dynamic
+static method Extension|get#readGetter(lowered final self::Class* #this) → () →* dynamic
   return () → dynamic => self::Extension|readGetter(#this);
-static method Extension|readGetter(final self::Class* #this) → dynamic {
+static method Extension|readGetter(lowered final self::Class* #this) → dynamic {
   return self::Extension|get#property(#this);
 }
-static method Extension|writeSetterRequired(final self::Class* #this, dynamic value) → dynamic {
+static method Extension|writeSetterRequired(lowered final self::Class* #this, dynamic value) → dynamic {
   self::Extension|set#property(#this, value);
 }
-static method Extension|get#writeSetterRequired(final self::Class* #this) → (dynamic) →* dynamic
+static method Extension|get#writeSetterRequired(lowered final self::Class* #this) → (dynamic) →* dynamic
   return (dynamic value) → dynamic => self::Extension|writeSetterRequired(#this, value);
-static method Extension|writeSetterOptional(final self::Class* #this, [dynamic value = #C1]) → dynamic {
+static method Extension|writeSetterOptional(lowered final self::Class* #this, [dynamic value = #C1]) → dynamic {
   self::Extension|set#property(#this, value);
 }
-static method Extension|get#writeSetterOptional(final self::Class* #this) → ([dynamic]) →* dynamic
+static method Extension|get#writeSetterOptional(lowered final self::Class* #this) → ([dynamic]) →* dynamic
   return ([dynamic value = #C1]) → dynamic => self::Extension|writeSetterOptional(#this, value);
-static method Extension|writeSetterNamed(final self::Class* #this, {dynamic value = #C1}) → dynamic {
+static method Extension|writeSetterNamed(lowered final self::Class* #this, {dynamic value = #C1}) → dynamic {
   self::Extension|set#property(#this, value);
 }
-static method Extension|get#writeSetterNamed(final self::Class* #this) → ({value: dynamic}) →* dynamic
+static method Extension|get#writeSetterNamed(lowered final self::Class* #this) → ({value: dynamic}) →* dynamic
   return ({dynamic value = #C1}) → dynamic => self::Extension|writeSetterNamed(#this, value: value);
-static method Extension|get#tearOffGetterNoArgs(final self::Class* #this) → dynamic
+static method Extension|get#tearOffGetterNoArgs(lowered final self::Class* #this) → dynamic
   return self::Extension|get#readGetter(#this);
-static method Extension|get#tearOffGetterRequired(final self::Class* #this) → dynamic
+static method Extension|get#tearOffGetterRequired(lowered final self::Class* #this) → dynamic
   return self::Extension|get#writeSetterRequired(#this);
-static method Extension|get#tearOffGetterOptional(final self::Class* #this) → dynamic
+static method Extension|get#tearOffGetterOptional(lowered final self::Class* #this) → dynamic
   return self::Extension|get#writeSetterOptional(#this);
-static method Extension|get#tearOffGetterNamed(final self::Class* #this) → dynamic
+static method Extension|get#tearOffGetterNamed(lowered final self::Class* #this) → dynamic
   return self::Extension|get#writeSetterNamed(#this);
-static method Extension|get#property(final self::Class* #this) → dynamic
+static method Extension|get#property(lowered final self::Class* #this) → dynamic
   return #this.{self::Class::field};
-static method Extension|set#property(final self::Class* #this, dynamic value) → void {
+static method Extension|set#property(lowered final self::Class* #this, dynamic value) → void {
   #this.{self::Class::field} = value;
 }
-static method Extension|invocations(final self::Class* #this, dynamic value) → dynamic {
+static method Extension|invocations(lowered final self::Class* #this, dynamic value) → dynamic {
   self::Extension|readGetter(#this);
   self::Extension|writeSetterRequired(#this, value);
   self::Extension|writeSetterOptional(#this);
@@ -128,11 +128,11 @@
   self::Extension|writeSetterNamed(#this);
   self::Extension|writeSetterNamed(#this, value: value);
 }
-static method Extension|get#invocations(final self::Class* #this) → (dynamic) →* dynamic
+static method Extension|get#invocations(lowered final self::Class* #this) → (dynamic) →* dynamic
   return (dynamic value) → dynamic => self::Extension|invocations(#this, value);
-static method Extension|get#tearOffs(final self::Class* #this) → (dynamic) →* dynamic
+static method Extension|get#tearOffs(lowered final self::Class* #this) → (dynamic) →* dynamic
   return (dynamic value) → dynamic => self::Extension|tearOffs(#this, value);
-static method Extension|tearOffs(final self::Class* #this, dynamic value) → dynamic {
+static method Extension|tearOffs(lowered final self::Class* #this, dynamic value) → dynamic {
   () →* dynamic tearOffNoArgs = self::Extension|get#readGetter(#this);
   tearOffNoArgs.call();
   (dynamic) →* dynamic tearOffRequired = self::Extension|get#writeSetterRequired(#this);
@@ -144,7 +144,7 @@
   tearOffNamed.call();
   tearOffNamed.call(value: value);
 }
-static method Extension|getterCalls(final self::Class* #this, dynamic value) → dynamic {
+static method Extension|getterCalls(lowered final self::Class* #this, dynamic value) → dynamic {
   self::Extension|get#tearOffGetterNoArgs(#this).call();
   self::Extension|get#tearOffGetterRequired(#this).call(value);
   self::Extension|get#tearOffGetterOptional(#this).call();
@@ -152,63 +152,63 @@
   self::Extension|get#tearOffGetterNamed(#this).call();
   self::Extension|get#tearOffGetterNamed(#this).call(value: value);
 }
-static method Extension|get#getterCalls(final self::Class* #this) → (dynamic) →* dynamic
+static method Extension|get#getterCalls(lowered final self::Class* #this) → (dynamic) →* dynamic
   return (dynamic value) → dynamic => self::Extension|getterCalls(#this, value);
-static method GenericExtension|readGetter<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|readGetter::T*>* #this) → self::GenericExtension|readGetter::T* {
+static method GenericExtension|readGetter<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|readGetter::T*>* #this) → self::GenericExtension|readGetter::T* {
   return self::GenericExtension|get#property<self::GenericExtension|readGetter::T*>(#this);
 }
-static method GenericExtension|get#readGetter<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#readGetter::T*>* #this) → () →* self::GenericExtension|get#readGetter::T*
+static method GenericExtension|get#readGetter<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#readGetter::T*>* #this) → () →* self::GenericExtension|get#readGetter::T*
   return () → self::GenericExtension|get#readGetter::T* => self::GenericExtension|readGetter<self::GenericExtension|get#readGetter::T*>(#this);
-static method GenericExtension|writeSetterRequired<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|writeSetterRequired::T*>* #this, self::GenericExtension|writeSetterRequired::T* value) → dynamic {
+static method GenericExtension|writeSetterRequired<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|writeSetterRequired::T*>* #this, self::GenericExtension|writeSetterRequired::T* value) → dynamic {
   self::GenericExtension|set#property<self::GenericExtension|writeSetterRequired::T*>(#this, value);
 }
-static method GenericExtension|get#writeSetterRequired<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#writeSetterRequired::T*>* #this) → (self::GenericExtension|get#writeSetterRequired::T*) →* dynamic
+static method GenericExtension|get#writeSetterRequired<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#writeSetterRequired::T*>* #this) → (self::GenericExtension|get#writeSetterRequired::T*) →* dynamic
   return (self::GenericExtension|get#writeSetterRequired::T* value) → dynamic => self::GenericExtension|writeSetterRequired<self::GenericExtension|get#writeSetterRequired::T*>(#this, value);
-static method GenericExtension|writeSetterOptional<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|writeSetterOptional::T*>* #this, [self::GenericExtension|writeSetterOptional::T* value = #C1]) → dynamic {
+static method GenericExtension|writeSetterOptional<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|writeSetterOptional::T*>* #this, [self::GenericExtension|writeSetterOptional::T* value = #C1]) → dynamic {
   self::GenericExtension|set#property<self::GenericExtension|writeSetterOptional::T*>(#this, value);
 }
-static method GenericExtension|get#writeSetterOptional<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#writeSetterOptional::T*>* #this) → ([self::GenericExtension|get#writeSetterOptional::T*]) →* dynamic
+static method GenericExtension|get#writeSetterOptional<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#writeSetterOptional::T*>* #this) → ([self::GenericExtension|get#writeSetterOptional::T*]) →* dynamic
   return ([self::GenericExtension|get#writeSetterOptional::T* value = #C1]) → dynamic => self::GenericExtension|writeSetterOptional<self::GenericExtension|get#writeSetterOptional::T*>(#this, value);
-static method GenericExtension|writeSetterNamed<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|writeSetterNamed::T*>* #this, {self::GenericExtension|writeSetterNamed::T* value = #C1}) → dynamic {
+static method GenericExtension|writeSetterNamed<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|writeSetterNamed::T*>* #this, {self::GenericExtension|writeSetterNamed::T* value = #C1}) → dynamic {
   self::GenericExtension|set#property<self::GenericExtension|writeSetterNamed::T*>(#this, value);
 }
-static method GenericExtension|get#writeSetterNamed<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#writeSetterNamed::T*>* #this) → ({value: self::GenericExtension|get#writeSetterNamed::T*}) →* dynamic
+static method GenericExtension|get#writeSetterNamed<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#writeSetterNamed::T*>* #this) → ({value: self::GenericExtension|get#writeSetterNamed::T*}) →* dynamic
   return ({self::GenericExtension|get#writeSetterNamed::T* value = #C1}) → dynamic => self::GenericExtension|writeSetterNamed<self::GenericExtension|get#writeSetterNamed::T*>(#this, value: value);
-static method GenericExtension|genericWriteSetterRequired<T extends core::Object* = dynamic, S extends self::GenericExtension|genericWriteSetterRequired::T* = dynamic>(final self::GenericClass<self::GenericExtension|genericWriteSetterRequired::T*>* #this, self::GenericExtension|genericWriteSetterRequired::S* value) → dynamic {
+static method GenericExtension|genericWriteSetterRequired<T extends core::Object* = dynamic, S extends self::GenericExtension|genericWriteSetterRequired::T* = dynamic>(lowered final self::GenericClass<self::GenericExtension|genericWriteSetterRequired::T*>* #this, self::GenericExtension|genericWriteSetterRequired::S* value) → dynamic {
   self::GenericExtension|set#property<self::GenericExtension|genericWriteSetterRequired::T*>(#this, value);
 }
-static method GenericExtension|get#genericWriteSetterRequired<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#genericWriteSetterRequired::T*>* #this) → <S extends self::GenericExtension|get#genericWriteSetterRequired::T* = dynamic>(S*) →* dynamic
+static method GenericExtension|get#genericWriteSetterRequired<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#genericWriteSetterRequired::T*>* #this) → <S extends self::GenericExtension|get#genericWriteSetterRequired::T* = dynamic>(S*) →* dynamic
   return <S extends self::GenericExtension|get#genericWriteSetterRequired::T* = dynamic>(S* value) → dynamic => self::GenericExtension|genericWriteSetterRequired<self::GenericExtension|get#genericWriteSetterRequired::T*, S*>(#this, value);
-static method GenericExtension|genericWriteSetterOptional<T extends core::Object* = dynamic, S extends self::GenericExtension|genericWriteSetterOptional::T* = dynamic>(final self::GenericClass<self::GenericExtension|genericWriteSetterOptional::T*>* #this, [self::GenericExtension|genericWriteSetterOptional::S* value = #C1]) → dynamic {
+static method GenericExtension|genericWriteSetterOptional<T extends core::Object* = dynamic, S extends self::GenericExtension|genericWriteSetterOptional::T* = dynamic>(lowered final self::GenericClass<self::GenericExtension|genericWriteSetterOptional::T*>* #this, [self::GenericExtension|genericWriteSetterOptional::S* value = #C1]) → dynamic {
   self::GenericExtension|set#property<self::GenericExtension|genericWriteSetterOptional::T*>(#this, value);
 }
-static method GenericExtension|get#genericWriteSetterOptional<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#genericWriteSetterOptional::T*>* #this) → <S extends self::GenericExtension|get#genericWriteSetterOptional::T* = dynamic>([S*]) →* dynamic
+static method GenericExtension|get#genericWriteSetterOptional<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#genericWriteSetterOptional::T*>* #this) → <S extends self::GenericExtension|get#genericWriteSetterOptional::T* = dynamic>([S*]) →* dynamic
   return <S extends self::GenericExtension|get#genericWriteSetterOptional::T* = dynamic>([S* value = #C1]) → dynamic => self::GenericExtension|genericWriteSetterOptional<self::GenericExtension|get#genericWriteSetterOptional::T*, S*>(#this, value);
-static method GenericExtension|get#genericWriteSetterNamed<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#genericWriteSetterNamed::T*>* #this) → <S extends self::GenericExtension|get#genericWriteSetterNamed::T* = dynamic>({value: S*}) →* dynamic
+static method GenericExtension|get#genericWriteSetterNamed<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#genericWriteSetterNamed::T*>* #this) → <S extends self::GenericExtension|get#genericWriteSetterNamed::T* = dynamic>({value: S*}) →* dynamic
   return <S extends self::GenericExtension|get#genericWriteSetterNamed::T* = dynamic>({S* value = #C1}) → dynamic => self::GenericExtension|genericWriteSetterNamed<self::GenericExtension|get#genericWriteSetterNamed::T*, S*>(#this, value: value);
-static method GenericExtension|genericWriteSetterNamed<T extends core::Object* = dynamic, S extends self::GenericExtension|genericWriteSetterNamed::T* = dynamic>(final self::GenericClass<self::GenericExtension|genericWriteSetterNamed::T*>* #this, {self::GenericExtension|genericWriteSetterNamed::S* value = #C1}) → dynamic {
+static method GenericExtension|genericWriteSetterNamed<T extends core::Object* = dynamic, S extends self::GenericExtension|genericWriteSetterNamed::T* = dynamic>(lowered final self::GenericClass<self::GenericExtension|genericWriteSetterNamed::T*>* #this, {self::GenericExtension|genericWriteSetterNamed::S* value = #C1}) → dynamic {
   self::GenericExtension|set#property<self::GenericExtension|genericWriteSetterNamed::T*>(#this, value);
 }
-static method GenericExtension|get#property<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#property::T*>* #this) → self::GenericExtension|get#property::T*
+static method GenericExtension|get#property<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#property::T*>* #this) → self::GenericExtension|get#property::T*
   return #this.{self::GenericClass::field};
-static method GenericExtension|set#property<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|set#property::T*>* #this, self::GenericExtension|set#property::T* value) → void {
+static method GenericExtension|set#property<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|set#property::T*>* #this, self::GenericExtension|set#property::T* value) → void {
   #this.{self::GenericClass::field} = value;
 }
-static method GenericExtension|get#tearOffGetterNoArgs<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#tearOffGetterNoArgs::T*>* #this) → dynamic
+static method GenericExtension|get#tearOffGetterNoArgs<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#tearOffGetterNoArgs::T*>* #this) → dynamic
   return self::GenericExtension|get#readGetter<self::GenericExtension|get#tearOffGetterNoArgs::T*>(#this);
-static method GenericExtension|get#tearOffGetterRequired<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#tearOffGetterRequired::T*>* #this) → dynamic
+static method GenericExtension|get#tearOffGetterRequired<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#tearOffGetterRequired::T*>* #this) → dynamic
   return self::GenericExtension|get#writeSetterRequired<self::GenericExtension|get#tearOffGetterRequired::T*>(#this);
-static method GenericExtension|get#tearOffGetterOptional<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#tearOffGetterOptional::T*>* #this) → dynamic
+static method GenericExtension|get#tearOffGetterOptional<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#tearOffGetterOptional::T*>* #this) → dynamic
   return self::GenericExtension|get#writeSetterOptional<self::GenericExtension|get#tearOffGetterOptional::T*>(#this);
-static method GenericExtension|get#tearOffGetterNamed<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#tearOffGetterNamed::T*>* #this) → dynamic
+static method GenericExtension|get#tearOffGetterNamed<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#tearOffGetterNamed::T*>* #this) → dynamic
   return self::GenericExtension|get#writeSetterNamed<self::GenericExtension|get#tearOffGetterNamed::T*>(#this);
-static method GenericExtension|get#tearOffGetterGenericRequired<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#tearOffGetterGenericRequired::T*>* #this) → dynamic
+static method GenericExtension|get#tearOffGetterGenericRequired<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#tearOffGetterGenericRequired::T*>* #this) → dynamic
   return self::GenericExtension|get#genericWriteSetterRequired<self::GenericExtension|get#tearOffGetterGenericRequired::T*>(#this);
-static method GenericExtension|get#tearOffGetterGenericOptional<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#tearOffGetterGenericOptional::T*>* #this) → dynamic
+static method GenericExtension|get#tearOffGetterGenericOptional<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#tearOffGetterGenericOptional::T*>* #this) → dynamic
   return self::GenericExtension|get#genericWriteSetterOptional<self::GenericExtension|get#tearOffGetterGenericOptional::T*>(#this);
-static method GenericExtension|get#tearOffGetterGenericNamed<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#tearOffGetterGenericNamed::T*>* #this) → dynamic
+static method GenericExtension|get#tearOffGetterGenericNamed<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#tearOffGetterGenericNamed::T*>* #this) → dynamic
   return self::GenericExtension|get#genericWriteSetterNamed<self::GenericExtension|get#tearOffGetterGenericNamed::T*>(#this);
-static method GenericExtension|invocations<T extends core::Object* = dynamic, S extends self::GenericExtension|invocations::T* = dynamic>(final self::GenericClass<self::GenericExtension|invocations::T*>* #this, self::GenericExtension|invocations::S* value) → dynamic {
+static method GenericExtension|invocations<T extends core::Object* = dynamic, S extends self::GenericExtension|invocations::T* = dynamic>(lowered final self::GenericClass<self::GenericExtension|invocations::T*>* #this, self::GenericExtension|invocations::S* value) → dynamic {
   self::GenericExtension|readGetter<self::GenericExtension|invocations::T*>(#this);
   self::GenericExtension|writeSetterRequired<self::GenericExtension|invocations::T*>(#this, value);
   self::GenericExtension|writeSetterOptional<self::GenericExtension|invocations::T*>(#this);
@@ -231,9 +231,9 @@
   self::GenericExtension|genericWriteSetterNamed<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::T*>(#this, value: value);
   self::GenericExtension|genericWriteSetterNamed<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::S*>(#this, value: value);
 }
-static method GenericExtension|get#invocations<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#invocations::T*>* #this) → <S extends self::GenericExtension|get#invocations::T* = dynamic>(S*) →* dynamic
+static method GenericExtension|get#invocations<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#invocations::T*>* #this) → <S extends self::GenericExtension|get#invocations::T* = dynamic>(S*) →* dynamic
   return <S extends self::GenericExtension|get#invocations::T* = dynamic>(S* value) → dynamic => self::GenericExtension|invocations<self::GenericExtension|get#invocations::T*, S*>(#this, value);
-static method GenericExtension|tearOffs<T extends core::Object* = dynamic, S extends self::GenericExtension|tearOffs::T* = dynamic>(final self::GenericClass<self::GenericExtension|tearOffs::T*>* #this, self::GenericExtension|tearOffs::S* value) → dynamic {
+static method GenericExtension|tearOffs<T extends core::Object* = dynamic, S extends self::GenericExtension|tearOffs::T* = dynamic>(lowered final self::GenericClass<self::GenericExtension|tearOffs::T*>* #this, self::GenericExtension|tearOffs::S* value) → dynamic {
   () →* self::GenericExtension|tearOffs::T* tearOffNoArgs = self::GenericExtension|get#readGetter<self::GenericExtension|tearOffs::T*>(#this);
   tearOffNoArgs.call();
   (self::GenericExtension|tearOffs::T*) →* dynamic tearOffRequired = self::GenericExtension|get#writeSetterRequired<self::GenericExtension|tearOffs::T*>(#this);
@@ -263,9 +263,9 @@
   genericTearOffNamed.call<self::GenericExtension|tearOffs::T*>(value: value);
   genericTearOffNamed.call<self::GenericExtension|tearOffs::S*>(value: value);
 }
-static method GenericExtension|get#tearOffs<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#tearOffs::T*>* #this) → <S extends self::GenericExtension|get#tearOffs::T* = dynamic>(S*) →* dynamic
+static method GenericExtension|get#tearOffs<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#tearOffs::T*>* #this) → <S extends self::GenericExtension|get#tearOffs::T* = dynamic>(S*) →* dynamic
   return <S extends self::GenericExtension|get#tearOffs::T* = dynamic>(S* value) → dynamic => self::GenericExtension|tearOffs<self::GenericExtension|get#tearOffs::T*, S*>(#this, value);
-static method GenericExtension|getterCalls<T extends core::Object* = dynamic, S extends self::GenericExtension|getterCalls::T* = dynamic>(final self::GenericClass<self::GenericExtension|getterCalls::T*>* #this, self::GenericExtension|getterCalls::S* value) → dynamic {
+static method GenericExtension|getterCalls<T extends core::Object* = dynamic, S extends self::GenericExtension|getterCalls::T* = dynamic>(lowered final self::GenericClass<self::GenericExtension|getterCalls::T*>* #this, self::GenericExtension|getterCalls::S* value) → dynamic {
   self::GenericExtension|get#tearOffGetterNoArgs<self::GenericExtension|getterCalls::T*>(#this).call();
   self::GenericExtension|get#tearOffGetterRequired<self::GenericExtension|getterCalls::T*>(#this).call(value);
   self::GenericExtension|get#tearOffGetterOptional<self::GenericExtension|getterCalls::T*>(#this).call();
@@ -288,7 +288,7 @@
   self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T*>(#this).call<self::GenericExtension|getterCalls::T*>(value: value);
   self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T*>(#this).call<self::GenericExtension|getterCalls::S*>(value: value);
 }
-static method GenericExtension|get#getterCalls<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#getterCalls::T*>* #this) → <S extends self::GenericExtension|get#getterCalls::T* = dynamic>(S*) →* dynamic
+static method GenericExtension|get#getterCalls<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#getterCalls::T*>* #this) → <S extends self::GenericExtension|get#getterCalls::T* = dynamic>(S*) →* dynamic
   return <S extends self::GenericExtension|get#getterCalls::T* = dynamic>(S* value) → dynamic => self::GenericExtension|getterCalls<self::GenericExtension|get#getterCalls::T*, S*>(#this, value);
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/extensions/direct_static_access.dart.outline.expect b/pkg/front_end/testcases/extensions/direct_static_access.dart.outline.expect
index 7dd4ee1..4453608 100644
--- a/pkg/front_end/testcases/extensions/direct_static_access.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/direct_static_access.dart.outline.expect
@@ -89,21 +89,21 @@
   ;
 static method Extension|getterCallsFromStaticContext(core::int* value) → dynamic
   ;
-static method Extension|invocationsFromInstanceContext<T extends core::Object* = dynamic>(final self::Class<self::Extension|invocationsFromInstanceContext::T*>* #this, self::Extension|invocationsFromInstanceContext::T* value) → dynamic
+static method Extension|invocationsFromInstanceContext<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|invocationsFromInstanceContext::T*>* #this, self::Extension|invocationsFromInstanceContext::T* value) → dynamic
   ;
-static method Extension|get#invocationsFromInstanceContext<T extends core::Object* = dynamic>(final self::Class<self::Extension|get#invocationsFromInstanceContext::T*>* #this) → (self::Extension|get#invocationsFromInstanceContext::T*) →* dynamic
+static method Extension|get#invocationsFromInstanceContext<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|get#invocationsFromInstanceContext::T*>* #this) → (self::Extension|get#invocationsFromInstanceContext::T*) →* dynamic
   return (self::Extension|get#invocationsFromInstanceContext::T* value) → dynamic => self::Extension|invocationsFromInstanceContext<self::Extension|get#invocationsFromInstanceContext::T*>(#this, value);
-static method Extension|tearOffsFromInstanceContext<T extends core::Object* = dynamic>(final self::Class<self::Extension|tearOffsFromInstanceContext::T*>* #this, self::Extension|tearOffsFromInstanceContext::T* value) → dynamic
+static method Extension|tearOffsFromInstanceContext<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|tearOffsFromInstanceContext::T*>* #this, self::Extension|tearOffsFromInstanceContext::T* value) → dynamic
   ;
-static method Extension|get#tearOffsFromInstanceContext<T extends core::Object* = dynamic>(final self::Class<self::Extension|get#tearOffsFromInstanceContext::T*>* #this) → (self::Extension|get#tearOffsFromInstanceContext::T*) →* dynamic
+static method Extension|get#tearOffsFromInstanceContext<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|get#tearOffsFromInstanceContext::T*>* #this) → (self::Extension|get#tearOffsFromInstanceContext::T*) →* dynamic
   return (self::Extension|get#tearOffsFromInstanceContext::T* value) → dynamic => self::Extension|tearOffsFromInstanceContext<self::Extension|get#tearOffsFromInstanceContext::T*>(#this, value);
-static method Extension|fieldAccessFromInstanceContext<T extends core::Object* = dynamic>(final self::Class<self::Extension|fieldAccessFromInstanceContext::T*>* #this) → dynamic
+static method Extension|fieldAccessFromInstanceContext<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|fieldAccessFromInstanceContext::T*>* #this) → dynamic
   ;
-static method Extension|get#fieldAccessFromInstanceContext<T extends core::Object* = dynamic>(final self::Class<self::Extension|get#fieldAccessFromInstanceContext::T*>* #this) → () →* dynamic
+static method Extension|get#fieldAccessFromInstanceContext<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|get#fieldAccessFromInstanceContext::T*>* #this) → () →* dynamic
   return () → dynamic => self::Extension|fieldAccessFromInstanceContext<self::Extension|get#fieldAccessFromInstanceContext::T*>(#this);
-static method Extension|getterCallsFromInstanceContext<T extends core::Object* = dynamic>(final self::Class<self::Extension|getterCallsFromInstanceContext::T*>* #this, self::Extension|getterCallsFromInstanceContext::T* value) → dynamic
+static method Extension|getterCallsFromInstanceContext<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|getterCallsFromInstanceContext::T*>* #this, self::Extension|getterCallsFromInstanceContext::T* value) → dynamic
   ;
-static method Extension|get#getterCallsFromInstanceContext<T extends core::Object* = dynamic>(final self::Class<self::Extension|get#getterCallsFromInstanceContext::T*>* #this) → (self::Extension|get#getterCallsFromInstanceContext::T*) →* dynamic
+static method Extension|get#getterCallsFromInstanceContext<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|get#getterCallsFromInstanceContext::T*>* #this) → (self::Extension|get#getterCallsFromInstanceContext::T*) →* dynamic
   return (self::Extension|get#getterCallsFromInstanceContext::T* value) → dynamic => self::Extension|getterCallsFromInstanceContext<self::Extension|get#getterCallsFromInstanceContext::T*>(#this, value);
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/direct_static_access.dart.strong.expect b/pkg/front_end/testcases/extensions/direct_static_access.dart.strong.expect
index 1a55006..f9c2886 100644
--- a/pkg/front_end/testcases/extensions/direct_static_access.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/direct_static_access.dart.strong.expect
@@ -155,7 +155,7 @@
   self::Extension|tearOffGetterGenericNamed.call(value: value);
   self::Extension|tearOffGetterGenericNamed.call<core::int*>(value: value);
 }
-static method Extension|invocationsFromInstanceContext<T extends core::Object* = dynamic>(final self::Class<self::Extension|invocationsFromInstanceContext::T*>* #this, self::Extension|invocationsFromInstanceContext::T* value) → dynamic {
+static method Extension|invocationsFromInstanceContext<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|invocationsFromInstanceContext::T*>* #this, self::Extension|invocationsFromInstanceContext::T* value) → dynamic {
   self::Extension|readGetter();
   self::Extension|writeSetterRequired(value);
   self::Extension|writeSetterOptional();
@@ -173,9 +173,9 @@
   self::Extension|genericWriteSetterNamed<self::Extension|invocationsFromInstanceContext::T*>(value: value);
   self::Extension|genericWriteSetterNamed<self::Extension|invocationsFromInstanceContext::T*>(value: value);
 }
-static method Extension|get#invocationsFromInstanceContext<T extends core::Object* = dynamic>(final self::Class<self::Extension|get#invocationsFromInstanceContext::T*>* #this) → (self::Extension|get#invocationsFromInstanceContext::T*) →* dynamic
+static method Extension|get#invocationsFromInstanceContext<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|get#invocationsFromInstanceContext::T*>* #this) → (self::Extension|get#invocationsFromInstanceContext::T*) →* dynamic
   return (self::Extension|get#invocationsFromInstanceContext::T* value) → dynamic => self::Extension|invocationsFromInstanceContext<self::Extension|get#invocationsFromInstanceContext::T*>(#this, value);
-static method Extension|tearOffsFromInstanceContext<T extends core::Object* = dynamic>(final self::Class<self::Extension|tearOffsFromInstanceContext::T*>* #this, self::Extension|tearOffsFromInstanceContext::T* value) → dynamic {
+static method Extension|tearOffsFromInstanceContext<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|tearOffsFromInstanceContext::T*>* #this, self::Extension|tearOffsFromInstanceContext::T* value) → dynamic {
   () →* dynamic tearOffNoArgs = #C2;
   tearOffNoArgs.call();
   (dynamic) →* dynamic tearOffRequired = #C3;
@@ -200,15 +200,15 @@
   tearOffGenericNamed.call<self::Extension|tearOffsFromInstanceContext::T*>(value: value);
   tearOffGenericNamed.call<self::Extension|tearOffsFromInstanceContext::T*>(value: value);
 }
-static method Extension|get#tearOffsFromInstanceContext<T extends core::Object* = dynamic>(final self::Class<self::Extension|get#tearOffsFromInstanceContext::T*>* #this) → (self::Extension|get#tearOffsFromInstanceContext::T*) →* dynamic
+static method Extension|get#tearOffsFromInstanceContext<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|get#tearOffsFromInstanceContext::T*>* #this) → (self::Extension|get#tearOffsFromInstanceContext::T*) →* dynamic
   return (self::Extension|get#tearOffsFromInstanceContext::T* value) → dynamic => self::Extension|tearOffsFromInstanceContext<self::Extension|get#tearOffsFromInstanceContext::T*>(#this, value);
-static method Extension|fieldAccessFromInstanceContext<T extends core::Object* = dynamic>(final self::Class<self::Extension|fieldAccessFromInstanceContext::T*>* #this) → dynamic {
+static method Extension|fieldAccessFromInstanceContext<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|fieldAccessFromInstanceContext::T*>* #this) → dynamic {
   self::Extension|field = self::Extension|property;
   self::Extension|property = self::Extension|field;
 }
-static method Extension|get#fieldAccessFromInstanceContext<T extends core::Object* = dynamic>(final self::Class<self::Extension|get#fieldAccessFromInstanceContext::T*>* #this) → () →* dynamic
+static method Extension|get#fieldAccessFromInstanceContext<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|get#fieldAccessFromInstanceContext::T*>* #this) → () →* dynamic
   return () → dynamic => self::Extension|fieldAccessFromInstanceContext<self::Extension|get#fieldAccessFromInstanceContext::T*>(#this);
-static method Extension|getterCallsFromInstanceContext<T extends core::Object* = dynamic>(final self::Class<self::Extension|getterCallsFromInstanceContext::T*>* #this, self::Extension|getterCallsFromInstanceContext::T* value) → dynamic {
+static method Extension|getterCallsFromInstanceContext<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|getterCallsFromInstanceContext::T*>* #this, self::Extension|getterCallsFromInstanceContext::T* value) → dynamic {
   self::Extension|tearOffGetterNoArgs.call();
   self::Extension|tearOffGetterRequired.call(value);
   self::Extension|tearOffGetterOptional.call();
@@ -226,7 +226,7 @@
   self::Extension|tearOffGetterGenericNamed.call(value: value);
   self::Extension|tearOffGetterGenericNamed.call<self::Extension|getterCallsFromInstanceContext::T*>(value: value);
 }
-static method Extension|get#getterCallsFromInstanceContext<T extends core::Object* = dynamic>(final self::Class<self::Extension|get#getterCallsFromInstanceContext::T*>* #this) → (self::Extension|get#getterCallsFromInstanceContext::T*) →* dynamic
+static method Extension|get#getterCallsFromInstanceContext<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|get#getterCallsFromInstanceContext::T*>* #this) → (self::Extension|get#getterCallsFromInstanceContext::T*) →* dynamic
   return (self::Extension|get#getterCallsFromInstanceContext::T* value) → dynamic => self::Extension|getterCallsFromInstanceContext<self::Extension|get#getterCallsFromInstanceContext::T*>(#this, value);
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/extensions/direct_static_access.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/direct_static_access.dart.strong.transformed.expect
index 1a55006..f9c2886 100644
--- a/pkg/front_end/testcases/extensions/direct_static_access.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/direct_static_access.dart.strong.transformed.expect
@@ -155,7 +155,7 @@
   self::Extension|tearOffGetterGenericNamed.call(value: value);
   self::Extension|tearOffGetterGenericNamed.call<core::int*>(value: value);
 }
-static method Extension|invocationsFromInstanceContext<T extends core::Object* = dynamic>(final self::Class<self::Extension|invocationsFromInstanceContext::T*>* #this, self::Extension|invocationsFromInstanceContext::T* value) → dynamic {
+static method Extension|invocationsFromInstanceContext<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|invocationsFromInstanceContext::T*>* #this, self::Extension|invocationsFromInstanceContext::T* value) → dynamic {
   self::Extension|readGetter();
   self::Extension|writeSetterRequired(value);
   self::Extension|writeSetterOptional();
@@ -173,9 +173,9 @@
   self::Extension|genericWriteSetterNamed<self::Extension|invocationsFromInstanceContext::T*>(value: value);
   self::Extension|genericWriteSetterNamed<self::Extension|invocationsFromInstanceContext::T*>(value: value);
 }
-static method Extension|get#invocationsFromInstanceContext<T extends core::Object* = dynamic>(final self::Class<self::Extension|get#invocationsFromInstanceContext::T*>* #this) → (self::Extension|get#invocationsFromInstanceContext::T*) →* dynamic
+static method Extension|get#invocationsFromInstanceContext<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|get#invocationsFromInstanceContext::T*>* #this) → (self::Extension|get#invocationsFromInstanceContext::T*) →* dynamic
   return (self::Extension|get#invocationsFromInstanceContext::T* value) → dynamic => self::Extension|invocationsFromInstanceContext<self::Extension|get#invocationsFromInstanceContext::T*>(#this, value);
-static method Extension|tearOffsFromInstanceContext<T extends core::Object* = dynamic>(final self::Class<self::Extension|tearOffsFromInstanceContext::T*>* #this, self::Extension|tearOffsFromInstanceContext::T* value) → dynamic {
+static method Extension|tearOffsFromInstanceContext<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|tearOffsFromInstanceContext::T*>* #this, self::Extension|tearOffsFromInstanceContext::T* value) → dynamic {
   () →* dynamic tearOffNoArgs = #C2;
   tearOffNoArgs.call();
   (dynamic) →* dynamic tearOffRequired = #C3;
@@ -200,15 +200,15 @@
   tearOffGenericNamed.call<self::Extension|tearOffsFromInstanceContext::T*>(value: value);
   tearOffGenericNamed.call<self::Extension|tearOffsFromInstanceContext::T*>(value: value);
 }
-static method Extension|get#tearOffsFromInstanceContext<T extends core::Object* = dynamic>(final self::Class<self::Extension|get#tearOffsFromInstanceContext::T*>* #this) → (self::Extension|get#tearOffsFromInstanceContext::T*) →* dynamic
+static method Extension|get#tearOffsFromInstanceContext<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|get#tearOffsFromInstanceContext::T*>* #this) → (self::Extension|get#tearOffsFromInstanceContext::T*) →* dynamic
   return (self::Extension|get#tearOffsFromInstanceContext::T* value) → dynamic => self::Extension|tearOffsFromInstanceContext<self::Extension|get#tearOffsFromInstanceContext::T*>(#this, value);
-static method Extension|fieldAccessFromInstanceContext<T extends core::Object* = dynamic>(final self::Class<self::Extension|fieldAccessFromInstanceContext::T*>* #this) → dynamic {
+static method Extension|fieldAccessFromInstanceContext<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|fieldAccessFromInstanceContext::T*>* #this) → dynamic {
   self::Extension|field = self::Extension|property;
   self::Extension|property = self::Extension|field;
 }
-static method Extension|get#fieldAccessFromInstanceContext<T extends core::Object* = dynamic>(final self::Class<self::Extension|get#fieldAccessFromInstanceContext::T*>* #this) → () →* dynamic
+static method Extension|get#fieldAccessFromInstanceContext<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|get#fieldAccessFromInstanceContext::T*>* #this) → () →* dynamic
   return () → dynamic => self::Extension|fieldAccessFromInstanceContext<self::Extension|get#fieldAccessFromInstanceContext::T*>(#this);
-static method Extension|getterCallsFromInstanceContext<T extends core::Object* = dynamic>(final self::Class<self::Extension|getterCallsFromInstanceContext::T*>* #this, self::Extension|getterCallsFromInstanceContext::T* value) → dynamic {
+static method Extension|getterCallsFromInstanceContext<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|getterCallsFromInstanceContext::T*>* #this, self::Extension|getterCallsFromInstanceContext::T* value) → dynamic {
   self::Extension|tearOffGetterNoArgs.call();
   self::Extension|tearOffGetterRequired.call(value);
   self::Extension|tearOffGetterOptional.call();
@@ -226,7 +226,7 @@
   self::Extension|tearOffGetterGenericNamed.call(value: value);
   self::Extension|tearOffGetterGenericNamed.call<self::Extension|getterCallsFromInstanceContext::T*>(value: value);
 }
-static method Extension|get#getterCallsFromInstanceContext<T extends core::Object* = dynamic>(final self::Class<self::Extension|get#getterCallsFromInstanceContext::T*>* #this) → (self::Extension|get#getterCallsFromInstanceContext::T*) →* dynamic
+static method Extension|get#getterCallsFromInstanceContext<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|get#getterCallsFromInstanceContext::T*>* #this) → (self::Extension|get#getterCallsFromInstanceContext::T*) →* dynamic
   return (self::Extension|get#getterCallsFromInstanceContext::T* value) → dynamic => self::Extension|getterCallsFromInstanceContext<self::Extension|get#getterCallsFromInstanceContext::T*>(#this, value);
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/extensions/dynamic_invoke.dart.outline.expect b/pkg/front_end/testcases/extensions/dynamic_invoke.dart.outline.expect
index a2ea0ee..1f8c07d 100644
--- a/pkg/front_end/testcases/extensions/dynamic_invoke.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/dynamic_invoke.dart.outline.expect
@@ -25,13 +25,13 @@
   method method = self::Extension|method;
   tearoff method = self::Extension|get#method;
 }
-static method ClassExtension|method(final self::Class* #this) → core::int*
+static method ClassExtension|method(lowered final self::Class* #this) → core::int*
   ;
-static method ClassExtension|get#method(final self::Class* #this) → () →* core::int*
+static method ClassExtension|get#method(lowered final self::Class* #this) → () →* core::int*
   return () → core::int* => self::ClassExtension|method(#this);
-static method Extension|method(final dynamic #this) → core::int*
+static method Extension|method(lowered final dynamic #this) → core::int*
   ;
-static method Extension|get#method(final dynamic #this) → () →* core::int*
+static method Extension|get#method(lowered final dynamic #this) → () →* core::int*
   return () → core::int* => self::Extension|method(#this);
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/dynamic_invoke.dart.strong.expect b/pkg/front_end/testcases/extensions/dynamic_invoke.dart.strong.expect
index 627b139..3f2a400 100644
--- a/pkg/front_end/testcases/extensions/dynamic_invoke.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/dynamic_invoke.dart.strong.expect
@@ -26,13 +26,13 @@
   method method = self::Extension|method;
   tearoff method = self::Extension|get#method;
 }
-static method ClassExtension|method(final self::Class* #this) → core::int*
+static method ClassExtension|method(lowered final self::Class* #this) → core::int*
   return 42;
-static method ClassExtension|get#method(final self::Class* #this) → () →* core::int*
+static method ClassExtension|get#method(lowered final self::Class* #this) → () →* core::int*
   return () → core::int* => self::ClassExtension|method(#this);
-static method Extension|method(final dynamic #this) → core::int*
+static method Extension|method(lowered final dynamic #this) → core::int*
   return 87;
-static method Extension|get#method(final dynamic #this) → () →* core::int*
+static method Extension|get#method(lowered final dynamic #this) → () →* core::int*
   return () → core::int* => self::Extension|method(#this);
 static method main() → dynamic {
   dynamic c0 = new self::Class::•();
diff --git a/pkg/front_end/testcases/extensions/dynamic_invoke.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/dynamic_invoke.dart.strong.transformed.expect
index 627b139..3f2a400 100644
--- a/pkg/front_end/testcases/extensions/dynamic_invoke.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/dynamic_invoke.dart.strong.transformed.expect
@@ -26,13 +26,13 @@
   method method = self::Extension|method;
   tearoff method = self::Extension|get#method;
 }
-static method ClassExtension|method(final self::Class* #this) → core::int*
+static method ClassExtension|method(lowered final self::Class* #this) → core::int*
   return 42;
-static method ClassExtension|get#method(final self::Class* #this) → () →* core::int*
+static method ClassExtension|get#method(lowered final self::Class* #this) → () →* core::int*
   return () → core::int* => self::ClassExtension|method(#this);
-static method Extension|method(final dynamic #this) → core::int*
+static method Extension|method(lowered final dynamic #this) → core::int*
   return 87;
-static method Extension|get#method(final dynamic #this) → () →* core::int*
+static method Extension|get#method(lowered final dynamic #this) → () →* core::int*
   return () → core::int* => self::Extension|method(#this);
 static method main() → dynamic {
   dynamic c0 = new self::Class::•();
diff --git a/pkg/front_end/testcases/extensions/explicit_extension_access.dart.outline.expect b/pkg/front_end/testcases/extensions/explicit_extension_access.dart.outline.expect
index 293f3df..c567e2c 100644
--- a/pkg/front_end/testcases/extensions/explicit_extension_access.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/explicit_extension_access.dart.outline.expect
@@ -34,29 +34,29 @@
   tearoff genericMethod = self::Extension2|get#genericMethod;
   set field = self::Extension2|set#field;
 }
-static method Extension1|get#field(final self::Class* #this) → core::int*
+static method Extension1|get#field(lowered final self::Class* #this) → core::int*
   ;
-static method Extension1|set#field(final self::Class* #this, core::int* value) → void
+static method Extension1|set#field(lowered final self::Class* #this, core::int* value) → void
   ;
-static method Extension1|method(final self::Class* #this) → core::int*
+static method Extension1|method(lowered final self::Class* #this) → core::int*
   ;
-static method Extension1|get#method(final self::Class* #this) → () →* core::int*
+static method Extension1|get#method(lowered final self::Class* #this) → () →* core::int*
   return () → core::int* => self::Extension1|method(#this);
-static method Extension1|genericMethod<T extends core::num* = core::num*>(final self::Class* #this, self::Extension1|genericMethod::T* t) → core::int*
+static method Extension1|genericMethod<T extends core::num* = core::num*>(lowered final self::Class* #this, self::Extension1|genericMethod::T* t) → core::int*
   ;
-static method Extension1|get#genericMethod(final self::Class* #this) → <T extends core::num* = core::num*>(T*) →* core::int*
+static method Extension1|get#genericMethod(lowered final self::Class* #this) → <T extends core::num* = core::num*>(T*) →* core::int*
   return <T extends core::num* = core::num*>(T* t) → core::int* => self::Extension1|genericMethod<T*>(#this, t);
-static method Extension2|get#field(final self::Class* #this) → core::int*
+static method Extension2|get#field(lowered final self::Class* #this) → core::int*
   ;
-static method Extension2|set#field(final self::Class* #this, core::int* value) → void
+static method Extension2|set#field(lowered final self::Class* #this, core::int* value) → void
   ;
-static method Extension2|method(final self::Class* #this) → core::int*
+static method Extension2|method(lowered final self::Class* #this) → core::int*
   ;
-static method Extension2|get#method(final self::Class* #this) → () →* core::int*
+static method Extension2|get#method(lowered final self::Class* #this) → () →* core::int*
   return () → core::int* => self::Extension2|method(#this);
-static method Extension2|genericMethod<T extends core::num* = core::num*>(final self::Class* #this, self::Extension2|genericMethod::T* t) → core::int*
+static method Extension2|genericMethod<T extends core::num* = core::num*>(lowered final self::Class* #this, self::Extension2|genericMethod::T* t) → core::int*
   ;
-static method Extension2|get#genericMethod(final self::Class* #this) → <T extends core::num* = core::num*>(T*) →* core::int*
+static method Extension2|get#genericMethod(lowered final self::Class* #this) → <T extends core::num* = core::num*>(T*) →* core::int*
   return <T extends core::num* = core::num*>(T* t) → core::int* => self::Extension2|genericMethod<T*>(#this, t);
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/explicit_extension_access.dart.strong.expect b/pkg/front_end/testcases/extensions/explicit_extension_access.dart.strong.expect
index 1de117d..c216317 100644
--- a/pkg/front_end/testcases/extensions/explicit_extension_access.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/explicit_extension_access.dart.strong.expect
@@ -35,31 +35,31 @@
   tearoff genericMethod = self::Extension2|get#genericMethod;
   set field = self::Extension2|set#field;
 }
-static method Extension1|get#field(final self::Class* #this) → core::int*
+static method Extension1|get#field(lowered final self::Class* #this) → core::int*
   return #this.{self::Class::field1};
-static method Extension1|set#field(final self::Class* #this, core::int* value) → void {
+static method Extension1|set#field(lowered final self::Class* #this, core::int* value) → void {
   #this.{self::Class::field1} = value;
 }
-static method Extension1|method(final self::Class* #this) → core::int*
+static method Extension1|method(lowered final self::Class* #this) → core::int*
   return #this.{self::Class::field1};
-static method Extension1|get#method(final self::Class* #this) → () →* core::int*
+static method Extension1|get#method(lowered final self::Class* #this) → () →* core::int*
   return () → core::int* => self::Extension1|method(#this);
-static method Extension1|genericMethod<T extends core::num* = core::num*>(final self::Class* #this, self::Extension1|genericMethod::T* t) → core::int*
+static method Extension1|genericMethod<T extends core::num* = core::num*>(lowered final self::Class* #this, self::Extension1|genericMethod::T* t) → core::int*
   return #this.{self::Class::field1}.{core::num::+}(t) as{TypeError} core::int*;
-static method Extension1|get#genericMethod(final self::Class* #this) → <T extends core::num* = core::num*>(T*) →* core::int*
+static method Extension1|get#genericMethod(lowered final self::Class* #this) → <T extends core::num* = core::num*>(T*) →* core::int*
   return <T extends core::num* = core::num*>(T* t) → core::int* => self::Extension1|genericMethod<T*>(#this, t);
-static method Extension2|get#field(final self::Class* #this) → core::int*
+static method Extension2|get#field(lowered final self::Class* #this) → core::int*
   return #this.{self::Class::field2};
-static method Extension2|set#field(final self::Class* #this, core::int* value) → void {
+static method Extension2|set#field(lowered final self::Class* #this, core::int* value) → void {
   #this.{self::Class::field2} = value;
 }
-static method Extension2|method(final self::Class* #this) → core::int*
+static method Extension2|method(lowered final self::Class* #this) → core::int*
   return #this.{self::Class::field2};
-static method Extension2|get#method(final self::Class* #this) → () →* core::int*
+static method Extension2|get#method(lowered final self::Class* #this) → () →* core::int*
   return () → core::int* => self::Extension2|method(#this);
-static method Extension2|genericMethod<T extends core::num* = core::num*>(final self::Class* #this, self::Extension2|genericMethod::T* t) → core::int*
+static method Extension2|genericMethod<T extends core::num* = core::num*>(lowered final self::Class* #this, self::Extension2|genericMethod::T* t) → core::int*
   return #this.{self::Class::field2}.{core::num::+}(t) as{TypeError} core::int*;
-static method Extension2|get#genericMethod(final self::Class* #this) → <T extends core::num* = core::num*>(T*) →* core::int*
+static method Extension2|get#genericMethod(lowered final self::Class* #this) → <T extends core::num* = core::num*>(T*) →* core::int*
   return <T extends core::num* = core::num*>(T* t) → core::int* => self::Extension2|genericMethod<T*>(#this, t);
 static method main() → dynamic {
   self::Class* c = new self::Class::•();
diff --git a/pkg/front_end/testcases/extensions/explicit_extension_access.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/explicit_extension_access.dart.strong.transformed.expect
index 47097a2..e1fd4f1 100644
--- a/pkg/front_end/testcases/extensions/explicit_extension_access.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/explicit_extension_access.dart.strong.transformed.expect
@@ -35,31 +35,31 @@
   tearoff genericMethod = self::Extension2|get#genericMethod;
   set field = self::Extension2|set#field;
 }
-static method Extension1|get#field(final self::Class* #this) → core::int*
+static method Extension1|get#field(lowered final self::Class* #this) → core::int*
   return #this.{self::Class::field1};
-static method Extension1|set#field(final self::Class* #this, core::int* value) → void {
+static method Extension1|set#field(lowered final self::Class* #this, core::int* value) → void {
   #this.{self::Class::field1} = value;
 }
-static method Extension1|method(final self::Class* #this) → core::int*
+static method Extension1|method(lowered final self::Class* #this) → core::int*
   return #this.{self::Class::field1};
-static method Extension1|get#method(final self::Class* #this) → () →* core::int*
+static method Extension1|get#method(lowered final self::Class* #this) → () →* core::int*
   return () → core::int* => self::Extension1|method(#this);
-static method Extension1|genericMethod<T extends core::num* = core::num*>(final self::Class* #this, self::Extension1|genericMethod::T* t) → core::int*
+static method Extension1|genericMethod<T extends core::num* = core::num*>(lowered final self::Class* #this, self::Extension1|genericMethod::T* t) → core::int*
   return #this.{self::Class::field1}.{core::num::+}(t) as{TypeError} core::int*;
-static method Extension1|get#genericMethod(final self::Class* #this) → <T extends core::num* = core::num*>(T*) →* core::int*
+static method Extension1|get#genericMethod(lowered final self::Class* #this) → <T extends core::num* = core::num*>(T*) →* core::int*
   return <T extends core::num* = core::num*>(T* t) → core::int* => self::Extension1|genericMethod<T*>(#this, t);
-static method Extension2|get#field(final self::Class* #this) → core::int*
+static method Extension2|get#field(lowered final self::Class* #this) → core::int*
   return #this.{self::Class::field2};
-static method Extension2|set#field(final self::Class* #this, core::int* value) → void {
+static method Extension2|set#field(lowered final self::Class* #this, core::int* value) → void {
   #this.{self::Class::field2} = value;
 }
-static method Extension2|method(final self::Class* #this) → core::int*
+static method Extension2|method(lowered final self::Class* #this) → core::int*
   return #this.{self::Class::field2};
-static method Extension2|get#method(final self::Class* #this) → () →* core::int*
+static method Extension2|get#method(lowered final self::Class* #this) → () →* core::int*
   return () → core::int* => self::Extension2|method(#this);
-static method Extension2|genericMethod<T extends core::num* = core::num*>(final self::Class* #this, self::Extension2|genericMethod::T* t) → core::int*
+static method Extension2|genericMethod<T extends core::num* = core::num*>(lowered final self::Class* #this, self::Extension2|genericMethod::T* t) → core::int*
   return #this.{self::Class::field2}.{core::num::+}(t) as{TypeError} core::int*;
-static method Extension2|get#genericMethod(final self::Class* #this) → <T extends core::num* = core::num*>(T*) →* core::int*
+static method Extension2|get#genericMethod(lowered final self::Class* #this) → <T extends core::num* = core::num*>(T*) →* core::int*
   return <T extends core::num* = core::num*>(T* t) → core::int* => self::Extension2|genericMethod<T*>(#this, t);
 static method main() → dynamic {
   self::Class* c = new self::Class::•();
diff --git a/pkg/front_end/testcases/extensions/explicit_extension_inference.dart.outline.expect b/pkg/front_end/testcases/extensions/explicit_extension_inference.dart.outline.expect
index 21fc22e..eb41182 100644
--- a/pkg/front_end/testcases/extensions/explicit_extension_inference.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/explicit_extension_inference.dart.outline.expect
@@ -45,15 +45,15 @@
   method genericMethod1 = self::GenericExtension|genericMethod1;
   tearoff genericMethod1 = self::GenericExtension|get#genericMethod1;
 }
-static method GenericExtension|get#property<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#property::T*>* #this) → self::GenericExtension|get#property::T*
+static method GenericExtension|get#property<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#property::T*>* #this) → self::GenericExtension|get#property::T*
   ;
-static method GenericExtension|method<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|method::T*>* #this, self::GenericExtension|method::T* t) → self::GenericExtension|method::T*
+static method GenericExtension|method<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|method::T*>* #this, self::GenericExtension|method::T* t) → self::GenericExtension|method::T*
   ;
-static method GenericExtension|get#method<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#method::T*>* #this) → (self::GenericExtension|get#method::T*) →* self::GenericExtension|get#method::T*
+static method GenericExtension|get#method<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#method::T*>* #this) → (self::GenericExtension|get#method::T*) →* self::GenericExtension|get#method::T*
   return (self::GenericExtension|get#method::T* t) → self::GenericExtension|get#method::T* => self::GenericExtension|method<self::GenericExtension|get#method::T*>(#this, t);
-static method GenericExtension|genericMethod1<T extends core::Object* = dynamic, S extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|genericMethod1::T*>* #this, self::GenericExtension|genericMethod1::S* s) → self::GenericExtension|genericMethod1::S*
+static method GenericExtension|genericMethod1<T extends core::Object* = dynamic, S extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|genericMethod1::T*>* #this, self::GenericExtension|genericMethod1::S* s) → self::GenericExtension|genericMethod1::S*
   ;
-static method GenericExtension|get#genericMethod1<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#genericMethod1::T*>* #this) → <S extends core::Object* = dynamic>(S*) →* S*
+static method GenericExtension|get#genericMethod1<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#genericMethod1::T*>* #this) → <S extends core::Object* = dynamic>(S*) →* S*
   return <S extends core::Object* = dynamic>(S* s) → S* => self::GenericExtension|genericMethod1<self::GenericExtension|get#genericMethod1::T*, S*>(#this, s);
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/explicit_extension_inference.dart.strong.expect b/pkg/front_end/testcases/extensions/explicit_extension_inference.dart.strong.expect
index 3d6532f..429ac83 100644
--- a/pkg/front_end/testcases/extensions/explicit_extension_inference.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/explicit_extension_inference.dart.strong.expect
@@ -49,15 +49,15 @@
   method genericMethod1 = self::GenericExtension|genericMethod1;
   tearoff genericMethod1 = self::GenericExtension|get#genericMethod1;
 }
-static method GenericExtension|get#property<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#property::T*>* #this) → self::GenericExtension|get#property::T*
+static method GenericExtension|get#property<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#property::T*>* #this) → self::GenericExtension|get#property::T*
   return null;
-static method GenericExtension|method<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|method::T*>* #this, self::GenericExtension|method::T* t) → self::GenericExtension|method::T*
+static method GenericExtension|method<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|method::T*>* #this, self::GenericExtension|method::T* t) → self::GenericExtension|method::T*
   return null;
-static method GenericExtension|get#method<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#method::T*>* #this) → (self::GenericExtension|get#method::T*) →* self::GenericExtension|get#method::T*
+static method GenericExtension|get#method<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#method::T*>* #this) → (self::GenericExtension|get#method::T*) →* self::GenericExtension|get#method::T*
   return (self::GenericExtension|get#method::T* t) → self::GenericExtension|get#method::T* => self::GenericExtension|method<self::GenericExtension|get#method::T*>(#this, t);
-static method GenericExtension|genericMethod1<T extends core::Object* = dynamic, S extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|genericMethod1::T*>* #this, self::GenericExtension|genericMethod1::S* s) → self::GenericExtension|genericMethod1::S*
+static method GenericExtension|genericMethod1<T extends core::Object* = dynamic, S extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|genericMethod1::T*>* #this, self::GenericExtension|genericMethod1::S* s) → self::GenericExtension|genericMethod1::S*
   return null;
-static method GenericExtension|get#genericMethod1<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#genericMethod1::T*>* #this) → <S extends core::Object* = dynamic>(S*) →* S*
+static method GenericExtension|get#genericMethod1<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#genericMethod1::T*>* #this) → <S extends core::Object* = dynamic>(S*) →* S*
   return <S extends core::Object* = dynamic>(S* s) → S* => self::GenericExtension|genericMethod1<self::GenericExtension|get#genericMethod1::T*, S*>(#this, s);
 static method main() → dynamic {
   self::A* aVariable;
diff --git a/pkg/front_end/testcases/extensions/explicit_extension_inference.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/explicit_extension_inference.dart.strong.transformed.expect
index 3d6532f..429ac83 100644
--- a/pkg/front_end/testcases/extensions/explicit_extension_inference.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/explicit_extension_inference.dart.strong.transformed.expect
@@ -49,15 +49,15 @@
   method genericMethod1 = self::GenericExtension|genericMethod1;
   tearoff genericMethod1 = self::GenericExtension|get#genericMethod1;
 }
-static method GenericExtension|get#property<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#property::T*>* #this) → self::GenericExtension|get#property::T*
+static method GenericExtension|get#property<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#property::T*>* #this) → self::GenericExtension|get#property::T*
   return null;
-static method GenericExtension|method<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|method::T*>* #this, self::GenericExtension|method::T* t) → self::GenericExtension|method::T*
+static method GenericExtension|method<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|method::T*>* #this, self::GenericExtension|method::T* t) → self::GenericExtension|method::T*
   return null;
-static method GenericExtension|get#method<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#method::T*>* #this) → (self::GenericExtension|get#method::T*) →* self::GenericExtension|get#method::T*
+static method GenericExtension|get#method<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#method::T*>* #this) → (self::GenericExtension|get#method::T*) →* self::GenericExtension|get#method::T*
   return (self::GenericExtension|get#method::T* t) → self::GenericExtension|get#method::T* => self::GenericExtension|method<self::GenericExtension|get#method::T*>(#this, t);
-static method GenericExtension|genericMethod1<T extends core::Object* = dynamic, S extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|genericMethod1::T*>* #this, self::GenericExtension|genericMethod1::S* s) → self::GenericExtension|genericMethod1::S*
+static method GenericExtension|genericMethod1<T extends core::Object* = dynamic, S extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|genericMethod1::T*>* #this, self::GenericExtension|genericMethod1::S* s) → self::GenericExtension|genericMethod1::S*
   return null;
-static method GenericExtension|get#genericMethod1<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#genericMethod1::T*>* #this) → <S extends core::Object* = dynamic>(S*) →* S*
+static method GenericExtension|get#genericMethod1<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#genericMethod1::T*>* #this) → <S extends core::Object* = dynamic>(S*) →* S*
   return <S extends core::Object* = dynamic>(S* s) → S* => self::GenericExtension|genericMethod1<self::GenericExtension|get#genericMethod1::T*, S*>(#this, s);
 static method main() → dynamic {
   self::A* aVariable;
diff --git a/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.outline.expect b/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.outline.expect
index c63ea7d..633ea25 100644
--- a/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.outline.expect
@@ -36,29 +36,29 @@
   set field = self::Extension2|set#field;
 }
 static field core::String* Extension1|latestType;
-static method Extension1|get#field<T extends core::num* = core::num*>(final self::Class<self::Extension1|get#field::T*>* #this) → self::Extension1|get#field::T*
+static method Extension1|get#field<T extends core::num* = core::num*>(lowered final self::Class<self::Extension1|get#field::T*>* #this) → self::Extension1|get#field::T*
   ;
-static method Extension1|set#field<T extends core::num* = core::num*>(final self::Class<self::Extension1|set#field::T*>* #this, self::Extension1|set#field::T* value) → void
+static method Extension1|set#field<T extends core::num* = core::num*>(lowered final self::Class<self::Extension1|set#field::T*>* #this, self::Extension1|set#field::T* value) → void
   ;
-static method Extension1|method<T extends core::num* = core::num*>(final self::Class<self::Extension1|method::T*>* #this) → self::Extension1|method::T*
+static method Extension1|method<T extends core::num* = core::num*>(lowered final self::Class<self::Extension1|method::T*>* #this) → self::Extension1|method::T*
   ;
-static method Extension1|get#method<T extends core::num* = core::num*>(final self::Class<self::Extension1|get#method::T*>* #this) → () →* self::Extension1|get#method::T*
+static method Extension1|get#method<T extends core::num* = core::num*>(lowered final self::Class<self::Extension1|get#method::T*>* #this) → () →* self::Extension1|get#method::T*
   return () → self::Extension1|get#method::T* => self::Extension1|method<self::Extension1|get#method::T*>(#this);
-static method Extension1|genericMethod<T extends core::num* = core::num*, S extends core::num* = core::num*>(final self::Class<self::Extension1|genericMethod::T*>* #this, self::Extension1|genericMethod::S* t) → self::Extension1|genericMethod::T*
+static method Extension1|genericMethod<T extends core::num* = core::num*, S extends core::num* = core::num*>(lowered final self::Class<self::Extension1|genericMethod::T*>* #this, self::Extension1|genericMethod::S* t) → self::Extension1|genericMethod::T*
   ;
-static method Extension1|get#genericMethod<T extends core::num* = core::num*>(final self::Class<self::Extension1|get#genericMethod::T*>* #this) → <S extends core::num* = core::num*>(S*) →* self::Extension1|get#genericMethod::T*
+static method Extension1|get#genericMethod<T extends core::num* = core::num*>(lowered final self::Class<self::Extension1|get#genericMethod::T*>* #this) → <S extends core::num* = core::num*>(S*) →* self::Extension1|get#genericMethod::T*
   return <S extends core::num* = core::num*>(S* t) → self::Extension1|get#genericMethod::T* => self::Extension1|genericMethod<self::Extension1|get#genericMethod::T*, S*>(#this, t);
-static method Extension2|get#field<T extends core::num* = core::num*>(final self::Class<self::Extension2|get#field::T*>* #this) → self::Extension2|get#field::T*
+static method Extension2|get#field<T extends core::num* = core::num*>(lowered final self::Class<self::Extension2|get#field::T*>* #this) → self::Extension2|get#field::T*
   ;
-static method Extension2|set#field<T extends core::num* = core::num*>(final self::Class<self::Extension2|set#field::T*>* #this, self::Extension2|set#field::T* value) → void
+static method Extension2|set#field<T extends core::num* = core::num*>(lowered final self::Class<self::Extension2|set#field::T*>* #this, self::Extension2|set#field::T* value) → void
   ;
-static method Extension2|method<T extends core::num* = core::num*>(final self::Class<self::Extension2|method::T*>* #this) → self::Extension2|method::T*
+static method Extension2|method<T extends core::num* = core::num*>(lowered final self::Class<self::Extension2|method::T*>* #this) → self::Extension2|method::T*
   ;
-static method Extension2|get#method<T extends core::num* = core::num*>(final self::Class<self::Extension2|get#method::T*>* #this) → () →* self::Extension2|get#method::T*
+static method Extension2|get#method<T extends core::num* = core::num*>(lowered final self::Class<self::Extension2|get#method::T*>* #this) → () →* self::Extension2|get#method::T*
   return () → self::Extension2|get#method::T* => self::Extension2|method<self::Extension2|get#method::T*>(#this);
-static method Extension2|genericMethod<T extends core::num* = core::num*, S extends core::num* = core::num*>(final self::Class<self::Extension2|genericMethod::T*>* #this, self::Extension2|genericMethod::S* t) → self::Extension2|genericMethod::T*
+static method Extension2|genericMethod<T extends core::num* = core::num*, S extends core::num* = core::num*>(lowered final self::Class<self::Extension2|genericMethod::T*>* #this, self::Extension2|genericMethod::S* t) → self::Extension2|genericMethod::T*
   ;
-static method Extension2|get#genericMethod<T extends core::num* = core::num*>(final self::Class<self::Extension2|get#genericMethod::T*>* #this) → <S extends core::num* = core::num*>(S*) →* self::Extension2|get#genericMethod::T*
+static method Extension2|get#genericMethod<T extends core::num* = core::num*>(lowered final self::Class<self::Extension2|get#genericMethod::T*>* #this) → <S extends core::num* = core::num*>(S*) →* self::Extension2|get#genericMethod::T*
   return <S extends core::num* = core::num*>(S* t) → self::Extension2|get#genericMethod::T* => self::Extension2|genericMethod<self::Extension2|get#genericMethod::T*, S*>(#this, t);
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.strong.expect b/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.strong.expect
index adc49e4..1934541 100644
--- a/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.strong.expect
@@ -37,38 +37,38 @@
   set field = self::Extension2|set#field;
 }
 static field core::String* Extension1|latestType;
-static method Extension1|get#field<T extends core::num* = core::num*>(final self::Class<self::Extension1|get#field::T*>* #this) → self::Extension1|get#field::T* {
+static method Extension1|get#field<T extends core::num* = core::num*>(lowered final self::Class<self::Extension1|get#field::T*>* #this) → self::Extension1|get#field::T* {
   self::Extension1|latestType = "${self::Extension1|get#field::T*}";
   return #this.{self::Class::field1};
 }
-static method Extension1|set#field<T extends core::num* = core::num*>(final self::Class<self::Extension1|set#field::T*>* #this, self::Extension1|set#field::T* value) → void {
+static method Extension1|set#field<T extends core::num* = core::num*>(lowered final self::Class<self::Extension1|set#field::T*>* #this, self::Extension1|set#field::T* value) → void {
   self::Extension1|latestType = "${self::Extension1|set#field::T*}";
   #this.{self::Class::field1} = value;
 }
-static method Extension1|method<T extends core::num* = core::num*>(final self::Class<self::Extension1|method::T*>* #this) → self::Extension1|method::T* {
+static method Extension1|method<T extends core::num* = core::num*>(lowered final self::Class<self::Extension1|method::T*>* #this) → self::Extension1|method::T* {
   self::Extension1|latestType = "${self::Extension1|method::T*}";
   return #this.{self::Class::field1};
 }
-static method Extension1|get#method<T extends core::num* = core::num*>(final self::Class<self::Extension1|get#method::T*>* #this) → () →* self::Extension1|get#method::T*
+static method Extension1|get#method<T extends core::num* = core::num*>(lowered final self::Class<self::Extension1|get#method::T*>* #this) → () →* self::Extension1|get#method::T*
   return () → self::Extension1|get#method::T* => self::Extension1|method<self::Extension1|get#method::T*>(#this);
-static method Extension1|genericMethod<T extends core::num* = core::num*, S extends core::num* = core::num*>(final self::Class<self::Extension1|genericMethod::T*>* #this, self::Extension1|genericMethod::S* t) → self::Extension1|genericMethod::T* {
+static method Extension1|genericMethod<T extends core::num* = core::num*, S extends core::num* = core::num*>(lowered final self::Class<self::Extension1|genericMethod::T*>* #this, self::Extension1|genericMethod::S* t) → self::Extension1|genericMethod::T* {
   self::Extension1|latestType = "${self::Extension1|genericMethod::T*}:${self::Extension1|genericMethod::S*}";
   return #this.{self::Class::field1}.{core::num::+}(t) as{TypeError} self::Extension1|genericMethod::T*;
 }
-static method Extension1|get#genericMethod<T extends core::num* = core::num*>(final self::Class<self::Extension1|get#genericMethod::T*>* #this) → <S extends core::num* = core::num*>(S*) →* self::Extension1|get#genericMethod::T*
+static method Extension1|get#genericMethod<T extends core::num* = core::num*>(lowered final self::Class<self::Extension1|get#genericMethod::T*>* #this) → <S extends core::num* = core::num*>(S*) →* self::Extension1|get#genericMethod::T*
   return <S extends core::num* = core::num*>(S* t) → self::Extension1|get#genericMethod::T* => self::Extension1|genericMethod<self::Extension1|get#genericMethod::T*, S*>(#this, t);
-static method Extension2|get#field<T extends core::num* = core::num*>(final self::Class<self::Extension2|get#field::T*>* #this) → self::Extension2|get#field::T*
+static method Extension2|get#field<T extends core::num* = core::num*>(lowered final self::Class<self::Extension2|get#field::T*>* #this) → self::Extension2|get#field::T*
   return #this.{self::Class::field2};
-static method Extension2|set#field<T extends core::num* = core::num*>(final self::Class<self::Extension2|set#field::T*>* #this, self::Extension2|set#field::T* value) → void {
+static method Extension2|set#field<T extends core::num* = core::num*>(lowered final self::Class<self::Extension2|set#field::T*>* #this, self::Extension2|set#field::T* value) → void {
   #this.{self::Class::field2} = value;
 }
-static method Extension2|method<T extends core::num* = core::num*>(final self::Class<self::Extension2|method::T*>* #this) → self::Extension2|method::T*
+static method Extension2|method<T extends core::num* = core::num*>(lowered final self::Class<self::Extension2|method::T*>* #this) → self::Extension2|method::T*
   return #this.{self::Class::field2};
-static method Extension2|get#method<T extends core::num* = core::num*>(final self::Class<self::Extension2|get#method::T*>* #this) → () →* self::Extension2|get#method::T*
+static method Extension2|get#method<T extends core::num* = core::num*>(lowered final self::Class<self::Extension2|get#method::T*>* #this) → () →* self::Extension2|get#method::T*
   return () → self::Extension2|get#method::T* => self::Extension2|method<self::Extension2|get#method::T*>(#this);
-static method Extension2|genericMethod<T extends core::num* = core::num*, S extends core::num* = core::num*>(final self::Class<self::Extension2|genericMethod::T*>* #this, self::Extension2|genericMethod::S* t) → self::Extension2|genericMethod::T*
+static method Extension2|genericMethod<T extends core::num* = core::num*, S extends core::num* = core::num*>(lowered final self::Class<self::Extension2|genericMethod::T*>* #this, self::Extension2|genericMethod::S* t) → self::Extension2|genericMethod::T*
   return #this.{self::Class::field2}.{core::num::+}(t) as{TypeError} self::Extension2|genericMethod::T*;
-static method Extension2|get#genericMethod<T extends core::num* = core::num*>(final self::Class<self::Extension2|get#genericMethod::T*>* #this) → <S extends core::num* = core::num*>(S*) →* self::Extension2|get#genericMethod::T*
+static method Extension2|get#genericMethod<T extends core::num* = core::num*>(lowered final self::Class<self::Extension2|get#genericMethod::T*>* #this) → <S extends core::num* = core::num*>(S*) →* self::Extension2|get#genericMethod::T*
   return <S extends core::num* = core::num*>(S* t) → self::Extension2|get#genericMethod::T* => self::Extension2|genericMethod<self::Extension2|get#genericMethod::T*, S*>(#this, t);
 static method main() → dynamic {
   self::Class<core::int*>* c = new self::Class::•<core::int*>(42, 87);
diff --git a/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.strong.transformed.expect
index 7239cba..c99297a 100644
--- a/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.strong.transformed.expect
@@ -37,38 +37,38 @@
   set field = self::Extension2|set#field;
 }
 static field core::String* Extension1|latestType;
-static method Extension1|get#field<T extends core::num* = core::num*>(final self::Class<self::Extension1|get#field::T*>* #this) → self::Extension1|get#field::T* {
+static method Extension1|get#field<T extends core::num* = core::num*>(lowered final self::Class<self::Extension1|get#field::T*>* #this) → self::Extension1|get#field::T* {
   self::Extension1|latestType = "${self::Extension1|get#field::T*}";
   return #this.{self::Class::field1};
 }
-static method Extension1|set#field<T extends core::num* = core::num*>(final self::Class<self::Extension1|set#field::T*>* #this, self::Extension1|set#field::T* value) → void {
+static method Extension1|set#field<T extends core::num* = core::num*>(lowered final self::Class<self::Extension1|set#field::T*>* #this, self::Extension1|set#field::T* value) → void {
   self::Extension1|latestType = "${self::Extension1|set#field::T*}";
   #this.{self::Class::field1} = value;
 }
-static method Extension1|method<T extends core::num* = core::num*>(final self::Class<self::Extension1|method::T*>* #this) → self::Extension1|method::T* {
+static method Extension1|method<T extends core::num* = core::num*>(lowered final self::Class<self::Extension1|method::T*>* #this) → self::Extension1|method::T* {
   self::Extension1|latestType = "${self::Extension1|method::T*}";
   return #this.{self::Class::field1};
 }
-static method Extension1|get#method<T extends core::num* = core::num*>(final self::Class<self::Extension1|get#method::T*>* #this) → () →* self::Extension1|get#method::T*
+static method Extension1|get#method<T extends core::num* = core::num*>(lowered final self::Class<self::Extension1|get#method::T*>* #this) → () →* self::Extension1|get#method::T*
   return () → self::Extension1|get#method::T* => self::Extension1|method<self::Extension1|get#method::T*>(#this);
-static method Extension1|genericMethod<T extends core::num* = core::num*, S extends core::num* = core::num*>(final self::Class<self::Extension1|genericMethod::T*>* #this, self::Extension1|genericMethod::S* t) → self::Extension1|genericMethod::T* {
+static method Extension1|genericMethod<T extends core::num* = core::num*, S extends core::num* = core::num*>(lowered final self::Class<self::Extension1|genericMethod::T*>* #this, self::Extension1|genericMethod::S* t) → self::Extension1|genericMethod::T* {
   self::Extension1|latestType = "${self::Extension1|genericMethod::T*}:${self::Extension1|genericMethod::S*}";
   return #this.{self::Class::field1}.{core::num::+}(t) as{TypeError} self::Extension1|genericMethod::T*;
 }
-static method Extension1|get#genericMethod<T extends core::num* = core::num*>(final self::Class<self::Extension1|get#genericMethod::T*>* #this) → <S extends core::num* = core::num*>(S*) →* self::Extension1|get#genericMethod::T*
+static method Extension1|get#genericMethod<T extends core::num* = core::num*>(lowered final self::Class<self::Extension1|get#genericMethod::T*>* #this) → <S extends core::num* = core::num*>(S*) →* self::Extension1|get#genericMethod::T*
   return <S extends core::num* = core::num*>(S* t) → self::Extension1|get#genericMethod::T* => self::Extension1|genericMethod<self::Extension1|get#genericMethod::T*, S*>(#this, t);
-static method Extension2|get#field<T extends core::num* = core::num*>(final self::Class<self::Extension2|get#field::T*>* #this) → self::Extension2|get#field::T*
+static method Extension2|get#field<T extends core::num* = core::num*>(lowered final self::Class<self::Extension2|get#field::T*>* #this) → self::Extension2|get#field::T*
   return #this.{self::Class::field2};
-static method Extension2|set#field<T extends core::num* = core::num*>(final self::Class<self::Extension2|set#field::T*>* #this, self::Extension2|set#field::T* value) → void {
+static method Extension2|set#field<T extends core::num* = core::num*>(lowered final self::Class<self::Extension2|set#field::T*>* #this, self::Extension2|set#field::T* value) → void {
   #this.{self::Class::field2} = value;
 }
-static method Extension2|method<T extends core::num* = core::num*>(final self::Class<self::Extension2|method::T*>* #this) → self::Extension2|method::T*
+static method Extension2|method<T extends core::num* = core::num*>(lowered final self::Class<self::Extension2|method::T*>* #this) → self::Extension2|method::T*
   return #this.{self::Class::field2};
-static method Extension2|get#method<T extends core::num* = core::num*>(final self::Class<self::Extension2|get#method::T*>* #this) → () →* self::Extension2|get#method::T*
+static method Extension2|get#method<T extends core::num* = core::num*>(lowered final self::Class<self::Extension2|get#method::T*>* #this) → () →* self::Extension2|get#method::T*
   return () → self::Extension2|get#method::T* => self::Extension2|method<self::Extension2|get#method::T*>(#this);
-static method Extension2|genericMethod<T extends core::num* = core::num*, S extends core::num* = core::num*>(final self::Class<self::Extension2|genericMethod::T*>* #this, self::Extension2|genericMethod::S* t) → self::Extension2|genericMethod::T*
+static method Extension2|genericMethod<T extends core::num* = core::num*, S extends core::num* = core::num*>(lowered final self::Class<self::Extension2|genericMethod::T*>* #this, self::Extension2|genericMethod::S* t) → self::Extension2|genericMethod::T*
   return #this.{self::Class::field2}.{core::num::+}(t) as{TypeError} self::Extension2|genericMethod::T*;
-static method Extension2|get#genericMethod<T extends core::num* = core::num*>(final self::Class<self::Extension2|get#genericMethod::T*>* #this) → <S extends core::num* = core::num*>(S*) →* self::Extension2|get#genericMethod::T*
+static method Extension2|get#genericMethod<T extends core::num* = core::num*>(lowered final self::Class<self::Extension2|get#genericMethod::T*>* #this) → <S extends core::num* = core::num*>(S*) →* self::Extension2|get#genericMethod::T*
   return <S extends core::num* = core::num*>(S* t) → self::Extension2|get#genericMethod::T* => self::Extension2|genericMethod<self::Extension2|get#genericMethod::T*, S*>(#this, t);
 static method main() → dynamic {
   self::Class<core::int*>* c = new self::Class::•<core::int*>(42, 87);
diff --git a/pkg/front_end/testcases/extensions/explicit_this.dart.outline.expect b/pkg/front_end/testcases/extensions/explicit_this.dart.outline.expect
index fee8d56..21fa5c7 100644
--- a/pkg/front_end/testcases/extensions/explicit_this.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/explicit_this.dart.outline.expect
@@ -27,17 +27,17 @@
   method method4 = self::A2|method4;
   tearoff method4 = self::A2|get#method4;
 }
-static method A2|method2(final self::A1* #this) → void
+static method A2|method2(lowered final self::A1* #this) → void
   ;
-static method A2|get#method2(final self::A1* #this) → () →* void
+static method A2|get#method2(lowered final self::A1* #this) → () →* void
   return () → void => self::A2|method2(#this);
-static method A2|method3(final self::A1* #this) → core::Object*
+static method A2|method3(lowered final self::A1* #this) → core::Object*
   ;
-static method A2|get#method3(final self::A1* #this) → () →* core::Object*
+static method A2|get#method3(lowered final self::A1* #this) → () →* core::Object*
   return () → core::Object* => self::A2|method3(#this);
-static method A2|method4(final self::A1* #this, core::Object* o) → void
+static method A2|method4(lowered final self::A1* #this, core::Object* o) → void
   ;
-static method A2|get#method4(final self::A1* #this) → (core::Object*) →* void
+static method A2|get#method4(lowered final self::A1* #this) → (core::Object*) →* void
   return (core::Object* o) → void => self::A2|method4(#this, o);
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/explicit_this.dart.strong.expect b/pkg/front_end/testcases/extensions/explicit_this.dart.strong.expect
index ef5a89a..f13b8bd 100644
--- a/pkg/front_end/testcases/extensions/explicit_this.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/explicit_this.dart.strong.expect
@@ -27,17 +27,17 @@
   method method4 = self::A2|method4;
   tearoff method4 = self::A2|get#method4;
 }
-static method A2|method2(final self::A1* #this) → void
+static method A2|method2(lowered final self::A1* #this) → void
   return #this.{self::A1::method1}();
-static method A2|get#method2(final self::A1* #this) → () →* void
+static method A2|get#method2(lowered final self::A1* #this) → () →* void
   return () → void => self::A2|method2(#this);
-static method A2|method3(final self::A1* #this) → core::Object*
+static method A2|method3(lowered final self::A1* #this) → core::Object*
   return #this.{self::A1::field};
-static method A2|get#method3(final self::A1* #this) → () →* core::Object*
+static method A2|get#method3(lowered final self::A1* #this) → () →* core::Object*
   return () → core::Object* => self::A2|method3(#this);
-static method A2|method4(final self::A1* #this, core::Object* o) → void {
+static method A2|method4(lowered final self::A1* #this, core::Object* o) → void {
   #this.{self::A1::field} = o;
 }
-static method A2|get#method4(final self::A1* #this) → (core::Object*) →* void
+static method A2|get#method4(lowered final self::A1* #this) → (core::Object*) →* void
   return (core::Object* o) → void => self::A2|method4(#this, o);
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/explicit_this.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/explicit_this.dart.strong.transformed.expect
index ef5a89a..f13b8bd 100644
--- a/pkg/front_end/testcases/extensions/explicit_this.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/explicit_this.dart.strong.transformed.expect
@@ -27,17 +27,17 @@
   method method4 = self::A2|method4;
   tearoff method4 = self::A2|get#method4;
 }
-static method A2|method2(final self::A1* #this) → void
+static method A2|method2(lowered final self::A1* #this) → void
   return #this.{self::A1::method1}();
-static method A2|get#method2(final self::A1* #this) → () →* void
+static method A2|get#method2(lowered final self::A1* #this) → () →* void
   return () → void => self::A2|method2(#this);
-static method A2|method3(final self::A1* #this) → core::Object*
+static method A2|method3(lowered final self::A1* #this) → core::Object*
   return #this.{self::A1::field};
-static method A2|get#method3(final self::A1* #this) → () →* core::Object*
+static method A2|get#method3(lowered final self::A1* #this) → () →* core::Object*
   return () → core::Object* => self::A2|method3(#this);
-static method A2|method4(final self::A1* #this, core::Object* o) → void {
+static method A2|method4(lowered final self::A1* #this, core::Object* o) → void {
   #this.{self::A1::field} = o;
 }
-static method A2|get#method4(final self::A1* #this) → (core::Object*) →* void
+static method A2|get#method4(lowered final self::A1* #this) → (core::Object*) →* void
   return (core::Object* o) → void => self::A2|method4(#this, o);
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/export_from_dill/main.dart.outline.expect b/pkg/front_end/testcases/extensions/export_from_dill/main.dart.outline.expect
index e4074ca..70bd997 100644
--- a/pkg/front_end/testcases/extensions/export_from_dill/main.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/export_from_dill/main.dart.outline.expect
@@ -33,13 +33,13 @@
 static field core::int* Extension|staticField;
 static final field core::int* Extension|staticFinalField;
 static const field core::int* Extension|staticConstField = #C1;
-static method Extension|get#instanceProperty(final core::int* #this) → core::int*
+static method Extension|get#instanceProperty(lowered final core::int* #this) → core::int*
   ;
-static method Extension|set#instanceProperty(final core::int* #this, core::int* value) → void
+static method Extension|set#instanceProperty(lowered final core::int* #this, core::int* value) → void
   ;
-static method Extension|instanceMethod(final core::int* #this) → void
+static method Extension|instanceMethod(lowered final core::int* #this) → void
   ;
-static method Extension|get#instanceMethod(final core::int* #this) → () →* void
+static method Extension|get#instanceMethod(lowered final core::int* #this) → () →* void
   return () → void => mai::Extension|instanceMethod(#this);
 static get Extension|staticProperty() → core::int*
   ;
diff --git a/pkg/front_end/testcases/extensions/export_from_dill/main.dart.strong.expect b/pkg/front_end/testcases/extensions/export_from_dill/main.dart.strong.expect
index 93ed84b..d7c5320 100644
--- a/pkg/front_end/testcases/extensions/export_from_dill/main.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/export_from_dill/main.dart.strong.expect
@@ -43,11 +43,11 @@
 static field core::int* Extension|staticField = 42;
 static final field core::int* Extension|staticFinalField = 42;
 static const field core::int* Extension|staticConstField = #C1;
-static method Extension|get#instanceProperty(final core::int* #this) → core::int*
+static method Extension|get#instanceProperty(lowered final core::int* #this) → core::int*
   return 42;
-static method Extension|set#instanceProperty(final core::int* #this, core::int* value) → void {}
-static method Extension|instanceMethod(final core::int* #this) → void {}
-static method Extension|get#instanceMethod(final core::int* #this) → () →* void
+static method Extension|set#instanceProperty(lowered final core::int* #this, core::int* value) → void {}
+static method Extension|instanceMethod(lowered final core::int* #this) → void {}
+static method Extension|get#instanceMethod(lowered final core::int* #this) → () →* void
   return () → void => mai::Extension|instanceMethod(#this);
 static get Extension|staticProperty() → core::int*
   return 42;
diff --git a/pkg/front_end/testcases/extensions/export_from_dill/main.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/export_from_dill/main.dart.strong.transformed.expect
index 93ed84b..d7c5320 100644
--- a/pkg/front_end/testcases/extensions/export_from_dill/main.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/export_from_dill/main.dart.strong.transformed.expect
@@ -43,11 +43,11 @@
 static field core::int* Extension|staticField = 42;
 static final field core::int* Extension|staticFinalField = 42;
 static const field core::int* Extension|staticConstField = #C1;
-static method Extension|get#instanceProperty(final core::int* #this) → core::int*
+static method Extension|get#instanceProperty(lowered final core::int* #this) → core::int*
   return 42;
-static method Extension|set#instanceProperty(final core::int* #this, core::int* value) → void {}
-static method Extension|instanceMethod(final core::int* #this) → void {}
-static method Extension|get#instanceMethod(final core::int* #this) → () →* void
+static method Extension|set#instanceProperty(lowered final core::int* #this, core::int* value) → void {}
+static method Extension|instanceMethod(lowered final core::int* #this) → void {}
+static method Extension|get#instanceMethod(lowered final core::int* #this) → () →* void
   return () → void => mai::Extension|instanceMethod(#this);
 static get Extension|staticProperty() → core::int*
   return 42;
diff --git a/pkg/front_end/testcases/extensions/export_twice.dart.outline.expect b/pkg/front_end/testcases/extensions/export_twice.dart.outline.expect
index 1ee21db..a7b9b7e 100644
--- a/pkg/front_end/testcases/extensions/export_twice.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/export_twice.dart.outline.expect
@@ -29,9 +29,9 @@
   method method = self2::Extension|method;
   tearoff method = self2::Extension|get#method;
 }
-static method Extension|method(final self2::Class* #this) → dynamic
+static method Extension|method(lowered final self2::Class* #this) → dynamic
   ;
-static method Extension|get#method(final self2::Class* #this) → () →* dynamic
+static method Extension|get#method(lowered final self2::Class* #this) → () →* dynamic
   return () → dynamic => self2::Extension|method(#this);
 
 library;
diff --git a/pkg/front_end/testcases/extensions/export_twice.dart.strong.expect b/pkg/front_end/testcases/extensions/export_twice.dart.strong.expect
index bc0e513..d7eef99 100644
--- a/pkg/front_end/testcases/extensions/export_twice.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/export_twice.dart.strong.expect
@@ -32,8 +32,8 @@
   method method = exp::Extension|method;
   tearoff method = exp::Extension|get#method;
 }
-static method Extension|method(final exp::Class* #this) → dynamic {}
-static method Extension|get#method(final exp::Class* #this) → () →* dynamic
+static method Extension|method(lowered final exp::Class* #this) → dynamic {}
+static method Extension|get#method(lowered final exp::Class* #this) → () →* dynamic
   return () → dynamic => exp::Extension|method(#this);
 
 library;
diff --git a/pkg/front_end/testcases/extensions/export_twice.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/export_twice.dart.strong.transformed.expect
index bc0e513..d7eef99 100644
--- a/pkg/front_end/testcases/extensions/export_twice.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/export_twice.dart.strong.transformed.expect
@@ -32,8 +32,8 @@
   method method = exp::Extension|method;
   tearoff method = exp::Extension|get#method;
 }
-static method Extension|method(final exp::Class* #this) → dynamic {}
-static method Extension|get#method(final exp::Class* #this) → () →* dynamic
+static method Extension|method(lowered final exp::Class* #this) → dynamic {}
+static method Extension|get#method(lowered final exp::Class* #this) → () →* dynamic
   return () → dynamic => exp::Extension|method(#this);
 
 library;
diff --git a/pkg/front_end/testcases/extensions/extension_call.dart.outline.expect b/pkg/front_end/testcases/extensions/extension_call.dart.outline.expect
index b95b9c6..bb8bde3 100644
--- a/pkg/front_end/testcases/extensions/extension_call.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/extension_call.dart.outline.expect
@@ -22,9 +22,9 @@
   method call = self::Extension|call;
   tearoff call = self::Extension|get#call;
 }
-static method Extension|call<T extends core::Object* = dynamic>(final self::Class<self::Extension|call::T*>* #this, self::Extension|call::T* a) → self::Extension|call::T*
+static method Extension|call<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|call::T*>* #this, self::Extension|call::T* a) → self::Extension|call::T*
   ;
-static method Extension|get#call<T extends core::Object* = dynamic>(final self::Class<self::Extension|get#call::T*>* #this) → (self::Extension|get#call::T*) →* self::Extension|get#call::T*
+static method Extension|get#call<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|get#call::T*>* #this) → (self::Extension|get#call::T*) →* self::Extension|get#call::T*
   return (self::Extension|get#call::T* a) → self::Extension|get#call::T* => self::Extension|call<self::Extension|get#call::T*>(#this, a);
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/extension_call.dart.strong.expect b/pkg/front_end/testcases/extensions/extension_call.dart.strong.expect
index 946cf57..12c9cd8 100644
--- a/pkg/front_end/testcases/extensions/extension_call.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/extension_call.dart.strong.expect
@@ -23,9 +23,9 @@
   method call = self::Extension|call;
   tearoff call = self::Extension|get#call;
 }
-static method Extension|call<T extends core::Object* = dynamic>(final self::Class<self::Extension|call::T*>* #this, self::Extension|call::T* a) → self::Extension|call::T*
+static method Extension|call<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|call::T*>* #this, self::Extension|call::T* a) → self::Extension|call::T*
   return #this.{self::Class::method}(a);
-static method Extension|get#call<T extends core::Object* = dynamic>(final self::Class<self::Extension|get#call::T*>* #this) → (self::Extension|get#call::T*) →* self::Extension|get#call::T*
+static method Extension|get#call<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|get#call::T*>* #this) → (self::Extension|get#call::T*) →* self::Extension|get#call::T*
   return (self::Extension|get#call::T* a) → self::Extension|get#call::T* => self::Extension|call<self::Extension|get#call::T*>(#this, a);
 static method main() → dynamic {
   self::Class<core::int*>* c = new self::Class::•<core::int*>();
diff --git a/pkg/front_end/testcases/extensions/extension_call.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/extension_call.dart.strong.transformed.expect
index 946cf57..12c9cd8 100644
--- a/pkg/front_end/testcases/extensions/extension_call.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/extension_call.dart.strong.transformed.expect
@@ -23,9 +23,9 @@
   method call = self::Extension|call;
   tearoff call = self::Extension|get#call;
 }
-static method Extension|call<T extends core::Object* = dynamic>(final self::Class<self::Extension|call::T*>* #this, self::Extension|call::T* a) → self::Extension|call::T*
+static method Extension|call<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|call::T*>* #this, self::Extension|call::T* a) → self::Extension|call::T*
   return #this.{self::Class::method}(a);
-static method Extension|get#call<T extends core::Object* = dynamic>(final self::Class<self::Extension|get#call::T*>* #this) → (self::Extension|get#call::T*) →* self::Extension|get#call::T*
+static method Extension|get#call<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|get#call::T*>* #this) → (self::Extension|get#call::T*) →* self::Extension|get#call::T*
   return (self::Extension|get#call::T* a) → self::Extension|get#call::T* => self::Extension|call<self::Extension|get#call::T*>(#this, a);
 static method main() → dynamic {
   self::Class<core::int*>* c = new self::Class::•<core::int*>();
diff --git a/pkg/front_end/testcases/extensions/extension_constructor.dart.outline.expect b/pkg/front_end/testcases/extensions/extension_constructor.dart.outline.expect
index 85085ee..5bcfb3c 100644
--- a/pkg/front_end/testcases/extensions/extension_constructor.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/extension_constructor.dart.outline.expect
@@ -57,9 +57,9 @@
   method method = self::Extension|method;
   tearoff method = self::Extension|get#method;
 }
-static method Extension|method(final self::Class* #this) → dynamic
+static method Extension|method(lowered final self::Class* #this) → dynamic
   ;
-static method Extension|get#method(final self::Class* #this) → () →* dynamic
+static method Extension|get#method(lowered final self::Class* #this) → () →* dynamic
   return () → dynamic => self::Extension|method(#this);
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/extension_constructor.dart.strong.expect b/pkg/front_end/testcases/extensions/extension_constructor.dart.strong.expect
index d5d8cb2..e059431 100644
--- a/pkg/front_end/testcases/extensions/extension_constructor.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/extension_constructor.dart.strong.expect
@@ -58,7 +58,7 @@
   method method = self::Extension|method;
   tearoff method = self::Extension|get#method;
 }
-static method Extension|method(final self::Class* #this) → dynamic {}
-static method Extension|get#method(final self::Class* #this) → () →* dynamic
+static method Extension|method(lowered final self::Class* #this) → dynamic {}
+static method Extension|get#method(lowered final self::Class* #this) → () →* dynamic
   return () → dynamic => self::Extension|method(#this);
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/extension_constructor.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/extension_constructor.dart.strong.transformed.expect
index d5d8cb2..e059431 100644
--- a/pkg/front_end/testcases/extensions/extension_constructor.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/extension_constructor.dart.strong.transformed.expect
@@ -58,7 +58,7 @@
   method method = self::Extension|method;
   tearoff method = self::Extension|get#method;
 }
-static method Extension|method(final self::Class* #this) → dynamic {}
-static method Extension|get#method(final self::Class* #this) → () →* dynamic
+static method Extension|method(lowered final self::Class* #this) → dynamic {}
+static method Extension|get#method(lowered final self::Class* #this) → () →* dynamic
   return () → dynamic => self::Extension|method(#this);
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/extension_member_conflict.dart.outline.expect b/pkg/front_end/testcases/extensions/extension_member_conflict.dart.outline.expect
index 78e8afc..4010730 100644
--- a/pkg/front_end/testcases/extensions/extension_member_conflict.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/extension_member_conflict.dart.outline.expect
@@ -169,13 +169,13 @@
   set instanceSetterAndStaticField = self::Extension|set#instanceSetterAndStaticField;
 }
 static field core::int* Extension|duplicateStaticField;
-static method Extension|get#duplicateInstanceGetter<T extends core::Object* = dynamic>(final core::int* #this) → core::int*
+static method Extension|get#duplicateInstanceGetter<T extends core::Object* = dynamic>(lowered final core::int* #this) → core::int*
   ;
-static method Extension|set#duplicateInstanceSetter<T extends core::Object* = dynamic>(final core::int* #this, core::int* value) → void
+static method Extension|set#duplicateInstanceSetter<T extends core::Object* = dynamic>(lowered final core::int* #this, core::int* value) → void
   ;
-static method Extension|duplicateInstanceMethod<T extends core::Object* = dynamic>(final core::int* #this) → void
+static method Extension|duplicateInstanceMethod<T extends core::Object* = dynamic>(lowered final core::int* #this) → void
   ;
-static method Extension|get#duplicateInstanceMethod<T extends core::Object* = dynamic>(final core::int* #this) → () →* void
+static method Extension|get#duplicateInstanceMethod<T extends core::Object* = dynamic>(lowered final core::int* #this) → () →* void
   return () → void => self::Extension|duplicateInstanceMethod<self::Extension|get#duplicateInstanceMethod::T*>(#this);
 static get Extension|duplicateStaticGetter() → core::int*
   ;
@@ -183,17 +183,17 @@
   ;
 static method Extension|duplicateStaticMethod() → void
   ;
-static method Extension|get#duplicateInstanceGetterPlusSetter<T extends core::Object* = dynamic>(final core::int* #this) → core::int*
+static method Extension|get#duplicateInstanceGetterPlusSetter<T extends core::Object* = dynamic>(lowered final core::int* #this) → core::int*
   ;
-static method Extension|set#duplicateInstanceGetterPlusSetter<T extends core::Object* = dynamic>(final core::int* #this, core::int* value) → void
+static method Extension|set#duplicateInstanceGetterPlusSetter<T extends core::Object* = dynamic>(lowered final core::int* #this, core::int* value) → void
   ;
-static method Extension|get#duplicateInstanceSetterPlusGetter<T extends core::Object* = dynamic>(final core::int* #this) → core::int*
+static method Extension|get#duplicateInstanceSetterPlusGetter<T extends core::Object* = dynamic>(lowered final core::int* #this) → core::int*
   ;
-static method Extension|set#duplicateInstanceSetterPlusGetter<T extends core::Object* = dynamic>(final core::int* #this, core::int* value) → void
+static method Extension|set#duplicateInstanceSetterPlusGetter<T extends core::Object* = dynamic>(lowered final core::int* #this, core::int* value) → void
   ;
-static method Extension|get#duplicateInstanceGetterAndSetter<T extends core::Object* = dynamic>(final core::int* #this) → core::int*
+static method Extension|get#duplicateInstanceGetterAndSetter<T extends core::Object* = dynamic>(lowered final core::int* #this) → core::int*
   ;
-static method Extension|set#duplicateInstanceGetterAndSetter<T extends core::Object* = dynamic>(final core::int* #this, core::int* value) → void
+static method Extension|set#duplicateInstanceGetterAndSetter<T extends core::Object* = dynamic>(lowered final core::int* #this, core::int* value) → void
   ;
 static get Extension|duplicateStaticGetterPlusSetter() → core::int*
   ;
@@ -207,17 +207,17 @@
   ;
 static set Extension|duplicateStaticGetterAndSetter(core::int* value) → void
   ;
-static method Extension|get#instanceGetterAndStaticSetter<T extends core::Object* = dynamic>(final core::int* #this) → core::int*
+static method Extension|get#instanceGetterAndStaticSetter<T extends core::Object* = dynamic>(lowered final core::int* #this) → core::int*
   ;
 static set Extension|instanceGetterAndStaticSetter(core::int* value) → void
   ;
 static get Extension|instanceSetterAndStaticGetter() → core::int*
   ;
-static method Extension|set#instanceSetterAndStaticGetter<T extends core::Object* = dynamic>(final core::int* #this, core::int* value) → void
+static method Extension|set#instanceSetterAndStaticGetter<T extends core::Object* = dynamic>(lowered final core::int* #this, core::int* value) → void
   ;
-static method Extension|get#instanceGetterAndStaticField<T extends core::Object* = dynamic>(final core::int* #this) → core::int*
+static method Extension|get#instanceGetterAndStaticField<T extends core::Object* = dynamic>(lowered final core::int* #this) → core::int*
   ;
-static method Extension|set#instanceSetterAndStaticField<T extends core::Object* = dynamic>(final core::int* #this, core::int* value) → void
+static method Extension|set#instanceSetterAndStaticField<T extends core::Object* = dynamic>(lowered final core::int* #this, core::int* value) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/extension_member_conflict.dart.strong.expect b/pkg/front_end/testcases/extensions/extension_member_conflict.dart.strong.expect
index 52aa6f4..fd72cf1 100644
--- a/pkg/front_end/testcases/extensions/extension_member_conflict.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/extension_member_conflict.dart.strong.expect
@@ -169,25 +169,25 @@
   set instanceSetterAndStaticField = self::Extension|set#instanceSetterAndStaticField;
 }
 static field core::int* Extension|duplicateStaticField;
-static method Extension|get#duplicateInstanceGetter<T extends core::Object* = dynamic>(final core::int* #this) → core::int*
+static method Extension|get#duplicateInstanceGetter<T extends core::Object* = dynamic>(lowered final core::int* #this) → core::int*
   return 0;
-static method Extension|set#duplicateInstanceSetter<T extends core::Object* = dynamic>(final core::int* #this, core::int* value) → void {}
-static method Extension|duplicateInstanceMethod<T extends core::Object* = dynamic>(final core::int* #this) → void {}
-static method Extension|get#duplicateInstanceMethod<T extends core::Object* = dynamic>(final core::int* #this) → () →* void
+static method Extension|set#duplicateInstanceSetter<T extends core::Object* = dynamic>(lowered final core::int* #this, core::int* value) → void {}
+static method Extension|duplicateInstanceMethod<T extends core::Object* = dynamic>(lowered final core::int* #this) → void {}
+static method Extension|get#duplicateInstanceMethod<T extends core::Object* = dynamic>(lowered final core::int* #this) → () →* void
   return () → void => self::Extension|duplicateInstanceMethod<self::Extension|get#duplicateInstanceMethod::T*>(#this);
 static get Extension|duplicateStaticGetter() → core::int*
   return 0;
 static set Extension|duplicateStaticSetter(core::int* value) → void {}
 static method Extension|duplicateStaticMethod() → void {}
-static method Extension|get#duplicateInstanceGetterPlusSetter<T extends core::Object* = dynamic>(final core::int* #this) → core::int*
+static method Extension|get#duplicateInstanceGetterPlusSetter<T extends core::Object* = dynamic>(lowered final core::int* #this) → core::int*
   return 0;
-static method Extension|set#duplicateInstanceGetterPlusSetter<T extends core::Object* = dynamic>(final core::int* #this, core::int* value) → void {}
-static method Extension|get#duplicateInstanceSetterPlusGetter<T extends core::Object* = dynamic>(final core::int* #this) → core::int*
+static method Extension|set#duplicateInstanceGetterPlusSetter<T extends core::Object* = dynamic>(lowered final core::int* #this, core::int* value) → void {}
+static method Extension|get#duplicateInstanceSetterPlusGetter<T extends core::Object* = dynamic>(lowered final core::int* #this) → core::int*
   return 0;
-static method Extension|set#duplicateInstanceSetterPlusGetter<T extends core::Object* = dynamic>(final core::int* #this, core::int* value) → void {}
-static method Extension|get#duplicateInstanceGetterAndSetter<T extends core::Object* = dynamic>(final core::int* #this) → core::int*
+static method Extension|set#duplicateInstanceSetterPlusGetter<T extends core::Object* = dynamic>(lowered final core::int* #this, core::int* value) → void {}
+static method Extension|get#duplicateInstanceGetterAndSetter<T extends core::Object* = dynamic>(lowered final core::int* #this) → core::int*
   return 0;
-static method Extension|set#duplicateInstanceGetterAndSetter<T extends core::Object* = dynamic>(final core::int* #this, core::int* value) → void {}
+static method Extension|set#duplicateInstanceGetterAndSetter<T extends core::Object* = dynamic>(lowered final core::int* #this, core::int* value) → void {}
 static get Extension|duplicateStaticGetterPlusSetter() → core::int*
   return 0;
 static set Extension|duplicateStaticGetterPlusSetter(core::int* value) → void {}
@@ -197,13 +197,13 @@
 static get Extension|duplicateStaticGetterAndSetter() → core::int*
   return 0;
 static set Extension|duplicateStaticGetterAndSetter(core::int* value) → void {}
-static method Extension|get#instanceGetterAndStaticSetter<T extends core::Object* = dynamic>(final core::int* #this) → core::int*
+static method Extension|get#instanceGetterAndStaticSetter<T extends core::Object* = dynamic>(lowered final core::int* #this) → core::int*
   return 0;
 static set Extension|instanceGetterAndStaticSetter(core::int* value) → void {}
 static get Extension|instanceSetterAndStaticGetter() → core::int*
   return 0;
-static method Extension|set#instanceSetterAndStaticGetter<T extends core::Object* = dynamic>(final core::int* #this, core::int* value) → void {}
-static method Extension|get#instanceGetterAndStaticField<T extends core::Object* = dynamic>(final core::int* #this) → core::int*
+static method Extension|set#instanceSetterAndStaticGetter<T extends core::Object* = dynamic>(lowered final core::int* #this, core::int* value) → void {}
+static method Extension|get#instanceGetterAndStaticField<T extends core::Object* = dynamic>(lowered final core::int* #this) → core::int*
   return 0;
-static method Extension|set#instanceSetterAndStaticField<T extends core::Object* = dynamic>(final core::int* #this, core::int* value) → void {}
+static method Extension|set#instanceSetterAndStaticField<T extends core::Object* = dynamic>(lowered final core::int* #this, core::int* value) → void {}
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/extension_member_conflict.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/extension_member_conflict.dart.strong.transformed.expect
index 52aa6f4..fd72cf1 100644
--- a/pkg/front_end/testcases/extensions/extension_member_conflict.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/extension_member_conflict.dart.strong.transformed.expect
@@ -169,25 +169,25 @@
   set instanceSetterAndStaticField = self::Extension|set#instanceSetterAndStaticField;
 }
 static field core::int* Extension|duplicateStaticField;
-static method Extension|get#duplicateInstanceGetter<T extends core::Object* = dynamic>(final core::int* #this) → core::int*
+static method Extension|get#duplicateInstanceGetter<T extends core::Object* = dynamic>(lowered final core::int* #this) → core::int*
   return 0;
-static method Extension|set#duplicateInstanceSetter<T extends core::Object* = dynamic>(final core::int* #this, core::int* value) → void {}
-static method Extension|duplicateInstanceMethod<T extends core::Object* = dynamic>(final core::int* #this) → void {}
-static method Extension|get#duplicateInstanceMethod<T extends core::Object* = dynamic>(final core::int* #this) → () →* void
+static method Extension|set#duplicateInstanceSetter<T extends core::Object* = dynamic>(lowered final core::int* #this, core::int* value) → void {}
+static method Extension|duplicateInstanceMethod<T extends core::Object* = dynamic>(lowered final core::int* #this) → void {}
+static method Extension|get#duplicateInstanceMethod<T extends core::Object* = dynamic>(lowered final core::int* #this) → () →* void
   return () → void => self::Extension|duplicateInstanceMethod<self::Extension|get#duplicateInstanceMethod::T*>(#this);
 static get Extension|duplicateStaticGetter() → core::int*
   return 0;
 static set Extension|duplicateStaticSetter(core::int* value) → void {}
 static method Extension|duplicateStaticMethod() → void {}
-static method Extension|get#duplicateInstanceGetterPlusSetter<T extends core::Object* = dynamic>(final core::int* #this) → core::int*
+static method Extension|get#duplicateInstanceGetterPlusSetter<T extends core::Object* = dynamic>(lowered final core::int* #this) → core::int*
   return 0;
-static method Extension|set#duplicateInstanceGetterPlusSetter<T extends core::Object* = dynamic>(final core::int* #this, core::int* value) → void {}
-static method Extension|get#duplicateInstanceSetterPlusGetter<T extends core::Object* = dynamic>(final core::int* #this) → core::int*
+static method Extension|set#duplicateInstanceGetterPlusSetter<T extends core::Object* = dynamic>(lowered final core::int* #this, core::int* value) → void {}
+static method Extension|get#duplicateInstanceSetterPlusGetter<T extends core::Object* = dynamic>(lowered final core::int* #this) → core::int*
   return 0;
-static method Extension|set#duplicateInstanceSetterPlusGetter<T extends core::Object* = dynamic>(final core::int* #this, core::int* value) → void {}
-static method Extension|get#duplicateInstanceGetterAndSetter<T extends core::Object* = dynamic>(final core::int* #this) → core::int*
+static method Extension|set#duplicateInstanceSetterPlusGetter<T extends core::Object* = dynamic>(lowered final core::int* #this, core::int* value) → void {}
+static method Extension|get#duplicateInstanceGetterAndSetter<T extends core::Object* = dynamic>(lowered final core::int* #this) → core::int*
   return 0;
-static method Extension|set#duplicateInstanceGetterAndSetter<T extends core::Object* = dynamic>(final core::int* #this, core::int* value) → void {}
+static method Extension|set#duplicateInstanceGetterAndSetter<T extends core::Object* = dynamic>(lowered final core::int* #this, core::int* value) → void {}
 static get Extension|duplicateStaticGetterPlusSetter() → core::int*
   return 0;
 static set Extension|duplicateStaticGetterPlusSetter(core::int* value) → void {}
@@ -197,13 +197,13 @@
 static get Extension|duplicateStaticGetterAndSetter() → core::int*
   return 0;
 static set Extension|duplicateStaticGetterAndSetter(core::int* value) → void {}
-static method Extension|get#instanceGetterAndStaticSetter<T extends core::Object* = dynamic>(final core::int* #this) → core::int*
+static method Extension|get#instanceGetterAndStaticSetter<T extends core::Object* = dynamic>(lowered final core::int* #this) → core::int*
   return 0;
 static set Extension|instanceGetterAndStaticSetter(core::int* value) → void {}
 static get Extension|instanceSetterAndStaticGetter() → core::int*
   return 0;
-static method Extension|set#instanceSetterAndStaticGetter<T extends core::Object* = dynamic>(final core::int* #this, core::int* value) → void {}
-static method Extension|get#instanceGetterAndStaticField<T extends core::Object* = dynamic>(final core::int* #this) → core::int*
+static method Extension|set#instanceSetterAndStaticGetter<T extends core::Object* = dynamic>(lowered final core::int* #this, core::int* value) → void {}
+static method Extension|get#instanceGetterAndStaticField<T extends core::Object* = dynamic>(lowered final core::int* #this) → core::int*
   return 0;
-static method Extension|set#instanceSetterAndStaticField<T extends core::Object* = dynamic>(final core::int* #this, core::int* value) → void {}
+static method Extension|set#instanceSetterAndStaticField<T extends core::Object* = dynamic>(lowered final core::int* #this, core::int* value) → void {}
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/extension_methods.dart.outline.expect b/pkg/front_end/testcases/extensions/extension_methods.dart.outline.expect
index f327887..20fb805 100644
--- a/pkg/front_end/testcases/extensions/extension_methods.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/extension_methods.dart.outline.expect
@@ -23,7 +23,7 @@
 extension E on self::C* {
   get two = self::E|get#two;
 }
-static method E|get#two(final self::C* #this) → core::int*
+static method E|get#two(lowered final self::C* #this) → core::int*
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/extension_methods.dart.strong.expect b/pkg/front_end/testcases/extensions/extension_methods.dart.strong.expect
index b6a1193..fd6fddd 100644
--- a/pkg/front_end/testcases/extensions/extension_methods.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/extension_methods.dart.strong.expect
@@ -25,7 +25,7 @@
 extension E on self::C* {
   get two = self::E|get#two;
 }
-static method E|get#two(final self::C* #this) → core::int*
+static method E|get#two(lowered final self::C* #this) → core::int*
   return 2;
 static method main() → dynamic {
   self::C* c = new self::C::•();
diff --git a/pkg/front_end/testcases/extensions/extension_methods.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/extension_methods.dart.strong.transformed.expect
index b6a1193..fd6fddd 100644
--- a/pkg/front_end/testcases/extensions/extension_methods.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/extension_methods.dart.strong.transformed.expect
@@ -25,7 +25,7 @@
 extension E on self::C* {
   get two = self::E|get#two;
 }
-static method E|get#two(final self::C* #this) → core::int*
+static method E|get#two(lowered final self::C* #this) → core::int*
   return 2;
 static method main() → dynamic {
   self::C* c = new self::C::•();
diff --git a/pkg/front_end/testcases/extensions/extension_setter.dart.outline.expect b/pkg/front_end/testcases/extensions/extension_setter.dart.outline.expect
index a46d986..f2ff9b4 100644
--- a/pkg/front_end/testcases/extensions/extension_setter.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/extension_setter.dart.outline.expect
@@ -46,27 +46,27 @@
 extension GenericExtension<T extends core::Object* = dynamic> on self::GenericClass<T*>* {
   set setter = self::GenericExtension|set#setter;
 }
-static method Extension|get#simpleSetter(final self::Class* #this) → core::int*
+static method Extension|get#simpleSetter(lowered final self::Class* #this) → core::int*
   ;
-static method Extension|set#simpleSetter(final self::Class* #this, core::int* value) → void
+static method Extension|set#simpleSetter(lowered final self::Class* #this, core::int* value) → void
   ;
-static method Extension|get#mutatingSetter(final self::Class* #this) → core::int*
+static method Extension|get#mutatingSetter(lowered final self::Class* #this) → core::int*
   ;
-static method Extension|set#mutatingSetter(final self::Class* #this, core::int* value) → void
+static method Extension|set#mutatingSetter(lowered final self::Class* #this, core::int* value) → void
   ;
-static method Extension|get#setterWithReturn(final self::Class* #this) → core::int*
+static method Extension|get#setterWithReturn(lowered final self::Class* #this) → core::int*
   ;
-static method Extension|set#setterWithReturn(final self::Class* #this, core::int* value) → void
+static method Extension|set#setterWithReturn(lowered final self::Class* #this, core::int* value) → void
   ;
-static method Extension|get#setterWithClosure(final self::Class* #this) → core::int*
+static method Extension|get#setterWithClosure(lowered final self::Class* #this) → core::int*
   ;
-static method Extension|set#setterWithClosure(final self::Class* #this, core::int* value) → void
+static method Extension|set#setterWithClosure(lowered final self::Class* #this, core::int* value) → void
   ;
-static method Extension|testInternal(final self::Class* #this) → dynamic
+static method Extension|testInternal(lowered final self::Class* #this) → dynamic
   ;
-static method Extension|get#testInternal(final self::Class* #this) → () →* dynamic
+static method Extension|get#testInternal(lowered final self::Class* #this) → () →* dynamic
   return () → dynamic => self::Extension|testInternal(#this);
-static method GenericExtension|set#setter<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|set#setter::T*>* #this, self::GenericExtension|set#setter::T* value) → void
+static method GenericExtension|set#setter<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|set#setter::T*>* #this, self::GenericExtension|set#setter::T* value) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/extension_setter.dart.strong.expect b/pkg/front_end/testcases/extensions/extension_setter.dart.strong.expect
index dbe9bc2..ce8e8ef 100644
--- a/pkg/front_end/testcases/extensions/extension_setter.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/extension_setter.dart.strong.expect
@@ -48,35 +48,35 @@
 extension GenericExtension<T extends core::Object* = dynamic> on self::GenericClass<T*>* {
   set setter = self::GenericExtension|set#setter;
 }
-static method Extension|get#simpleSetter(final self::Class* #this) → core::int*
+static method Extension|get#simpleSetter(lowered final self::Class* #this) → core::int*
   return #this.{self::Class::field};
-static method Extension|set#simpleSetter(final self::Class* #this, core::int* value) → void {
+static method Extension|set#simpleSetter(lowered final self::Class* #this, core::int* value) → void {
   #this.{self::Class::field} = value;
 }
-static method Extension|get#mutatingSetter(final self::Class* #this) → core::int*
+static method Extension|get#mutatingSetter(lowered final self::Class* #this) → core::int*
   return #this.{self::Class::field};
-static method Extension|set#mutatingSetter(final self::Class* #this, core::int* value) → void {
+static method Extension|set#mutatingSetter(lowered final self::Class* #this, core::int* value) → void {
   value = value.{core::num::+}(1);
   #this.{self::Class::field} = value;
 }
-static method Extension|get#setterWithReturn(final self::Class* #this) → core::int*
+static method Extension|get#setterWithReturn(lowered final self::Class* #this) → core::int*
   return #this.{self::Class::field};
-static method Extension|set#setterWithReturn(final self::Class* #this, core::int* value) → void {
+static method Extension|set#setterWithReturn(lowered final self::Class* #this, core::int* value) → void {
   if(value.{core::num::<}(0)) {
     #this.{self::Class::field} = value.{core::int::unary-}();
     return;
   }
   #this.{self::Class::field} = value;
 }
-static method Extension|get#setterWithClosure(final self::Class* #this) → core::int*
+static method Extension|get#setterWithClosure(lowered final self::Class* #this) → core::int*
   return #this.{self::Class::field};
-static method Extension|set#setterWithClosure(final self::Class* #this, core::int* value) → void {
+static method Extension|set#setterWithClosure(lowered final self::Class* #this, core::int* value) → void {
   function abs(dynamic value) → dynamic {
     return value.<(0) as{TypeError,ForDynamic} core::bool* ?{dynamic} value.unary-() : value;
   }
   #this.{self::Class::field} = abs.call(value) as{TypeError,ForDynamic} core::int*;
 }
-static method Extension|testInternal(final self::Class* #this) → dynamic {
+static method Extension|testInternal(lowered final self::Class* #this) → dynamic {
   self::expect(null, #this.{self::Class::field});
   self::Extension|set#simpleSetter(#this, 0);
   self::expect(0, #this.{self::Class::field});
@@ -102,9 +102,9 @@
   self::expect(4.{core::int::unary-}(), let final core::int* #t11 = 4.{core::int::unary-}() in let final void #t12 = self::Extension|set#setterWithClosure(#this, #t11) in #t11);
   self::expect(4, #this.{self::Class::field});
 }
-static method Extension|get#testInternal(final self::Class* #this) → () →* dynamic
+static method Extension|get#testInternal(lowered final self::Class* #this) → () →* dynamic
   return () → dynamic => self::Extension|testInternal(#this);
-static method GenericExtension|set#setter<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|set#setter::T*>* #this, self::GenericExtension|set#setter::T* value) → void {}
+static method GenericExtension|set#setter<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|set#setter::T*>* #this, self::GenericExtension|set#setter::T* value) → void {}
 static method main() → dynamic {
   self::Class* c = new self::Class::•();
   self::expect(null, c.{self::Class::field});
diff --git a/pkg/front_end/testcases/extensions/extension_setter.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/extension_setter.dart.strong.transformed.expect
index cb01579..37d083c 100644
--- a/pkg/front_end/testcases/extensions/extension_setter.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/extension_setter.dart.strong.transformed.expect
@@ -48,35 +48,35 @@
 extension GenericExtension<T extends core::Object* = dynamic> on self::GenericClass<T*>* {
   set setter = self::GenericExtension|set#setter;
 }
-static method Extension|get#simpleSetter(final self::Class* #this) → core::int*
+static method Extension|get#simpleSetter(lowered final self::Class* #this) → core::int*
   return #this.{self::Class::field};
-static method Extension|set#simpleSetter(final self::Class* #this, core::int* value) → void {
+static method Extension|set#simpleSetter(lowered final self::Class* #this, core::int* value) → void {
   #this.{self::Class::field} = value;
 }
-static method Extension|get#mutatingSetter(final self::Class* #this) → core::int*
+static method Extension|get#mutatingSetter(lowered final self::Class* #this) → core::int*
   return #this.{self::Class::field};
-static method Extension|set#mutatingSetter(final self::Class* #this, core::int* value) → void {
+static method Extension|set#mutatingSetter(lowered final self::Class* #this, core::int* value) → void {
   value = value.{core::num::+}(1);
   #this.{self::Class::field} = value;
 }
-static method Extension|get#setterWithReturn(final self::Class* #this) → core::int*
+static method Extension|get#setterWithReturn(lowered final self::Class* #this) → core::int*
   return #this.{self::Class::field};
-static method Extension|set#setterWithReturn(final self::Class* #this, core::int* value) → void {
+static method Extension|set#setterWithReturn(lowered final self::Class* #this, core::int* value) → void {
   if(value.{core::num::<}(0)) {
     #this.{self::Class::field} = value.{core::int::unary-}();
     return;
   }
   #this.{self::Class::field} = value;
 }
-static method Extension|get#setterWithClosure(final self::Class* #this) → core::int*
+static method Extension|get#setterWithClosure(lowered final self::Class* #this) → core::int*
   return #this.{self::Class::field};
-static method Extension|set#setterWithClosure(final self::Class* #this, core::int* value) → void {
+static method Extension|set#setterWithClosure(lowered final self::Class* #this, core::int* value) → void {
   function abs(dynamic value) → dynamic {
     return value.<(0) as{TypeError,ForDynamic} core::bool* ?{dynamic} value.unary-() : value;
   }
   #this.{self::Class::field} = abs.call(value) as{TypeError,ForDynamic} core::int*;
 }
-static method Extension|testInternal(final self::Class* #this) → dynamic {
+static method Extension|testInternal(lowered final self::Class* #this) → dynamic {
   self::expect(null, #this.{self::Class::field});
   self::Extension|set#simpleSetter(#this, 0);
   self::expect(0, #this.{self::Class::field});
@@ -102,9 +102,9 @@
   self::expect(4.{core::int::unary-}(), let final core::int* #t11 = 4.{core::int::unary-}() in let final void #t12 = self::Extension|set#setterWithClosure(#this, #t11) in #t11);
   self::expect(4, #this.{self::Class::field});
 }
-static method Extension|get#testInternal(final self::Class* #this) → () →* dynamic
+static method Extension|get#testInternal(lowered final self::Class* #this) → () →* dynamic
   return () → dynamic => self::Extension|testInternal(#this);
-static method GenericExtension|set#setter<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|set#setter::T*>* #this, self::GenericExtension|set#setter::T* value) → void {}
+static method GenericExtension|set#setter<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|set#setter::T*>* #this, self::GenericExtension|set#setter::T* value) → void {}
 static method main() → dynamic {
   self::Class* c = new self::Class::•();
   self::expect(null, c.{self::Class::field});
diff --git a/pkg/front_end/testcases/extensions/extension_setter_error.dart.outline.expect b/pkg/front_end/testcases/extensions/extension_setter_error.dart.outline.expect
index 4044e84..2b0f430 100644
--- a/pkg/front_end/testcases/extensions/extension_setter_error.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/extension_setter_error.dart.outline.expect
@@ -19,7 +19,7 @@
 extension GenericExtension<T extends core::Object* = dynamic> on self::GenericClass<T*>* {
   set setter = self::GenericExtension|set#setter;
 }
-static method GenericExtension|set#setter<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|set#setter::T*>* #this, self::GenericExtension|set#setter::T* value) → void
+static method GenericExtension|set#setter<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|set#setter::T*>* #this, self::GenericExtension|set#setter::T* value) → void
   ;
 static method error() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/extension_setter_error.dart.strong.expect b/pkg/front_end/testcases/extensions/extension_setter_error.dart.strong.expect
index f0d0e30..b053b1b 100644
--- a/pkg/front_end/testcases/extensions/extension_setter_error.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/extension_setter_error.dart.strong.expect
@@ -28,7 +28,7 @@
 extension GenericExtension<T extends core::Object* = dynamic> on self::GenericClass<T*>* {
   set setter = self::GenericExtension|set#setter;
 }
-static method GenericExtension|set#setter<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|set#setter::T*>* #this, self::GenericExtension|set#setter::T* value) → void {}
+static method GenericExtension|set#setter<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|set#setter::T*>* #this, self::GenericExtension|set#setter::T* value) → void {}
 static method error() → dynamic {
   self::GenericClass<core::int*>* genericClass = new self::GenericClass::•<core::int*>();
   self::expect(null, let final self::GenericClass<core::int*>* #t1 = let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/extensions/extension_setter_error.dart:13:41: Error: A value of type 'GenericClass<int>' can't be assigned to a variable of type 'GenericClass<double>'.
diff --git a/pkg/front_end/testcases/extensions/generic_function_in_generic_extension.dart.outline.expect b/pkg/front_end/testcases/extensions/generic_function_in_generic_extension.dart.outline.expect
index 6155609..de2e8df 100644
--- a/pkg/front_end/testcases/extensions/generic_function_in_generic_extension.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/generic_function_in_generic_extension.dart.outline.expect
@@ -20,9 +20,9 @@
   method method = self::Extension|method;
   tearoff method = self::Extension|get#method;
 }
-static method Extension|method<T extends core::Object* = dynamic, R extends core::Object* = dynamic>(final self::Class<self::Extension|method::T*>* #this, self::Extension|method::T* t) → self::Extension|method::R*
+static method Extension|method<T extends core::Object* = dynamic, R extends core::Object* = dynamic>(lowered final self::Class<self::Extension|method::T*>* #this, self::Extension|method::T* t) → self::Extension|method::R*
   ;
-static method Extension|get#method<T extends core::Object* = dynamic>(final self::Class<self::Extension|get#method::T*>* #this) → <R extends core::Object* = dynamic>(self::Extension|get#method::T*) →* R*
+static method Extension|get#method<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|get#method::T*>* #this) → <R extends core::Object* = dynamic>(self::Extension|get#method::T*) →* R*
   return <R extends core::Object* = dynamic>(self::Extension|get#method::T* t) → R* => self::Extension|method<self::Extension|get#method::T*, R*>(#this, t);
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/generic_function_in_generic_extension.dart.strong.expect b/pkg/front_end/testcases/extensions/generic_function_in_generic_extension.dart.strong.expect
index f7c38aa..e351a9e 100644
--- a/pkg/front_end/testcases/extensions/generic_function_in_generic_extension.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/generic_function_in_generic_extension.dart.strong.expect
@@ -21,9 +21,9 @@
   method method = self::Extension|method;
   tearoff method = self::Extension|get#method;
 }
-static method Extension|method<T extends core::Object* = dynamic, R extends core::Object* = dynamic>(final self::Class<self::Extension|method::T*>* #this, self::Extension|method::T* t) → self::Extension|method::R*
+static method Extension|method<T extends core::Object* = dynamic, R extends core::Object* = dynamic>(lowered final self::Class<self::Extension|method::T*>* #this, self::Extension|method::T* t) → self::Extension|method::R*
   return null;
-static method Extension|get#method<T extends core::Object* = dynamic>(final self::Class<self::Extension|get#method::T*>* #this) → <R extends core::Object* = dynamic>(self::Extension|get#method::T*) →* R*
+static method Extension|get#method<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|get#method::T*>* #this) → <R extends core::Object* = dynamic>(self::Extension|get#method::T*) →* R*
   return <R extends core::Object* = dynamic>(self::Extension|get#method::T* t) → R* => self::Extension|method<self::Extension|get#method::T*, R*>(#this, t);
 static method main() → dynamic {
   let final dynamic #t1 = self::Extension|method<core::int*, dynamic>(new self::Class::•<core::int*>(), 0) in #t1.{core::Object::==}(null) ?{core::String*} null : #t1.{core::Object::toString}();
diff --git a/pkg/front_end/testcases/extensions/generic_function_in_generic_extension.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/generic_function_in_generic_extension.dart.strong.transformed.expect
index f7c38aa..e351a9e 100644
--- a/pkg/front_end/testcases/extensions/generic_function_in_generic_extension.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/generic_function_in_generic_extension.dart.strong.transformed.expect
@@ -21,9 +21,9 @@
   method method = self::Extension|method;
   tearoff method = self::Extension|get#method;
 }
-static method Extension|method<T extends core::Object* = dynamic, R extends core::Object* = dynamic>(final self::Class<self::Extension|method::T*>* #this, self::Extension|method::T* t) → self::Extension|method::R*
+static method Extension|method<T extends core::Object* = dynamic, R extends core::Object* = dynamic>(lowered final self::Class<self::Extension|method::T*>* #this, self::Extension|method::T* t) → self::Extension|method::R*
   return null;
-static method Extension|get#method<T extends core::Object* = dynamic>(final self::Class<self::Extension|get#method::T*>* #this) → <R extends core::Object* = dynamic>(self::Extension|get#method::T*) →* R*
+static method Extension|get#method<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|get#method::T*>* #this) → <R extends core::Object* = dynamic>(self::Extension|get#method::T*) →* R*
   return <R extends core::Object* = dynamic>(self::Extension|get#method::T* t) → R* => self::Extension|method<self::Extension|get#method::T*, R*>(#this, t);
 static method main() → dynamic {
   let final dynamic #t1 = self::Extension|method<core::int*, dynamic>(new self::Class::•<core::int*>(), 0) in #t1.{core::Object::==}(null) ?{core::String*} null : #t1.{core::Object::toString}();
diff --git a/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.outline.expect b/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.outline.expect
index 9d49790..c1bc20e 100644
--- a/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.outline.expect
@@ -30,17 +30,17 @@
   get m3 = self::Extension1|get#m3;
   set m4 = self::Extension1|set#m4;
 }
-static method Extension0|set#m1(final self::Class* #this, core::int* x) → void
+static method Extension0|set#m1(lowered final self::Class* #this, core::int* x) → void
   ;
-static method Extension0|get#m2(final self::Class* #this) → core::int*
+static method Extension0|get#m2(lowered final self::Class* #this) → core::int*
   ;
-static method Extension0|set#m3(final self::Class* #this, core::int* x) → void
+static method Extension0|set#m3(lowered final self::Class* #this, core::int* x) → void
   ;
-static method Extension0|get#m4(final self::Class* #this) → core::int*
+static method Extension0|get#m4(lowered final self::Class* #this) → core::int*
   ;
-static method Extension1|get#m3(final self::Class* #this) → core::int*
+static method Extension1|get#m3(lowered final self::Class* #this) → core::int*
   ;
-static method Extension1|set#m4(final self::Class* #this, core::int* x) → void
+static method Extension1|set#m4(lowered final self::Class* #this, core::int* x) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.strong.expect b/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.strong.expect
index 966e6eb..4c0c516 100644
--- a/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.strong.expect
@@ -93,15 +93,15 @@
   get m3 = self::Extension1|get#m3;
   set m4 = self::Extension1|set#m4;
 }
-static method Extension0|set#m1(final self::Class* #this, core::int* x) → void {}
-static method Extension0|get#m2(final self::Class* #this) → core::int*
+static method Extension0|set#m1(lowered final self::Class* #this, core::int* x) → void {}
+static method Extension0|get#m2(lowered final self::Class* #this) → core::int*
   return 0;
-static method Extension0|set#m3(final self::Class* #this, core::int* x) → void {}
-static method Extension0|get#m4(final self::Class* #this) → core::int*
+static method Extension0|set#m3(lowered final self::Class* #this, core::int* x) → void {}
+static method Extension0|get#m4(lowered final self::Class* #this) → core::int*
   return 0;
-static method Extension1|get#m3(final self::Class* #this) → core::int*
+static method Extension1|get#m3(lowered final self::Class* #this) → core::int*
   return 0;
-static method Extension1|set#m4(final self::Class* #this, core::int* x) → void {}
+static method Extension1|set#m4(lowered final self::Class* #this, core::int* x) → void {}
 static method main() → dynamic {
   self::Class* c = new self::Class::•();
   self::expect(0, c.{self::Class::m1});
diff --git a/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.strong.transformed.expect
index 966e6eb..4c0c516 100644
--- a/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.strong.transformed.expect
@@ -93,15 +93,15 @@
   get m3 = self::Extension1|get#m3;
   set m4 = self::Extension1|set#m4;
 }
-static method Extension0|set#m1(final self::Class* #this, core::int* x) → void {}
-static method Extension0|get#m2(final self::Class* #this) → core::int*
+static method Extension0|set#m1(lowered final self::Class* #this, core::int* x) → void {}
+static method Extension0|get#m2(lowered final self::Class* #this) → core::int*
   return 0;
-static method Extension0|set#m3(final self::Class* #this, core::int* x) → void {}
-static method Extension0|get#m4(final self::Class* #this) → core::int*
+static method Extension0|set#m3(lowered final self::Class* #this, core::int* x) → void {}
+static method Extension0|get#m4(lowered final self::Class* #this) → core::int*
   return 0;
-static method Extension1|get#m3(final self::Class* #this) → core::int*
+static method Extension1|get#m3(lowered final self::Class* #this) → core::int*
   return 0;
-static method Extension1|set#m4(final self::Class* #this, core::int* x) → void {}
+static method Extension1|set#m4(lowered final self::Class* #this, core::int* x) → void {}
 static method main() → dynamic {
   self::Class* c = new self::Class::•();
   self::expect(0, c.{self::Class::m1});
diff --git a/pkg/front_end/testcases/extensions/if_null.dart.outline.expect b/pkg/front_end/testcases/extensions/if_null.dart.outline.expect
index 3d3aea8..1ce7da8 100644
--- a/pkg/front_end/testcases/extensions/if_null.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/if_null.dart.outline.expect
@@ -23,13 +23,13 @@
   tearoff method = self::Extension|get#method;
   set property = self::Extension|set#property;
 }
-static method Extension|get#property(final self::Class* #this) → core::int*
+static method Extension|get#property(lowered final self::Class* #this) → core::int*
   ;
-static method Extension|set#property(final self::Class* #this, core::int* value) → void
+static method Extension|set#property(lowered final self::Class* #this, core::int* value) → void
   ;
-static method Extension|method(final self::Class* #this) → core::int*
+static method Extension|method(lowered final self::Class* #this) → core::int*
   ;
-static method Extension|get#method(final self::Class* #this) → () →* core::int*
+static method Extension|get#method(lowered final self::Class* #this) → () →* core::int*
   return () → core::int* => self::Extension|method(#this);
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/if_null.dart.strong.expect b/pkg/front_end/testcases/extensions/if_null.dart.strong.expect
index 4a04ad0..e4d6312 100644
--- a/pkg/front_end/testcases/extensions/if_null.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/if_null.dart.strong.expect
@@ -24,14 +24,14 @@
   tearoff method = self::Extension|get#method;
   set property = self::Extension|set#property;
 }
-static method Extension|get#property(final self::Class* #this) → core::int*
+static method Extension|get#property(lowered final self::Class* #this) → core::int*
   return #this.{self::Class::field};
-static method Extension|set#property(final self::Class* #this, core::int* value) → void {
+static method Extension|set#property(lowered final self::Class* #this, core::int* value) → void {
   #this.{self::Class::field} = value;
 }
-static method Extension|method(final self::Class* #this) → core::int*
+static method Extension|method(lowered final self::Class* #this) → core::int*
   return #this.{self::Class::field};
-static method Extension|get#method(final self::Class* #this) → () →* core::int*
+static method Extension|get#method(lowered final self::Class* #this) → () →* core::int*
   return () → core::int* => self::Extension|method(#this);
 static method main() → dynamic {
   self::Class* c;
diff --git a/pkg/front_end/testcases/extensions/if_null.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/if_null.dart.strong.transformed.expect
index cd0b1b3..f3e6b96 100644
--- a/pkg/front_end/testcases/extensions/if_null.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/if_null.dart.strong.transformed.expect
@@ -24,14 +24,14 @@
   tearoff method = self::Extension|get#method;
   set property = self::Extension|set#property;
 }
-static method Extension|get#property(final self::Class* #this) → core::int*
+static method Extension|get#property(lowered final self::Class* #this) → core::int*
   return #this.{self::Class::field};
-static method Extension|set#property(final self::Class* #this, core::int* value) → void {
+static method Extension|set#property(lowered final self::Class* #this, core::int* value) → void {
   #this.{self::Class::field} = value;
 }
-static method Extension|method(final self::Class* #this) → core::int*
+static method Extension|method(lowered final self::Class* #this) → core::int*
   return #this.{self::Class::field};
-static method Extension|get#method(final self::Class* #this) → () →* core::int*
+static method Extension|get#method(lowered final self::Class* #this) → () →* core::int*
   return () → core::int* => self::Extension|method(#this);
 static method main() → dynamic {
   self::Class* c;
diff --git a/pkg/front_end/testcases/extensions/implicit_extension_inference.dart.outline.expect b/pkg/front_end/testcases/extensions/implicit_extension_inference.dart.outline.expect
index 21fc22e..eb41182 100644
--- a/pkg/front_end/testcases/extensions/implicit_extension_inference.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/implicit_extension_inference.dart.outline.expect
@@ -45,15 +45,15 @@
   method genericMethod1 = self::GenericExtension|genericMethod1;
   tearoff genericMethod1 = self::GenericExtension|get#genericMethod1;
 }
-static method GenericExtension|get#property<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#property::T*>* #this) → self::GenericExtension|get#property::T*
+static method GenericExtension|get#property<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#property::T*>* #this) → self::GenericExtension|get#property::T*
   ;
-static method GenericExtension|method<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|method::T*>* #this, self::GenericExtension|method::T* t) → self::GenericExtension|method::T*
+static method GenericExtension|method<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|method::T*>* #this, self::GenericExtension|method::T* t) → self::GenericExtension|method::T*
   ;
-static method GenericExtension|get#method<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#method::T*>* #this) → (self::GenericExtension|get#method::T*) →* self::GenericExtension|get#method::T*
+static method GenericExtension|get#method<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#method::T*>* #this) → (self::GenericExtension|get#method::T*) →* self::GenericExtension|get#method::T*
   return (self::GenericExtension|get#method::T* t) → self::GenericExtension|get#method::T* => self::GenericExtension|method<self::GenericExtension|get#method::T*>(#this, t);
-static method GenericExtension|genericMethod1<T extends core::Object* = dynamic, S extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|genericMethod1::T*>* #this, self::GenericExtension|genericMethod1::S* s) → self::GenericExtension|genericMethod1::S*
+static method GenericExtension|genericMethod1<T extends core::Object* = dynamic, S extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|genericMethod1::T*>* #this, self::GenericExtension|genericMethod1::S* s) → self::GenericExtension|genericMethod1::S*
   ;
-static method GenericExtension|get#genericMethod1<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#genericMethod1::T*>* #this) → <S extends core::Object* = dynamic>(S*) →* S*
+static method GenericExtension|get#genericMethod1<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#genericMethod1::T*>* #this) → <S extends core::Object* = dynamic>(S*) →* S*
   return <S extends core::Object* = dynamic>(S* s) → S* => self::GenericExtension|genericMethod1<self::GenericExtension|get#genericMethod1::T*, S*>(#this, s);
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/implicit_extension_inference.dart.strong.expect b/pkg/front_end/testcases/extensions/implicit_extension_inference.dart.strong.expect
index e9f7f82..68819f0 100644
--- a/pkg/front_end/testcases/extensions/implicit_extension_inference.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/implicit_extension_inference.dart.strong.expect
@@ -49,15 +49,15 @@
   method genericMethod1 = self::GenericExtension|genericMethod1;
   tearoff genericMethod1 = self::GenericExtension|get#genericMethod1;
 }
-static method GenericExtension|get#property<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#property::T*>* #this) → self::GenericExtension|get#property::T*
+static method GenericExtension|get#property<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#property::T*>* #this) → self::GenericExtension|get#property::T*
   return null;
-static method GenericExtension|method<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|method::T*>* #this, self::GenericExtension|method::T* t) → self::GenericExtension|method::T*
+static method GenericExtension|method<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|method::T*>* #this, self::GenericExtension|method::T* t) → self::GenericExtension|method::T*
   return null;
-static method GenericExtension|get#method<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#method::T*>* #this) → (self::GenericExtension|get#method::T*) →* self::GenericExtension|get#method::T*
+static method GenericExtension|get#method<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#method::T*>* #this) → (self::GenericExtension|get#method::T*) →* self::GenericExtension|get#method::T*
   return (self::GenericExtension|get#method::T* t) → self::GenericExtension|get#method::T* => self::GenericExtension|method<self::GenericExtension|get#method::T*>(#this, t);
-static method GenericExtension|genericMethod1<T extends core::Object* = dynamic, S extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|genericMethod1::T*>* #this, self::GenericExtension|genericMethod1::S* s) → self::GenericExtension|genericMethod1::S*
+static method GenericExtension|genericMethod1<T extends core::Object* = dynamic, S extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|genericMethod1::T*>* #this, self::GenericExtension|genericMethod1::S* s) → self::GenericExtension|genericMethod1::S*
   return null;
-static method GenericExtension|get#genericMethod1<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#genericMethod1::T*>* #this) → <S extends core::Object* = dynamic>(S*) →* S*
+static method GenericExtension|get#genericMethod1<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#genericMethod1::T*>* #this) → <S extends core::Object* = dynamic>(S*) →* S*
   return <S extends core::Object* = dynamic>(S* s) → S* => self::GenericExtension|genericMethod1<self::GenericExtension|get#genericMethod1::T*, S*>(#this, s);
 static method main() → dynamic {
   self::A* aVariable;
diff --git a/pkg/front_end/testcases/extensions/implicit_extension_inference.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/implicit_extension_inference.dart.strong.transformed.expect
index e9f7f82..68819f0 100644
--- a/pkg/front_end/testcases/extensions/implicit_extension_inference.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/implicit_extension_inference.dart.strong.transformed.expect
@@ -49,15 +49,15 @@
   method genericMethod1 = self::GenericExtension|genericMethod1;
   tearoff genericMethod1 = self::GenericExtension|get#genericMethod1;
 }
-static method GenericExtension|get#property<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#property::T*>* #this) → self::GenericExtension|get#property::T*
+static method GenericExtension|get#property<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#property::T*>* #this) → self::GenericExtension|get#property::T*
   return null;
-static method GenericExtension|method<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|method::T*>* #this, self::GenericExtension|method::T* t) → self::GenericExtension|method::T*
+static method GenericExtension|method<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|method::T*>* #this, self::GenericExtension|method::T* t) → self::GenericExtension|method::T*
   return null;
-static method GenericExtension|get#method<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#method::T*>* #this) → (self::GenericExtension|get#method::T*) →* self::GenericExtension|get#method::T*
+static method GenericExtension|get#method<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#method::T*>* #this) → (self::GenericExtension|get#method::T*) →* self::GenericExtension|get#method::T*
   return (self::GenericExtension|get#method::T* t) → self::GenericExtension|get#method::T* => self::GenericExtension|method<self::GenericExtension|get#method::T*>(#this, t);
-static method GenericExtension|genericMethod1<T extends core::Object* = dynamic, S extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|genericMethod1::T*>* #this, self::GenericExtension|genericMethod1::S* s) → self::GenericExtension|genericMethod1::S*
+static method GenericExtension|genericMethod1<T extends core::Object* = dynamic, S extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|genericMethod1::T*>* #this, self::GenericExtension|genericMethod1::S* s) → self::GenericExtension|genericMethod1::S*
   return null;
-static method GenericExtension|get#genericMethod1<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#genericMethod1::T*>* #this) → <S extends core::Object* = dynamic>(S*) →* S*
+static method GenericExtension|get#genericMethod1<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#genericMethod1::T*>* #this) → <S extends core::Object* = dynamic>(S*) →* S*
   return <S extends core::Object* = dynamic>(S* s) → S* => self::GenericExtension|genericMethod1<self::GenericExtension|get#genericMethod1::T*, S*>(#this, s);
 static method main() → dynamic {
   self::A* aVariable;
diff --git a/pkg/front_end/testcases/extensions/implicit_this.dart.outline.expect b/pkg/front_end/testcases/extensions/implicit_this.dart.outline.expect
index fee8d56..21fa5c7 100644
--- a/pkg/front_end/testcases/extensions/implicit_this.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/implicit_this.dart.outline.expect
@@ -27,17 +27,17 @@
   method method4 = self::A2|method4;
   tearoff method4 = self::A2|get#method4;
 }
-static method A2|method2(final self::A1* #this) → void
+static method A2|method2(lowered final self::A1* #this) → void
   ;
-static method A2|get#method2(final self::A1* #this) → () →* void
+static method A2|get#method2(lowered final self::A1* #this) → () →* void
   return () → void => self::A2|method2(#this);
-static method A2|method3(final self::A1* #this) → core::Object*
+static method A2|method3(lowered final self::A1* #this) → core::Object*
   ;
-static method A2|get#method3(final self::A1* #this) → () →* core::Object*
+static method A2|get#method3(lowered final self::A1* #this) → () →* core::Object*
   return () → core::Object* => self::A2|method3(#this);
-static method A2|method4(final self::A1* #this, core::Object* o) → void
+static method A2|method4(lowered final self::A1* #this, core::Object* o) → void
   ;
-static method A2|get#method4(final self::A1* #this) → (core::Object*) →* void
+static method A2|get#method4(lowered final self::A1* #this) → (core::Object*) →* void
   return (core::Object* o) → void => self::A2|method4(#this, o);
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/implicit_this.dart.strong.expect b/pkg/front_end/testcases/extensions/implicit_this.dart.strong.expect
index ef5a89a..f13b8bd 100644
--- a/pkg/front_end/testcases/extensions/implicit_this.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/implicit_this.dart.strong.expect
@@ -27,17 +27,17 @@
   method method4 = self::A2|method4;
   tearoff method4 = self::A2|get#method4;
 }
-static method A2|method2(final self::A1* #this) → void
+static method A2|method2(lowered final self::A1* #this) → void
   return #this.{self::A1::method1}();
-static method A2|get#method2(final self::A1* #this) → () →* void
+static method A2|get#method2(lowered final self::A1* #this) → () →* void
   return () → void => self::A2|method2(#this);
-static method A2|method3(final self::A1* #this) → core::Object*
+static method A2|method3(lowered final self::A1* #this) → core::Object*
   return #this.{self::A1::field};
-static method A2|get#method3(final self::A1* #this) → () →* core::Object*
+static method A2|get#method3(lowered final self::A1* #this) → () →* core::Object*
   return () → core::Object* => self::A2|method3(#this);
-static method A2|method4(final self::A1* #this, core::Object* o) → void {
+static method A2|method4(lowered final self::A1* #this, core::Object* o) → void {
   #this.{self::A1::field} = o;
 }
-static method A2|get#method4(final self::A1* #this) → (core::Object*) →* void
+static method A2|get#method4(lowered final self::A1* #this) → (core::Object*) →* void
   return (core::Object* o) → void => self::A2|method4(#this, o);
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/implicit_this.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/implicit_this.dart.strong.transformed.expect
index ef5a89a..f13b8bd 100644
--- a/pkg/front_end/testcases/extensions/implicit_this.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/implicit_this.dart.strong.transformed.expect
@@ -27,17 +27,17 @@
   method method4 = self::A2|method4;
   tearoff method4 = self::A2|get#method4;
 }
-static method A2|method2(final self::A1* #this) → void
+static method A2|method2(lowered final self::A1* #this) → void
   return #this.{self::A1::method1}();
-static method A2|get#method2(final self::A1* #this) → () →* void
+static method A2|get#method2(lowered final self::A1* #this) → () →* void
   return () → void => self::A2|method2(#this);
-static method A2|method3(final self::A1* #this) → core::Object*
+static method A2|method3(lowered final self::A1* #this) → core::Object*
   return #this.{self::A1::field};
-static method A2|get#method3(final self::A1* #this) → () →* core::Object*
+static method A2|get#method3(lowered final self::A1* #this) → () →* core::Object*
   return () → core::Object* => self::A2|method3(#this);
-static method A2|method4(final self::A1* #this, core::Object* o) → void {
+static method A2|method4(lowered final self::A1* #this, core::Object* o) → void {
   #this.{self::A1::field} = o;
 }
-static method A2|get#method4(final self::A1* #this) → (core::Object*) →* void
+static method A2|get#method4(lowered final self::A1* #this) → (core::Object*) →* void
   return (core::Object* o) → void => self::A2|method4(#this, o);
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/import_from_dill/main.dart.outline.expect b/pkg/front_end/testcases/extensions/import_from_dill/main.dart.outline.expect
index ccc1535..71c7348 100644
--- a/pkg/front_end/testcases/extensions/import_from_dill/main.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/import_from_dill/main.dart.outline.expect
@@ -25,13 +25,13 @@
 static field core::int* Extension|staticField;
 static final field core::int* Extension|staticFinalField;
 static const field core::int* Extension|staticConstField = #C1;
-static method Extension|get#instanceProperty(final core::int* #this) → core::int*
+static method Extension|get#instanceProperty(lowered final core::int* #this) → core::int*
   ;
-static method Extension|set#instanceProperty(final core::int* #this, core::int* value) → void
+static method Extension|set#instanceProperty(lowered final core::int* #this, core::int* value) → void
   ;
-static method Extension|instanceMethod(final core::int* #this) → void
+static method Extension|instanceMethod(lowered final core::int* #this) → void
   ;
-static method Extension|get#instanceMethod(final core::int* #this) → () →* void
+static method Extension|get#instanceMethod(lowered final core::int* #this) → () →* void
   return () → void => self2::Extension|instanceMethod(#this);
 static get Extension|staticProperty() → core::int*
   ;
diff --git a/pkg/front_end/testcases/extensions/import_from_dill/main.dart.strong.expect b/pkg/front_end/testcases/extensions/import_from_dill/main.dart.strong.expect
index 1672c049..dda54b1 100644
--- a/pkg/front_end/testcases/extensions/import_from_dill/main.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/import_from_dill/main.dart.strong.expect
@@ -35,11 +35,11 @@
 static field core::int* Extension|staticField = 42;
 static final field core::int* Extension|staticFinalField = 42;
 static const field core::int* Extension|staticConstField = #C1;
-static method Extension|get#instanceProperty(final core::int* #this) → core::int*
+static method Extension|get#instanceProperty(lowered final core::int* #this) → core::int*
   return 42;
-static method Extension|set#instanceProperty(final core::int* #this, core::int* value) → void {}
-static method Extension|instanceMethod(final core::int* #this) → void {}
-static method Extension|get#instanceMethod(final core::int* #this) → () →* void
+static method Extension|set#instanceProperty(lowered final core::int* #this, core::int* value) → void {}
+static method Extension|instanceMethod(lowered final core::int* #this) → void {}
+static method Extension|get#instanceMethod(lowered final core::int* #this) → () →* void
   return () → void => mai::Extension|instanceMethod(#this);
 static get Extension|staticProperty() → core::int*
   return 42;
diff --git a/pkg/front_end/testcases/extensions/import_from_dill/main.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/import_from_dill/main.dart.strong.transformed.expect
index 1672c049..dda54b1 100644
--- a/pkg/front_end/testcases/extensions/import_from_dill/main.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/import_from_dill/main.dart.strong.transformed.expect
@@ -35,11 +35,11 @@
 static field core::int* Extension|staticField = 42;
 static final field core::int* Extension|staticFinalField = 42;
 static const field core::int* Extension|staticConstField = #C1;
-static method Extension|get#instanceProperty(final core::int* #this) → core::int*
+static method Extension|get#instanceProperty(lowered final core::int* #this) → core::int*
   return 42;
-static method Extension|set#instanceProperty(final core::int* #this, core::int* value) → void {}
-static method Extension|instanceMethod(final core::int* #this) → void {}
-static method Extension|get#instanceMethod(final core::int* #this) → () →* void
+static method Extension|set#instanceProperty(lowered final core::int* #this, core::int* value) → void {}
+static method Extension|instanceMethod(lowered final core::int* #this) → void {}
+static method Extension|get#instanceMethod(lowered final core::int* #this) → () →* void
   return () → void => mai::Extension|instanceMethod(#this);
 static get Extension|staticProperty() → core::int*
   return 42;
diff --git a/pkg/front_end/testcases/extensions/import_via_prefix.dart.outline.expect b/pkg/front_end/testcases/extensions/import_via_prefix.dart.outline.expect
index 4b7b4b9..920ce9c 100644
--- a/pkg/front_end/testcases/extensions/import_via_prefix.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/import_via_prefix.dart.outline.expect
@@ -16,7 +16,7 @@
   method method = self2::Extension|method;
   tearoff method = self2::Extension|get#method;
 }
-static method Extension|method(final core::String* #this) → core::int*
+static method Extension|method(lowered final core::String* #this) → core::int*
   ;
-static method Extension|get#method(final core::String* #this) → () →* core::int*
+static method Extension|get#method(lowered final core::String* #this) → () →* core::int*
   return () → core::int* => self2::Extension|method(#this);
diff --git a/pkg/front_end/testcases/extensions/import_via_prefix.dart.strong.expect b/pkg/front_end/testcases/extensions/import_via_prefix.dart.strong.expect
index 7030c4a..6ffdbd7 100644
--- a/pkg/front_end/testcases/extensions/import_via_prefix.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/import_via_prefix.dart.strong.expect
@@ -21,7 +21,7 @@
   method method = imp::Extension|method;
   tearoff method = imp::Extension|get#method;
 }
-static method Extension|method(final core::String* #this) → core::int*
+static method Extension|method(lowered final core::String* #this) → core::int*
   return #this.{core::String::length};
-static method Extension|get#method(final core::String* #this) → () →* core::int*
+static method Extension|get#method(lowered final core::String* #this) → () →* core::int*
   return () → core::int* => imp::Extension|method(#this);
diff --git a/pkg/front_end/testcases/extensions/import_via_prefix.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/import_via_prefix.dart.strong.transformed.expect
index 7030c4a..6ffdbd7 100644
--- a/pkg/front_end/testcases/extensions/import_via_prefix.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/import_via_prefix.dart.strong.transformed.expect
@@ -21,7 +21,7 @@
   method method = imp::Extension|method;
   tearoff method = imp::Extension|get#method;
 }
-static method Extension|method(final core::String* #this) → core::int*
+static method Extension|method(lowered final core::String* #this) → core::int*
   return #this.{core::String::length};
-static method Extension|get#method(final core::String* #this) → () →* core::int*
+static method Extension|get#method(lowered final core::String* #this) → () →* core::int*
   return () → core::int* => imp::Extension|method(#this);
diff --git a/pkg/front_end/testcases/extensions/index.dart.outline.expect b/pkg/front_end/testcases/extensions/index.dart.outline.expect
index da0ddd9..8b0b1ca 100644
--- a/pkg/front_end/testcases/extensions/index.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/index.dart.outline.expect
@@ -25,9 +25,9 @@
   operator [] = self::Extension|[];
   operator []= = self::Extension|[]=;
 }
-static method Extension|[]<K extends core::Object* = dynamic, V extends core::Object* = dynamic>(final self::MapLike<self::Extension|[]::K*, self::Extension|[]::V*>* #this, core::Object* key) → self::Extension|[]::V*
+static method Extension|[]<K extends core::Object* = dynamic, V extends core::Object* = dynamic>(lowered final self::MapLike<self::Extension|[]::K*, self::Extension|[]::V*>* #this, core::Object* key) → self::Extension|[]::V*
   ;
-static method Extension|[]=<K extends core::Object* = dynamic, V extends core::Object* = dynamic>(final self::MapLike<self::Extension|[]=::K*, self::Extension|[]=::V*>* #this, self::Extension|[]=::K* key, self::Extension|[]=::V* value) → void
+static method Extension|[]=<K extends core::Object* = dynamic, V extends core::Object* = dynamic>(lowered final self::MapLike<self::Extension|[]=::K*, self::Extension|[]=::V*>* #this, self::Extension|[]=::K* key, self::Extension|[]=::V* value) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/index.dart.strong.expect b/pkg/front_end/testcases/extensions/index.dart.strong.expect
index 67d8909..f9f0d76 100644
--- a/pkg/front_end/testcases/extensions/index.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/index.dart.strong.expect
@@ -26,9 +26,9 @@
   operator [] = self::Extension|[];
   operator []= = self::Extension|[]=;
 }
-static method Extension|[]<K extends core::Object* = dynamic, V extends core::Object* = dynamic>(final self::MapLike<self::Extension|[]::K*, self::Extension|[]::V*>* #this, core::Object* key) → self::Extension|[]::V*
+static method Extension|[]<K extends core::Object* = dynamic, V extends core::Object* = dynamic>(lowered final self::MapLike<self::Extension|[]::K*, self::Extension|[]::V*>* #this, core::Object* key) → self::Extension|[]::V*
   return #this.{self::MapLike::get}(key);
-static method Extension|[]=<K extends core::Object* = dynamic, V extends core::Object* = dynamic>(final self::MapLike<self::Extension|[]=::K*, self::Extension|[]=::V*>* #this, self::Extension|[]=::K* key, self::Extension|[]=::V* value) → void
+static method Extension|[]=<K extends core::Object* = dynamic, V extends core::Object* = dynamic>(lowered final self::MapLike<self::Extension|[]=::K*, self::Extension|[]=::V*>* #this, self::Extension|[]=::K* key, self::Extension|[]=::V* value) → void
   return #this.{self::MapLike::put}(key, value);
 static method main() → dynamic {
   self::implicit();
diff --git a/pkg/front_end/testcases/extensions/index.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/index.dart.strong.transformed.expect
index f406204..771f107 100644
--- a/pkg/front_end/testcases/extensions/index.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/index.dart.strong.transformed.expect
@@ -26,9 +26,9 @@
   operator [] = self::Extension|[];
   operator []= = self::Extension|[]=;
 }
-static method Extension|[]<K extends core::Object* = dynamic, V extends core::Object* = dynamic>(final self::MapLike<self::Extension|[]::K*, self::Extension|[]::V*>* #this, core::Object* key) → self::Extension|[]::V*
+static method Extension|[]<K extends core::Object* = dynamic, V extends core::Object* = dynamic>(lowered final self::MapLike<self::Extension|[]::K*, self::Extension|[]::V*>* #this, core::Object* key) → self::Extension|[]::V*
   return #this.{self::MapLike::get}(key);
-static method Extension|[]=<K extends core::Object* = dynamic, V extends core::Object* = dynamic>(final self::MapLike<self::Extension|[]=::K*, self::Extension|[]=::V*>* #this, self::Extension|[]=::K* key, self::Extension|[]=::V* value) → void
+static method Extension|[]=<K extends core::Object* = dynamic, V extends core::Object* = dynamic>(lowered final self::MapLike<self::Extension|[]=::K*, self::Extension|[]=::V*>* #this, self::Extension|[]=::K* key, self::Extension|[]=::V* value) → void
   return #this.{self::MapLike::put}(key, value);
 static method main() → dynamic {
   self::implicit();
diff --git a/pkg/front_end/testcases/extensions/instance_access.dart.outline.expect b/pkg/front_end/testcases/extensions/instance_access.dart.outline.expect
index 7bdfef2..36f5cf9 100644
--- a/pkg/front_end/testcases/extensions/instance_access.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/instance_access.dart.outline.expect
@@ -50,29 +50,29 @@
   get property = self::Extension2|get#property;
   set property = self::Extension2|set#property;
 }
-static method Extension1|method(final self::Class1* #this) → core::int*
+static method Extension1|method(lowered final self::Class1* #this) → core::int*
   ;
-static method Extension1|get#method(final self::Class1* #this) → () →* core::int*
+static method Extension1|get#method(lowered final self::Class1* #this) → () →* core::int*
   return () → core::int* => self::Extension1|method(#this);
-static method Extension1|genericMethod<T extends core::num* = core::num*>(final self::Class1* #this, self::Extension1|genericMethod::T* t) → core::int*
+static method Extension1|genericMethod<T extends core::num* = core::num*>(lowered final self::Class1* #this, self::Extension1|genericMethod::T* t) → core::int*
   ;
-static method Extension1|get#genericMethod(final self::Class1* #this) → <T extends core::num* = core::num*>(T*) →* core::int*
+static method Extension1|get#genericMethod(lowered final self::Class1* #this) → <T extends core::num* = core::num*>(T*) →* core::int*
   return <T extends core::num* = core::num*>(T* t) → core::int* => self::Extension1|genericMethod<T*>(#this, t);
-static method Extension1|get#property(final self::Class1* #this) → core::int*
+static method Extension1|get#property(lowered final self::Class1* #this) → core::int*
   ;
-static method Extension1|set#property(final self::Class1* #this, core::int* value) → void
+static method Extension1|set#property(lowered final self::Class1* #this, core::int* value) → void
   ;
-static method Extension2|method(final self::Class2* #this) → core::int*
+static method Extension2|method(lowered final self::Class2* #this) → core::int*
   ;
-static method Extension2|get#method(final self::Class2* #this) → () →* core::int*
+static method Extension2|get#method(lowered final self::Class2* #this) → () →* core::int*
   return () → core::int* => self::Extension2|method(#this);
-static method Extension2|genericMethod<T extends core::num* = core::num*>(final self::Class2* #this, self::Extension2|genericMethod::T* t) → core::int*
+static method Extension2|genericMethod<T extends core::num* = core::num*>(lowered final self::Class2* #this, self::Extension2|genericMethod::T* t) → core::int*
   ;
-static method Extension2|get#genericMethod(final self::Class2* #this) → <T extends core::num* = core::num*>(T*) →* core::int*
+static method Extension2|get#genericMethod(lowered final self::Class2* #this) → <T extends core::num* = core::num*>(T*) →* core::int*
   return <T extends core::num* = core::num*>(T* t) → core::int* => self::Extension2|genericMethod<T*>(#this, t);
-static method Extension2|get#property(final self::Class2* #this) → core::int*
+static method Extension2|get#property(lowered final self::Class2* #this) → core::int*
   ;
-static method Extension2|set#property(final self::Class2* #this, core::int* value) → void
+static method Extension2|set#property(lowered final self::Class2* #this, core::int* value) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/instance_access.dart.strong.expect b/pkg/front_end/testcases/extensions/instance_access.dart.strong.expect
index ca462d0..4fd4d22 100644
--- a/pkg/front_end/testcases/extensions/instance_access.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/instance_access.dart.strong.expect
@@ -52,44 +52,44 @@
   get property = self::Extension2|get#property;
   set property = self::Extension2|set#property;
 }
-static method Extension1|method(final self::Class1* #this) → core::int* {
+static method Extension1|method(lowered final self::Class1* #this) → core::int* {
   core::print("Extension1.method on ${#this}");
   return #this.{self::Class1::field};
 }
-static method Extension1|get#method(final self::Class1* #this) → () →* core::int*
+static method Extension1|get#method(lowered final self::Class1* #this) → () →* core::int*
   return () → core::int* => self::Extension1|method(#this);
-static method Extension1|genericMethod<T extends core::num* = core::num*>(final self::Class1* #this, self::Extension1|genericMethod::T* t) → core::int* {
+static method Extension1|genericMethod<T extends core::num* = core::num*>(lowered final self::Class1* #this, self::Extension1|genericMethod::T* t) → core::int* {
   core::print("Extension1.genericMethod<${self::Extension1|genericMethod::T*}>(${t}) on ${#this}");
   return #this.{self::Class1::field}.{core::num::+}(t) as{TypeError} core::int*;
 }
-static method Extension1|get#genericMethod(final self::Class1* #this) → <T extends core::num* = core::num*>(T*) →* core::int*
+static method Extension1|get#genericMethod(lowered final self::Class1* #this) → <T extends core::num* = core::num*>(T*) →* core::int*
   return <T extends core::num* = core::num*>(T* t) → core::int* => self::Extension1|genericMethod<T*>(#this, t);
-static method Extension1|get#property(final self::Class1* #this) → core::int* {
+static method Extension1|get#property(lowered final self::Class1* #this) → core::int* {
   core::print("Extension1.property get on ${#this}");
   return #this.{self::Class1::field};
 }
-static method Extension1|set#property(final self::Class1* #this, core::int* value) → void {
+static method Extension1|set#property(lowered final self::Class1* #this, core::int* value) → void {
   #this.{self::Class1::field} = value;
   core::print("Extension1.property set(${value}) on ${#this}");
   value = value.{core::num::+}(1);
 }
-static method Extension2|method(final self::Class2* #this) → core::int* {
+static method Extension2|method(lowered final self::Class2* #this) → core::int* {
   core::print("Extension2.method on ${#this}");
   return #this.{self::Class2::field}.{core::num::+}(3);
 }
-static method Extension2|get#method(final self::Class2* #this) → () →* core::int*
+static method Extension2|get#method(lowered final self::Class2* #this) → () →* core::int*
   return () → core::int* => self::Extension2|method(#this);
-static method Extension2|genericMethod<T extends core::num* = core::num*>(final self::Class2* #this, self::Extension2|genericMethod::T* t) → core::int* {
+static method Extension2|genericMethod<T extends core::num* = core::num*>(lowered final self::Class2* #this, self::Extension2|genericMethod::T* t) → core::int* {
   core::print("Extension2.genericMethod<${self::Extension2|genericMethod::T*}>(${t}) on ${#this}");
   return #this.{self::Class2::field}.{core::num::+}(t).{core::num::+}(4) as{TypeError} core::int*;
 }
-static method Extension2|get#genericMethod(final self::Class2* #this) → <T extends core::num* = core::num*>(T*) →* core::int*
+static method Extension2|get#genericMethod(lowered final self::Class2* #this) → <T extends core::num* = core::num*>(T*) →* core::int*
   return <T extends core::num* = core::num*>(T* t) → core::int* => self::Extension2|genericMethod<T*>(#this, t);
-static method Extension2|get#property(final self::Class2* #this) → core::int* {
+static method Extension2|get#property(lowered final self::Class2* #this) → core::int* {
   core::print("Extension2.property get on ${#this}");
   return #this.{self::Class2::field}.{core::num::+}(5);
 }
-static method Extension2|set#property(final self::Class2* #this, core::int* value) → void {
+static method Extension2|set#property(lowered final self::Class2* #this, core::int* value) → void {
   core::print("Extension2.property set(${value}) on ${#this}");
   value = value.{core::num::+}(1);
   #this.{self::Class2::field} = value;
diff --git a/pkg/front_end/testcases/extensions/instance_access.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/instance_access.dart.strong.transformed.expect
index b117363..9d2558b 100644
--- a/pkg/front_end/testcases/extensions/instance_access.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/instance_access.dart.strong.transformed.expect
@@ -52,44 +52,44 @@
   get property = self::Extension2|get#property;
   set property = self::Extension2|set#property;
 }
-static method Extension1|method(final self::Class1* #this) → core::int* {
+static method Extension1|method(lowered final self::Class1* #this) → core::int* {
   core::print("Extension1.method on ${#this}");
   return #this.{self::Class1::field};
 }
-static method Extension1|get#method(final self::Class1* #this) → () →* core::int*
+static method Extension1|get#method(lowered final self::Class1* #this) → () →* core::int*
   return () → core::int* => self::Extension1|method(#this);
-static method Extension1|genericMethod<T extends core::num* = core::num*>(final self::Class1* #this, self::Extension1|genericMethod::T* t) → core::int* {
+static method Extension1|genericMethod<T extends core::num* = core::num*>(lowered final self::Class1* #this, self::Extension1|genericMethod::T* t) → core::int* {
   core::print("Extension1.genericMethod<${self::Extension1|genericMethod::T*}>(${t}) on ${#this}");
   return #this.{self::Class1::field}.{core::num::+}(t) as{TypeError} core::int*;
 }
-static method Extension1|get#genericMethod(final self::Class1* #this) → <T extends core::num* = core::num*>(T*) →* core::int*
+static method Extension1|get#genericMethod(lowered final self::Class1* #this) → <T extends core::num* = core::num*>(T*) →* core::int*
   return <T extends core::num* = core::num*>(T* t) → core::int* => self::Extension1|genericMethod<T*>(#this, t);
-static method Extension1|get#property(final self::Class1* #this) → core::int* {
+static method Extension1|get#property(lowered final self::Class1* #this) → core::int* {
   core::print("Extension1.property get on ${#this}");
   return #this.{self::Class1::field};
 }
-static method Extension1|set#property(final self::Class1* #this, core::int* value) → void {
+static method Extension1|set#property(lowered final self::Class1* #this, core::int* value) → void {
   #this.{self::Class1::field} = value;
   core::print("Extension1.property set(${value}) on ${#this}");
   value = value.{core::num::+}(1);
 }
-static method Extension2|method(final self::Class2* #this) → core::int* {
+static method Extension2|method(lowered final self::Class2* #this) → core::int* {
   core::print("Extension2.method on ${#this}");
   return #this.{self::Class2::field}.{core::num::+}(3);
 }
-static method Extension2|get#method(final self::Class2* #this) → () →* core::int*
+static method Extension2|get#method(lowered final self::Class2* #this) → () →* core::int*
   return () → core::int* => self::Extension2|method(#this);
-static method Extension2|genericMethod<T extends core::num* = core::num*>(final self::Class2* #this, self::Extension2|genericMethod::T* t) → core::int* {
+static method Extension2|genericMethod<T extends core::num* = core::num*>(lowered final self::Class2* #this, self::Extension2|genericMethod::T* t) → core::int* {
   core::print("Extension2.genericMethod<${self::Extension2|genericMethod::T*}>(${t}) on ${#this}");
   return #this.{self::Class2::field}.{core::num::+}(t).{core::num::+}(4) as{TypeError} core::int*;
 }
-static method Extension2|get#genericMethod(final self::Class2* #this) → <T extends core::num* = core::num*>(T*) →* core::int*
+static method Extension2|get#genericMethod(lowered final self::Class2* #this) → <T extends core::num* = core::num*>(T*) →* core::int*
   return <T extends core::num* = core::num*>(T* t) → core::int* => self::Extension2|genericMethod<T*>(#this, t);
-static method Extension2|get#property(final self::Class2* #this) → core::int* {
+static method Extension2|get#property(lowered final self::Class2* #this) → core::int* {
   core::print("Extension2.property get on ${#this}");
   return #this.{self::Class2::field}.{core::num::+}(5);
 }
-static method Extension2|set#property(final self::Class2* #this, core::int* value) → void {
+static method Extension2|set#property(lowered final self::Class2* #this, core::int* value) → void {
   core::print("Extension2.property set(${value}) on ${#this}");
   value = value.{core::num::+}(1);
   #this.{self::Class2::field} = value;
diff --git a/pkg/front_end/testcases/extensions/instance_members.dart.outline.expect b/pkg/front_end/testcases/extensions/instance_members.dart.outline.expect
index 04be94e..63e9fce 100644
--- a/pkg/front_end/testcases/extensions/instance_members.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/instance_members.dart.outline.expect
@@ -46,29 +46,29 @@
   method method2 = self::B2|method2;
   tearoff method2 = self::B2|get#method2;
 }
-static method A2|method1(final self::A1* #this) → self::A1*
+static method A2|method1(lowered final self::A1* #this) → self::A1*
   ;
-static method A2|get#method1(final self::A1* #this) → () →* self::A1*
+static method A2|get#method1(lowered final self::A1* #this) → () →* self::A1*
   return () → self::A1* => self::A2|method1(#this);
-static method A2|method2<T extends core::Object* = dynamic>(final self::A1* #this, self::A2|method2::T* o) → self::A1*
+static method A2|method2<T extends core::Object* = dynamic>(lowered final self::A1* #this, self::A2|method2::T* o) → self::A1*
   ;
-static method A2|get#method2(final self::A1* #this) → <T extends core::Object* = dynamic>(T*) →* self::A1*
+static method A2|get#method2(lowered final self::A1* #this) → <T extends core::Object* = dynamic>(T*) →* self::A1*
   return <T extends core::Object* = dynamic>(T* o) → self::A1* => self::A2|method2<T*>(#this, o);
-static method A2|method3<T extends core::Object* = dynamic>(final self::A1* #this, [self::A2|method3::T* o]) → self::A1*
+static method A2|method3<T extends core::Object* = dynamic>(lowered final self::A1* #this, [self::A2|method3::T* o]) → self::A1*
   ;
-static method A2|get#method3(final self::A1* #this) → <T extends core::Object* = dynamic>([T*]) →* self::A1*
+static method A2|get#method3(lowered final self::A1* #this) → <T extends core::Object* = dynamic>([T*]) →* self::A1*
   return <T extends core::Object* = dynamic>([T* o]) → self::A1* => self::A2|method3<T*>(#this, o);
-static method A2|method4<T extends core::Object* = dynamic>(final self::A1* #this, {self::A2|method4::T* o}) → self::A1*
+static method A2|method4<T extends core::Object* = dynamic>(lowered final self::A1* #this, {self::A2|method4::T* o}) → self::A1*
   ;
-static method A2|get#method4(final self::A1* #this) → <T extends core::Object* = dynamic>({o: T*}) →* self::A1*
+static method A2|get#method4(lowered final self::A1* #this) → <T extends core::Object* = dynamic>({o: T*}) →* self::A1*
   return <T extends core::Object* = dynamic>({T* o}) → self::A1* => self::A2|method4<T*>(#this, o: o);
-static method B2|method1<T extends core::Object* = dynamic>(final self::B1<self::B2|method1::T*>* #this) → self::B1<self::B2|method1::T*>*
+static method B2|method1<T extends core::Object* = dynamic>(lowered final self::B1<self::B2|method1::T*>* #this) → self::B1<self::B2|method1::T*>*
   ;
-static method B2|get#method1<T extends core::Object* = dynamic>(final self::B1<self::B2|get#method1::T*>* #this) → () →* self::B1<self::B2|get#method1::T*>*
+static method B2|get#method1<T extends core::Object* = dynamic>(lowered final self::B1<self::B2|get#method1::T*>* #this) → () →* self::B1<self::B2|get#method1::T*>*
   return () → self::B1<self::B2|get#method1::T*>* => self::B2|method1<self::B2|get#method1::T*>(#this);
-static method B2|method2<T extends core::Object* = dynamic, S extends core::Object* = dynamic>(final self::B1<self::B2|method2::T*>* #this, self::B2|method2::S* o) → self::B1<self::B2|method2::T*>*
+static method B2|method2<T extends core::Object* = dynamic, S extends core::Object* = dynamic>(lowered final self::B1<self::B2|method2::T*>* #this, self::B2|method2::S* o) → self::B1<self::B2|method2::T*>*
   ;
-static method B2|get#method2<T extends core::Object* = dynamic>(final self::B1<self::B2|get#method2::T*>* #this) → <S extends core::Object* = dynamic>(S*) →* self::B1<self::B2|get#method2::T*>*
+static method B2|get#method2<T extends core::Object* = dynamic>(lowered final self::B1<self::B2|get#method2::T*>* #this) → <S extends core::Object* = dynamic>(S*) →* self::B1<self::B2|get#method2::T*>*
   return <S extends core::Object* = dynamic>(S* o) → self::B1<self::B2|get#method2::T*>* => self::B2|method2<self::B2|get#method2::T*, S*>(#this, o);
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/instance_members.dart.strong.expect b/pkg/front_end/testcases/extensions/instance_members.dart.strong.expect
index 72cb315d..d189b6d 100644
--- a/pkg/front_end/testcases/extensions/instance_members.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/instance_members.dart.strong.expect
@@ -48,39 +48,39 @@
   method method2 = self::B2|method2;
   tearoff method2 = self::B2|get#method2;
 }
-static method A2|method1(final self::A1* #this) → self::A1* {
+static method A2|method1(lowered final self::A1* #this) → self::A1* {
   return #this;
 }
-static method A2|get#method1(final self::A1* #this) → () →* self::A1*
+static method A2|get#method1(lowered final self::A1* #this) → () →* self::A1*
   return () → self::A1* => self::A2|method1(#this);
-static method A2|method2<T extends core::Object* = dynamic>(final self::A1* #this, self::A2|method2::T* o) → self::A1* {
+static method A2|method2<T extends core::Object* = dynamic>(lowered final self::A1* #this, self::A2|method2::T* o) → self::A1* {
   core::print(o);
   return #this;
 }
-static method A2|get#method2(final self::A1* #this) → <T extends core::Object* = dynamic>(T*) →* self::A1*
+static method A2|get#method2(lowered final self::A1* #this) → <T extends core::Object* = dynamic>(T*) →* self::A1*
   return <T extends core::Object* = dynamic>(T* o) → self::A1* => self::A2|method2<T*>(#this, o);
-static method A2|method3<T extends core::Object* = dynamic>(final self::A1* #this, [self::A2|method3::T* o = #C1]) → self::A1* {
+static method A2|method3<T extends core::Object* = dynamic>(lowered final self::A1* #this, [self::A2|method3::T* o = #C1]) → self::A1* {
   core::print(o);
   return #this;
 }
-static method A2|get#method3(final self::A1* #this) → <T extends core::Object* = dynamic>([T*]) →* self::A1*
+static method A2|get#method3(lowered final self::A1* #this) → <T extends core::Object* = dynamic>([T*]) →* self::A1*
   return <T extends core::Object* = dynamic>([T* o = #C1]) → self::A1* => self::A2|method3<T*>(#this, o);
-static method A2|method4<T extends core::Object* = dynamic>(final self::A1* #this, {self::A2|method4::T* o = #C1}) → self::A1* {
+static method A2|method4<T extends core::Object* = dynamic>(lowered final self::A1* #this, {self::A2|method4::T* o = #C1}) → self::A1* {
   core::print(o);
   return #this;
 }
-static method A2|get#method4(final self::A1* #this) → <T extends core::Object* = dynamic>({o: T*}) →* self::A1*
+static method A2|get#method4(lowered final self::A1* #this) → <T extends core::Object* = dynamic>({o: T*}) →* self::A1*
   return <T extends core::Object* = dynamic>({T* o = #C1}) → self::A1* => self::A2|method4<T*>(#this, o: o);
-static method B2|method1<T extends core::Object* = dynamic>(final self::B1<self::B2|method1::T*>* #this) → self::B1<self::B2|method1::T*>* {
+static method B2|method1<T extends core::Object* = dynamic>(lowered final self::B1<self::B2|method1::T*>* #this) → self::B1<self::B2|method1::T*>* {
   return #this;
 }
-static method B2|get#method1<T extends core::Object* = dynamic>(final self::B1<self::B2|get#method1::T*>* #this) → () →* self::B1<self::B2|get#method1::T*>*
+static method B2|get#method1<T extends core::Object* = dynamic>(lowered final self::B1<self::B2|get#method1::T*>* #this) → () →* self::B1<self::B2|get#method1::T*>*
   return () → self::B1<self::B2|get#method1::T*>* => self::B2|method1<self::B2|get#method1::T*>(#this);
-static method B2|method2<T extends core::Object* = dynamic, S extends core::Object* = dynamic>(final self::B1<self::B2|method2::T*>* #this, self::B2|method2::S* o) → self::B1<self::B2|method2::T*>* {
+static method B2|method2<T extends core::Object* = dynamic, S extends core::Object* = dynamic>(lowered final self::B1<self::B2|method2::T*>* #this, self::B2|method2::S* o) → self::B1<self::B2|method2::T*>* {
   core::print(o);
   return #this;
 }
-static method B2|get#method2<T extends core::Object* = dynamic>(final self::B1<self::B2|get#method2::T*>* #this) → <S extends core::Object* = dynamic>(S*) →* self::B1<self::B2|get#method2::T*>*
+static method B2|get#method2<T extends core::Object* = dynamic>(lowered final self::B1<self::B2|get#method2::T*>* #this) → <S extends core::Object* = dynamic>(S*) →* self::B1<self::B2|get#method2::T*>*
   return <S extends core::Object* = dynamic>(S* o) → self::B1<self::B2|get#method2::T*>* => self::B2|method2<self::B2|get#method2::T*, S*>(#this, o);
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/extensions/instance_members.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/instance_members.dart.strong.transformed.expect
index 72cb315d..d189b6d 100644
--- a/pkg/front_end/testcases/extensions/instance_members.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/instance_members.dart.strong.transformed.expect
@@ -48,39 +48,39 @@
   method method2 = self::B2|method2;
   tearoff method2 = self::B2|get#method2;
 }
-static method A2|method1(final self::A1* #this) → self::A1* {
+static method A2|method1(lowered final self::A1* #this) → self::A1* {
   return #this;
 }
-static method A2|get#method1(final self::A1* #this) → () →* self::A1*
+static method A2|get#method1(lowered final self::A1* #this) → () →* self::A1*
   return () → self::A1* => self::A2|method1(#this);
-static method A2|method2<T extends core::Object* = dynamic>(final self::A1* #this, self::A2|method2::T* o) → self::A1* {
+static method A2|method2<T extends core::Object* = dynamic>(lowered final self::A1* #this, self::A2|method2::T* o) → self::A1* {
   core::print(o);
   return #this;
 }
-static method A2|get#method2(final self::A1* #this) → <T extends core::Object* = dynamic>(T*) →* self::A1*
+static method A2|get#method2(lowered final self::A1* #this) → <T extends core::Object* = dynamic>(T*) →* self::A1*
   return <T extends core::Object* = dynamic>(T* o) → self::A1* => self::A2|method2<T*>(#this, o);
-static method A2|method3<T extends core::Object* = dynamic>(final self::A1* #this, [self::A2|method3::T* o = #C1]) → self::A1* {
+static method A2|method3<T extends core::Object* = dynamic>(lowered final self::A1* #this, [self::A2|method3::T* o = #C1]) → self::A1* {
   core::print(o);
   return #this;
 }
-static method A2|get#method3(final self::A1* #this) → <T extends core::Object* = dynamic>([T*]) →* self::A1*
+static method A2|get#method3(lowered final self::A1* #this) → <T extends core::Object* = dynamic>([T*]) →* self::A1*
   return <T extends core::Object* = dynamic>([T* o = #C1]) → self::A1* => self::A2|method3<T*>(#this, o);
-static method A2|method4<T extends core::Object* = dynamic>(final self::A1* #this, {self::A2|method4::T* o = #C1}) → self::A1* {
+static method A2|method4<T extends core::Object* = dynamic>(lowered final self::A1* #this, {self::A2|method4::T* o = #C1}) → self::A1* {
   core::print(o);
   return #this;
 }
-static method A2|get#method4(final self::A1* #this) → <T extends core::Object* = dynamic>({o: T*}) →* self::A1*
+static method A2|get#method4(lowered final self::A1* #this) → <T extends core::Object* = dynamic>({o: T*}) →* self::A1*
   return <T extends core::Object* = dynamic>({T* o = #C1}) → self::A1* => self::A2|method4<T*>(#this, o: o);
-static method B2|method1<T extends core::Object* = dynamic>(final self::B1<self::B2|method1::T*>* #this) → self::B1<self::B2|method1::T*>* {
+static method B2|method1<T extends core::Object* = dynamic>(lowered final self::B1<self::B2|method1::T*>* #this) → self::B1<self::B2|method1::T*>* {
   return #this;
 }
-static method B2|get#method1<T extends core::Object* = dynamic>(final self::B1<self::B2|get#method1::T*>* #this) → () →* self::B1<self::B2|get#method1::T*>*
+static method B2|get#method1<T extends core::Object* = dynamic>(lowered final self::B1<self::B2|get#method1::T*>* #this) → () →* self::B1<self::B2|get#method1::T*>*
   return () → self::B1<self::B2|get#method1::T*>* => self::B2|method1<self::B2|get#method1::T*>(#this);
-static method B2|method2<T extends core::Object* = dynamic, S extends core::Object* = dynamic>(final self::B1<self::B2|method2::T*>* #this, self::B2|method2::S* o) → self::B1<self::B2|method2::T*>* {
+static method B2|method2<T extends core::Object* = dynamic, S extends core::Object* = dynamic>(lowered final self::B1<self::B2|method2::T*>* #this, self::B2|method2::S* o) → self::B1<self::B2|method2::T*>* {
   core::print(o);
   return #this;
 }
-static method B2|get#method2<T extends core::Object* = dynamic>(final self::B1<self::B2|get#method2::T*>* #this) → <S extends core::Object* = dynamic>(S*) →* self::B1<self::B2|get#method2::T*>*
+static method B2|get#method2<T extends core::Object* = dynamic>(lowered final self::B1<self::B2|get#method2::T*>* #this) → <S extends core::Object* = dynamic>(S*) →* self::B1<self::B2|get#method2::T*>*
   return <S extends core::Object* = dynamic>(S* o) → self::B1<self::B2|get#method2::T*>* => self::B2|method2<self::B2|get#method2::T*, S*>(#this, o);
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/extensions/instance_tearoff.dart.outline.expect b/pkg/front_end/testcases/extensions/instance_tearoff.dart.outline.expect
index 08380b2..03756cc 100644
--- a/pkg/front_end/testcases/extensions/instance_tearoff.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/instance_tearoff.dart.outline.expect
@@ -46,21 +46,21 @@
   method genericMethod = self::Extension2|genericMethod;
   tearoff genericMethod = self::Extension2|get#genericMethod;
 }
-static method Extension1|method(final self::Class1* #this) → core::int*
+static method Extension1|method(lowered final self::Class1* #this) → core::int*
   ;
-static method Extension1|get#method(final self::Class1* #this) → () →* core::int*
+static method Extension1|get#method(lowered final self::Class1* #this) → () →* core::int*
   return () → core::int* => self::Extension1|method(#this);
-static method Extension1|genericMethod<T extends core::num* = core::num*>(final self::Class1* #this, self::Extension1|genericMethod::T* t) → core::int*
+static method Extension1|genericMethod<T extends core::num* = core::num*>(lowered final self::Class1* #this, self::Extension1|genericMethod::T* t) → core::int*
   ;
-static method Extension1|get#genericMethod(final self::Class1* #this) → <T extends core::num* = core::num*>(T*) →* core::int*
+static method Extension1|get#genericMethod(lowered final self::Class1* #this) → <T extends core::num* = core::num*>(T*) →* core::int*
   return <T extends core::num* = core::num*>(T* t) → core::int* => self::Extension1|genericMethod<T*>(#this, t);
-static method Extension2|method(final self::Class2* #this) → core::int*
+static method Extension2|method(lowered final self::Class2* #this) → core::int*
   ;
-static method Extension2|get#method(final self::Class2* #this) → () →* core::int*
+static method Extension2|get#method(lowered final self::Class2* #this) → () →* core::int*
   return () → core::int* => self::Extension2|method(#this);
-static method Extension2|genericMethod<T extends core::num* = core::num*>(final self::Class2* #this, self::Extension2|genericMethod::T* t) → core::int*
+static method Extension2|genericMethod<T extends core::num* = core::num*>(lowered final self::Class2* #this, self::Extension2|genericMethod::T* t) → core::int*
   ;
-static method Extension2|get#genericMethod(final self::Class2* #this) → <T extends core::num* = core::num*>(T*) →* core::int*
+static method Extension2|get#genericMethod(lowered final self::Class2* #this) → <T extends core::num* = core::num*>(T*) →* core::int*
   return <T extends core::num* = core::num*>(T* t) → core::int* => self::Extension2|genericMethod<T*>(#this, t);
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/instance_tearoff.dart.strong.expect b/pkg/front_end/testcases/extensions/instance_tearoff.dart.strong.expect
index 9508bad..3e30930 100644
--- a/pkg/front_end/testcases/extensions/instance_tearoff.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/instance_tearoff.dart.strong.expect
@@ -48,29 +48,29 @@
   method genericMethod = self::Extension2|genericMethod;
   tearoff genericMethod = self::Extension2|get#genericMethod;
 }
-static method Extension1|method(final self::Class1* #this) → core::int* {
+static method Extension1|method(lowered final self::Class1* #this) → core::int* {
   core::print("Extension1.method on ${#this}");
   return #this.{self::Class1::field};
 }
-static method Extension1|get#method(final self::Class1* #this) → () →* core::int*
+static method Extension1|get#method(lowered final self::Class1* #this) → () →* core::int*
   return () → core::int* => self::Extension1|method(#this);
-static method Extension1|genericMethod<T extends core::num* = core::num*>(final self::Class1* #this, self::Extension1|genericMethod::T* t) → core::int* {
+static method Extension1|genericMethod<T extends core::num* = core::num*>(lowered final self::Class1* #this, self::Extension1|genericMethod::T* t) → core::int* {
   core::print("Extension1.genericMethod<${self::Extension1|genericMethod::T*}>(${t}) on ${#this}");
   return #this.{self::Class1::field}.{core::num::+}(t) as{TypeError} core::int*;
 }
-static method Extension1|get#genericMethod(final self::Class1* #this) → <T extends core::num* = core::num*>(T*) →* core::int*
+static method Extension1|get#genericMethod(lowered final self::Class1* #this) → <T extends core::num* = core::num*>(T*) →* core::int*
   return <T extends core::num* = core::num*>(T* t) → core::int* => self::Extension1|genericMethod<T*>(#this, t);
-static method Extension2|method(final self::Class2* #this) → core::int* {
+static method Extension2|method(lowered final self::Class2* #this) → core::int* {
   core::print("Extension2.method on ${#this}");
   return #this.{self::Class2::field}.{core::num::+}(2);
 }
-static method Extension2|get#method(final self::Class2* #this) → () →* core::int*
+static method Extension2|get#method(lowered final self::Class2* #this) → () →* core::int*
   return () → core::int* => self::Extension2|method(#this);
-static method Extension2|genericMethod<T extends core::num* = core::num*>(final self::Class2* #this, self::Extension2|genericMethod::T* t) → core::int* {
+static method Extension2|genericMethod<T extends core::num* = core::num*>(lowered final self::Class2* #this, self::Extension2|genericMethod::T* t) → core::int* {
   core::print("Extension2.genericMethod<${self::Extension2|genericMethod::T*}>(${t}) on ${#this}");
   return #this.{self::Class2::field}.{core::num::+}(t).{core::num::+}(3) as{TypeError} core::int*;
 }
-static method Extension2|get#genericMethod(final self::Class2* #this) → <T extends core::num* = core::num*>(T*) →* core::int*
+static method Extension2|get#genericMethod(lowered final self::Class2* #this) → <T extends core::num* = core::num*>(T*) →* core::int*
   return <T extends core::num* = core::num*>(T* t) → core::int* => self::Extension2|genericMethod<T*>(#this, t);
 static method main() → dynamic {
   self::testExtension1();
diff --git a/pkg/front_end/testcases/extensions/instance_tearoff.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/instance_tearoff.dart.strong.transformed.expect
index aabacb2..70b8f9f 100644
--- a/pkg/front_end/testcases/extensions/instance_tearoff.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/instance_tearoff.dart.strong.transformed.expect
@@ -48,29 +48,29 @@
   method genericMethod = self::Extension2|genericMethod;
   tearoff genericMethod = self::Extension2|get#genericMethod;
 }
-static method Extension1|method(final self::Class1* #this) → core::int* {
+static method Extension1|method(lowered final self::Class1* #this) → core::int* {
   core::print("Extension1.method on ${#this}");
   return #this.{self::Class1::field};
 }
-static method Extension1|get#method(final self::Class1* #this) → () →* core::int*
+static method Extension1|get#method(lowered final self::Class1* #this) → () →* core::int*
   return () → core::int* => self::Extension1|method(#this);
-static method Extension1|genericMethod<T extends core::num* = core::num*>(final self::Class1* #this, self::Extension1|genericMethod::T* t) → core::int* {
+static method Extension1|genericMethod<T extends core::num* = core::num*>(lowered final self::Class1* #this, self::Extension1|genericMethod::T* t) → core::int* {
   core::print("Extension1.genericMethod<${self::Extension1|genericMethod::T*}>(${t}) on ${#this}");
   return #this.{self::Class1::field}.{core::num::+}(t) as{TypeError} core::int*;
 }
-static method Extension1|get#genericMethod(final self::Class1* #this) → <T extends core::num* = core::num*>(T*) →* core::int*
+static method Extension1|get#genericMethod(lowered final self::Class1* #this) → <T extends core::num* = core::num*>(T*) →* core::int*
   return <T extends core::num* = core::num*>(T* t) → core::int* => self::Extension1|genericMethod<T*>(#this, t);
-static method Extension2|method(final self::Class2* #this) → core::int* {
+static method Extension2|method(lowered final self::Class2* #this) → core::int* {
   core::print("Extension2.method on ${#this}");
   return #this.{self::Class2::field}.{core::num::+}(2);
 }
-static method Extension2|get#method(final self::Class2* #this) → () →* core::int*
+static method Extension2|get#method(lowered final self::Class2* #this) → () →* core::int*
   return () → core::int* => self::Extension2|method(#this);
-static method Extension2|genericMethod<T extends core::num* = core::num*>(final self::Class2* #this, self::Extension2|genericMethod::T* t) → core::int* {
+static method Extension2|genericMethod<T extends core::num* = core::num*>(lowered final self::Class2* #this, self::Extension2|genericMethod::T* t) → core::int* {
   core::print("Extension2.genericMethod<${self::Extension2|genericMethod::T*}>(${t}) on ${#this}");
   return #this.{self::Class2::field}.{core::num::+}(t).{core::num::+}(3) as{TypeError} core::int*;
 }
-static method Extension2|get#genericMethod(final self::Class2* #this) → <T extends core::num* = core::num*>(T*) →* core::int*
+static method Extension2|get#genericMethod(lowered final self::Class2* #this) → <T extends core::num* = core::num*>(T*) →* core::int*
   return <T extends core::num* = core::num*>(T* t) → core::int* => self::Extension2|genericMethod<T*>(#this, t);
 static method main() → dynamic {
   self::testExtension1();
diff --git a/pkg/front_end/testcases/extensions/internal_resolution.dart.outline.expect b/pkg/front_end/testcases/extensions/internal_resolution.dart.outline.expect
index 1c64152..24d15c6 100644
--- a/pkg/front_end/testcases/extensions/internal_resolution.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/internal_resolution.dart.outline.expect
@@ -25,13 +25,13 @@
   get property2 = self::_extension#1|get#property2;
   set property2 = self::_extension#1|set#property2;
 }
-static method _extension#0|get#property1(final self::Class* #this) → core::int*
+static method _extension#0|get#property1(lowered final self::Class* #this) → core::int*
   ;
-static method _extension#0|set#property1(final self::Class* #this, core::int* value) → void
+static method _extension#0|set#property1(lowered final self::Class* #this, core::int* value) → void
   ;
-static method _extension#1|get#property2(final self::Class* #this) → core::int*
+static method _extension#1|get#property2(lowered final self::Class* #this) → core::int*
   ;
-static method _extension#1|set#property2(final self::Class* #this, core::int* value) → void
+static method _extension#1|set#property2(lowered final self::Class* #this, core::int* value) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/internal_resolution.dart.strong.expect b/pkg/front_end/testcases/extensions/internal_resolution.dart.strong.expect
index dadb2db..810c73b 100644
--- a/pkg/front_end/testcases/extensions/internal_resolution.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/internal_resolution.dart.strong.expect
@@ -26,13 +26,13 @@
   get property2 = self::_extension#1|get#property2;
   set property2 = self::_extension#1|set#property2;
 }
-static method _extension#0|get#property1(final self::Class* #this) → core::int*
+static method _extension#0|get#property1(lowered final self::Class* #this) → core::int*
   return self::_extension#1|get#property2(#this);
-static method _extension#0|set#property1(final self::Class* #this, core::int* value) → void
+static method _extension#0|set#property1(lowered final self::Class* #this, core::int* value) → void
   return #this.{self::Class::field} = value;
-static method _extension#1|get#property2(final self::Class* #this) → core::int*
+static method _extension#1|get#property2(lowered final self::Class* #this) → core::int*
   return #this.{self::Class::field};
-static method _extension#1|set#property2(final self::Class* #this, core::int* value) → void
+static method _extension#1|set#property2(lowered final self::Class* #this, core::int* value) → void
   return let final core::int* #t1 = value in let final void #t2 = self::_extension#0|set#property1(#this, #t1) in #t1;
 static method main() → dynamic {
   self::Class* c = new self::Class::•();
diff --git a/pkg/front_end/testcases/extensions/internal_resolution.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/internal_resolution.dart.strong.transformed.expect
index d9024f1..ee08d45 100644
--- a/pkg/front_end/testcases/extensions/internal_resolution.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/internal_resolution.dart.strong.transformed.expect
@@ -26,13 +26,13 @@
   get property2 = self::_extension#1|get#property2;
   set property2 = self::_extension#1|set#property2;
 }
-static method _extension#0|get#property1(final self::Class* #this) → core::int*
+static method _extension#0|get#property1(lowered final self::Class* #this) → core::int*
   return self::_extension#1|get#property2(#this);
-static method _extension#0|set#property1(final self::Class* #this, core::int* value) → void
+static method _extension#0|set#property1(lowered final self::Class* #this, core::int* value) → void
   return #this.{self::Class::field} = value;
-static method _extension#1|get#property2(final self::Class* #this) → core::int*
+static method _extension#1|get#property2(lowered final self::Class* #this) → core::int*
   return #this.{self::Class::field};
-static method _extension#1|set#property2(final self::Class* #this, core::int* value) → void
+static method _extension#1|set#property2(lowered final self::Class* #this, core::int* value) → void
   return let final core::int* #t1 = value in let final void #t2 = self::_extension#0|set#property1(#this, #t1) in #t1;
 static method main() → dynamic {
   self::Class* c = new self::Class::•();
diff --git a/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.outline.expect b/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.outline.expect
index 0b7201a..064d285 100644
--- a/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.outline.expect
@@ -38,13 +38,13 @@
   method method = self::GenericExtension|method;
   tearoff method = self::GenericExtension|get#method;
 }
-static method Extension|method(final self::Class* #this, dynamic a) → dynamic
+static method Extension|method(lowered final self::Class* #this, dynamic a) → dynamic
   ;
-static method Extension|get#method(final self::Class* #this) → (dynamic) →* dynamic
+static method Extension|get#method(lowered final self::Class* #this) → (dynamic) →* dynamic
   return (dynamic a) → dynamic => self::Extension|method(#this, a);
-static method GenericExtension|method<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|method::T*>* #this) → dynamic
+static method GenericExtension|method<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|method::T*>* #this) → dynamic
   ;
-static method GenericExtension|get#method<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#method::T*>* #this) → () →* dynamic
+static method GenericExtension|get#method<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#method::T*>* #this) → () →* dynamic
   return () → dynamic => self::GenericExtension|method<self::GenericExtension|get#method::T*>(#this);
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.strong.expect b/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.strong.expect
index 431609f..3fb95ef 100644
--- a/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.strong.expect
@@ -162,11 +162,11 @@
   method method = self::GenericExtension|method;
   tearoff method = self::GenericExtension|get#method;
 }
-static method Extension|method(final self::Class* #this, dynamic a) → dynamic {}
-static method Extension|get#method(final self::Class* #this) → (dynamic) →* dynamic
+static method Extension|method(lowered final self::Class* #this, dynamic a) → dynamic {}
+static method Extension|get#method(lowered final self::Class* #this) → (dynamic) →* dynamic
   return (dynamic a) → dynamic => self::Extension|method(#this, a);
-static method GenericExtension|method<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|method::T*>* #this) → dynamic {}
-static method GenericExtension|get#method<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#method::T*>* #this) → () →* dynamic
+static method GenericExtension|method<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|method::T*>* #this) → dynamic {}
+static method GenericExtension|get#method<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#method::T*>* #this) → () →* dynamic
   return () → dynamic => self::GenericExtension|method<self::GenericExtension|get#method::T*>(#this);
 static method main() → dynamic {
   core::String* s = "";
diff --git a/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.strong.transformed.expect
index 431609f..3fb95ef 100644
--- a/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.strong.transformed.expect
@@ -162,11 +162,11 @@
   method method = self::GenericExtension|method;
   tearoff method = self::GenericExtension|get#method;
 }
-static method Extension|method(final self::Class* #this, dynamic a) → dynamic {}
-static method Extension|get#method(final self::Class* #this) → (dynamic) →* dynamic
+static method Extension|method(lowered final self::Class* #this, dynamic a) → dynamic {}
+static method Extension|get#method(lowered final self::Class* #this) → (dynamic) →* dynamic
   return (dynamic a) → dynamic => self::Extension|method(#this, a);
-static method GenericExtension|method<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|method::T*>* #this) → dynamic {}
-static method GenericExtension|get#method<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#method::T*>* #this) → () →* dynamic
+static method GenericExtension|method<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|method::T*>* #this) → dynamic {}
+static method GenericExtension|get#method<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#method::T*>* #this) → () →* dynamic
   return () → dynamic => self::GenericExtension|method<self::GenericExtension|get#method::T*>(#this);
 static method main() → dynamic {
   core::String* s = "";
diff --git a/pkg/front_end/testcases/extensions/issue38713.dart.outline.expect b/pkg/front_end/testcases/extensions/issue38713.dart.outline.expect
index b1e807a..ca41f17 100644
--- a/pkg/front_end/testcases/extensions/issue38713.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/issue38713.dart.outline.expect
@@ -32,7 +32,7 @@
   ;
 static set C|property3(core::int* x) → void
   ;
-static method C|get#property3(final core::int* #this) → core::int*
+static method C|get#property3(lowered final core::int* #this) → core::int*
   ;
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/extensions/issue38713.dart.strong.expect b/pkg/front_end/testcases/extensions/issue38713.dart.strong.expect
index 3f56d65..9108ed9 100644
--- a/pkg/front_end/testcases/extensions/issue38713.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/issue38713.dart.strong.expect
@@ -30,7 +30,7 @@
 static field core::int* C|property2;
 static set C|property2(core::int* x) → void {}
 static set C|property3(core::int* x) → void {}
-static method C|get#property3(final core::int* #this) → core::int*
+static method C|get#property3(lowered final core::int* #this) → core::int*
   return 1;
 static method main() → void {
   self::C|property2;
diff --git a/pkg/front_end/testcases/extensions/issue38713.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/issue38713.dart.strong.transformed.expect
index 3f56d65..9108ed9 100644
--- a/pkg/front_end/testcases/extensions/issue38713.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/issue38713.dart.strong.transformed.expect
@@ -30,7 +30,7 @@
 static field core::int* C|property2;
 static set C|property2(core::int* x) → void {}
 static set C|property3(core::int* x) → void {}
-static method C|get#property3(final core::int* #this) → core::int*
+static method C|get#property3(lowered final core::int* #this) → core::int*
   return 1;
 static method main() → void {
   self::C|property2;
diff --git a/pkg/front_end/testcases/extensions/issue38745.dart.outline.expect b/pkg/front_end/testcases/extensions/issue38745.dart.outline.expect
index 166ad22..8777198 100644
--- a/pkg/front_end/testcases/extensions/issue38745.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/issue38745.dart.outline.expect
@@ -54,13 +54,13 @@
 static field core::int* ext|field;
 static final field core::int* ext|property;
 static final field core::int* ext|property2;
-static method ext|set#property<T extends core::Object* = dynamic>(final self::C<self::ext|set#property::T*>* #this, core::int* value) → void
+static method ext|set#property<T extends core::Object* = dynamic>(lowered final self::C<self::ext|set#property::T*>* #this, core::int* value) → void
   ;
 static set ext|property2(core::int* value) → void
   ;
-static method ext|method<T extends core::Object* = dynamic>(final self::C<self::ext|method::T*>* #this) → dynamic
+static method ext|method<T extends core::Object* = dynamic>(lowered final self::C<self::ext|method::T*>* #this) → dynamic
   ;
-static method ext|get#method<T extends core::Object* = dynamic>(final self::C<self::ext|get#method::T*>* #this) → () →* dynamic
+static method ext|get#method<T extends core::Object* = dynamic>(lowered final self::C<self::ext|get#method::T*>* #this) → () →* dynamic
   return () → dynamic => self::ext|method<self::ext|get#method::T*>(#this);
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/issue38745.dart.strong.expect b/pkg/front_end/testcases/extensions/issue38745.dart.strong.expect
index 40c2392..13017ea 100644
--- a/pkg/front_end/testcases/extensions/issue38745.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/issue38745.dart.strong.expect
@@ -125,9 +125,9 @@
 static field core::int* ext|field;
 static final field core::int* ext|property = 42;
 static final field core::int* ext|property2 = 42;
-static method ext|set#property<T extends core::Object* = dynamic>(final self::C<self::ext|set#property::T*>* #this, core::int* value) → void {}
+static method ext|set#property<T extends core::Object* = dynamic>(lowered final self::C<self::ext|set#property::T*>* #this, core::int* value) → void {}
 static set ext|property2(core::int* value) → void {}
-static method ext|method<T extends core::Object* = dynamic>(final self::C<self::ext|method::T*>* #this) → dynamic {
+static method ext|method<T extends core::Object* = dynamic>(lowered final self::C<self::ext|method::T*>* #this) → dynamic {
   invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:20:5: Error: Getter not found: 'field'.
     field;
     ^^^^^";
@@ -145,7 +145,7 @@
     property2 = 23;
     ^^^^^^^^^";
 }
-static method ext|get#method<T extends core::Object* = dynamic>(final self::C<self::ext|get#method::T*>* #this) → () →* dynamic
+static method ext|get#method<T extends core::Object* = dynamic>(lowered final self::C<self::ext|get#method::T*>* #this) → () →* dynamic
   return () → dynamic => self::ext|method<self::ext|get#method::T*>(#this);
 static method main() → dynamic {}
 static method errors() → dynamic {
diff --git a/pkg/front_end/testcases/extensions/issue38745.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/issue38745.dart.strong.transformed.expect
index 40c2392..13017ea 100644
--- a/pkg/front_end/testcases/extensions/issue38745.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/issue38745.dart.strong.transformed.expect
@@ -125,9 +125,9 @@
 static field core::int* ext|field;
 static final field core::int* ext|property = 42;
 static final field core::int* ext|property2 = 42;
-static method ext|set#property<T extends core::Object* = dynamic>(final self::C<self::ext|set#property::T*>* #this, core::int* value) → void {}
+static method ext|set#property<T extends core::Object* = dynamic>(lowered final self::C<self::ext|set#property::T*>* #this, core::int* value) → void {}
 static set ext|property2(core::int* value) → void {}
-static method ext|method<T extends core::Object* = dynamic>(final self::C<self::ext|method::T*>* #this) → dynamic {
+static method ext|method<T extends core::Object* = dynamic>(lowered final self::C<self::ext|method::T*>* #this) → dynamic {
   invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:20:5: Error: Getter not found: 'field'.
     field;
     ^^^^^";
@@ -145,7 +145,7 @@
     property2 = 23;
     ^^^^^^^^^";
 }
-static method ext|get#method<T extends core::Object* = dynamic>(final self::C<self::ext|get#method::T*>* #this) → () →* dynamic
+static method ext|get#method<T extends core::Object* = dynamic>(lowered final self::C<self::ext|get#method::T*>* #this) → () →* dynamic
   return () → dynamic => self::ext|method<self::ext|get#method::T*>(#this);
 static method main() → dynamic {}
 static method errors() → dynamic {
diff --git a/pkg/front_end/testcases/extensions/issue38750.dart.outline.expect b/pkg/front_end/testcases/extensions/issue38750.dart.outline.expect
index 30d8538..68e7bae 100644
--- a/pkg/front_end/testcases/extensions/issue38750.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/issue38750.dart.outline.expect
@@ -39,9 +39,9 @@
   method _bar = self2::ext|_bar;
   tearoff _bar = self2::ext|get#_bar;
 }
-static method ext|_bar(final self2::C* #this) → dynamic
+static method ext|_bar(lowered final self2::C* #this) → dynamic
   ;
-static method ext|get#_bar(final self2::C* #this) → () →* dynamic
+static method ext|get#_bar(lowered final self2::C* #this) → () →* dynamic
   return () → dynamic => self2::ext|_bar(#this);
 
 library;
diff --git a/pkg/front_end/testcases/extensions/issue38750.dart.strong.expect b/pkg/front_end/testcases/extensions/issue38750.dart.strong.expect
index ed20ca4..3935f4db 100644
--- a/pkg/front_end/testcases/extensions/issue38750.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/issue38750.dart.strong.expect
@@ -82,7 +82,7 @@
   method _bar = iss::ext|_bar;
   tearoff _bar = iss::ext|get#_bar;
 }
-static method ext|_bar(final iss::C* #this) → dynamic {
+static method ext|_bar(lowered final iss::C* #this) → dynamic {
   try {
     throw "producing a stack trace";
   }
@@ -90,7 +90,7 @@
     core::print(s);
   }
 }
-static method ext|get#_bar(final iss::C* #this) → () →* dynamic
+static method ext|get#_bar(lowered final iss::C* #this) → () →* dynamic
   return () → dynamic => iss::ext|_bar(#this);
 
 library;
diff --git a/pkg/front_end/testcases/extensions/issue38750.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/issue38750.dart.strong.transformed.expect
index ed20ca4..3935f4db 100644
--- a/pkg/front_end/testcases/extensions/issue38750.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/issue38750.dart.strong.transformed.expect
@@ -82,7 +82,7 @@
   method _bar = iss::ext|_bar;
   tearoff _bar = iss::ext|get#_bar;
 }
-static method ext|_bar(final iss::C* #this) → dynamic {
+static method ext|_bar(lowered final iss::C* #this) → dynamic {
   try {
     throw "producing a stack trace";
   }
@@ -90,7 +90,7 @@
     core::print(s);
   }
 }
-static method ext|get#_bar(final iss::C* #this) → () →* dynamic
+static method ext|get#_bar(lowered final iss::C* #this) → () →* dynamic
   return () → dynamic => iss::ext|_bar(#this);
 
 library;
diff --git a/pkg/front_end/testcases/extensions/issue38755.dart.outline.expect b/pkg/front_end/testcases/extensions/issue38755.dart.outline.expect
index f901d42..13c7102 100644
--- a/pkg/front_end/testcases/extensions/issue38755.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/issue38755.dart.outline.expect
@@ -7,9 +7,9 @@
   tearoff myMap = self::A|get#myMap;
 }
 static final field core::List<core::String*>* list;
-static method A|myMap<T extends core::Object* = dynamic, R extends core::Object* = dynamic>(final core::List<self::A|myMap::T*>* #this, (self::A|myMap::T*) →* self::A|myMap::R* block) → core::List<self::A|myMap::R*>*
+static method A|myMap<T extends core::Object* = dynamic, R extends core::Object* = dynamic>(lowered final core::List<self::A|myMap::T*>* #this, (self::A|myMap::T*) →* self::A|myMap::R* block) → core::List<self::A|myMap::R*>*
   ;
-static method A|get#myMap<T extends core::Object* = dynamic>(final core::List<self::A|get#myMap::T*>* #this) → <R extends core::Object* = dynamic>((self::A|get#myMap::T*) →* R*) →* core::List<R*>*
+static method A|get#myMap<T extends core::Object* = dynamic>(lowered final core::List<self::A|get#myMap::T*>* #this) → <R extends core::Object* = dynamic>((self::A|get#myMap::T*) →* R*) →* core::List<R*>*
   return <R extends core::Object* = dynamic>((self::A|get#myMap::T*) →* R* block) → core::List<R*>* => self::A|myMap<self::A|get#myMap::T*, R*>(#this, block);
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/issue38755.dart.strong.expect b/pkg/front_end/testcases/extensions/issue38755.dart.strong.expect
index 31b4214..724ef26 100644
--- a/pkg/front_end/testcases/extensions/issue38755.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/issue38755.dart.strong.expect
@@ -7,10 +7,10 @@
   tearoff myMap = self::A|get#myMap;
 }
 static final field core::List<core::String*>* list = self::A|myMap<core::String*, core::String*>(<core::String*>["a", "b", "c"], (core::String* it) → core::String* => it);
-static method A|myMap<T extends core::Object* = dynamic, R extends core::Object* = dynamic>(final core::List<self::A|myMap::T*>* #this, (self::A|myMap::T*) →* self::A|myMap::R* block) → core::List<self::A|myMap::R*>* {
+static method A|myMap<T extends core::Object* = dynamic, R extends core::Object* = dynamic>(lowered final core::List<self::A|myMap::T*>* #this, (self::A|myMap::T*) →* self::A|myMap::R* block) → core::List<self::A|myMap::R*>* {
   return #this.{core::Iterable::map}<self::A|myMap::R*>(block).{core::Iterable::toList}();
 }
-static method A|get#myMap<T extends core::Object* = dynamic>(final core::List<self::A|get#myMap::T*>* #this) → <R extends core::Object* = dynamic>((self::A|get#myMap::T*) →* R*) →* core::List<R*>*
+static method A|get#myMap<T extends core::Object* = dynamic>(lowered final core::List<self::A|get#myMap::T*>* #this) → <R extends core::Object* = dynamic>((self::A|get#myMap::T*) →* R*) →* core::List<R*>*
   return <R extends core::Object* = dynamic>((self::A|get#myMap::T*) →* R* block) → core::List<R*>* => self::A|myMap<self::A|get#myMap::T*, R*>(#this, block);
 static method main() → dynamic {
   core::print(self::list);
diff --git a/pkg/front_end/testcases/extensions/issue38755.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/issue38755.dart.strong.transformed.expect
index 31b4214..724ef26 100644
--- a/pkg/front_end/testcases/extensions/issue38755.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/issue38755.dart.strong.transformed.expect
@@ -7,10 +7,10 @@
   tearoff myMap = self::A|get#myMap;
 }
 static final field core::List<core::String*>* list = self::A|myMap<core::String*, core::String*>(<core::String*>["a", "b", "c"], (core::String* it) → core::String* => it);
-static method A|myMap<T extends core::Object* = dynamic, R extends core::Object* = dynamic>(final core::List<self::A|myMap::T*>* #this, (self::A|myMap::T*) →* self::A|myMap::R* block) → core::List<self::A|myMap::R*>* {
+static method A|myMap<T extends core::Object* = dynamic, R extends core::Object* = dynamic>(lowered final core::List<self::A|myMap::T*>* #this, (self::A|myMap::T*) →* self::A|myMap::R* block) → core::List<self::A|myMap::R*>* {
   return #this.{core::Iterable::map}<self::A|myMap::R*>(block).{core::Iterable::toList}();
 }
-static method A|get#myMap<T extends core::Object* = dynamic>(final core::List<self::A|get#myMap::T*>* #this) → <R extends core::Object* = dynamic>((self::A|get#myMap::T*) →* R*) →* core::List<R*>*
+static method A|get#myMap<T extends core::Object* = dynamic>(lowered final core::List<self::A|get#myMap::T*>* #this) → <R extends core::Object* = dynamic>((self::A|get#myMap::T*) →* R*) →* core::List<R*>*
   return <R extends core::Object* = dynamic>((self::A|get#myMap::T*) →* R* block) → core::List<R*>* => self::A|myMap<self::A|get#myMap::T*, R*>(#this, block);
 static method main() → dynamic {
   core::print(self::list);
diff --git a/pkg/front_end/testcases/extensions/issue38915.dart.outline.expect b/pkg/front_end/testcases/extensions/issue38915.dart.outline.expect
index 6231a80..0d8feca 100644
--- a/pkg/front_end/testcases/extensions/issue38915.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/issue38915.dart.outline.expect
@@ -26,21 +26,21 @@
   method method4 = self::Extension|method4;
   tearoff method4 = self::Extension|get#method4;
 }
-static method Extension|method1(final self::Class* #this, {core::bool* b, core::String* s}) → void
+static method Extension|method1(lowered final self::Class* #this, {core::bool* b, core::String* s}) → void
   ;
-static method Extension|get#method1(final self::Class* #this) → ({b: core::bool*, s: core::String*}) →* void
+static method Extension|get#method1(lowered final self::Class* #this) → ({b: core::bool*, s: core::String*}) →* void
   return ({core::bool* b, core::String* s}) → void => self::Extension|method1(#this, b: b, s: s);
-static method Extension|method2(final self::Class* #this, [core::bool* b, core::String* s]) → void
+static method Extension|method2(lowered final self::Class* #this, [core::bool* b, core::String* s]) → void
   ;
-static method Extension|get#method2(final self::Class* #this) → ([core::bool*, core::String*]) →* void
+static method Extension|get#method2(lowered final self::Class* #this) → ([core::bool*, core::String*]) →* void
   return ([core::bool* b, core::String* s]) → void => self::Extension|method2(#this, b, s);
-static method Extension|method3(final self::Class* #this, core::int* i, {core::bool* b, core::String* s}) → void
+static method Extension|method3(lowered final self::Class* #this, core::int* i, {core::bool* b, core::String* s}) → void
   ;
-static method Extension|get#method3(final self::Class* #this) → (core::int*, {b: core::bool*, s: core::String*}) →* void
+static method Extension|get#method3(lowered final self::Class* #this) → (core::int*, {b: core::bool*, s: core::String*}) →* void
   return (core::int* i, {core::bool* b, core::String* s}) → void => self::Extension|method3(#this, i, b: b, s: s);
-static method Extension|method4(final self::Class* #this, core::int* i, [core::bool* b, core::String* s]) → void
+static method Extension|method4(lowered final self::Class* #this, core::int* i, [core::bool* b, core::String* s]) → void
   ;
-static method Extension|get#method4(final self::Class* #this) → (core::int*, [core::bool*, core::String*]) →* void
+static method Extension|get#method4(lowered final self::Class* #this) → (core::int*, [core::bool*, core::String*]) →* void
   return (core::int* i, [core::bool* b, core::String* s]) → void => self::Extension|method4(#this, i, b, s);
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/issue38915.dart.strong.expect b/pkg/front_end/testcases/extensions/issue38915.dart.strong.expect
index 59a9add..ab76811 100644
--- a/pkg/front_end/testcases/extensions/issue38915.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/issue38915.dart.strong.expect
@@ -27,19 +27,19 @@
   method method4 = self::Extension|method4;
   tearoff method4 = self::Extension|get#method4;
 }
-static method Extension|method1(final self::Class* #this, {core::bool* b = #C1, core::String* s = #C2}) → void
+static method Extension|method1(lowered final self::Class* #this, {core::bool* b = #C1, core::String* s = #C2}) → void
   return null;
-static method Extension|get#method1(final self::Class* #this) → ({b: core::bool*, s: core::String*}) →* void
+static method Extension|get#method1(lowered final self::Class* #this) → ({b: core::bool*, s: core::String*}) →* void
   return ({core::bool* b = #C1, core::String* s = #C2}) → void => self::Extension|method1(#this, b: b, s: s);
-static method Extension|method2(final self::Class* #this, [core::bool* b = #C1, core::String* s = #C2]) → void
+static method Extension|method2(lowered final self::Class* #this, [core::bool* b = #C1, core::String* s = #C2]) → void
   return null;
-static method Extension|get#method2(final self::Class* #this) → ([core::bool*, core::String*]) →* void
+static method Extension|get#method2(lowered final self::Class* #this) → ([core::bool*, core::String*]) →* void
   return ([core::bool* b = #C1, core::String* s = #C2]) → void => self::Extension|method2(#this, b, s);
-static method Extension|method3(final self::Class* #this, core::int* i, {core::bool* b = #C1, core::String* s = #C2}) → void {}
-static method Extension|get#method3(final self::Class* #this) → (core::int*, {b: core::bool*, s: core::String*}) →* void
+static method Extension|method3(lowered final self::Class* #this, core::int* i, {core::bool* b = #C1, core::String* s = #C2}) → void {}
+static method Extension|get#method3(lowered final self::Class* #this) → (core::int*, {b: core::bool*, s: core::String*}) →* void
   return (core::int* i, {core::bool* b = #C1, core::String* s = #C2}) → void => self::Extension|method3(#this, i, b: b, s: s);
-static method Extension|method4(final self::Class* #this, core::int* i, [core::bool* b = #C1, core::String* s = #C2]) → void {}
-static method Extension|get#method4(final self::Class* #this) → (core::int*, [core::bool*, core::String*]) →* void
+static method Extension|method4(lowered final self::Class* #this, core::int* i, [core::bool* b = #C1, core::String* s = #C2]) → void {}
+static method Extension|get#method4(lowered final self::Class* #this) → (core::int*, [core::bool*, core::String*]) →* void
   return (core::int* i, [core::bool* b = #C1, core::String* s = #C2]) → void => self::Extension|method4(#this, i, b, s);
 static method main() → dynamic {
   self::Class* c = new self::Class::•();
diff --git a/pkg/front_end/testcases/extensions/issue38915.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/issue38915.dart.strong.transformed.expect
index 59a9add..ab76811 100644
--- a/pkg/front_end/testcases/extensions/issue38915.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/issue38915.dart.strong.transformed.expect
@@ -27,19 +27,19 @@
   method method4 = self::Extension|method4;
   tearoff method4 = self::Extension|get#method4;
 }
-static method Extension|method1(final self::Class* #this, {core::bool* b = #C1, core::String* s = #C2}) → void
+static method Extension|method1(lowered final self::Class* #this, {core::bool* b = #C1, core::String* s = #C2}) → void
   return null;
-static method Extension|get#method1(final self::Class* #this) → ({b: core::bool*, s: core::String*}) →* void
+static method Extension|get#method1(lowered final self::Class* #this) → ({b: core::bool*, s: core::String*}) →* void
   return ({core::bool* b = #C1, core::String* s = #C2}) → void => self::Extension|method1(#this, b: b, s: s);
-static method Extension|method2(final self::Class* #this, [core::bool* b = #C1, core::String* s = #C2]) → void
+static method Extension|method2(lowered final self::Class* #this, [core::bool* b = #C1, core::String* s = #C2]) → void
   return null;
-static method Extension|get#method2(final self::Class* #this) → ([core::bool*, core::String*]) →* void
+static method Extension|get#method2(lowered final self::Class* #this) → ([core::bool*, core::String*]) →* void
   return ([core::bool* b = #C1, core::String* s = #C2]) → void => self::Extension|method2(#this, b, s);
-static method Extension|method3(final self::Class* #this, core::int* i, {core::bool* b = #C1, core::String* s = #C2}) → void {}
-static method Extension|get#method3(final self::Class* #this) → (core::int*, {b: core::bool*, s: core::String*}) →* void
+static method Extension|method3(lowered final self::Class* #this, core::int* i, {core::bool* b = #C1, core::String* s = #C2}) → void {}
+static method Extension|get#method3(lowered final self::Class* #this) → (core::int*, {b: core::bool*, s: core::String*}) →* void
   return (core::int* i, {core::bool* b = #C1, core::String* s = #C2}) → void => self::Extension|method3(#this, i, b: b, s: s);
-static method Extension|method4(final self::Class* #this, core::int* i, [core::bool* b = #C1, core::String* s = #C2]) → void {}
-static method Extension|get#method4(final self::Class* #this) → (core::int*, [core::bool*, core::String*]) →* void
+static method Extension|method4(lowered final self::Class* #this, core::int* i, [core::bool* b = #C1, core::String* s = #C2]) → void {}
+static method Extension|get#method4(lowered final self::Class* #this) → (core::int*, [core::bool*, core::String*]) →* void
   return (core::int* i, [core::bool* b = #C1, core::String* s = #C2]) → void => self::Extension|method4(#this, i, b, s);
 static method main() → dynamic {
   self::Class* c = new self::Class::•();
diff --git a/pkg/front_end/testcases/extensions/issue39527.dart.outline.expect b/pkg/front_end/testcases/extensions/issue39527.dart.outline.expect
index 1055553..32185bf 100644
--- a/pkg/front_end/testcases/extensions/issue39527.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/issue39527.dart.outline.expect
@@ -22,11 +22,11 @@
   operator []= = self::Extension1|[]=;
   operator - = self::Extension1|-;
 }
-static method Extension1|[](final self::C* #this, core::int* index) → self::C*
+static method Extension1|[](lowered final self::C* #this, core::int* index) → self::C*
   ;
-static method Extension1|[]=(final self::C* #this, core::int* index, self::C* other) → void
+static method Extension1|[]=(lowered final self::C* #this, core::int* index, self::C* other) → void
   ;
-static method Extension1|-(final self::C* #this, core::int* val) → self::C*
+static method Extension1|-(lowered final self::C* #this, core::int* val) → self::C*
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/issue39527.dart.strong.expect b/pkg/front_end/testcases/extensions/issue39527.dart.strong.expect
index 32a70a4..8131831 100644
--- a/pkg/front_end/testcases/extensions/issue39527.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/issue39527.dart.strong.expect
@@ -23,13 +23,13 @@
   operator []= = self::Extension1|[]=;
   operator - = self::Extension1|-;
 }
-static method Extension1|[](final self::C* #this, core::int* index) → self::C*
+static method Extension1|[](lowered final self::C* #this, core::int* index) → self::C*
   return let final self::C* #t1 = #this in block {
     let final self::C* #t2 = #t1 in #t2.{self::C::value} = #t2.{self::C::value}.{core::num::+}(index.{core::num::+}(1));
   } =>#t1;
-static method Extension1|[]=(final self::C* #this, core::int* index, self::C* other) → void
+static method Extension1|[]=(lowered final self::C* #this, core::int* index, self::C* other) → void
   return let final self::C* #t3 = #this in #t3.{self::C::value} = #t3.{self::C::value}.{core::num::+}(other.{self::C::value}.{core::num::+}(index).{core::num::+}(1));
-static method Extension1|-(final self::C* #this, core::int* val) → self::C*
+static method Extension1|-(lowered final self::C* #this, core::int* val) → self::C*
   return #this;
 static method main() → dynamic {
   self::C* c = new self::C::•();
diff --git a/pkg/front_end/testcases/extensions/issue39527.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/issue39527.dart.strong.transformed.expect
index a4adb78..85bc50b 100644
--- a/pkg/front_end/testcases/extensions/issue39527.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/issue39527.dart.strong.transformed.expect
@@ -23,13 +23,13 @@
   operator []= = self::Extension1|[]=;
   operator - = self::Extension1|-;
 }
-static method Extension1|[](final self::C* #this, core::int* index) → self::C*
+static method Extension1|[](lowered final self::C* #this, core::int* index) → self::C*
   return let final self::C* #t1 = #this in block {
     let final self::C* #t2 = #t1 in #t2.{self::C::value} = #t2.{self::C::value}.{core::num::+}(index.{core::num::+}(1));
   } =>#t1;
-static method Extension1|[]=(final self::C* #this, core::int* index, self::C* other) → void
+static method Extension1|[]=(lowered final self::C* #this, core::int* index, self::C* other) → void
   return let final self::C* #t3 = #this in #t3.{self::C::value} = #t3.{self::C::value}.{core::num::+}(other.{self::C::value}.{core::num::+}(index).{core::num::+}(1));
-static method Extension1|-(final self::C* #this, core::int* val) → self::C*
+static method Extension1|-(lowered final self::C* #this, core::int* val) → self::C*
   return #this;
 static method main() → dynamic {
   self::C* c = new self::C::•();
diff --git a/pkg/front_end/testcases/extensions/issue39889.dart.outline.expect b/pkg/front_end/testcases/extensions/issue39889.dart.outline.expect
index 1c18ba8..0569c0a 100644
--- a/pkg/front_end/testcases/extensions/issue39889.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/issue39889.dart.outline.expect
@@ -20,9 +20,9 @@
   method f = self::E|f;
   tearoff f = self::E|get#f;
 }
-static method E|f(final self::C* #this, core::String* b) → void
+static method E|f(lowered final self::C* #this, core::String* b) → void
   ;
-static method E|get#f(final self::C* #this) → (core::String*) →* void
+static method E|get#f(lowered final self::C* #this) → (core::String*) →* void
   return (core::String* b) → void => self::E|f(#this, b);
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/extensions/issue39889.dart.strong.expect b/pkg/front_end/testcases/extensions/issue39889.dart.strong.expect
index 8d52ecb..3d65b0f 100644
--- a/pkg/front_end/testcases/extensions/issue39889.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/issue39889.dart.strong.expect
@@ -21,8 +21,8 @@
   method f = self::E|f;
   tearoff f = self::E|get#f;
 }
-static method E|f(final self::C* #this, core::String* b) → void {}
-static method E|get#f(final self::C* #this) → (core::String*) →* void
+static method E|f(lowered final self::C* #this, core::String* b) → void {}
+static method E|get#f(lowered final self::C* #this) → (core::String*) →* void
   return (core::String* b) → void => self::E|f(#this, b);
 static method main() → void {
   dynamic b = "456";
diff --git a/pkg/front_end/testcases/extensions/issue39889.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/issue39889.dart.strong.transformed.expect
index 8d52ecb..3d65b0f 100644
--- a/pkg/front_end/testcases/extensions/issue39889.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/issue39889.dart.strong.transformed.expect
@@ -21,8 +21,8 @@
   method f = self::E|f;
   tearoff f = self::E|get#f;
 }
-static method E|f(final self::C* #this, core::String* b) → void {}
-static method E|get#f(final self::C* #this) → (core::String*) →* void
+static method E|f(lowered final self::C* #this, core::String* b) → void {}
+static method E|get#f(lowered final self::C* #this) → (core::String*) →* void
   return (core::String* b) → void => self::E|f(#this, b);
 static method main() → void {
   dynamic b = "456";
diff --git a/pkg/front_end/testcases/extensions/issue39938/issue39938.dart.outline.expect b/pkg/front_end/testcases/extensions/issue39938/issue39938.dart.outline.expect
index b84871b..975b7b2 100644
--- a/pkg/front_end/testcases/extensions/issue39938/issue39938.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/issue39938/issue39938.dart.outline.expect
@@ -15,5 +15,5 @@
 extension Extension on core::bool* {
   operator + = self2::Extension|+;
 }
-static method Extension|+(final core::bool* #this, core::bool* other) → core::bool*
+static method Extension|+(lowered final core::bool* #this, core::bool* other) → core::bool*
   ;
diff --git a/pkg/front_end/testcases/extensions/issue39938/issue39938.dart.strong.expect b/pkg/front_end/testcases/extensions/issue39938/issue39938.dart.strong.expect
index e321b2b..687f686 100644
--- a/pkg/front_end/testcases/extensions/issue39938/issue39938.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/issue39938/issue39938.dart.strong.expect
@@ -27,5 +27,5 @@
 extension Extension on core::bool* {
   operator + = iss::Extension|+;
 }
-static method Extension|+(final core::bool* #this, core::bool* other) → core::bool*
+static method Extension|+(lowered final core::bool* #this, core::bool* other) → core::bool*
   return #this.{core::bool::|}(other);
diff --git a/pkg/front_end/testcases/extensions/issue39938/issue39938.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/issue39938/issue39938.dart.strong.transformed.expect
index e321b2b..687f686 100644
--- a/pkg/front_end/testcases/extensions/issue39938/issue39938.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/issue39938/issue39938.dart.strong.transformed.expect
@@ -27,5 +27,5 @@
 extension Extension on core::bool* {
   operator + = iss::Extension|+;
 }
-static method Extension|+(final core::bool* #this, core::bool* other) → core::bool*
+static method Extension|+(lowered final core::bool* #this, core::bool* other) → core::bool*
   return #this.{core::bool::|}(other);
diff --git a/pkg/front_end/testcases/extensions/issue40596.dart.outline.expect b/pkg/front_end/testcases/extensions/issue40596.dart.outline.expect
index 026a6f7..8be7c09 100644
--- a/pkg/front_end/testcases/extensions/issue40596.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/issue40596.dart.outline.expect
@@ -11,7 +11,7 @@
 }
 static method main() → void
   ;
-static method Extension|call<T extends core::Object* = dynamic>(final asy::Stream<self::Extension|call::T*>* #this, core::Function* onData) → asy::StreamSubscription<self::Extension|call::T*>*
+static method Extension|call<T extends core::Object* = dynamic>(lowered final asy::Stream<self::Extension|call::T*>* #this, core::Function* onData) → asy::StreamSubscription<self::Extension|call::T*>*
   ;
-static method Extension|get#call<T extends core::Object* = dynamic>(final asy::Stream<self::Extension|get#call::T*>* #this) → (core::Function*) →* asy::StreamSubscription<self::Extension|get#call::T*>*
+static method Extension|get#call<T extends core::Object* = dynamic>(lowered final asy::Stream<self::Extension|get#call::T*>* #this) → (core::Function*) →* asy::StreamSubscription<self::Extension|get#call::T*>*
   return (core::Function* onData) → asy::StreamSubscription<self::Extension|get#call::T*>* => self::Extension|call<self::Extension|get#call::T*>(#this, onData);
diff --git a/pkg/front_end/testcases/extensions/issue40596.dart.strong.expect b/pkg/front_end/testcases/extensions/issue40596.dart.strong.expect
index 1511135..7a2fd83 100644
--- a/pkg/front_end/testcases/extensions/issue40596.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/issue40596.dart.strong.expect
@@ -15,10 +15,10 @@
     core::print(s);
   } in self::Extension|call<core::String*>(#t1.{asy::StreamController::stream}, #t2);
 }
-static method Extension|call<T extends core::Object* = dynamic>(final asy::Stream<self::Extension|call::T*>* #this, core::Function* onData) → asy::StreamSubscription<self::Extension|call::T*>* {
+static method Extension|call<T extends core::Object* = dynamic>(lowered final asy::Stream<self::Extension|call::T*>* #this, core::Function* onData) → asy::StreamSubscription<self::Extension|call::T*>* {
   return #this.{asy::Stream::listen}((self::Extension|call::T* d) → Null {
     onData.call(d);
   });
 }
-static method Extension|get#call<T extends core::Object* = dynamic>(final asy::Stream<self::Extension|get#call::T*>* #this) → (core::Function*) →* asy::StreamSubscription<self::Extension|get#call::T*>*
+static method Extension|get#call<T extends core::Object* = dynamic>(lowered final asy::Stream<self::Extension|get#call::T*>* #this) → (core::Function*) →* asy::StreamSubscription<self::Extension|get#call::T*>*
   return (core::Function* onData) → asy::StreamSubscription<self::Extension|get#call::T*>* => self::Extension|call<self::Extension|get#call::T*>(#this, onData);
diff --git a/pkg/front_end/testcases/extensions/issue40596.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/issue40596.dart.strong.transformed.expect
index 1511135..7a2fd83 100644
--- a/pkg/front_end/testcases/extensions/issue40596.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/issue40596.dart.strong.transformed.expect
@@ -15,10 +15,10 @@
     core::print(s);
   } in self::Extension|call<core::String*>(#t1.{asy::StreamController::stream}, #t2);
 }
-static method Extension|call<T extends core::Object* = dynamic>(final asy::Stream<self::Extension|call::T*>* #this, core::Function* onData) → asy::StreamSubscription<self::Extension|call::T*>* {
+static method Extension|call<T extends core::Object* = dynamic>(lowered final asy::Stream<self::Extension|call::T*>* #this, core::Function* onData) → asy::StreamSubscription<self::Extension|call::T*>* {
   return #this.{asy::Stream::listen}((self::Extension|call::T* d) → Null {
     onData.call(d);
   });
 }
-static method Extension|get#call<T extends core::Object* = dynamic>(final asy::Stream<self::Extension|get#call::T*>* #this) → (core::Function*) →* asy::StreamSubscription<self::Extension|get#call::T*>*
+static method Extension|get#call<T extends core::Object* = dynamic>(lowered final asy::Stream<self::Extension|get#call::T*>* #this) → (core::Function*) →* asy::StreamSubscription<self::Extension|get#call::T*>*
   return (core::Function* onData) → asy::StreamSubscription<self::Extension|get#call::T*>* => self::Extension|call<self::Extension|get#call::T*>(#this, onData);
diff --git a/pkg/front_end/testcases/extensions/issue40713.dart.outline.expect b/pkg/front_end/testcases/extensions/issue40713.dart.outline.expect
index 9afde88..a5d8dfc 100644
--- a/pkg/front_end/testcases/extensions/issue40713.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/issue40713.dart.outline.expect
@@ -5,7 +5,7 @@
 extension SafeAccess<T extends core::Object* = dynamic> on core::Iterable<T*>* {
   get safeFirst = self::SafeAccess|get#safeFirst;
 }
-static method SafeAccess|get#safeFirst<T extends core::Object* = dynamic>(final core::Iterable<self::SafeAccess|get#safeFirst::T*>* #this) → self::SafeAccess|get#safeFirst::T*
+static method SafeAccess|get#safeFirst<T extends core::Object* = dynamic>(lowered final core::Iterable<self::SafeAccess|get#safeFirst::T*>* #this) → self::SafeAccess|get#safeFirst::T*
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/issue40713.dart.strong.expect b/pkg/front_end/testcases/extensions/issue40713.dart.strong.expect
index 13b8a9d..ef2e7dc 100644
--- a/pkg/front_end/testcases/extensions/issue40713.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/issue40713.dart.strong.expect
@@ -16,7 +16,7 @@
 extension SafeAccess<T extends core::Object* = dynamic> on core::Iterable<T*>* {
   get safeFirst = self::SafeAccess|get#safeFirst;
 }
-static method SafeAccess|get#safeFirst<T extends core::Object* = dynamic>(final core::Iterable<self::SafeAccess|get#safeFirst::T*>* #this) → self::SafeAccess|get#safeFirst::T* {
+static method SafeAccess|get#safeFirst<T extends core::Object* = dynamic>(lowered final core::Iterable<self::SafeAccess|get#safeFirst::T*>* #this) → self::SafeAccess|get#safeFirst::T* {
   return #this.{core::Iterable::isNotEmpty} ?{self::SafeAccess|get#safeFirst::T*} #this.{core::Iterable::first} : null;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/issue40816.dart.outline.expect b/pkg/front_end/testcases/extensions/issue40816.dart.outline.expect
index 6e864bd..6bf9120 100644
--- a/pkg/front_end/testcases/extensions/issue40816.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/issue40816.dart.outline.expect
@@ -34,9 +34,9 @@
   method foo = self::_extension#0|foo;
   tearoff foo = self::_extension#0|get#foo;
 }
-static method _extension#0|foo(final self::A* #this, self::A* a, self::B* b) → void
+static method _extension#0|foo(lowered final self::A* #this, self::A* a, self::B* b) → void
   ;
-static method _extension#0|get#foo(final self::A* #this) → (self::A*, self::B*) →* void
+static method _extension#0|get#foo(lowered final self::A* #this) → (self::A*, self::B*) →* void
   return (self::A* a, self::B* b) → void => self::_extension#0|foo(#this, a, b);
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/extensions/issue40816.dart.strong.expect b/pkg/front_end/testcases/extensions/issue40816.dart.strong.expect
index cc59049..70c933c 100644
--- a/pkg/front_end/testcases/extensions/issue40816.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/issue40816.dart.strong.expect
@@ -36,8 +36,8 @@
   method foo = self::_extension#0|foo;
   tearoff foo = self::_extension#0|get#foo;
 }
-static method _extension#0|foo(final self::A* #this, self::A* a, self::B* b) → void {}
-static method _extension#0|get#foo(final self::A* #this) → (self::A*, self::B*) →* void
+static method _extension#0|foo(lowered final self::A* #this, self::A* a, self::B* b) → void {}
+static method _extension#0|get#foo(lowered final self::A* #this) → (self::A*, self::B*) →* void
   return (self::A* a, self::B* b) → void => self::_extension#0|foo(#this, a, b);
 static method main() → void {
   dynamic a = new self::A::•();
diff --git a/pkg/front_end/testcases/extensions/issue40816.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/issue40816.dart.strong.transformed.expect
index cc59049..70c933c 100644
--- a/pkg/front_end/testcases/extensions/issue40816.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/issue40816.dart.strong.transformed.expect
@@ -36,8 +36,8 @@
   method foo = self::_extension#0|foo;
   tearoff foo = self::_extension#0|get#foo;
 }
-static method _extension#0|foo(final self::A* #this, self::A* a, self::B* b) → void {}
-static method _extension#0|get#foo(final self::A* #this) → (self::A*, self::B*) →* void
+static method _extension#0|foo(lowered final self::A* #this, self::A* a, self::B* b) → void {}
+static method _extension#0|get#foo(lowered final self::A* #this) → (self::A*, self::B*) →* void
   return (self::A* a, self::B* b) → void => self::_extension#0|foo(#this, a, b);
 static method main() → void {
   dynamic a = new self::A::•();
diff --git a/pkg/front_end/testcases/extensions/issue43218.dart.outline.expect b/pkg/front_end/testcases/extensions/issue43218.dart.outline.expect
index 193d91e..5ca5e4a 100644
--- a/pkg/front_end/testcases/extensions/issue43218.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/issue43218.dart.outline.expect
@@ -26,7 +26,7 @@
 extension Ext on self::C* {
   get id = self::Ext|get#id;
 }
-static method Ext|get#id(final self::C* #this) → core::int*
+static method Ext|get#id(lowered final self::C* #this) → core::int*
   ;
 static method test() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/issue43218.dart.strong.expect b/pkg/front_end/testcases/extensions/issue43218.dart.strong.expect
index c6208d5..fd80b29 100644
--- a/pkg/front_end/testcases/extensions/issue43218.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/issue43218.dart.strong.expect
@@ -36,7 +36,7 @@
 extension Ext on self::C* {
   get id = self::Ext|get#id;
 }
-static method Ext|get#id(final self::C* #this) → core::int*
+static method Ext|get#id(lowered final self::C* #this) → core::int*
   return #this.{self::C::value}.{core::num::+}(1);
 static method test() → dynamic {
   self::C* c = new self::C::•();
diff --git a/pkg/front_end/testcases/extensions/issue43218.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/issue43218.dart.strong.transformed.expect
index c6208d5..fd80b29 100644
--- a/pkg/front_end/testcases/extensions/issue43218.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/issue43218.dart.strong.transformed.expect
@@ -36,7 +36,7 @@
 extension Ext on self::C* {
   get id = self::Ext|get#id;
 }
-static method Ext|get#id(final self::C* #this) → core::int*
+static method Ext|get#id(lowered final self::C* #this) → core::int*
   return #this.{self::C::value}.{core::num::+}(1);
 static method test() → dynamic {
   self::C* c = new self::C::•();
diff --git a/pkg/front_end/testcases/extensions/language_issue1182.dart.outline.expect b/pkg/front_end/testcases/extensions/language_issue1182.dart.outline.expect
index c989ba2..44bd9dc 100644
--- a/pkg/front_end/testcases/extensions/language_issue1182.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/language_issue1182.dart.outline.expect
@@ -21,7 +21,7 @@
 extension Test<T extends core::Object* = dynamic> on T* {
   get test = self::Test|get#test;
 }
-static method Test|get#test<T extends core::Object* = dynamic>(final self::Test|get#test::T* #this) → (self::Test|get#test::T*) →* self::Test|get#test::T*
+static method Test|get#test<T extends core::Object* = dynamic>(lowered final self::Test|get#test::T* #this) → (self::Test|get#test::T*) →* self::Test|get#test::T*
   ;
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/extensions/language_issue1182.dart.strong.expect b/pkg/front_end/testcases/extensions/language_issue1182.dart.strong.expect
index 17bdb9d..6f515b5 100644
--- a/pkg/front_end/testcases/extensions/language_issue1182.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/language_issue1182.dart.strong.expect
@@ -32,6 +32,6 @@
 extension Test<T extends core::Object* = dynamic> on T* {
   get test = self::Test|get#test;
 }
-static method Test|get#test<T extends core::Object* = dynamic>(final self::Test|get#test::T* #this) → (self::Test|get#test::T*) →* self::Test|get#test::T*
+static method Test|get#test<T extends core::Object* = dynamic>(lowered final self::Test|get#test::T* #this) → (self::Test|get#test::T*) →* self::Test|get#test::T*
   return (self::Test|get#test::T* a) → self::Test|get#test::T* => #this;
 static method main() → void {}
diff --git a/pkg/front_end/testcases/extensions/language_issue1182.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/language_issue1182.dart.strong.transformed.expect
index 17bdb9d..6f515b5 100644
--- a/pkg/front_end/testcases/extensions/language_issue1182.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/language_issue1182.dart.strong.transformed.expect
@@ -32,6 +32,6 @@
 extension Test<T extends core::Object* = dynamic> on T* {
   get test = self::Test|get#test;
 }
-static method Test|get#test<T extends core::Object* = dynamic>(final self::Test|get#test::T* #this) → (self::Test|get#test::T*) →* self::Test|get#test::T*
+static method Test|get#test<T extends core::Object* = dynamic>(lowered final self::Test|get#test::T* #this) → (self::Test|get#test::T*) →* self::Test|get#test::T*
   return (self::Test|get#test::T* a) → self::Test|get#test::T* => #this;
 static method main() → void {}
diff --git a/pkg/front_end/testcases/extensions/missing_toplevel.dart.outline.expect b/pkg/front_end/testcases/extensions/missing_toplevel.dart.outline.expect
index f116af6..5cbfe17 100644
--- a/pkg/front_end/testcases/extensions/missing_toplevel.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/missing_toplevel.dart.outline.expect
@@ -21,7 +21,7 @@
 }
 static field self::Class* c;
 static field dynamic missingGetter;
-static method Extension|set#setter(final self::Class* #this, core::int* value) → void
+static method Extension|set#setter(lowered final self::Class* #this, core::int* value) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/missing_toplevel.dart.strong.expect b/pkg/front_end/testcases/extensions/missing_toplevel.dart.strong.expect
index f17f432..c79acde 100644
--- a/pkg/front_end/testcases/extensions/missing_toplevel.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/missing_toplevel.dart.strong.expect
@@ -35,5 +35,5 @@
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'setter'.
 var missingGetter = c.setter += 42;
                       ^^^^^^".+(42) as{TypeError,ForDynamic} core::int* in let final void #t3 = self::Extension|set#setter(#t1, #t2) in #t2;
-static method Extension|set#setter(final self::Class* #this, core::int* value) → void {}
+static method Extension|set#setter(lowered final self::Class* #this, core::int* value) → void {}
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/missing_toplevel.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/missing_toplevel.dart.strong.transformed.expect
index bae62c7..0a31620 100644
--- a/pkg/front_end/testcases/extensions/missing_toplevel.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/missing_toplevel.dart.strong.transformed.expect
@@ -35,5 +35,5 @@
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'setter'.
 var missingGetter = c.setter += 42;
                       ^^^^^^".+(42) as{TypeError,ForDynamic} core::int* in let final void #t3 = self::Extension|set#setter(#t1, #t2) in #t2;
-static method Extension|set#setter(final self::Class* #this, core::int* value) → void {}
+static method Extension|set#setter(lowered final self::Class* #this, core::int* value) → void {}
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/nested_on_types.dart.outline.expect b/pkg/front_end/testcases/extensions/nested_on_types.dart.outline.expect
index e6d42c5..b5fda8d 100644
--- a/pkg/front_end/testcases/extensions/nested_on_types.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/nested_on_types.dart.outline.expect
@@ -22,13 +22,13 @@
   method method2 = self::Extension|method2;
   tearoff method2 = self::Extension|get#method2;
 }
-static method Extension|method1<T extends core::Object* = dynamic>(final self::A<self::A<self::Extension|method1::T*>*>* #this) → dynamic
+static method Extension|method1<T extends core::Object* = dynamic>(lowered final self::A<self::A<self::Extension|method1::T*>*>* #this) → dynamic
   ;
-static method Extension|get#method1<T extends core::Object* = dynamic>(final self::A<self::A<self::Extension|get#method1::T*>*>* #this) → () →* dynamic
+static method Extension|get#method1<T extends core::Object* = dynamic>(lowered final self::A<self::A<self::Extension|get#method1::T*>*>* #this) → () →* dynamic
   return () → dynamic => self::Extension|method1<self::Extension|get#method1::T*>(#this);
-static method Extension|method2<T extends core::Object* = dynamic, A extends core::Object* = dynamic>(final self::A<self::A<self::Extension|method2::T*>*>* #this, self::Extension|method2::A* a) → dynamic
+static method Extension|method2<T extends core::Object* = dynamic, A extends core::Object* = dynamic>(lowered final self::A<self::A<self::Extension|method2::T*>*>* #this, self::Extension|method2::A* a) → dynamic
   ;
-static method Extension|get#method2<T extends core::Object* = dynamic>(final self::A<self::A<self::Extension|get#method2::T*>*>* #this) → <A extends core::Object* = dynamic>(A*) →* dynamic
+static method Extension|get#method2<T extends core::Object* = dynamic>(lowered final self::A<self::A<self::Extension|get#method2::T*>*>* #this) → <A extends core::Object* = dynamic>(A*) →* dynamic
   return <A extends core::Object* = dynamic>(A* a) → dynamic => self::Extension|method2<self::Extension|get#method2::T*, A*>(#this, a);
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/nested_on_types.dart.strong.expect b/pkg/front_end/testcases/extensions/nested_on_types.dart.strong.expect
index 271fc66..001a0b6 100644
--- a/pkg/front_end/testcases/extensions/nested_on_types.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/nested_on_types.dart.strong.expect
@@ -23,10 +23,10 @@
   method method2 = self::Extension|method2;
   tearoff method2 = self::Extension|get#method2;
 }
-static method Extension|method1<T extends core::Object* = dynamic>(final self::A<self::A<self::Extension|method1::T*>*>* #this) → dynamic {}
-static method Extension|get#method1<T extends core::Object* = dynamic>(final self::A<self::A<self::Extension|get#method1::T*>*>* #this) → () →* dynamic
+static method Extension|method1<T extends core::Object* = dynamic>(lowered final self::A<self::A<self::Extension|method1::T*>*>* #this) → dynamic {}
+static method Extension|get#method1<T extends core::Object* = dynamic>(lowered final self::A<self::A<self::Extension|get#method1::T*>*>* #this) → () →* dynamic
   return () → dynamic => self::Extension|method1<self::Extension|get#method1::T*>(#this);
-static method Extension|method2<T extends core::Object* = dynamic, A extends core::Object* = dynamic>(final self::A<self::A<self::Extension|method2::T*>*>* #this, self::Extension|method2::A* a) → dynamic {}
-static method Extension|get#method2<T extends core::Object* = dynamic>(final self::A<self::A<self::Extension|get#method2::T*>*>* #this) → <A extends core::Object* = dynamic>(A*) →* dynamic
+static method Extension|method2<T extends core::Object* = dynamic, A extends core::Object* = dynamic>(lowered final self::A<self::A<self::Extension|method2::T*>*>* #this, self::Extension|method2::A* a) → dynamic {}
+static method Extension|get#method2<T extends core::Object* = dynamic>(lowered final self::A<self::A<self::Extension|get#method2::T*>*>* #this) → <A extends core::Object* = dynamic>(A*) →* dynamic
   return <A extends core::Object* = dynamic>(A* a) → dynamic => self::Extension|method2<self::Extension|get#method2::T*, A*>(#this, a);
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/nested_on_types.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/nested_on_types.dart.strong.transformed.expect
index 271fc66..001a0b6 100644
--- a/pkg/front_end/testcases/extensions/nested_on_types.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/nested_on_types.dart.strong.transformed.expect
@@ -23,10 +23,10 @@
   method method2 = self::Extension|method2;
   tearoff method2 = self::Extension|get#method2;
 }
-static method Extension|method1<T extends core::Object* = dynamic>(final self::A<self::A<self::Extension|method1::T*>*>* #this) → dynamic {}
-static method Extension|get#method1<T extends core::Object* = dynamic>(final self::A<self::A<self::Extension|get#method1::T*>*>* #this) → () →* dynamic
+static method Extension|method1<T extends core::Object* = dynamic>(lowered final self::A<self::A<self::Extension|method1::T*>*>* #this) → dynamic {}
+static method Extension|get#method1<T extends core::Object* = dynamic>(lowered final self::A<self::A<self::Extension|get#method1::T*>*>* #this) → () →* dynamic
   return () → dynamic => self::Extension|method1<self::Extension|get#method1::T*>(#this);
-static method Extension|method2<T extends core::Object* = dynamic, A extends core::Object* = dynamic>(final self::A<self::A<self::Extension|method2::T*>*>* #this, self::Extension|method2::A* a) → dynamic {}
-static method Extension|get#method2<T extends core::Object* = dynamic>(final self::A<self::A<self::Extension|get#method2::T*>*>* #this) → <A extends core::Object* = dynamic>(A*) →* dynamic
+static method Extension|method2<T extends core::Object* = dynamic, A extends core::Object* = dynamic>(lowered final self::A<self::A<self::Extension|method2::T*>*>* #this, self::Extension|method2::A* a) → dynamic {}
+static method Extension|get#method2<T extends core::Object* = dynamic>(lowered final self::A<self::A<self::Extension|get#method2::T*>*>* #this) → <A extends core::Object* = dynamic>(A*) →* dynamic
   return <A extends core::Object* = dynamic>(A* a) → dynamic => self::Extension|method2<self::Extension|get#method2::T*, A*>(#this, a);
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/null_aware.dart.outline.expect b/pkg/front_end/testcases/extensions/null_aware.dart.outline.expect
index ec1bb35..c3b7817 100644
--- a/pkg/front_end/testcases/extensions/null_aware.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/null_aware.dart.outline.expect
@@ -25,17 +25,17 @@
   tearoff testImplicitThis = self::Extension|get#testImplicitThis;
   set property = self::Extension|set#property;
 }
-static method Extension|get#property(final self::Class* #this) → core::int*
+static method Extension|get#property(lowered final self::Class* #this) → core::int*
   ;
-static method Extension|set#property(final self::Class* #this, core::int* value) → void
+static method Extension|set#property(lowered final self::Class* #this, core::int* value) → void
   ;
-static method Extension|method(final self::Class* #this) → core::int*
+static method Extension|method(lowered final self::Class* #this) → core::int*
   ;
-static method Extension|get#method(final self::Class* #this) → () →* core::int*
+static method Extension|get#method(lowered final self::Class* #this) → () →* core::int*
   return () → core::int* => self::Extension|method(#this);
-static method Extension|testImplicitThis(final self::Class* #this) → dynamic
+static method Extension|testImplicitThis(lowered final self::Class* #this) → dynamic
   ;
-static method Extension|get#testImplicitThis(final self::Class* #this) → () →* dynamic
+static method Extension|get#testImplicitThis(lowered final self::Class* #this) → () →* dynamic
   return () → dynamic => self::Extension|testImplicitThis(#this);
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/null_aware.dart.strong.expect b/pkg/front_end/testcases/extensions/null_aware.dart.strong.expect
index fb975d6..9cff1f1 100644
--- a/pkg/front_end/testcases/extensions/null_aware.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/null_aware.dart.strong.expect
@@ -26,21 +26,21 @@
   tearoff testImplicitThis = self::Extension|get#testImplicitThis;
   set property = self::Extension|set#property;
 }
-static method Extension|get#property(final self::Class* #this) → core::int*
+static method Extension|get#property(lowered final self::Class* #this) → core::int*
   return #this.{self::Class::field};
-static method Extension|set#property(final self::Class* #this, core::int* value) → void {
+static method Extension|set#property(lowered final self::Class* #this, core::int* value) → void {
   #this.{self::Class::field} = value;
 }
-static method Extension|method(final self::Class* #this) → core::int*
+static method Extension|method(lowered final self::Class* #this) → core::int*
   return #this.{self::Class::field};
-static method Extension|get#method(final self::Class* #this) → () →* core::int*
+static method Extension|get#method(lowered final self::Class* #this) → () →* core::int*
   return () → core::int* => self::Extension|method(#this);
-static method Extension|testImplicitThis(final self::Class* #this) → dynamic {
+static method Extension|testImplicitThis(lowered final self::Class* #this) → dynamic {
   self::expect(null, self::Extension|get#property(#this));
   self::expect(42, let final core::int* #t1 = self::Extension|get#property(#this) in #t1.{core::num::==}(null) ?{core::int*} let final core::int* #t2 = 42 in let final void #t3 = self::Extension|set#property(#this, #t2) in #t2 : #t1);
   self::expect(42, let final core::int* #t4 = self::Extension|get#property(#this) in #t4.{core::num::==}(null) ?{core::int*} let final core::int* #t5 = 87 in let final void #t6 = self::Extension|set#property(#this, #t5) in #t5 : #t4);
 }
-static method Extension|get#testImplicitThis(final self::Class* #this) → () →* dynamic
+static method Extension|get#testImplicitThis(lowered final self::Class* #this) → () →* dynamic
   return () → dynamic => self::Extension|testImplicitThis(#this);
 static method main() → dynamic {
   self::Class* c;
diff --git a/pkg/front_end/testcases/extensions/null_aware.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/null_aware.dart.strong.transformed.expect
index 4697d39..afe8026 100644
--- a/pkg/front_end/testcases/extensions/null_aware.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/null_aware.dart.strong.transformed.expect
@@ -26,21 +26,21 @@
   tearoff testImplicitThis = self::Extension|get#testImplicitThis;
   set property = self::Extension|set#property;
 }
-static method Extension|get#property(final self::Class* #this) → core::int*
+static method Extension|get#property(lowered final self::Class* #this) → core::int*
   return #this.{self::Class::field};
-static method Extension|set#property(final self::Class* #this, core::int* value) → void {
+static method Extension|set#property(lowered final self::Class* #this, core::int* value) → void {
   #this.{self::Class::field} = value;
 }
-static method Extension|method(final self::Class* #this) → core::int*
+static method Extension|method(lowered final self::Class* #this) → core::int*
   return #this.{self::Class::field};
-static method Extension|get#method(final self::Class* #this) → () →* core::int*
+static method Extension|get#method(lowered final self::Class* #this) → () →* core::int*
   return () → core::int* => self::Extension|method(#this);
-static method Extension|testImplicitThis(final self::Class* #this) → dynamic {
+static method Extension|testImplicitThis(lowered final self::Class* #this) → dynamic {
   self::expect(null, self::Extension|get#property(#this));
   self::expect(42, let final core::int* #t1 = self::Extension|get#property(#this) in #t1.{core::num::==}(null) ?{core::int*} let final core::int* #t2 = 42 in let final void #t3 = self::Extension|set#property(#this, #t2) in #t2 : #t1);
   self::expect(42, let final core::int* #t4 = self::Extension|get#property(#this) in #t4.{core::num::==}(null) ?{core::int*} let final core::int* #t5 = 87 in let final void #t6 = self::Extension|set#property(#this, #t5) in #t5 : #t4);
 }
-static method Extension|get#testImplicitThis(final self::Class* #this) → () →* dynamic
+static method Extension|get#testImplicitThis(lowered final self::Class* #this) → () →* dynamic
   return () → dynamic => self::Extension|testImplicitThis(#this);
 static method main() → dynamic {
   self::Class* c;
diff --git a/pkg/front_end/testcases/extensions/on_function_type.dart.outline.expect b/pkg/front_end/testcases/extensions/on_function_type.dart.outline.expect
index 6e6c978..3447999 100644
--- a/pkg/front_end/testcases/extensions/on_function_type.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/on_function_type.dart.outline.expect
@@ -27,11 +27,11 @@
 extension _extension#1<T extends self::Class<T*>* = self::Class<dynamic>*> on <S extends T* = dynamic>(T*, S*) →* dynamic {
   get parameterType = self::_extension#1|get#parameterType;
 }
-static method _extension#0|get#returnType<R extends core::Object* = dynamic, T extends core::Object* = dynamic>(final (self::_extension#0|get#returnType::T*) →* self::_extension#0|get#returnType::R* #this) → core::Type*
+static method _extension#0|get#returnType<R extends core::Object* = dynamic, T extends core::Object* = dynamic>(lowered final (self::_extension#0|get#returnType::T*) →* self::_extension#0|get#returnType::R* #this) → core::Type*
   ;
-static method _extension#0|get#parameterType<R extends core::Object* = dynamic, T extends core::Object* = dynamic>(final (self::_extension#0|get#parameterType::T*) →* self::_extension#0|get#parameterType::R* #this) → core::Type*
+static method _extension#0|get#parameterType<R extends core::Object* = dynamic, T extends core::Object* = dynamic>(lowered final (self::_extension#0|get#parameterType::T*) →* self::_extension#0|get#parameterType::R* #this) → core::Type*
   ;
-static method _extension#1|get#parameterType<T extends self::Class<self::_extension#1|get#parameterType::T*>* = self::Class<dynamic>*>(final <S extends self::_extension#1|get#parameterType::T* = dynamic>(self::_extension#1|get#parameterType::T*, S*) →* dynamic #this) → core::Type*
+static method _extension#1|get#parameterType<T extends self::Class<self::_extension#1|get#parameterType::T*>* = self::Class<dynamic>*>(lowered final <S extends self::_extension#1|get#parameterType::T* = dynamic>(self::_extension#1|get#parameterType::T*, S*) →* dynamic #this) → core::Type*
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/on_function_type.dart.strong.expect b/pkg/front_end/testcases/extensions/on_function_type.dart.strong.expect
index 59a3ec8..9c1f826 100644
--- a/pkg/front_end/testcases/extensions/on_function_type.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/on_function_type.dart.strong.expect
@@ -29,11 +29,11 @@
 extension _extension#1<T extends self::Class<T*>* = self::Class<dynamic>*> on <S extends T* = dynamic>(T*, S*) →* dynamic {
   get parameterType = self::_extension#1|get#parameterType;
 }
-static method _extension#0|get#returnType<R extends core::Object* = dynamic, T extends core::Object* = dynamic>(final (self::_extension#0|get#returnType::T*) →* self::_extension#0|get#returnType::R* #this) → core::Type*
+static method _extension#0|get#returnType<R extends core::Object* = dynamic, T extends core::Object* = dynamic>(lowered final (self::_extension#0|get#returnType::T*) →* self::_extension#0|get#returnType::R* #this) → core::Type*
   return self::_extension#0|get#returnType::R*;
-static method _extension#0|get#parameterType<R extends core::Object* = dynamic, T extends core::Object* = dynamic>(final (self::_extension#0|get#parameterType::T*) →* self::_extension#0|get#parameterType::R* #this) → core::Type*
+static method _extension#0|get#parameterType<R extends core::Object* = dynamic, T extends core::Object* = dynamic>(lowered final (self::_extension#0|get#parameterType::T*) →* self::_extension#0|get#parameterType::R* #this) → core::Type*
   return self::_extension#0|get#parameterType::T*;
-static method _extension#1|get#parameterType<T extends self::Class<self::_extension#1|get#parameterType::T*>* = self::Class<dynamic>*>(final <S extends self::_extension#1|get#parameterType::T* = dynamic>(self::_extension#1|get#parameterType::T*, S*) →* dynamic #this) → core::Type*
+static method _extension#1|get#parameterType<T extends self::Class<self::_extension#1|get#parameterType::T*>* = self::Class<dynamic>*>(lowered final <S extends self::_extension#1|get#parameterType::T* = dynamic>(self::_extension#1|get#parameterType::T*, S*) →* dynamic #this) → core::Type*
   return self::_extension#1|get#parameterType::T*;
 static method main() → dynamic {
   function local1(core::int* i) → core::int*
diff --git a/pkg/front_end/testcases/extensions/on_function_type.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/on_function_type.dart.strong.transformed.expect
index 59a3ec8..9c1f826 100644
--- a/pkg/front_end/testcases/extensions/on_function_type.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/on_function_type.dart.strong.transformed.expect
@@ -29,11 +29,11 @@
 extension _extension#1<T extends self::Class<T*>* = self::Class<dynamic>*> on <S extends T* = dynamic>(T*, S*) →* dynamic {
   get parameterType = self::_extension#1|get#parameterType;
 }
-static method _extension#0|get#returnType<R extends core::Object* = dynamic, T extends core::Object* = dynamic>(final (self::_extension#0|get#returnType::T*) →* self::_extension#0|get#returnType::R* #this) → core::Type*
+static method _extension#0|get#returnType<R extends core::Object* = dynamic, T extends core::Object* = dynamic>(lowered final (self::_extension#0|get#returnType::T*) →* self::_extension#0|get#returnType::R* #this) → core::Type*
   return self::_extension#0|get#returnType::R*;
-static method _extension#0|get#parameterType<R extends core::Object* = dynamic, T extends core::Object* = dynamic>(final (self::_extension#0|get#parameterType::T*) →* self::_extension#0|get#parameterType::R* #this) → core::Type*
+static method _extension#0|get#parameterType<R extends core::Object* = dynamic, T extends core::Object* = dynamic>(lowered final (self::_extension#0|get#parameterType::T*) →* self::_extension#0|get#parameterType::R* #this) → core::Type*
   return self::_extension#0|get#parameterType::T*;
-static method _extension#1|get#parameterType<T extends self::Class<self::_extension#1|get#parameterType::T*>* = self::Class<dynamic>*>(final <S extends self::_extension#1|get#parameterType::T* = dynamic>(self::_extension#1|get#parameterType::T*, S*) →* dynamic #this) → core::Type*
+static method _extension#1|get#parameterType<T extends self::Class<self::_extension#1|get#parameterType::T*>* = self::Class<dynamic>*>(lowered final <S extends self::_extension#1|get#parameterType::T* = dynamic>(self::_extension#1|get#parameterType::T*, S*) →* dynamic #this) → core::Type*
   return self::_extension#1|get#parameterType::T*;
 static method main() → dynamic {
   function local1(core::int* i) → core::int*
diff --git a/pkg/front_end/testcases/extensions/on_type_inference.dart.outline.expect b/pkg/front_end/testcases/extensions/on_type_inference.dart.outline.expect
index 2753b81..f2746bb 100644
--- a/pkg/front_end/testcases/extensions/on_type_inference.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/on_type_inference.dart.outline.expect
@@ -14,17 +14,17 @@
   method best = self::BestSpec|best;
   tearoff best = self::BestSpec|get#best;
 }
-static method BestCom|best<T extends core::num* = core::num*>(final core::Iterable<self::BestCom|best::T*>* #this) → self::BestCom|best::T*
+static method BestCom|best<T extends core::num* = core::num*>(lowered final core::Iterable<self::BestCom|best::T*>* #this) → self::BestCom|best::T*
   ;
-static method BestCom|get#best<T extends core::num* = core::num*>(final core::Iterable<self::BestCom|get#best::T*>* #this) → () →* self::BestCom|get#best::T*
+static method BestCom|get#best<T extends core::num* = core::num*>(lowered final core::Iterable<self::BestCom|get#best::T*>* #this) → () →* self::BestCom|get#best::T*
   return () → self::BestCom|get#best::T* => self::BestCom|best<self::BestCom|get#best::T*>(#this);
-static method BestList|best<T extends core::Object* = dynamic>(final core::List<self::BestList|best::T*>* #this) → self::BestList|best::T*
+static method BestList|best<T extends core::Object* = dynamic>(lowered final core::List<self::BestList|best::T*>* #this) → self::BestList|best::T*
   ;
-static method BestList|get#best<T extends core::Object* = dynamic>(final core::List<self::BestList|get#best::T*>* #this) → () →* self::BestList|get#best::T*
+static method BestList|get#best<T extends core::Object* = dynamic>(lowered final core::List<self::BestList|get#best::T*>* #this) → () →* self::BestList|get#best::T*
   return () → self::BestList|get#best::T* => self::BestList|best<self::BestList|get#best::T*>(#this);
-static method BestSpec|best(final core::List<core::num*>* #this) → core::num*
+static method BestSpec|best(lowered final core::List<core::num*>* #this) → core::num*
   ;
-static method BestSpec|get#best(final core::List<core::num*>* #this) → () →* core::num*
+static method BestSpec|get#best(lowered final core::List<core::num*>* #this) → () →* core::num*
   return () → core::num* => self::BestSpec|best(#this);
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/on_type_inference.dart.strong.expect b/pkg/front_end/testcases/extensions/on_type_inference.dart.strong.expect
index b0990ec..75adac2 100644
--- a/pkg/front_end/testcases/extensions/on_type_inference.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/on_type_inference.dart.strong.expect
@@ -14,17 +14,17 @@
   method best = self::BestSpec|best;
   tearoff best = self::BestSpec|get#best;
 }
-static method BestCom|best<T extends core::num* = core::num*>(final core::Iterable<self::BestCom|best::T*>* #this) → self::BestCom|best::T*
+static method BestCom|best<T extends core::num* = core::num*>(lowered final core::Iterable<self::BestCom|best::T*>* #this) → self::BestCom|best::T*
   return null;
-static method BestCom|get#best<T extends core::num* = core::num*>(final core::Iterable<self::BestCom|get#best::T*>* #this) → () →* self::BestCom|get#best::T*
+static method BestCom|get#best<T extends core::num* = core::num*>(lowered final core::Iterable<self::BestCom|get#best::T*>* #this) → () →* self::BestCom|get#best::T*
   return () → self::BestCom|get#best::T* => self::BestCom|best<self::BestCom|get#best::T*>(#this);
-static method BestList|best<T extends core::Object* = dynamic>(final core::List<self::BestList|best::T*>* #this) → self::BestList|best::T*
+static method BestList|best<T extends core::Object* = dynamic>(lowered final core::List<self::BestList|best::T*>* #this) → self::BestList|best::T*
   return null;
-static method BestList|get#best<T extends core::Object* = dynamic>(final core::List<self::BestList|get#best::T*>* #this) → () →* self::BestList|get#best::T*
+static method BestList|get#best<T extends core::Object* = dynamic>(lowered final core::List<self::BestList|get#best::T*>* #this) → () →* self::BestList|get#best::T*
   return () → self::BestList|get#best::T* => self::BestList|best<self::BestList|get#best::T*>(#this);
-static method BestSpec|best(final core::List<core::num*>* #this) → core::num*
+static method BestSpec|best(lowered final core::List<core::num*>* #this) → core::num*
   return null;
-static method BestSpec|get#best(final core::List<core::num*>* #this) → () →* core::num*
+static method BestSpec|get#best(lowered final core::List<core::num*>* #this) → () →* core::num*
   return () → core::num* => self::BestSpec|best(#this);
 static method main() → dynamic {
   core::List<core::int*>* x;
diff --git a/pkg/front_end/testcases/extensions/on_type_inference.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/on_type_inference.dart.strong.transformed.expect
index b0990ec..75adac2 100644
--- a/pkg/front_end/testcases/extensions/on_type_inference.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/on_type_inference.dart.strong.transformed.expect
@@ -14,17 +14,17 @@
   method best = self::BestSpec|best;
   tearoff best = self::BestSpec|get#best;
 }
-static method BestCom|best<T extends core::num* = core::num*>(final core::Iterable<self::BestCom|best::T*>* #this) → self::BestCom|best::T*
+static method BestCom|best<T extends core::num* = core::num*>(lowered final core::Iterable<self::BestCom|best::T*>* #this) → self::BestCom|best::T*
   return null;
-static method BestCom|get#best<T extends core::num* = core::num*>(final core::Iterable<self::BestCom|get#best::T*>* #this) → () →* self::BestCom|get#best::T*
+static method BestCom|get#best<T extends core::num* = core::num*>(lowered final core::Iterable<self::BestCom|get#best::T*>* #this) → () →* self::BestCom|get#best::T*
   return () → self::BestCom|get#best::T* => self::BestCom|best<self::BestCom|get#best::T*>(#this);
-static method BestList|best<T extends core::Object* = dynamic>(final core::List<self::BestList|best::T*>* #this) → self::BestList|best::T*
+static method BestList|best<T extends core::Object* = dynamic>(lowered final core::List<self::BestList|best::T*>* #this) → self::BestList|best::T*
   return null;
-static method BestList|get#best<T extends core::Object* = dynamic>(final core::List<self::BestList|get#best::T*>* #this) → () →* self::BestList|get#best::T*
+static method BestList|get#best<T extends core::Object* = dynamic>(lowered final core::List<self::BestList|get#best::T*>* #this) → () →* self::BestList|get#best::T*
   return () → self::BestList|get#best::T* => self::BestList|best<self::BestList|get#best::T*>(#this);
-static method BestSpec|best(final core::List<core::num*>* #this) → core::num*
+static method BestSpec|best(lowered final core::List<core::num*>* #this) → core::num*
   return null;
-static method BestSpec|get#best(final core::List<core::num*>* #this) → () →* core::num*
+static method BestSpec|get#best(lowered final core::List<core::num*>* #this) → () →* core::num*
   return () → core::num* => self::BestSpec|best(#this);
 static method main() → dynamic {
   core::List<core::int*>* x;
diff --git a/pkg/front_end/testcases/extensions/on_type_variable_inference.dart.outline.expect b/pkg/front_end/testcases/extensions/on_type_variable_inference.dart.outline.expect
index 2681a86..3dd1c35 100644
--- a/pkg/front_end/testcases/extensions/on_type_variable_inference.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/on_type_variable_inference.dart.outline.expect
@@ -44,13 +44,13 @@
   get property = self::Extension|get#property;
   set property = self::Extension|set#property;
 }
-static method Extension|method<T extends self::Struct* = self::Struct*>(final self::Extension|method::T* #this) → self::Extension|method::T*
+static method Extension|method<T extends self::Struct* = self::Struct*>(lowered final self::Extension|method::T* #this) → self::Extension|method::T*
   ;
-static method Extension|get#method<T extends self::Struct* = self::Struct*>(final self::Extension|get#method::T* #this) → () →* self::Extension|get#method::T*
+static method Extension|get#method<T extends self::Struct* = self::Struct*>(lowered final 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);
-static method Extension|get#property<T extends self::Struct* = self::Struct*>(final self::Extension|get#property::T* #this) → self::Extension|get#property::T*
+static method Extension|get#property<T extends self::Struct* = self::Struct*>(lowered final self::Extension|get#property::T* #this) → self::Extension|get#property::T*
   ;
-static method Extension|set#property<T extends self::Struct* = self::Struct*>(final self::Extension|set#property::T* #this, self::Extension|set#property::T* value) → void
+static method Extension|set#property<T extends self::Struct* = self::Struct*>(lowered final self::Extension|set#property::T* #this, self::Extension|set#property::T* value) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/on_type_variable_inference.dart.strong.expect b/pkg/front_end/testcases/extensions/on_type_variable_inference.dart.strong.expect
index 0558246..21907d2 100644
--- a/pkg/front_end/testcases/extensions/on_type_variable_inference.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/on_type_variable_inference.dart.strong.expect
@@ -87,13 +87,13 @@
   get property = self::Extension|get#property;
   set property = self::Extension|set#property;
 }
-static method Extension|method<T extends self::Struct* = self::Struct*>(final self::Extension|method::T* #this) → self::Extension|method::T*
+static method Extension|method<T extends self::Struct* = self::Struct*>(lowered final self::Extension|method::T* #this) → self::Extension|method::T*
   return #this;
-static method Extension|get#method<T extends self::Struct* = self::Struct*>(final self::Extension|get#method::T* #this) → () →* self::Extension|get#method::T*
+static method Extension|get#method<T extends self::Struct* = self::Struct*>(lowered final 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);
-static method Extension|get#property<T extends self::Struct* = self::Struct*>(final self::Extension|get#property::T* #this) → self::Extension|get#property::T*
+static method Extension|get#property<T extends self::Struct* = self::Struct*>(lowered final self::Extension|get#property::T* #this) → self::Extension|get#property::T*
   return #this;
-static method Extension|set#property<T extends self::Struct* = self::Struct*>(final self::Extension|set#property::T* #this, self::Extension|set#property::T* value) → void {}
+static method Extension|set#property<T extends self::Struct* = self::Struct*>(lowered final self::Extension|set#property::T* #this, self::Extension|set#property::T* value) → void {}
 static method main() → dynamic {
   self::Struct* struct;
   self::StructA* structA;
diff --git a/pkg/front_end/testcases/extensions/on_type_variable_inference.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/on_type_variable_inference.dart.strong.transformed.expect
index 0558246..21907d2 100644
--- a/pkg/front_end/testcases/extensions/on_type_variable_inference.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/on_type_variable_inference.dart.strong.transformed.expect
@@ -87,13 +87,13 @@
   get property = self::Extension|get#property;
   set property = self::Extension|set#property;
 }
-static method Extension|method<T extends self::Struct* = self::Struct*>(final self::Extension|method::T* #this) → self::Extension|method::T*
+static method Extension|method<T extends self::Struct* = self::Struct*>(lowered final self::Extension|method::T* #this) → self::Extension|method::T*
   return #this;
-static method Extension|get#method<T extends self::Struct* = self::Struct*>(final self::Extension|get#method::T* #this) → () →* self::Extension|get#method::T*
+static method Extension|get#method<T extends self::Struct* = self::Struct*>(lowered final 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);
-static method Extension|get#property<T extends self::Struct* = self::Struct*>(final self::Extension|get#property::T* #this) → self::Extension|get#property::T*
+static method Extension|get#property<T extends self::Struct* = self::Struct*>(lowered final self::Extension|get#property::T* #this) → self::Extension|get#property::T*
   return #this;
-static method Extension|set#property<T extends self::Struct* = self::Struct*>(final self::Extension|set#property::T* #this, self::Extension|set#property::T* value) → void {}
+static method Extension|set#property<T extends self::Struct* = self::Struct*>(lowered final self::Extension|set#property::T* #this, self::Extension|set#property::T* value) → void {}
 static method main() → dynamic {
   self::Struct* struct;
   self::StructA* structA;
diff --git a/pkg/front_end/testcases/extensions/operators.dart.outline.expect b/pkg/front_end/testcases/extensions/operators.dart.outline.expect
index eeac9a5..479c1d6 100644
--- a/pkg/front_end/testcases/extensions/operators.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/operators.dart.outline.expect
@@ -33,11 +33,11 @@
   operator - = self::Operators|-;
   operator unary- = self::Operators|unary-;
 }
-static method Operators|+(final self::Complex* #this, self::Complex* other) → self::Complex*
+static method Operators|+(lowered final self::Complex* #this, self::Complex* other) → self::Complex*
   ;
-static method Operators|-(final self::Complex* #this, self::Complex* other) → self::Complex*
+static method Operators|-(lowered final self::Complex* #this, self::Complex* other) → self::Complex*
   ;
-static method Operators|unary-(final self::Complex* #this) → self::Complex*
+static method Operators|unary-(lowered final self::Complex* #this) → self::Complex*
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/operators.dart.strong.expect b/pkg/front_end/testcases/extensions/operators.dart.strong.expect
index 62682da..271cbb1 100644
--- a/pkg/front_end/testcases/extensions/operators.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/operators.dart.strong.expect
@@ -50,11 +50,11 @@
   operator - = self::Operators|-;
   operator unary- = self::Operators|unary-;
 }
-static method Operators|+(final self::Complex* #this, self::Complex* other) → self::Complex*
+static method Operators|+(lowered final self::Complex* #this, self::Complex* other) → self::Complex*
   return #this.{self::Complex::add}(other);
-static method Operators|-(final self::Complex* #this, self::Complex* other) → self::Complex*
+static method Operators|-(lowered final self::Complex* #this, self::Complex* other) → self::Complex*
   return #this.{self::Complex::sub}(other);
-static method Operators|unary-(final self::Complex* #this) → self::Complex*
+static method Operators|unary-(lowered final self::Complex* #this) → self::Complex*
   return #this.{self::Complex::negate}();
 static method main() → dynamic {
   self::implicit();
diff --git a/pkg/front_end/testcases/extensions/operators.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/operators.dart.strong.transformed.expect
index 62682da..271cbb1 100644
--- a/pkg/front_end/testcases/extensions/operators.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/operators.dart.strong.transformed.expect
@@ -50,11 +50,11 @@
   operator - = self::Operators|-;
   operator unary- = self::Operators|unary-;
 }
-static method Operators|+(final self::Complex* #this, self::Complex* other) → self::Complex*
+static method Operators|+(lowered final self::Complex* #this, self::Complex* other) → self::Complex*
   return #this.{self::Complex::add}(other);
-static method Operators|-(final self::Complex* #this, self::Complex* other) → self::Complex*
+static method Operators|-(lowered final self::Complex* #this, self::Complex* other) → self::Complex*
   return #this.{self::Complex::sub}(other);
-static method Operators|unary-(final self::Complex* #this) → self::Complex*
+static method Operators|unary-(lowered final self::Complex* #this) → self::Complex*
   return #this.{self::Complex::negate}();
 static method main() → dynamic {
   self::implicit();
diff --git a/pkg/front_end/testcases/extensions/other_kinds.dart.outline.expect b/pkg/front_end/testcases/extensions/other_kinds.dart.outline.expect
index cfd012a..e2dcbf5 100644
--- a/pkg/front_end/testcases/extensions/other_kinds.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/other_kinds.dart.outline.expect
@@ -37,15 +37,15 @@
   static set staticProperty = set self::A2|staticProperty;
 }
 static field core::int* A2|staticField;
-static method A2|get#instanceProperty(final self::A1* #this) → core::int*
+static method A2|get#instanceProperty(lowered final self::A1* #this) → core::int*
   ;
-static method A2|set#instanceProperty(final self::A1* #this, core::int* value) → void
+static method A2|set#instanceProperty(lowered final self::A1* #this, core::int* value) → void
   ;
-static method A2|+(final self::A1* #this, core::int* value) → core::int*
+static method A2|+(lowered final self::A1* #this, core::int* value) → core::int*
   ;
-static method A2|-(final self::A1* #this, core::int* value) → core::int*
+static method A2|-(lowered final self::A1* #this, core::int* value) → core::int*
   ;
-static method A2|unary-(final self::A1* #this) → core::int*
+static method A2|unary-(lowered final self::A1* #this) → core::int*
   ;
 static get A2|staticProperty() → core::int*
   ;
diff --git a/pkg/front_end/testcases/extensions/other_kinds.dart.strong.expect b/pkg/front_end/testcases/extensions/other_kinds.dart.strong.expect
index a2cf3e1..c83a5d1 100644
--- a/pkg/front_end/testcases/extensions/other_kinds.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/other_kinds.dart.strong.expect
@@ -40,18 +40,18 @@
   static set staticProperty = set self::A2|staticProperty;
 }
 static field core::int* A2|staticField = self::A1::getStaticField();
-static method A2|get#instanceProperty(final self::A1* #this) → core::int*
+static method A2|get#instanceProperty(lowered final self::A1* #this) → core::int*
   return #this.{self::A1::getInstanceField}();
-static method A2|set#instanceProperty(final self::A1* #this, core::int* value) → void {
+static method A2|set#instanceProperty(lowered final self::A1* #this, core::int* value) → void {
   #this.{self::A1::setInstanceField}(value);
 }
-static method A2|+(final self::A1* #this, core::int* value) → core::int* {
+static method A2|+(lowered final self::A1* #this, core::int* value) → core::int* {
   return #this.{self::A1::getInstanceField}().{core::num::+}(value);
 }
-static method A2|-(final self::A1* #this, core::int* value) → core::int* {
+static method A2|-(lowered final self::A1* #this, core::int* value) → core::int* {
   return #this.{self::A1::getInstanceField}().{core::num::-}(value);
 }
-static method A2|unary-(final self::A1* #this) → core::int* {
+static method A2|unary-(lowered final self::A1* #this) → core::int* {
   return #this.{self::A1::getInstanceField}().{core::int::unary-}();
 }
 static get A2|staticProperty() → core::int*
diff --git a/pkg/front_end/testcases/extensions/other_kinds.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/other_kinds.dart.strong.transformed.expect
index a2cf3e1..c83a5d1 100644
--- a/pkg/front_end/testcases/extensions/other_kinds.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/other_kinds.dart.strong.transformed.expect
@@ -40,18 +40,18 @@
   static set staticProperty = set self::A2|staticProperty;
 }
 static field core::int* A2|staticField = self::A1::getStaticField();
-static method A2|get#instanceProperty(final self::A1* #this) → core::int*
+static method A2|get#instanceProperty(lowered final self::A1* #this) → core::int*
   return #this.{self::A1::getInstanceField}();
-static method A2|set#instanceProperty(final self::A1* #this, core::int* value) → void {
+static method A2|set#instanceProperty(lowered final self::A1* #this, core::int* value) → void {
   #this.{self::A1::setInstanceField}(value);
 }
-static method A2|+(final self::A1* #this, core::int* value) → core::int* {
+static method A2|+(lowered final self::A1* #this, core::int* value) → core::int* {
   return #this.{self::A1::getInstanceField}().{core::num::+}(value);
 }
-static method A2|-(final self::A1* #this, core::int* value) → core::int* {
+static method A2|-(lowered final self::A1* #this, core::int* value) → core::int* {
   return #this.{self::A1::getInstanceField}().{core::num::-}(value);
 }
-static method A2|unary-(final self::A1* #this) → core::int* {
+static method A2|unary-(lowered final self::A1* #this) → core::int* {
   return #this.{self::A1::getInstanceField}().{core::int::unary-}();
 }
 static get A2|staticProperty() → core::int*
diff --git a/pkg/front_end/testcases/extensions/private_members.dart.outline.expect b/pkg/front_end/testcases/extensions/private_members.dart.outline.expect
index adc6463..5f25ddb 100644
--- a/pkg/front_end/testcases/extensions/private_members.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/private_members.dart.outline.expect
@@ -42,53 +42,53 @@
   method test3 = self2::_extension#0|test3;
   tearoff test3 = self2::_extension#0|get#test3;
 }
-static method _PrivateExtension|publicMethod1(final core::String* #this) → core::int*
+static method _PrivateExtension|publicMethod1(lowered final core::String* #this) → core::int*
   ;
-static method _PrivateExtension|get#publicMethod1(final core::String* #this) → () →* core::int*
+static method _PrivateExtension|get#publicMethod1(lowered final core::String* #this) → () →* core::int*
   return () → core::int* => self2::_PrivateExtension|publicMethod1(#this);
-static method _PrivateExtension|_privateMethod1(final core::String* #this) → core::int*
+static method _PrivateExtension|_privateMethod1(lowered final core::String* #this) → core::int*
   ;
-static method _PrivateExtension|get#_privateMethod1(final core::String* #this) → () →* core::int*
+static method _PrivateExtension|get#_privateMethod1(lowered final core::String* #this) → () →* core::int*
   return () → core::int* => self2::_PrivateExtension|_privateMethod1(#this);
 static method _PrivateExtension|publicStaticMethod1() → core::int*
   ;
 static method _PrivateExtension|_privateStaticMethod1() → core::int*
   ;
-static method _PrivateExtension|test1(final core::String* #this) → dynamic
+static method _PrivateExtension|test1(lowered final core::String* #this) → dynamic
   ;
-static method _PrivateExtension|get#test1(final core::String* #this) → () →* dynamic
+static method _PrivateExtension|get#test1(lowered final core::String* #this) → () →* dynamic
   return () → dynamic => self2::_PrivateExtension|test1(#this);
-static method PublicExtension|publicMethod2(final core::String* #this) → core::int*
+static method PublicExtension|publicMethod2(lowered final core::String* #this) → core::int*
   ;
-static method PublicExtension|get#publicMethod2(final core::String* #this) → () →* core::int*
+static method PublicExtension|get#publicMethod2(lowered final core::String* #this) → () →* core::int*
   return () → core::int* => self2::PublicExtension|publicMethod2(#this);
-static method PublicExtension|_privateMethod2(final core::String* #this) → core::int*
+static method PublicExtension|_privateMethod2(lowered final core::String* #this) → core::int*
   ;
-static method PublicExtension|get#_privateMethod2(final core::String* #this) → () →* core::int*
+static method PublicExtension|get#_privateMethod2(lowered final core::String* #this) → () →* core::int*
   return () → core::int* => self2::PublicExtension|_privateMethod2(#this);
 static method PublicExtension|publicStaticMethod2() → core::int*
   ;
 static method PublicExtension|_privateStaticMethod2() → core::int*
   ;
-static method PublicExtension|test2(final core::String* #this) → dynamic
+static method PublicExtension|test2(lowered final core::String* #this) → dynamic
   ;
-static method PublicExtension|get#test2(final core::String* #this) → () →* dynamic
+static method PublicExtension|get#test2(lowered final core::String* #this) → () →* dynamic
   return () → dynamic => self2::PublicExtension|test2(#this);
-static method _extension#0|publicMethod3(final core::String* #this) → core::int*
+static method _extension#0|publicMethod3(lowered final core::String* #this) → core::int*
   ;
-static method _extension#0|get#publicMethod3(final core::String* #this) → () →* core::int*
+static method _extension#0|get#publicMethod3(lowered final core::String* #this) → () →* core::int*
   return () → core::int* => self2::_extension#0|publicMethod3(#this);
-static method _extension#0|_privateMethod3(final core::String* #this) → core::int*
+static method _extension#0|_privateMethod3(lowered final core::String* #this) → core::int*
   ;
-static method _extension#0|get#_privateMethod3(final core::String* #this) → () →* core::int*
+static method _extension#0|get#_privateMethod3(lowered final core::String* #this) → () →* core::int*
   return () → core::int* => self2::_extension#0|_privateMethod3(#this);
 static method _extension#0|publicStaticMethod3() → core::int*
   ;
 static method _extension#0|_privateStaticMethod3() → core::int*
   ;
-static method _extension#0|test3(final core::String* #this) → dynamic
+static method _extension#0|test3(lowered final core::String* #this) → dynamic
   ;
-static method _extension#0|get#test3(final core::String* #this) → () →* dynamic
+static method _extension#0|get#test3(lowered final core::String* #this) → () →* dynamic
   return () → dynamic => self2::_extension#0|test3(#this);
 static method test() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/private_members.dart.strong.expect b/pkg/front_end/testcases/extensions/private_members.dart.strong.expect
index 79b67f0..344b0e7 100644
--- a/pkg/front_end/testcases/extensions/private_members.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/private_members.dart.strong.expect
@@ -137,65 +137,65 @@
   method test3 = pri::_extension#0|test3;
   tearoff test3 = pri::_extension#0|get#test3;
 }
-static method _PrivateExtension|publicMethod1(final core::String* #this) → core::int*
+static method _PrivateExtension|publicMethod1(lowered final core::String* #this) → core::int*
   return 42;
-static method _PrivateExtension|get#publicMethod1(final core::String* #this) → () →* core::int*
+static method _PrivateExtension|get#publicMethod1(lowered final core::String* #this) → () →* core::int*
   return () → core::int* => pri::_PrivateExtension|publicMethod1(#this);
-static method _PrivateExtension|_privateMethod1(final core::String* #this) → core::int*
+static method _PrivateExtension|_privateMethod1(lowered final core::String* #this) → core::int*
   return 87;
-static method _PrivateExtension|get#_privateMethod1(final core::String* #this) → () →* core::int*
+static method _PrivateExtension|get#_privateMethod1(lowered final core::String* #this) → () →* core::int*
   return () → core::int* => pri::_PrivateExtension|_privateMethod1(#this);
 static method _PrivateExtension|publicStaticMethod1() → core::int*
   return 24;
 static method _PrivateExtension|_privateStaticMethod1() → core::int*
   return 78;
-static method _PrivateExtension|test1(final core::String* #this) → dynamic {
+static method _PrivateExtension|test1(lowered final core::String* #this) → dynamic {
   pri::expect(42, pri::_PrivateExtension|publicMethod1(#this));
   pri::expect(87, pri::_PrivateExtension|_privateMethod1(#this));
   pri::expect(24, pri::_PrivateExtension|publicStaticMethod1());
   pri::expect(78, pri::_PrivateExtension|_privateStaticMethod1());
 }
-static method _PrivateExtension|get#test1(final core::String* #this) → () →* dynamic
+static method _PrivateExtension|get#test1(lowered final core::String* #this) → () →* dynamic
   return () → dynamic => pri::_PrivateExtension|test1(#this);
-static method PublicExtension|publicMethod2(final core::String* #this) → core::int*
+static method PublicExtension|publicMethod2(lowered final core::String* #this) → core::int*
   return 123;
-static method PublicExtension|get#publicMethod2(final core::String* #this) → () →* core::int*
+static method PublicExtension|get#publicMethod2(lowered final core::String* #this) → () →* core::int*
   return () → core::int* => pri::PublicExtension|publicMethod2(#this);
-static method PublicExtension|_privateMethod2(final core::String* #this) → core::int*
+static method PublicExtension|_privateMethod2(lowered final core::String* #this) → core::int*
   return 237;
-static method PublicExtension|get#_privateMethod2(final core::String* #this) → () →* core::int*
+static method PublicExtension|get#_privateMethod2(lowered final core::String* #this) → () →* core::int*
   return () → core::int* => pri::PublicExtension|_privateMethod2(#this);
 static method PublicExtension|publicStaticMethod2() → core::int*
   return 321;
 static method PublicExtension|_privateStaticMethod2() → core::int*
   return 732;
-static method PublicExtension|test2(final core::String* #this) → dynamic {
+static method PublicExtension|test2(lowered final core::String* #this) → dynamic {
   pri::expect(123, pri::PublicExtension|publicMethod2(#this));
   pri::expect(237, pri::PublicExtension|_privateMethod2(#this));
   pri::expect(321, pri::PublicExtension|publicStaticMethod2());
   pri::expect(732, pri::PublicExtension|_privateStaticMethod2());
 }
-static method PublicExtension|get#test2(final core::String* #this) → () →* dynamic
+static method PublicExtension|get#test2(lowered final core::String* #this) → () →* dynamic
   return () → dynamic => pri::PublicExtension|test2(#this);
-static method _extension#0|publicMethod3(final core::String* #this) → core::int*
+static method _extension#0|publicMethod3(lowered final core::String* #this) → core::int*
   return 473;
-static method _extension#0|get#publicMethod3(final core::String* #this) → () →* core::int*
+static method _extension#0|get#publicMethod3(lowered final core::String* #this) → () →* core::int*
   return () → core::int* => pri::_extension#0|publicMethod3(#this);
-static method _extension#0|_privateMethod3(final core::String* #this) → core::int*
+static method _extension#0|_privateMethod3(lowered final core::String* #this) → core::int*
   return 586;
-static method _extension#0|get#_privateMethod3(final core::String* #this) → () →* core::int*
+static method _extension#0|get#_privateMethod3(lowered final core::String* #this) → () →* core::int*
   return () → core::int* => pri::_extension#0|_privateMethod3(#this);
 static method _extension#0|publicStaticMethod3() → core::int*
   return 374;
 static method _extension#0|_privateStaticMethod3() → core::int*
   return 685;
-static method _extension#0|test3(final core::String* #this) → dynamic {
+static method _extension#0|test3(lowered final core::String* #this) → dynamic {
   pri::expect(473, pri::_extension#0|publicMethod3(#this));
   pri::expect(586, pri::_extension#0|_privateMethod3(#this));
   pri::expect(374, pri::_extension#0|publicStaticMethod3());
   pri::expect(685, pri::_extension#0|_privateStaticMethod3());
 }
-static method _extension#0|get#test3(final core::String* #this) → () →* dynamic
+static method _extension#0|get#test3(lowered final core::String* #this) → () →* dynamic
   return () → dynamic => pri::_extension#0|test3(#this);
 static method test() → dynamic {
   pri::expect(42, pri::_PrivateExtension|publicMethod1(""));
diff --git a/pkg/front_end/testcases/extensions/private_members.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/private_members.dart.strong.transformed.expect
index 79b67f0..344b0e7 100644
--- a/pkg/front_end/testcases/extensions/private_members.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/private_members.dart.strong.transformed.expect
@@ -137,65 +137,65 @@
   method test3 = pri::_extension#0|test3;
   tearoff test3 = pri::_extension#0|get#test3;
 }
-static method _PrivateExtension|publicMethod1(final core::String* #this) → core::int*
+static method _PrivateExtension|publicMethod1(lowered final core::String* #this) → core::int*
   return 42;
-static method _PrivateExtension|get#publicMethod1(final core::String* #this) → () →* core::int*
+static method _PrivateExtension|get#publicMethod1(lowered final core::String* #this) → () →* core::int*
   return () → core::int* => pri::_PrivateExtension|publicMethod1(#this);
-static method _PrivateExtension|_privateMethod1(final core::String* #this) → core::int*
+static method _PrivateExtension|_privateMethod1(lowered final core::String* #this) → core::int*
   return 87;
-static method _PrivateExtension|get#_privateMethod1(final core::String* #this) → () →* core::int*
+static method _PrivateExtension|get#_privateMethod1(lowered final core::String* #this) → () →* core::int*
   return () → core::int* => pri::_PrivateExtension|_privateMethod1(#this);
 static method _PrivateExtension|publicStaticMethod1() → core::int*
   return 24;
 static method _PrivateExtension|_privateStaticMethod1() → core::int*
   return 78;
-static method _PrivateExtension|test1(final core::String* #this) → dynamic {
+static method _PrivateExtension|test1(lowered final core::String* #this) → dynamic {
   pri::expect(42, pri::_PrivateExtension|publicMethod1(#this));
   pri::expect(87, pri::_PrivateExtension|_privateMethod1(#this));
   pri::expect(24, pri::_PrivateExtension|publicStaticMethod1());
   pri::expect(78, pri::_PrivateExtension|_privateStaticMethod1());
 }
-static method _PrivateExtension|get#test1(final core::String* #this) → () →* dynamic
+static method _PrivateExtension|get#test1(lowered final core::String* #this) → () →* dynamic
   return () → dynamic => pri::_PrivateExtension|test1(#this);
-static method PublicExtension|publicMethod2(final core::String* #this) → core::int*
+static method PublicExtension|publicMethod2(lowered final core::String* #this) → core::int*
   return 123;
-static method PublicExtension|get#publicMethod2(final core::String* #this) → () →* core::int*
+static method PublicExtension|get#publicMethod2(lowered final core::String* #this) → () →* core::int*
   return () → core::int* => pri::PublicExtension|publicMethod2(#this);
-static method PublicExtension|_privateMethod2(final core::String* #this) → core::int*
+static method PublicExtension|_privateMethod2(lowered final core::String* #this) → core::int*
   return 237;
-static method PublicExtension|get#_privateMethod2(final core::String* #this) → () →* core::int*
+static method PublicExtension|get#_privateMethod2(lowered final core::String* #this) → () →* core::int*
   return () → core::int* => pri::PublicExtension|_privateMethod2(#this);
 static method PublicExtension|publicStaticMethod2() → core::int*
   return 321;
 static method PublicExtension|_privateStaticMethod2() → core::int*
   return 732;
-static method PublicExtension|test2(final core::String* #this) → dynamic {
+static method PublicExtension|test2(lowered final core::String* #this) → dynamic {
   pri::expect(123, pri::PublicExtension|publicMethod2(#this));
   pri::expect(237, pri::PublicExtension|_privateMethod2(#this));
   pri::expect(321, pri::PublicExtension|publicStaticMethod2());
   pri::expect(732, pri::PublicExtension|_privateStaticMethod2());
 }
-static method PublicExtension|get#test2(final core::String* #this) → () →* dynamic
+static method PublicExtension|get#test2(lowered final core::String* #this) → () →* dynamic
   return () → dynamic => pri::PublicExtension|test2(#this);
-static method _extension#0|publicMethod3(final core::String* #this) → core::int*
+static method _extension#0|publicMethod3(lowered final core::String* #this) → core::int*
   return 473;
-static method _extension#0|get#publicMethod3(final core::String* #this) → () →* core::int*
+static method _extension#0|get#publicMethod3(lowered final core::String* #this) → () →* core::int*
   return () → core::int* => pri::_extension#0|publicMethod3(#this);
-static method _extension#0|_privateMethod3(final core::String* #this) → core::int*
+static method _extension#0|_privateMethod3(lowered final core::String* #this) → core::int*
   return 586;
-static method _extension#0|get#_privateMethod3(final core::String* #this) → () →* core::int*
+static method _extension#0|get#_privateMethod3(lowered final core::String* #this) → () →* core::int*
   return () → core::int* => pri::_extension#0|_privateMethod3(#this);
 static method _extension#0|publicStaticMethod3() → core::int*
   return 374;
 static method _extension#0|_privateStaticMethod3() → core::int*
   return 685;
-static method _extension#0|test3(final core::String* #this) → dynamic {
+static method _extension#0|test3(lowered final core::String* #this) → dynamic {
   pri::expect(473, pri::_extension#0|publicMethod3(#this));
   pri::expect(586, pri::_extension#0|_privateMethod3(#this));
   pri::expect(374, pri::_extension#0|publicStaticMethod3());
   pri::expect(685, pri::_extension#0|_privateStaticMethod3());
 }
-static method _extension#0|get#test3(final core::String* #this) → () →* dynamic
+static method _extension#0|get#test3(lowered final core::String* #this) → () →* dynamic
   return () → dynamic => pri::_extension#0|test3(#this);
 static method test() → dynamic {
   pri::expect(42, pri::_PrivateExtension|publicMethod1(""));
diff --git a/pkg/front_end/testcases/extensions/static_access.dart.outline.expect b/pkg/front_end/testcases/extensions/static_access.dart.outline.expect
index 9eda9c7..362a61f 100644
--- a/pkg/front_end/testcases/extensions/static_access.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/static_access.dart.outline.expect
@@ -36,13 +36,13 @@
   ;
 static set Extension|property(dynamic value) → void
   ;
-static method Extension|instanceMethod(final self::Class* #this) → dynamic
+static method Extension|instanceMethod(lowered final self::Class* #this) → dynamic
   ;
-static method Extension|get#instanceMethod(final self::Class* #this) → () →* dynamic
+static method Extension|get#instanceMethod(lowered final self::Class* #this) → () →* dynamic
   return () → dynamic => self::Extension|instanceMethod(#this);
-static method Extension|get#instanceProperty(final self::Class* #this) → dynamic
+static method Extension|get#instanceProperty(lowered final self::Class* #this) → dynamic
   ;
-static method Extension|set#instanceProperty(final self::Class* #this, dynamic value) → void
+static method Extension|set#instanceProperty(lowered final self::Class* #this, dynamic value) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/static_access.dart.strong.expect b/pkg/front_end/testcases/extensions/static_access.dart.strong.expect
index a6390b5..5cc472a 100644
--- a/pkg/front_end/testcases/extensions/static_access.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/static_access.dart.strong.expect
@@ -34,12 +34,12 @@
 static get Extension|property() → dynamic
   return 42;
 static set Extension|property(dynamic value) → void {}
-static method Extension|instanceMethod(final self::Class* #this) → dynamic {}
-static method Extension|get#instanceMethod(final self::Class* #this) → () →* dynamic
+static method Extension|instanceMethod(lowered final self::Class* #this) → dynamic {}
+static method Extension|get#instanceMethod(lowered final self::Class* #this) → () →* dynamic
   return () → dynamic => self::Extension|instanceMethod(#this);
-static method Extension|get#instanceProperty(final self::Class* #this) → dynamic
+static method Extension|get#instanceProperty(lowered final self::Class* #this) → dynamic
   return 42;
-static method Extension|set#instanceProperty(final self::Class* #this, dynamic value) → void {}
+static method Extension|set#instanceProperty(lowered final self::Class* #this, dynamic value) → void {}
 static method main() → dynamic {
   self::Extension|method();
   self::Extension|genericMethod<core::int*>(42);
diff --git a/pkg/front_end/testcases/extensions/static_access.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/static_access.dart.strong.transformed.expect
index a6390b5..5cc472a 100644
--- a/pkg/front_end/testcases/extensions/static_access.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/static_access.dart.strong.transformed.expect
@@ -34,12 +34,12 @@
 static get Extension|property() → dynamic
   return 42;
 static set Extension|property(dynamic value) → void {}
-static method Extension|instanceMethod(final self::Class* #this) → dynamic {}
-static method Extension|get#instanceMethod(final self::Class* #this) → () →* dynamic
+static method Extension|instanceMethod(lowered final self::Class* #this) → dynamic {}
+static method Extension|get#instanceMethod(lowered final self::Class* #this) → () →* dynamic
   return () → dynamic => self::Extension|instanceMethod(#this);
-static method Extension|get#instanceProperty(final self::Class* #this) → dynamic
+static method Extension|get#instanceProperty(lowered final self::Class* #this) → dynamic
   return 42;
-static method Extension|set#instanceProperty(final self::Class* #this, dynamic value) → void {}
+static method Extension|set#instanceProperty(lowered final self::Class* #this, dynamic value) → void {}
 static method main() → dynamic {
   self::Extension|method();
   self::Extension|genericMethod<core::int*>(42);
diff --git a/pkg/front_end/testcases/extensions/static_access_of_instance.dart.outline.expect b/pkg/front_end/testcases/extensions/static_access_of_instance.dart.outline.expect
index b403165..a401139 100644
--- a/pkg/front_end/testcases/extensions/static_access_of_instance.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/static_access_of_instance.dart.outline.expect
@@ -22,13 +22,13 @@
   get instanceProperty = self::Extension|get#instanceProperty;
   set instanceProperty = self::Extension|set#instanceProperty;
 }
-static method Extension|instanceMethod(final self::Class* #this) → dynamic
+static method Extension|instanceMethod(lowered final self::Class* #this) → dynamic
   ;
-static method Extension|get#instanceMethod(final self::Class* #this) → () →* dynamic
+static method Extension|get#instanceMethod(lowered final self::Class* #this) → () →* dynamic
   return () → dynamic => self::Extension|instanceMethod(#this);
-static method Extension|get#instanceProperty(final self::Class* #this) → dynamic
+static method Extension|get#instanceProperty(lowered final self::Class* #this) → dynamic
   ;
-static method Extension|set#instanceProperty(final self::Class* #this, dynamic value) → void
+static method Extension|set#instanceProperty(lowered final self::Class* #this, dynamic value) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/static_access_of_instance.dart.strong.expect b/pkg/front_end/testcases/extensions/static_access_of_instance.dart.strong.expect
index fd0a648..09b420f 100644
--- a/pkg/front_end/testcases/extensions/static_access_of_instance.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/static_access_of_instance.dart.strong.expect
@@ -42,12 +42,12 @@
   get instanceProperty = self::Extension|get#instanceProperty;
   set instanceProperty = self::Extension|set#instanceProperty;
 }
-static method Extension|instanceMethod(final self::Class* #this) → dynamic {}
-static method Extension|get#instanceMethod(final self::Class* #this) → () →* dynamic
+static method Extension|instanceMethod(lowered final self::Class* #this) → dynamic {}
+static method Extension|get#instanceMethod(lowered final self::Class* #this) → () →* dynamic
   return () → dynamic => self::Extension|instanceMethod(#this);
-static method Extension|get#instanceProperty(final self::Class* #this) → dynamic
+static method Extension|get#instanceProperty(lowered final self::Class* #this) → dynamic
   return 42;
-static method Extension|set#instanceProperty(final self::Class* #this, dynamic value) → void {}
+static method Extension|set#instanceProperty(lowered final self::Class* #this, dynamic value) → void {}
 static method main() → dynamic {
   invalid-expression "pkg/front_end/testcases/extensions/static_access_of_instance.dart:14:13: Error: Method not found: 'Extension.instanceMethod'.
   Extension.instanceMethod();
diff --git a/pkg/front_end/testcases/extensions/static_access_of_instance.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/static_access_of_instance.dart.strong.transformed.expect
index fd0a648..09b420f 100644
--- a/pkg/front_end/testcases/extensions/static_access_of_instance.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/static_access_of_instance.dart.strong.transformed.expect
@@ -42,12 +42,12 @@
   get instanceProperty = self::Extension|get#instanceProperty;
   set instanceProperty = self::Extension|set#instanceProperty;
 }
-static method Extension|instanceMethod(final self::Class* #this) → dynamic {}
-static method Extension|get#instanceMethod(final self::Class* #this) → () →* dynamic
+static method Extension|instanceMethod(lowered final self::Class* #this) → dynamic {}
+static method Extension|get#instanceMethod(lowered final self::Class* #this) → () →* dynamic
   return () → dynamic => self::Extension|instanceMethod(#this);
-static method Extension|get#instanceProperty(final self::Class* #this) → dynamic
+static method Extension|get#instanceProperty(lowered final self::Class* #this) → dynamic
   return 42;
-static method Extension|set#instanceProperty(final self::Class* #this, dynamic value) → void {}
+static method Extension|set#instanceProperty(lowered final self::Class* #this, dynamic value) → void {}
 static method main() → dynamic {
   invalid-expression "pkg/front_end/testcases/extensions/static_access_of_instance.dart:14:13: Error: Method not found: 'Extension.instanceMethod'.
   Extension.instanceMethod();
diff --git a/pkg/front_end/testcases/extensions/tear_offs.dart.outline.expect b/pkg/front_end/testcases/extensions/tear_offs.dart.outline.expect
index 250f13d..da9b31b 100644
--- a/pkg/front_end/testcases/extensions/tear_offs.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/tear_offs.dart.outline.expect
@@ -25,19 +25,19 @@
   method errors = self::Extension|errors;
   tearoff errors = self::Extension|get#errors;
 }
-static method Extension|id<T extends core::Object* = dynamic>(final self::Class* #this, self::Extension|id::T* t) → self::Extension|id::T*
+static method Extension|id<T extends core::Object* = dynamic>(lowered final self::Class* #this, self::Extension|id::T* t) → self::Extension|id::T*
   ;
-static method Extension|get#id(final self::Class* #this) → <T extends core::Object* = dynamic>(T*) →* T*
+static method Extension|get#id(lowered final self::Class* #this) → <T extends core::Object* = dynamic>(T*) →* T*
   return <T extends core::Object* = dynamic>(T* t) → T* => self::Extension|id<T*>(#this, t);
-static method Extension|get#getter(final self::Class* #this) → <T extends core::Object* = dynamic>(T*) →* T*
+static method Extension|get#getter(lowered final self::Class* #this) → <T extends core::Object* = dynamic>(T*) →* T*
   ;
-static method Extension|method(final self::Class* #this) → dynamic
+static method Extension|method(lowered final self::Class* #this) → dynamic
   ;
-static method Extension|get#method(final self::Class* #this) → () →* dynamic
+static method Extension|get#method(lowered final self::Class* #this) → () →* dynamic
   return () → dynamic => self::Extension|method(#this);
-static method Extension|errors(final self::Class* #this) → dynamic
+static method Extension|errors(lowered final self::Class* #this) → dynamic
   ;
-static method Extension|get#errors(final self::Class* #this) → () →* dynamic
+static method Extension|get#errors(lowered final self::Class* #this) → () →* dynamic
   return () → dynamic => self::Extension|errors(#this);
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/tear_offs.dart.strong.expect b/pkg/front_end/testcases/extensions/tear_offs.dart.strong.expect
index 6b6aaf0..d3c534e 100644
--- a/pkg/front_end/testcases/extensions/tear_offs.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/tear_offs.dart.strong.expect
@@ -41,23 +41,23 @@
   method errors = self::Extension|errors;
   tearoff errors = self::Extension|get#errors;
 }
-static method Extension|id<T extends core::Object* = dynamic>(final self::Class* #this, self::Extension|id::T* t) → self::Extension|id::T*
+static method Extension|id<T extends core::Object* = dynamic>(lowered final self::Class* #this, self::Extension|id::T* t) → self::Extension|id::T*
   return t;
-static method Extension|get#id(final self::Class* #this) → <T extends core::Object* = dynamic>(T*) →* T*
+static method Extension|get#id(lowered final self::Class* #this) → <T extends core::Object* = dynamic>(T*) →* T*
   return <T extends core::Object* = dynamic>(T* t) → T* => self::Extension|id<T*>(#this, t);
-static method Extension|get#getter(final self::Class* #this) → <T extends core::Object* = dynamic>(T*) →* T*
+static method Extension|get#getter(lowered final self::Class* #this) → <T extends core::Object* = dynamic>(T*) →* T*
   return self::Extension|get#id(#this);
-static method Extension|method(final self::Class* #this) → dynamic {
+static method Extension|method(lowered final self::Class* #this) → dynamic {
   (core::String*) →* core::String* stringId = self::Extension|get#id(#this)<core::String*>;
 }
-static method Extension|get#method(final self::Class* #this) → () →* dynamic
+static method Extension|get#method(lowered final self::Class* #this) → () →* dynamic
   return () → dynamic => self::Extension|method(#this);
-static method Extension|errors(final self::Class* #this) → dynamic {
+static method Extension|errors(lowered final self::Class* #this) → dynamic {
   (core::int*) →* core::int* intId = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/extensions/tear_offs.dart:17:31: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'int Function(int)'.
     int Function(int) intId = getter;
                               ^" in self::Extension|get#getter(#this) as{TypeError} (core::int*) →* core::int*;
 }
-static method Extension|get#errors(final self::Class* #this) → () →* dynamic
+static method Extension|get#errors(lowered final self::Class* #this) → () →* dynamic
   return () → dynamic => self::Extension|errors(#this);
 static method main() → dynamic {
   self::Class* c = new self::Class::•();
diff --git a/pkg/front_end/testcases/extensions/tear_offs.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/tear_offs.dart.strong.transformed.expect
index 6b6aaf0..d3c534e 100644
--- a/pkg/front_end/testcases/extensions/tear_offs.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/tear_offs.dart.strong.transformed.expect
@@ -41,23 +41,23 @@
   method errors = self::Extension|errors;
   tearoff errors = self::Extension|get#errors;
 }
-static method Extension|id<T extends core::Object* = dynamic>(final self::Class* #this, self::Extension|id::T* t) → self::Extension|id::T*
+static method Extension|id<T extends core::Object* = dynamic>(lowered final self::Class* #this, self::Extension|id::T* t) → self::Extension|id::T*
   return t;
-static method Extension|get#id(final self::Class* #this) → <T extends core::Object* = dynamic>(T*) →* T*
+static method Extension|get#id(lowered final self::Class* #this) → <T extends core::Object* = dynamic>(T*) →* T*
   return <T extends core::Object* = dynamic>(T* t) → T* => self::Extension|id<T*>(#this, t);
-static method Extension|get#getter(final self::Class* #this) → <T extends core::Object* = dynamic>(T*) →* T*
+static method Extension|get#getter(lowered final self::Class* #this) → <T extends core::Object* = dynamic>(T*) →* T*
   return self::Extension|get#id(#this);
-static method Extension|method(final self::Class* #this) → dynamic {
+static method Extension|method(lowered final self::Class* #this) → dynamic {
   (core::String*) →* core::String* stringId = self::Extension|get#id(#this)<core::String*>;
 }
-static method Extension|get#method(final self::Class* #this) → () →* dynamic
+static method Extension|get#method(lowered final self::Class* #this) → () →* dynamic
   return () → dynamic => self::Extension|method(#this);
-static method Extension|errors(final self::Class* #this) → dynamic {
+static method Extension|errors(lowered final self::Class* #this) → dynamic {
   (core::int*) →* core::int* intId = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/extensions/tear_offs.dart:17:31: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'int Function(int)'.
     int Function(int) intId = getter;
                               ^" in self::Extension|get#getter(#this) as{TypeError} (core::int*) →* core::int*;
 }
-static method Extension|get#errors(final self::Class* #this) → () →* dynamic
+static method Extension|get#errors(lowered final self::Class* #this) → () →* dynamic
   return () → dynamic => self::Extension|errors(#this);
 static method main() → dynamic {
   self::Class* c = new self::Class::•();
diff --git a/pkg/front_end/testcases/extensions/type_variable_bound.dart.outline.expect b/pkg/front_end/testcases/extensions/type_variable_bound.dart.outline.expect
index 6574fb9..6efbb7d 100644
--- a/pkg/front_end/testcases/extensions/type_variable_bound.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/type_variable_bound.dart.outline.expect
@@ -28,13 +28,13 @@
   method method2 = self::BoundExtension|method2;
   tearoff method2 = self::BoundExtension|get#method2;
 }
-static method Extension|method1<T extends core::Object* = dynamic>(final self::Extension|method1::T* #this) → self::Extension|method1::T*
+static method Extension|method1<T extends core::Object* = dynamic>(lowered final self::Extension|method1::T* #this) → self::Extension|method1::T*
   ;
-static method Extension|get#method1<T extends core::Object* = dynamic>(final self::Extension|get#method1::T* #this) → () →* self::Extension|get#method1::T*
+static method Extension|get#method1<T extends core::Object* = dynamic>(lowered final self::Extension|get#method1::T* #this) → () →* self::Extension|get#method1::T*
   return () → self::Extension|get#method1::T* => self::Extension|method1<self::Extension|get#method1::T*>(#this);
-static method BoundExtension|method2<T extends self::Class* = self::Class*>(final self::BoundExtension|method2::T* #this) → self::BoundExtension|method2::T*
+static method BoundExtension|method2<T extends self::Class* = self::Class*>(lowered final self::BoundExtension|method2::T* #this) → self::BoundExtension|method2::T*
   ;
-static method BoundExtension|get#method2<T extends self::Class* = self::Class*>(final self::BoundExtension|get#method2::T* #this) → () →* self::BoundExtension|get#method2::T*
+static method BoundExtension|get#method2<T extends self::Class* = self::Class*>(lowered final self::BoundExtension|get#method2::T* #this) → () →* self::BoundExtension|get#method2::T*
   return () → self::BoundExtension|get#method2::T* => self::BoundExtension|method2<self::BoundExtension|get#method2::T*>(#this);
 static method test1<T extends core::Object* = dynamic>(self::test1::T* t1) → self::Class*
   ;
diff --git a/pkg/front_end/testcases/extensions/type_variable_bound.dart.strong.expect b/pkg/front_end/testcases/extensions/type_variable_bound.dart.strong.expect
index 14cb1a6..3dfb6be 100644
--- a/pkg/front_end/testcases/extensions/type_variable_bound.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/type_variable_bound.dart.strong.expect
@@ -30,13 +30,13 @@
   method method2 = self::BoundExtension|method2;
   tearoff method2 = self::BoundExtension|get#method2;
 }
-static method Extension|method1<T extends core::Object* = dynamic>(final self::Extension|method1::T* #this) → self::Extension|method1::T*
+static method Extension|method1<T extends core::Object* = dynamic>(lowered final self::Extension|method1::T* #this) → self::Extension|method1::T*
   return #this;
-static method Extension|get#method1<T extends core::Object* = dynamic>(final self::Extension|get#method1::T* #this) → () →* self::Extension|get#method1::T*
+static method Extension|get#method1<T extends core::Object* = dynamic>(lowered final self::Extension|get#method1::T* #this) → () →* self::Extension|get#method1::T*
   return () → self::Extension|get#method1::T* => self::Extension|method1<self::Extension|get#method1::T*>(#this);
-static method BoundExtension|method2<T extends self::Class* = self::Class*>(final self::BoundExtension|method2::T* #this) → self::BoundExtension|method2::T*
+static method BoundExtension|method2<T extends self::Class* = self::Class*>(lowered final self::BoundExtension|method2::T* #this) → self::BoundExtension|method2::T*
   return #this;
-static method BoundExtension|get#method2<T extends self::Class* = self::Class*>(final self::BoundExtension|get#method2::T* #this) → () →* self::BoundExtension|get#method2::T*
+static method BoundExtension|get#method2<T extends self::Class* = self::Class*>(lowered final self::BoundExtension|get#method2::T* #this) → () →* self::BoundExtension|get#method2::T*
   return () → self::BoundExtension|get#method2::T* => self::BoundExtension|method2<self::BoundExtension|get#method2::T*>(#this);
 static method test1<T extends core::Object* = dynamic>(self::test1::T* t1) → self::Class* {
   if(t1 is self::SubClass*) {
diff --git a/pkg/front_end/testcases/extensions/type_variable_bound.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/type_variable_bound.dart.strong.transformed.expect
index 0bc41be..79b6d8f 100644
--- a/pkg/front_end/testcases/extensions/type_variable_bound.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/type_variable_bound.dart.strong.transformed.expect
@@ -30,13 +30,13 @@
   method method2 = self::BoundExtension|method2;
   tearoff method2 = self::BoundExtension|get#method2;
 }
-static method Extension|method1<T extends core::Object* = dynamic>(final self::Extension|method1::T* #this) → self::Extension|method1::T*
+static method Extension|method1<T extends core::Object* = dynamic>(lowered final self::Extension|method1::T* #this) → self::Extension|method1::T*
   return #this;
-static method Extension|get#method1<T extends core::Object* = dynamic>(final self::Extension|get#method1::T* #this) → () →* self::Extension|get#method1::T*
+static method Extension|get#method1<T extends core::Object* = dynamic>(lowered final self::Extension|get#method1::T* #this) → () →* self::Extension|get#method1::T*
   return () → self::Extension|get#method1::T* => self::Extension|method1<self::Extension|get#method1::T*>(#this);
-static method BoundExtension|method2<T extends self::Class* = self::Class*>(final self::BoundExtension|method2::T* #this) → self::BoundExtension|method2::T*
+static method BoundExtension|method2<T extends self::Class* = self::Class*>(lowered final self::BoundExtension|method2::T* #this) → self::BoundExtension|method2::T*
   return #this;
-static method BoundExtension|get#method2<T extends self::Class* = self::Class*>(final self::BoundExtension|get#method2::T* #this) → () →* self::BoundExtension|get#method2::T*
+static method BoundExtension|get#method2<T extends self::Class* = self::Class*>(lowered final self::BoundExtension|get#method2::T* #this) → () →* self::BoundExtension|get#method2::T*
   return () → self::BoundExtension|get#method2::T* => self::BoundExtension|method2<self::BoundExtension|get#method2::T*>(#this);
 static method test1<T extends core::Object* = dynamic>(self::test1::T* t1) → self::Class* {
   if(t1 is self::SubClass*) {
diff --git a/pkg/front_end/testcases/extensions/type_variables.dart.outline.expect b/pkg/front_end/testcases/extensions/type_variables.dart.outline.expect
index f786bf3..38ec5af 100644
--- a/pkg/front_end/testcases/extensions/type_variables.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/type_variables.dart.outline.expect
@@ -28,17 +28,17 @@
   method method = self::A4|method;
   tearoff method = self::A4|get#method;
 }
-static method A2|method1<T extends core::Object* = dynamic, S extends self::A2|method1::T* = dynamic>(final self::A1<self::A2|method1::T*>* #this) → self::A1<self::A2|method1::T*>*
+static method A2|method1<T extends core::Object* = dynamic, S extends self::A2|method1::T* = dynamic>(lowered final self::A1<self::A2|method1::T*>* #this) → self::A1<self::A2|method1::T*>*
   ;
-static method A2|get#method1<T extends core::Object* = dynamic>(final self::A1<self::A2|get#method1::T*>* #this) → <S extends self::A2|get#method1::T* = dynamic>() →* self::A1<self::A2|get#method1::T*>*
+static method A2|get#method1<T extends core::Object* = dynamic>(lowered final self::A1<self::A2|get#method1::T*>* #this) → <S extends self::A2|get#method1::T* = dynamic>() →* self::A1<self::A2|get#method1::T*>*
   return <S extends self::A2|get#method1::T* = dynamic>() → self::A1<self::A2|get#method1::T*>* => self::A2|method1<self::A2|get#method1::T*, S*>(#this);
-static method A2|method2<T extends core::Object* = dynamic, S extends self::A1<self::A2|method2::T*>* = self::A1<dynamic>*>(final self::A1<self::A2|method2::T*>* #this, self::A2|method2::S* o) → self::A1<self::A2|method2::T*>*
+static method A2|method2<T extends core::Object* = dynamic, S extends self::A1<self::A2|method2::T*>* = self::A1<dynamic>*>(lowered final self::A1<self::A2|method2::T*>* #this, self::A2|method2::S* o) → self::A1<self::A2|method2::T*>*
   ;
-static method A2|get#method2<T extends core::Object* = dynamic>(final self::A1<self::A2|get#method2::T*>* #this) → <S extends self::A1<self::A2|get#method2::T*>* = self::A1<dynamic>*>(S*) →* self::A1<self::A2|get#method2::T*>*
+static method A2|get#method2<T extends core::Object* = dynamic>(lowered final self::A1<self::A2|get#method2::T*>* #this) → <S extends self::A1<self::A2|get#method2::T*>* = self::A1<dynamic>*>(S*) →* self::A1<self::A2|get#method2::T*>*
   return <S extends self::A1<self::A2|get#method2::T*>* = self::A1<dynamic>*>(S* o) → self::A1<self::A2|get#method2::T*>* => self::A2|method2<self::A2|get#method2::T*, S*>(#this, o);
-static method A4|method<#T extends core::Object* = dynamic, T extends core::Object* = dynamic>(final self::A1<self::A4|method::#T*>* #this) → dynamic
+static method A4|method<#T extends core::Object* = dynamic, T extends core::Object* = dynamic>(lowered final self::A1<self::A4|method::#T*>* #this) → dynamic
   ;
-static method A4|get#method<#T extends core::Object* = dynamic>(final self::A1<self::A4|get#method::#T*>* #this) → <T extends core::Object* = dynamic>() →* dynamic
+static method A4|get#method<#T extends core::Object* = dynamic>(lowered final self::A1<self::A4|get#method::#T*>* #this) → <T extends core::Object* = dynamic>() →* dynamic
   return <T extends core::Object* = dynamic>() → dynamic => self::A4|method<self::A4|get#method::#T*, T*>(#this);
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/type_variables.dart.strong.expect b/pkg/front_end/testcases/extensions/type_variables.dart.strong.expect
index e2c6597..aeae0f7 100644
--- a/pkg/front_end/testcases/extensions/type_variables.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/type_variables.dart.strong.expect
@@ -29,20 +29,20 @@
   method method = self::A4|method;
   tearoff method = self::A4|get#method;
 }
-static method A2|method1<T extends core::Object* = dynamic, S extends self::A2|method1::T* = dynamic>(final self::A1<self::A2|method1::T*>* #this) → self::A1<self::A2|method1::T*>* {
+static method A2|method1<T extends core::Object* = dynamic, S extends self::A2|method1::T* = dynamic>(lowered final self::A1<self::A2|method1::T*>* #this) → self::A1<self::A2|method1::T*>* {
   return #this;
 }
-static method A2|get#method1<T extends core::Object* = dynamic>(final self::A1<self::A2|get#method1::T*>* #this) → <S extends self::A2|get#method1::T* = dynamic>() →* self::A1<self::A2|get#method1::T*>*
+static method A2|get#method1<T extends core::Object* = dynamic>(lowered final self::A1<self::A2|get#method1::T*>* #this) → <S extends self::A2|get#method1::T* = dynamic>() →* self::A1<self::A2|get#method1::T*>*
   return <S extends self::A2|get#method1::T* = dynamic>() → self::A1<self::A2|get#method1::T*>* => self::A2|method1<self::A2|get#method1::T*, S*>(#this);
-static method A2|method2<T extends core::Object* = dynamic, S extends self::A1<self::A2|method2::T*>* = self::A1<dynamic>*>(final self::A1<self::A2|method2::T*>* #this, self::A2|method2::S* o) → self::A1<self::A2|method2::T*>* {
+static method A2|method2<T extends core::Object* = dynamic, S extends self::A1<self::A2|method2::T*>* = self::A1<dynamic>*>(lowered final self::A1<self::A2|method2::T*>* #this, self::A2|method2::S* o) → self::A1<self::A2|method2::T*>* {
   core::print(o);
   core::print(self::A2|method2::T*);
   core::print(self::A2|method2::S*);
   return #this;
 }
-static method A2|get#method2<T extends core::Object* = dynamic>(final self::A1<self::A2|get#method2::T*>* #this) → <S extends self::A1<self::A2|get#method2::T*>* = self::A1<dynamic>*>(S*) →* self::A1<self::A2|get#method2::T*>*
+static method A2|get#method2<T extends core::Object* = dynamic>(lowered final self::A1<self::A2|get#method2::T*>* #this) → <S extends self::A1<self::A2|get#method2::T*>* = self::A1<dynamic>*>(S*) →* self::A1<self::A2|get#method2::T*>*
   return <S extends self::A1<self::A2|get#method2::T*>* = self::A1<dynamic>*>(S* o) → self::A1<self::A2|get#method2::T*>* => self::A2|method2<self::A2|get#method2::T*, S*>(#this, o);
-static method A4|method<#T extends core::Object* = dynamic, T extends core::Object* = dynamic>(final self::A1<self::A4|method::#T*>* #this) → dynamic {}
-static method A4|get#method<#T extends core::Object* = dynamic>(final self::A1<self::A4|get#method::#T*>* #this) → <T extends core::Object* = dynamic>() →* dynamic
+static method A4|method<#T extends core::Object* = dynamic, T extends core::Object* = dynamic>(lowered final self::A1<self::A4|method::#T*>* #this) → dynamic {}
+static method A4|get#method<#T extends core::Object* = dynamic>(lowered final self::A1<self::A4|get#method::#T*>* #this) → <T extends core::Object* = dynamic>() →* dynamic
   return <T extends core::Object* = dynamic>() → dynamic => self::A4|method<self::A4|get#method::#T*, T*>(#this);
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/type_variables.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/type_variables.dart.strong.transformed.expect
index e2c6597..aeae0f7 100644
--- a/pkg/front_end/testcases/extensions/type_variables.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/type_variables.dart.strong.transformed.expect
@@ -29,20 +29,20 @@
   method method = self::A4|method;
   tearoff method = self::A4|get#method;
 }
-static method A2|method1<T extends core::Object* = dynamic, S extends self::A2|method1::T* = dynamic>(final self::A1<self::A2|method1::T*>* #this) → self::A1<self::A2|method1::T*>* {
+static method A2|method1<T extends core::Object* = dynamic, S extends self::A2|method1::T* = dynamic>(lowered final self::A1<self::A2|method1::T*>* #this) → self::A1<self::A2|method1::T*>* {
   return #this;
 }
-static method A2|get#method1<T extends core::Object* = dynamic>(final self::A1<self::A2|get#method1::T*>* #this) → <S extends self::A2|get#method1::T* = dynamic>() →* self::A1<self::A2|get#method1::T*>*
+static method A2|get#method1<T extends core::Object* = dynamic>(lowered final self::A1<self::A2|get#method1::T*>* #this) → <S extends self::A2|get#method1::T* = dynamic>() →* self::A1<self::A2|get#method1::T*>*
   return <S extends self::A2|get#method1::T* = dynamic>() → self::A1<self::A2|get#method1::T*>* => self::A2|method1<self::A2|get#method1::T*, S*>(#this);
-static method A2|method2<T extends core::Object* = dynamic, S extends self::A1<self::A2|method2::T*>* = self::A1<dynamic>*>(final self::A1<self::A2|method2::T*>* #this, self::A2|method2::S* o) → self::A1<self::A2|method2::T*>* {
+static method A2|method2<T extends core::Object* = dynamic, S extends self::A1<self::A2|method2::T*>* = self::A1<dynamic>*>(lowered final self::A1<self::A2|method2::T*>* #this, self::A2|method2::S* o) → self::A1<self::A2|method2::T*>* {
   core::print(o);
   core::print(self::A2|method2::T*);
   core::print(self::A2|method2::S*);
   return #this;
 }
-static method A2|get#method2<T extends core::Object* = dynamic>(final self::A1<self::A2|get#method2::T*>* #this) → <S extends self::A1<self::A2|get#method2::T*>* = self::A1<dynamic>*>(S*) →* self::A1<self::A2|get#method2::T*>*
+static method A2|get#method2<T extends core::Object* = dynamic>(lowered final self::A1<self::A2|get#method2::T*>* #this) → <S extends self::A1<self::A2|get#method2::T*>* = self::A1<dynamic>*>(S*) →* self::A1<self::A2|get#method2::T*>*
   return <S extends self::A1<self::A2|get#method2::T*>* = self::A1<dynamic>*>(S* o) → self::A1<self::A2|get#method2::T*>* => self::A2|method2<self::A2|get#method2::T*, S*>(#this, o);
-static method A4|method<#T extends core::Object* = dynamic, T extends core::Object* = dynamic>(final self::A1<self::A4|method::#T*>* #this) → dynamic {}
-static method A4|get#method<#T extends core::Object* = dynamic>(final self::A1<self::A4|get#method::#T*>* #this) → <T extends core::Object* = dynamic>() →* dynamic
+static method A4|method<#T extends core::Object* = dynamic, T extends core::Object* = dynamic>(lowered final self::A1<self::A4|method::#T*>* #this) → dynamic {}
+static method A4|get#method<#T extends core::Object* = dynamic>(lowered final self::A1<self::A4|get#method::#T*>* #this) → <T extends core::Object* = dynamic>() →* dynamic
   return <T extends core::Object* = dynamic>() → dynamic => self::A4|method<self::A4|get#method::#T*, T*>(#this);
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/unnamed_extensions.dart.outline.expect b/pkg/front_end/testcases/extensions/unnamed_extensions.dart.outline.expect
index c671d48..bca6081 100644
--- a/pkg/front_end/testcases/extensions/unnamed_extensions.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/unnamed_extensions.dart.outline.expect
@@ -50,29 +50,29 @@
   get property = self::_extension#1|get#property;
   set property = self::_extension#1|set#property;
 }
-static method _extension#0|method(final self::Class1* #this) → core::int*
+static method _extension#0|method(lowered final self::Class1* #this) → core::int*
   ;
-static method _extension#0|get#method(final self::Class1* #this) → () →* core::int*
+static method _extension#0|get#method(lowered final self::Class1* #this) → () →* core::int*
   return () → core::int* => self::_extension#0|method(#this);
-static method _extension#0|genericMethod<T extends core::num* = core::num*>(final self::Class1* #this, self::_extension#0|genericMethod::T* t) → core::int*
+static method _extension#0|genericMethod<T extends core::num* = core::num*>(lowered final self::Class1* #this, self::_extension#0|genericMethod::T* t) → core::int*
   ;
-static method _extension#0|get#genericMethod(final self::Class1* #this) → <T extends core::num* = core::num*>(T*) →* core::int*
+static method _extension#0|get#genericMethod(lowered final self::Class1* #this) → <T extends core::num* = core::num*>(T*) →* core::int*
   return <T extends core::num* = core::num*>(T* t) → core::int* => self::_extension#0|genericMethod<T*>(#this, t);
-static method _extension#0|get#property(final self::Class1* #this) → core::int*
+static method _extension#0|get#property(lowered final self::Class1* #this) → core::int*
   ;
-static method _extension#0|set#property(final self::Class1* #this, core::int* value) → void
+static method _extension#0|set#property(lowered final self::Class1* #this, core::int* value) → void
   ;
-static method _extension#1|method(final self::Class2* #this) → core::int*
+static method _extension#1|method(lowered final self::Class2* #this) → core::int*
   ;
-static method _extension#1|get#method(final self::Class2* #this) → () →* core::int*
+static method _extension#1|get#method(lowered final self::Class2* #this) → () →* core::int*
   return () → core::int* => self::_extension#1|method(#this);
-static method _extension#1|genericMethod<T extends core::num* = core::num*>(final self::Class2* #this, self::_extension#1|genericMethod::T* t) → core::int*
+static method _extension#1|genericMethod<T extends core::num* = core::num*>(lowered final self::Class2* #this, self::_extension#1|genericMethod::T* t) → core::int*
   ;
-static method _extension#1|get#genericMethod(final self::Class2* #this) → <T extends core::num* = core::num*>(T*) →* core::int*
+static method _extension#1|get#genericMethod(lowered final self::Class2* #this) → <T extends core::num* = core::num*>(T*) →* core::int*
   return <T extends core::num* = core::num*>(T* t) → core::int* => self::_extension#1|genericMethod<T*>(#this, t);
-static method _extension#1|get#property(final self::Class2* #this) → core::int*
+static method _extension#1|get#property(lowered final self::Class2* #this) → core::int*
   ;
-static method _extension#1|set#property(final self::Class2* #this, core::int* value) → void
+static method _extension#1|set#property(lowered final self::Class2* #this, core::int* value) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/unnamed_extensions.dart.strong.expect b/pkg/front_end/testcases/extensions/unnamed_extensions.dart.strong.expect
index aa753cc..1786045 100644
--- a/pkg/front_end/testcases/extensions/unnamed_extensions.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/unnamed_extensions.dart.strong.expect
@@ -52,44 +52,44 @@
   get property = self::_extension#1|get#property;
   set property = self::_extension#1|set#property;
 }
-static method _extension#0|method(final self::Class1* #this) → core::int* {
+static method _extension#0|method(lowered final self::Class1* #this) → core::int* {
   core::print("Extension1.method on ${#this}");
   return #this.{self::Class1::field};
 }
-static method _extension#0|get#method(final self::Class1* #this) → () →* core::int*
+static method _extension#0|get#method(lowered final self::Class1* #this) → () →* core::int*
   return () → core::int* => self::_extension#0|method(#this);
-static method _extension#0|genericMethod<T extends core::num* = core::num*>(final self::Class1* #this, self::_extension#0|genericMethod::T* t) → core::int* {
+static method _extension#0|genericMethod<T extends core::num* = core::num*>(lowered final self::Class1* #this, self::_extension#0|genericMethod::T* t) → core::int* {
   core::print("Extension1.genericMethod<${self::_extension#0|genericMethod::T*}>(${t}) on ${#this}");
   return #this.{self::Class1::field}.{core::num::+}(t) as{TypeError} core::int*;
 }
-static method _extension#0|get#genericMethod(final self::Class1* #this) → <T extends core::num* = core::num*>(T*) →* core::int*
+static method _extension#0|get#genericMethod(lowered final self::Class1* #this) → <T extends core::num* = core::num*>(T*) →* core::int*
   return <T extends core::num* = core::num*>(T* t) → core::int* => self::_extension#0|genericMethod<T*>(#this, t);
-static method _extension#0|get#property(final self::Class1* #this) → core::int* {
+static method _extension#0|get#property(lowered final self::Class1* #this) → core::int* {
   core::print("Extension1.property get on ${#this}");
   return #this.{self::Class1::field};
 }
-static method _extension#0|set#property(final self::Class1* #this, core::int* value) → void {
+static method _extension#0|set#property(lowered final self::Class1* #this, core::int* value) → void {
   #this.{self::Class1::field} = value;
   core::print("Extension1.property set(${value}) on ${#this}");
   value = value.{core::num::+}(1);
 }
-static method _extension#1|method(final self::Class2* #this) → core::int* {
+static method _extension#1|method(lowered final self::Class2* #this) → core::int* {
   core::print("Extension2.method on ${#this}");
   return #this.{self::Class2::field}.{core::num::+}(3);
 }
-static method _extension#1|get#method(final self::Class2* #this) → () →* core::int*
+static method _extension#1|get#method(lowered final self::Class2* #this) → () →* core::int*
   return () → core::int* => self::_extension#1|method(#this);
-static method _extension#1|genericMethod<T extends core::num* = core::num*>(final self::Class2* #this, self::_extension#1|genericMethod::T* t) → core::int* {
+static method _extension#1|genericMethod<T extends core::num* = core::num*>(lowered final self::Class2* #this, self::_extension#1|genericMethod::T* t) → core::int* {
   core::print("Extension2.genericMethod<${self::_extension#1|genericMethod::T*}>(${t}) on ${#this}");
   return #this.{self::Class2::field}.{core::num::+}(t).{core::num::+}(4) as{TypeError} core::int*;
 }
-static method _extension#1|get#genericMethod(final self::Class2* #this) → <T extends core::num* = core::num*>(T*) →* core::int*
+static method _extension#1|get#genericMethod(lowered final self::Class2* #this) → <T extends core::num* = core::num*>(T*) →* core::int*
   return <T extends core::num* = core::num*>(T* t) → core::int* => self::_extension#1|genericMethod<T*>(#this, t);
-static method _extension#1|get#property(final self::Class2* #this) → core::int* {
+static method _extension#1|get#property(lowered final self::Class2* #this) → core::int* {
   core::print("Extension2.property get on ${#this}");
   return #this.{self::Class2::field}.{core::num::+}(5);
 }
-static method _extension#1|set#property(final self::Class2* #this, core::int* value) → void {
+static method _extension#1|set#property(lowered final self::Class2* #this, core::int* value) → void {
   core::print("Extension2.property set(${value}) on ${#this}");
   value = value.{core::num::+}(1);
   #this.{self::Class2::field} = value;
diff --git a/pkg/front_end/testcases/extensions/unnamed_extensions.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/unnamed_extensions.dart.strong.transformed.expect
index 6d78eba..4e7371c 100644
--- a/pkg/front_end/testcases/extensions/unnamed_extensions.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/unnamed_extensions.dart.strong.transformed.expect
@@ -52,44 +52,44 @@
   get property = self::_extension#1|get#property;
   set property = self::_extension#1|set#property;
 }
-static method _extension#0|method(final self::Class1* #this) → core::int* {
+static method _extension#0|method(lowered final self::Class1* #this) → core::int* {
   core::print("Extension1.method on ${#this}");
   return #this.{self::Class1::field};
 }
-static method _extension#0|get#method(final self::Class1* #this) → () →* core::int*
+static method _extension#0|get#method(lowered final self::Class1* #this) → () →* core::int*
   return () → core::int* => self::_extension#0|method(#this);
-static method _extension#0|genericMethod<T extends core::num* = core::num*>(final self::Class1* #this, self::_extension#0|genericMethod::T* t) → core::int* {
+static method _extension#0|genericMethod<T extends core::num* = core::num*>(lowered final self::Class1* #this, self::_extension#0|genericMethod::T* t) → core::int* {
   core::print("Extension1.genericMethod<${self::_extension#0|genericMethod::T*}>(${t}) on ${#this}");
   return #this.{self::Class1::field}.{core::num::+}(t) as{TypeError} core::int*;
 }
-static method _extension#0|get#genericMethod(final self::Class1* #this) → <T extends core::num* = core::num*>(T*) →* core::int*
+static method _extension#0|get#genericMethod(lowered final self::Class1* #this) → <T extends core::num* = core::num*>(T*) →* core::int*
   return <T extends core::num* = core::num*>(T* t) → core::int* => self::_extension#0|genericMethod<T*>(#this, t);
-static method _extension#0|get#property(final self::Class1* #this) → core::int* {
+static method _extension#0|get#property(lowered final self::Class1* #this) → core::int* {
   core::print("Extension1.property get on ${#this}");
   return #this.{self::Class1::field};
 }
-static method _extension#0|set#property(final self::Class1* #this, core::int* value) → void {
+static method _extension#0|set#property(lowered final self::Class1* #this, core::int* value) → void {
   #this.{self::Class1::field} = value;
   core::print("Extension1.property set(${value}) on ${#this}");
   value = value.{core::num::+}(1);
 }
-static method _extension#1|method(final self::Class2* #this) → core::int* {
+static method _extension#1|method(lowered final self::Class2* #this) → core::int* {
   core::print("Extension2.method on ${#this}");
   return #this.{self::Class2::field}.{core::num::+}(3);
 }
-static method _extension#1|get#method(final self::Class2* #this) → () →* core::int*
+static method _extension#1|get#method(lowered final self::Class2* #this) → () →* core::int*
   return () → core::int* => self::_extension#1|method(#this);
-static method _extension#1|genericMethod<T extends core::num* = core::num*>(final self::Class2* #this, self::_extension#1|genericMethod::T* t) → core::int* {
+static method _extension#1|genericMethod<T extends core::num* = core::num*>(lowered final self::Class2* #this, self::_extension#1|genericMethod::T* t) → core::int* {
   core::print("Extension2.genericMethod<${self::_extension#1|genericMethod::T*}>(${t}) on ${#this}");
   return #this.{self::Class2::field}.{core::num::+}(t).{core::num::+}(4) as{TypeError} core::int*;
 }
-static method _extension#1|get#genericMethod(final self::Class2* #this) → <T extends core::num* = core::num*>(T*) →* core::int*
+static method _extension#1|get#genericMethod(lowered final self::Class2* #this) → <T extends core::num* = core::num*>(T*) →* core::int*
   return <T extends core::num* = core::num*>(T* t) → core::int* => self::_extension#1|genericMethod<T*>(#this, t);
-static method _extension#1|get#property(final self::Class2* #this) → core::int* {
+static method _extension#1|get#property(lowered final self::Class2* #this) → core::int* {
   core::print("Extension2.property get on ${#this}");
   return #this.{self::Class2::field}.{core::num::+}(5);
 }
-static method _extension#1|set#property(final self::Class2* #this, core::int* value) → void {
+static method _extension#1|set#property(lowered final self::Class2* #this, core::int* value) → void {
   core::print("Extension2.property set(${value}) on ${#this}");
   value = value.{core::num::+}(1);
   #this.{self::Class2::field} = value;
diff --git a/pkg/front_end/testcases/extensions/use_this.dart.outline.expect b/pkg/front_end/testcases/extensions/use_this.dart.outline.expect
index 70ab4eb..f40c736 100644
--- a/pkg/front_end/testcases/extensions/use_this.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/use_this.dart.outline.expect
@@ -42,21 +42,21 @@
   method method2 = self::B2|method2;
   tearoff method2 = self::B2|get#method2;
 }
-static method A2|method1(final self::A1* #this) → self::A1*
+static method A2|method1(lowered final self::A1* #this) → self::A1*
   ;
-static method A2|get#method1(final self::A1* #this) → () →* self::A1*
+static method A2|get#method1(lowered final self::A1* #this) → () →* self::A1*
   return () → self::A1* => self::A2|method1(#this);
-static method A2|method2<T extends core::Object* = dynamic>(final self::A1* #this, self::A2|method2::T* o) → self::A1*
+static method A2|method2<T extends core::Object* = dynamic>(lowered final self::A1* #this, self::A2|method2::T* o) → self::A1*
   ;
-static method A2|get#method2(final self::A1* #this) → <T extends core::Object* = dynamic>(T*) →* self::A1*
+static method A2|get#method2(lowered final self::A1* #this) → <T extends core::Object* = dynamic>(T*) →* self::A1*
   return <T extends core::Object* = dynamic>(T* o) → self::A1* => self::A2|method2<T*>(#this, o);
-static method B2|method1<T extends core::Object* = dynamic>(final self::B1<self::B2|method1::T*>* #this) → self::B1<self::B2|method1::T*>*
+static method B2|method1<T extends core::Object* = dynamic>(lowered final self::B1<self::B2|method1::T*>* #this) → self::B1<self::B2|method1::T*>*
   ;
-static method B2|get#method1<T extends core::Object* = dynamic>(final self::B1<self::B2|get#method1::T*>* #this) → () →* self::B1<self::B2|get#method1::T*>*
+static method B2|get#method1<T extends core::Object* = dynamic>(lowered final self::B1<self::B2|get#method1::T*>* #this) → () →* self::B1<self::B2|get#method1::T*>*
   return () → self::B1<self::B2|get#method1::T*>* => self::B2|method1<self::B2|get#method1::T*>(#this);
-static method B2|method2<T extends core::Object* = dynamic, S extends core::Object* = dynamic>(final self::B1<self::B2|method2::T*>* #this, self::B2|method2::S* o) → self::B1<self::B2|method2::T*>*
+static method B2|method2<T extends core::Object* = dynamic, S extends core::Object* = dynamic>(lowered final self::B1<self::B2|method2::T*>* #this, self::B2|method2::S* o) → self::B1<self::B2|method2::T*>*
   ;
-static method B2|get#method2<T extends core::Object* = dynamic>(final self::B1<self::B2|get#method2::T*>* #this) → <S extends core::Object* = dynamic>(S*) →* self::B1<self::B2|get#method2::T*>*
+static method B2|get#method2<T extends core::Object* = dynamic>(lowered final self::B1<self::B2|get#method2::T*>* #this) → <S extends core::Object* = dynamic>(S*) →* self::B1<self::B2|get#method2::T*>*
   return <S extends core::Object* = dynamic>(S* o) → self::B1<self::B2|get#method2::T*>* => self::B2|method2<self::B2|get#method2::T*, S*>(#this, o);
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/use_this.dart.strong.expect b/pkg/front_end/testcases/extensions/use_this.dart.strong.expect
index f66aba6..f7ce7a4 100644
--- a/pkg/front_end/testcases/extensions/use_this.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/use_this.dart.strong.expect
@@ -44,26 +44,26 @@
   method method2 = self::B2|method2;
   tearoff method2 = self::B2|get#method2;
 }
-static method A2|method1(final self::A1* #this) → self::A1* {
+static method A2|method1(lowered final self::A1* #this) → self::A1* {
   return #this;
 }
-static method A2|get#method1(final self::A1* #this) → () →* self::A1*
+static method A2|get#method1(lowered final self::A1* #this) → () →* self::A1*
   return () → self::A1* => self::A2|method1(#this);
-static method A2|method2<T extends core::Object* = dynamic>(final self::A1* #this, self::A2|method2::T* o) → self::A1* {
+static method A2|method2<T extends core::Object* = dynamic>(lowered final self::A1* #this, self::A2|method2::T* o) → self::A1* {
   core::print(o);
   return #this;
 }
-static method A2|get#method2(final self::A1* #this) → <T extends core::Object* = dynamic>(T*) →* self::A1*
+static method A2|get#method2(lowered final self::A1* #this) → <T extends core::Object* = dynamic>(T*) →* self::A1*
   return <T extends core::Object* = dynamic>(T* o) → self::A1* => self::A2|method2<T*>(#this, o);
-static method B2|method1<T extends core::Object* = dynamic>(final self::B1<self::B2|method1::T*>* #this) → self::B1<self::B2|method1::T*>* {
+static method B2|method1<T extends core::Object* = dynamic>(lowered final self::B1<self::B2|method1::T*>* #this) → self::B1<self::B2|method1::T*>* {
   return #this;
 }
-static method B2|get#method1<T extends core::Object* = dynamic>(final self::B1<self::B2|get#method1::T*>* #this) → () →* self::B1<self::B2|get#method1::T*>*
+static method B2|get#method1<T extends core::Object* = dynamic>(lowered final self::B1<self::B2|get#method1::T*>* #this) → () →* self::B1<self::B2|get#method1::T*>*
   return () → self::B1<self::B2|get#method1::T*>* => self::B2|method1<self::B2|get#method1::T*>(#this);
-static method B2|method2<T extends core::Object* = dynamic, S extends core::Object* = dynamic>(final self::B1<self::B2|method2::T*>* #this, self::B2|method2::S* o) → self::B1<self::B2|method2::T*>* {
+static method B2|method2<T extends core::Object* = dynamic, S extends core::Object* = dynamic>(lowered final self::B1<self::B2|method2::T*>* #this, self::B2|method2::S* o) → self::B1<self::B2|method2::T*>* {
   core::print(o);
   return #this;
 }
-static method B2|get#method2<T extends core::Object* = dynamic>(final self::B1<self::B2|get#method2::T*>* #this) → <S extends core::Object* = dynamic>(S*) →* self::B1<self::B2|get#method2::T*>*
+static method B2|get#method2<T extends core::Object* = dynamic>(lowered final self::B1<self::B2|get#method2::T*>* #this) → <S extends core::Object* = dynamic>(S*) →* self::B1<self::B2|get#method2::T*>*
   return <S extends core::Object* = dynamic>(S* o) → self::B1<self::B2|get#method2::T*>* => self::B2|method2<self::B2|get#method2::T*, S*>(#this, o);
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/use_this.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/use_this.dart.strong.transformed.expect
index f66aba6..f7ce7a4 100644
--- a/pkg/front_end/testcases/extensions/use_this.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/use_this.dart.strong.transformed.expect
@@ -44,26 +44,26 @@
   method method2 = self::B2|method2;
   tearoff method2 = self::B2|get#method2;
 }
-static method A2|method1(final self::A1* #this) → self::A1* {
+static method A2|method1(lowered final self::A1* #this) → self::A1* {
   return #this;
 }
-static method A2|get#method1(final self::A1* #this) → () →* self::A1*
+static method A2|get#method1(lowered final self::A1* #this) → () →* self::A1*
   return () → self::A1* => self::A2|method1(#this);
-static method A2|method2<T extends core::Object* = dynamic>(final self::A1* #this, self::A2|method2::T* o) → self::A1* {
+static method A2|method2<T extends core::Object* = dynamic>(lowered final self::A1* #this, self::A2|method2::T* o) → self::A1* {
   core::print(o);
   return #this;
 }
-static method A2|get#method2(final self::A1* #this) → <T extends core::Object* = dynamic>(T*) →* self::A1*
+static method A2|get#method2(lowered final self::A1* #this) → <T extends core::Object* = dynamic>(T*) →* self::A1*
   return <T extends core::Object* = dynamic>(T* o) → self::A1* => self::A2|method2<T*>(#this, o);
-static method B2|method1<T extends core::Object* = dynamic>(final self::B1<self::B2|method1::T*>* #this) → self::B1<self::B2|method1::T*>* {
+static method B2|method1<T extends core::Object* = dynamic>(lowered final self::B1<self::B2|method1::T*>* #this) → self::B1<self::B2|method1::T*>* {
   return #this;
 }
-static method B2|get#method1<T extends core::Object* = dynamic>(final self::B1<self::B2|get#method1::T*>* #this) → () →* self::B1<self::B2|get#method1::T*>*
+static method B2|get#method1<T extends core::Object* = dynamic>(lowered final self::B1<self::B2|get#method1::T*>* #this) → () →* self::B1<self::B2|get#method1::T*>*
   return () → self::B1<self::B2|get#method1::T*>* => self::B2|method1<self::B2|get#method1::T*>(#this);
-static method B2|method2<T extends core::Object* = dynamic, S extends core::Object* = dynamic>(final self::B1<self::B2|method2::T*>* #this, self::B2|method2::S* o) → self::B1<self::B2|method2::T*>* {
+static method B2|method2<T extends core::Object* = dynamic, S extends core::Object* = dynamic>(lowered final self::B1<self::B2|method2::T*>* #this, self::B2|method2::S* o) → self::B1<self::B2|method2::T*>* {
   core::print(o);
   return #this;
 }
-static method B2|get#method2<T extends core::Object* = dynamic>(final self::B1<self::B2|get#method2::T*>* #this) → <S extends core::Object* = dynamic>(S*) →* self::B1<self::B2|get#method2::T*>*
+static method B2|get#method2<T extends core::Object* = dynamic>(lowered final self::B1<self::B2|get#method2::T*>* #this) → <S extends core::Object* = dynamic>(S*) →* self::B1<self::B2|get#method2::T*>*
   return <S extends core::Object* = dynamic>(S* o) → self::B1<self::B2|get#method2::T*>* => self::B2|method2<self::B2|get#method2::T*, S*>(#this, o);
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/getter_vs_setter_type.dart.outline.expect b/pkg/front_end/testcases/general/getter_vs_setter_type.dart.outline.expect
index f255528..587242a 100644
--- a/pkg/front_end/testcases/general/getter_vs_setter_type.dart.outline.expect
+++ b/pkg/front_end/testcases/general/getter_vs_setter_type.dart.outline.expect
@@ -361,37 +361,37 @@
   static set property8b = set self::Extension|property8b;
   static set property9 = set self::Extension|property9;
 }
-static method Extension|get#property1<T extends core::num* = core::num*, S extends self::Extension|get#property1::T* = core::num*>(final core::int* #this) → core::int*
+static method Extension|get#property1<T extends core::num* = core::num*, S extends self::Extension|get#property1::T* = core::num*>(lowered final core::int* #this) → core::int*
   ;
-static method Extension|set#property1<T extends core::num* = core::num*, S extends self::Extension|set#property1::T* = core::num*>(final core::int* #this, core::int* i) → void
+static method Extension|set#property1<T extends core::num* = core::num*, S extends self::Extension|set#property1::T* = core::num*>(lowered final core::int* #this, core::int* i) → void
   ;
-static method Extension|get#property2a<T extends core::num* = core::num*, S extends self::Extension|get#property2a::T* = core::num*>(final core::int* #this) → core::num*
+static method Extension|get#property2a<T extends core::num* = core::num*, S extends self::Extension|get#property2a::T* = core::num*>(lowered final core::int* #this) → core::num*
   ;
-static method Extension|set#property2a<T extends core::num* = core::num*, S extends self::Extension|set#property2a::T* = core::num*>(final core::int* #this, core::int* i) → void
+static method Extension|set#property2a<T extends core::num* = core::num*, S extends self::Extension|set#property2a::T* = core::num*>(lowered final core::int* #this, core::int* i) → void
   ;
-static method Extension|get#property2b<T extends core::num* = core::num*, S extends self::Extension|get#property2b::T* = core::num*>(final core::int* #this) → core::int*
+static method Extension|get#property2b<T extends core::num* = core::num*, S extends self::Extension|get#property2b::T* = core::num*>(lowered final core::int* #this) → core::int*
   ;
-static method Extension|set#property2b<T extends core::num* = core::num*, S extends self::Extension|set#property2b::T* = core::num*>(final core::int* #this, core::num* i) → void
+static method Extension|set#property2b<T extends core::num* = core::num*, S extends self::Extension|set#property2b::T* = core::num*>(lowered final core::int* #this, core::num* i) → void
   ;
-static method Extension|get#property3<T extends core::num* = core::num*, S extends self::Extension|get#property3::T* = core::num*>(final core::int* #this) → core::String*
+static method Extension|get#property3<T extends core::num* = core::num*, S extends self::Extension|get#property3::T* = core::num*>(lowered final core::int* #this) → core::String*
   ;
-static method Extension|set#property3<T extends core::num* = core::num*, S extends self::Extension|set#property3::T* = core::num*>(final core::int* #this, core::int* i) → void
+static method Extension|set#property3<T extends core::num* = core::num*, S extends self::Extension|set#property3::T* = core::num*>(lowered final core::int* #this, core::int* i) → void
   ;
-static method Extension|get#property4<T extends core::num* = core::num*, S extends self::Extension|get#property4::T* = core::num*>(final core::int* #this) → self::Extension|get#property4::S*
+static method Extension|get#property4<T extends core::num* = core::num*, S extends self::Extension|get#property4::T* = core::num*>(lowered final core::int* #this) → self::Extension|get#property4::S*
   ;
-static method Extension|set#property4<T extends core::num* = core::num*, S extends self::Extension|set#property4::T* = core::num*>(final core::int* #this, self::Extension|set#property4::S* i) → void
+static method Extension|set#property4<T extends core::num* = core::num*, S extends self::Extension|set#property4::T* = core::num*>(lowered final core::int* #this, self::Extension|set#property4::S* i) → void
   ;
-static method Extension|get#property5a<T extends core::num* = core::num*, S extends self::Extension|get#property5a::T* = core::num*>(final core::int* #this) → self::Extension|get#property5a::S*
+static method Extension|get#property5a<T extends core::num* = core::num*, S extends self::Extension|get#property5a::T* = core::num*>(lowered final core::int* #this) → self::Extension|get#property5a::S*
   ;
-static method Extension|set#property5a<T extends core::num* = core::num*, S extends self::Extension|set#property5a::T* = core::num*>(final core::int* #this, self::Extension|set#property5a::T* i) → void
+static method Extension|set#property5a<T extends core::num* = core::num*, S extends self::Extension|set#property5a::T* = core::num*>(lowered final core::int* #this, self::Extension|set#property5a::T* i) → void
   ;
-static method Extension|get#property5b<T extends core::num* = core::num*, S extends self::Extension|get#property5b::T* = core::num*>(final core::int* #this) → self::Extension|get#property5b::T*
+static method Extension|get#property5b<T extends core::num* = core::num*, S extends self::Extension|get#property5b::T* = core::num*>(lowered final core::int* #this) → self::Extension|get#property5b::T*
   ;
-static method Extension|set#property5b<T extends core::num* = core::num*, S extends self::Extension|set#property5b::T* = core::num*>(final core::int* #this, self::Extension|set#property5b::S* i) → void
+static method Extension|set#property5b<T extends core::num* = core::num*, S extends self::Extension|set#property5b::T* = core::num*>(lowered final core::int* #this, self::Extension|set#property5b::S* i) → void
   ;
-static method Extension|get#property6<T extends core::num* = core::num*, S extends self::Extension|get#property6::T* = core::num*>(final core::int* #this) → core::String*
+static method Extension|get#property6<T extends core::num* = core::num*, S extends self::Extension|get#property6::T* = core::num*>(lowered final core::int* #this) → core::String*
   ;
-static method Extension|set#property6<T extends core::num* = core::num*, S extends self::Extension|set#property6::T* = core::num*>(final core::int* #this, self::Extension|set#property6::S* i) → void
+static method Extension|set#property6<T extends core::num* = core::num*, S extends self::Extension|set#property6::T* = core::num*>(lowered final core::int* #this, self::Extension|set#property6::S* i) → void
   ;
 static get Extension|property7() → core::int*
   ;
diff --git a/pkg/front_end/testcases/general/getter_vs_setter_type.dart.strong.expect b/pkg/front_end/testcases/general/getter_vs_setter_type.dart.strong.expect
index 0ab82ac..1515fe4 100644
--- a/pkg/front_end/testcases/general/getter_vs_setter_type.dart.strong.expect
+++ b/pkg/front_end/testcases/general/getter_vs_setter_type.dart.strong.expect
@@ -378,36 +378,36 @@
   static set property8b = set self::Extension|property8b;
   static set property9 = set self::Extension|property9;
 }
-static method Extension|get#property1<T extends core::num* = core::num*, S extends self::Extension|get#property1::T* = core::num*>(final core::int* #this) → core::int*
+static method Extension|get#property1<T extends core::num* = core::num*, S extends self::Extension|get#property1::T* = core::num*>(lowered final core::int* #this) → core::int*
   return 0;
-static method Extension|set#property1<T extends core::num* = core::num*, S extends self::Extension|set#property1::T* = core::num*>(final core::int* #this, core::int* i) → void {}
-static method Extension|get#property2a<T extends core::num* = core::num*, S extends self::Extension|get#property2a::T* = core::num*>(final core::int* #this) → core::num*
+static method Extension|set#property1<T extends core::num* = core::num*, S extends self::Extension|set#property1::T* = core::num*>(lowered final core::int* #this, core::int* i) → void {}
+static method Extension|get#property2a<T extends core::num* = core::num*, S extends self::Extension|get#property2a::T* = core::num*>(lowered final core::int* #this) → core::num*
   return 0;
-static method Extension|set#property2a<T extends core::num* = core::num*, S extends self::Extension|set#property2a::T* = core::num*>(final core::int* #this, core::int* i) → void {}
-static method Extension|get#property2b<T extends core::num* = core::num*, S extends self::Extension|get#property2b::T* = core::num*>(final core::int* #this) → core::int*
+static method Extension|set#property2a<T extends core::num* = core::num*, S extends self::Extension|set#property2a::T* = core::num*>(lowered final core::int* #this, core::int* i) → void {}
+static method Extension|get#property2b<T extends core::num* = core::num*, S extends self::Extension|get#property2b::T* = core::num*>(lowered final core::int* #this) → core::int*
   return 0;
-static method Extension|set#property2b<T extends core::num* = core::num*, S extends self::Extension|set#property2b::T* = core::num*>(final core::int* #this, core::num* i) → void {}
-static method Extension|get#property3<T extends core::num* = core::num*, S extends self::Extension|get#property3::T* = core::num*>(final core::int* #this) → core::String*
+static method Extension|set#property2b<T extends core::num* = core::num*, S extends self::Extension|set#property2b::T* = core::num*>(lowered final core::int* #this, core::num* i) → void {}
+static method Extension|get#property3<T extends core::num* = core::num*, S extends self::Extension|get#property3::T* = core::num*>(lowered final core::int* #this) → core::String*
   return "";
-static method Extension|set#property3<T extends core::num* = core::num*, S extends self::Extension|set#property3::T* = core::num*>(final core::int* #this, core::int* i) → void {}
-static method Extension|get#property4<T extends core::num* = core::num*, S extends self::Extension|get#property4::T* = core::num*>(final core::int* #this) → self::Extension|get#property4::S*
+static method Extension|set#property3<T extends core::num* = core::num*, S extends self::Extension|set#property3::T* = core::num*>(lowered final core::int* #this, core::int* i) → void {}
+static method Extension|get#property4<T extends core::num* = core::num*, S extends self::Extension|get#property4::T* = core::num*>(lowered final core::int* #this) → self::Extension|get#property4::S*
   return let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/general/getter_vs_setter_type.dart:133:22: Error: A value of type 'int' can't be assigned to a variable of type 'S'.
   S get property4 => 0; // ok
                      ^" in 0 as{TypeError} <BottomType>;
-static method Extension|set#property4<T extends core::num* = core::num*, S extends self::Extension|set#property4::T* = core::num*>(final core::int* #this, self::Extension|set#property4::S* i) → void {}
-static method Extension|get#property5a<T extends core::num* = core::num*, S extends self::Extension|get#property5a::T* = core::num*>(final core::int* #this) → self::Extension|get#property5a::S*
+static method Extension|set#property4<T extends core::num* = core::num*, S extends self::Extension|set#property4::T* = core::num*>(lowered final core::int* #this, self::Extension|set#property4::S* i) → void {}
+static method Extension|get#property5a<T extends core::num* = core::num*, S extends self::Extension|get#property5a::T* = core::num*>(lowered final core::int* #this) → self::Extension|get#property5a::S*
   return let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/general/getter_vs_setter_type.dart:136:23: Error: A value of type 'int' can't be assigned to a variable of type 'S'.
   S get property5a => 0; // ok
                       ^" in 0 as{TypeError} <BottomType>;
-static method Extension|set#property5a<T extends core::num* = core::num*, S extends self::Extension|set#property5a::T* = core::num*>(final core::int* #this, self::Extension|set#property5a::T* i) → void {}
-static method Extension|get#property5b<T extends core::num* = core::num*, S extends self::Extension|get#property5b::T* = core::num*>(final core::int* #this) → self::Extension|get#property5b::T*
+static method Extension|set#property5a<T extends core::num* = core::num*, S extends self::Extension|set#property5a::T* = core::num*>(lowered final core::int* #this, self::Extension|set#property5a::T* i) → void {}
+static method Extension|get#property5b<T extends core::num* = core::num*, S extends self::Extension|get#property5b::T* = core::num*>(lowered final core::int* #this) → self::Extension|get#property5b::T*
   return let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/general/getter_vs_setter_type.dart:139:23: Error: A value of type 'int' can't be assigned to a variable of type 'T'.
   T get property5b => 0; // ok
                       ^" in 0 as{TypeError} <BottomType>;
-static method Extension|set#property5b<T extends core::num* = core::num*, S extends self::Extension|set#property5b::T* = core::num*>(final core::int* #this, self::Extension|set#property5b::S* i) → void {}
-static method Extension|get#property6<T extends core::num* = core::num*, S extends self::Extension|get#property6::T* = core::num*>(final core::int* #this) → core::String*
+static method Extension|set#property5b<T extends core::num* = core::num*, S extends self::Extension|set#property5b::T* = core::num*>(lowered final core::int* #this, self::Extension|set#property5b::S* i) → void {}
+static method Extension|get#property6<T extends core::num* = core::num*, S extends self::Extension|get#property6::T* = core::num*>(lowered final core::int* #this) → core::String*
   return "";
-static method Extension|set#property6<T extends core::num* = core::num*, S extends self::Extension|set#property6::T* = core::num*>(final core::int* #this, self::Extension|set#property6::S* i) → void {}
+static method Extension|set#property6<T extends core::num* = core::num*, S extends self::Extension|set#property6::T* = core::num*>(lowered final core::int* #this, self::Extension|set#property6::S* i) → void {}
 static get Extension|property7() → core::int*
   return 0;
 static set Extension|property7(core::int* value) → void {}
diff --git a/pkg/front_end/testcases/general/issue40242.dart.outline.expect b/pkg/front_end/testcases/general/issue40242.dart.outline.expect
index e0984be..09336b0 100644
--- a/pkg/front_end/testcases/general/issue40242.dart.outline.expect
+++ b/pkg/front_end/testcases/general/issue40242.dart.outline.expect
@@ -20,9 +20,9 @@
   method errors = self::E|errors;
   tearoff errors = self::E|get#errors;
 }
-static method E|errors(final self::C* #this) → dynamic
+static method E|errors(lowered final self::C* #this) → dynamic
   ;
-static method E|get#errors(final self::C* #this) → () →* dynamic
+static method E|get#errors(lowered final self::C* #this) → () →* dynamic
   return () → dynamic => self::E|errors(#this);
 static method errors() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/issue40242.dart.strong.expect b/pkg/front_end/testcases/general/issue40242.dart.strong.expect
index 69fa368..69ece96a 100644
--- a/pkg/front_end/testcases/general/issue40242.dart.strong.expect
+++ b/pkg/front_end/testcases/general/issue40242.dart.strong.expect
@@ -44,12 +44,12 @@
   method errors = self::E|errors;
   tearoff errors = self::E|get#errors;
 }
-static method E|errors(final self::C* #this) → dynamic {
+static method E|errors(lowered final self::C* #this) → dynamic {
   invalid-expression "pkg/front_end/testcases/general/issue40242.dart:9:5: Error: Can't assign to 'this'.
     this = new C();
     ^^^^";
 }
-static method E|get#errors(final self::C* #this) → () →* dynamic
+static method E|get#errors(lowered final self::C* #this) → () →* dynamic
   return () → dynamic => self::E|errors(#this);
 static method errors() → dynamic {
   final self::C* c1 = new self::C::•();
diff --git a/pkg/front_end/testcases/general/issue40242.dart.strong.transformed.expect b/pkg/front_end/testcases/general/issue40242.dart.strong.transformed.expect
index 69fa368..69ece96a 100644
--- a/pkg/front_end/testcases/general/issue40242.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/issue40242.dart.strong.transformed.expect
@@ -44,12 +44,12 @@
   method errors = self::E|errors;
   tearoff errors = self::E|get#errors;
 }
-static method E|errors(final self::C* #this) → dynamic {
+static method E|errors(lowered final self::C* #this) → dynamic {
   invalid-expression "pkg/front_end/testcases/general/issue40242.dart:9:5: Error: Can't assign to 'this'.
     this = new C();
     ^^^^";
 }
-static method E|get#errors(final self::C* #this) → () →* dynamic
+static method E|get#errors(lowered final self::C* #this) → () →* dynamic
   return () → dynamic => self::E|errors(#this);
 static method errors() → dynamic {
   final self::C* c1 = new self::C::•();
diff --git a/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.outline.expect b/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.outline.expect
index bc603fc..82ff41e 100644
--- a/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.outline.expect
+++ b/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.outline.expect
@@ -101,17 +101,17 @@
   tearoff bazOfE = self::E|get#bazOfE;
 }
 static field self::A<core::num*>* E|fieldOfE;
-static method E|fooOfE<X extends self::A<core::num*>* = self::A<core::num*>*>(final self::A<core::int*>* #this) → self::A<core::num*>*
+static method E|fooOfE<X extends self::A<core::num*>* = self::A<core::num*>*>(lowered final self::A<core::int*>* #this) → self::A<core::num*>*
   ;
-static method E|get#fooOfE<X extends self::A<core::num*>* = self::A<core::num*>*>(final self::A<core::int*>* #this) → () →* self::A<core::num*>*
+static method E|get#fooOfE<X extends self::A<core::num*>* = self::A<core::num*>*>(lowered final self::A<core::int*>* #this) → () →* self::A<core::num*>*
   return () → self::A<core::num*>* => self::E|fooOfE<self::E|get#fooOfE::X*>(#this);
-static method E|barOfE<X extends self::A<core::num*>* = self::A<core::num*>*>(final self::A<core::int*>* #this, self::A<core::num*>* a) → void
+static method E|barOfE<X extends self::A<core::num*>* = self::A<core::num*>*>(lowered final self::A<core::int*>* #this, self::A<core::num*>* a) → void
   ;
-static method E|get#barOfE<X extends self::A<core::num*>* = self::A<core::num*>*>(final self::A<core::int*>* #this) → (self::A<core::num*>*) →* void
+static method E|get#barOfE<X extends self::A<core::num*>* = self::A<core::num*>*>(lowered final self::A<core::int*>* #this) → (self::A<core::num*>*) →* void
   return (self::A<core::num*>* a) → void => self::E|barOfE<self::E|get#barOfE::X*>(#this, a);
-static method E|bazOfE<X extends self::A<core::num*>* = self::A<core::num*>*, Y extends self::A<core::num*>* = self::A<core::num*>*>(final self::A<core::int*>* #this) → void
+static method E|bazOfE<X extends self::A<core::num*>* = self::A<core::num*>*, Y extends self::A<core::num*>* = self::A<core::num*>*>(lowered final self::A<core::int*>* #this) → void
   ;
-static method E|get#bazOfE<X extends self::A<core::num*>* = self::A<core::num*>*>(final self::A<core::int*>* #this) → <Y extends self::A<core::num*>* = self::A<core::num*>*>() →* void
+static method E|get#bazOfE<X extends self::A<core::num*>* = self::A<core::num*>*>(lowered final self::A<core::int*>* #this) → <Y extends self::A<core::num*>* = self::A<core::num*>*>() →* void
   return <Y extends self::A<core::num*>* = self::A<core::num*>*>() → void => self::E|bazOfE<self::E|get#bazOfE::X*, Y*>(#this);
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.strong.expect b/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.strong.expect
index fa633e1b..56d2323 100644
--- a/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.strong.expect
+++ b/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.strong.expect
@@ -103,14 +103,14 @@
   tearoff bazOfE = self::E|get#bazOfE;
 }
 static field self::A<core::num*>* E|fieldOfE;
-static method E|fooOfE<X extends self::A<core::num*>* = self::A<core::num*>*>(final self::A<core::int*>* #this) → self::A<core::num*>*
+static method E|fooOfE<X extends self::A<core::num*>* = self::A<core::num*>*>(lowered final self::A<core::int*>* #this) → self::A<core::num*>*
   return null;
-static method E|get#fooOfE<X extends self::A<core::num*>* = self::A<core::num*>*>(final self::A<core::int*>* #this) → () →* self::A<core::num*>*
+static method E|get#fooOfE<X extends self::A<core::num*>* = self::A<core::num*>*>(lowered final self::A<core::int*>* #this) → () →* self::A<core::num*>*
   return () → self::A<core::num*>* => self::E|fooOfE<self::E|get#fooOfE::X*>(#this);
-static method E|barOfE<X extends self::A<core::num*>* = self::A<core::num*>*>(final self::A<core::int*>* #this, self::A<core::num*>* a) → void {}
-static method E|get#barOfE<X extends self::A<core::num*>* = self::A<core::num*>*>(final self::A<core::int*>* #this) → (self::A<core::num*>*) →* void
+static method E|barOfE<X extends self::A<core::num*>* = self::A<core::num*>*>(lowered final self::A<core::int*>* #this, self::A<core::num*>* a) → void {}
+static method E|get#barOfE<X extends self::A<core::num*>* = self::A<core::num*>*>(lowered final self::A<core::int*>* #this) → (self::A<core::num*>*) →* void
   return (self::A<core::num*>* a) → void => self::E|barOfE<self::E|get#barOfE::X*>(#this, a);
-static method E|bazOfE<X extends self::A<core::num*>* = self::A<core::num*>*, Y extends self::A<core::num*>* = self::A<core::num*>*>(final self::A<core::int*>* #this) → void {}
-static method E|get#bazOfE<X extends self::A<core::num*>* = self::A<core::num*>*>(final self::A<core::int*>* #this) → <Y extends self::A<core::num*>* = self::A<core::num*>*>() →* void
+static method E|bazOfE<X extends self::A<core::num*>* = self::A<core::num*>*, Y extends self::A<core::num*>* = self::A<core::num*>*>(lowered final self::A<core::int*>* #this) → void {}
+static method E|get#bazOfE<X extends self::A<core::num*>* = self::A<core::num*>*>(lowered final self::A<core::int*>* #this) → <Y extends self::A<core::num*>* = self::A<core::num*>*>() →* void
   return <Y extends self::A<core::num*>* = self::A<core::num*>*>() → void => self::E|bazOfE<self::E|get#bazOfE::X*, Y*>(#this);
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.strong.transformed.expect b/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.strong.transformed.expect
index fa633e1b..56d2323 100644
--- a/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.strong.transformed.expect
@@ -103,14 +103,14 @@
   tearoff bazOfE = self::E|get#bazOfE;
 }
 static field self::A<core::num*>* E|fieldOfE;
-static method E|fooOfE<X extends self::A<core::num*>* = self::A<core::num*>*>(final self::A<core::int*>* #this) → self::A<core::num*>*
+static method E|fooOfE<X extends self::A<core::num*>* = self::A<core::num*>*>(lowered final self::A<core::int*>* #this) → self::A<core::num*>*
   return null;
-static method E|get#fooOfE<X extends self::A<core::num*>* = self::A<core::num*>*>(final self::A<core::int*>* #this) → () →* self::A<core::num*>*
+static method E|get#fooOfE<X extends self::A<core::num*>* = self::A<core::num*>*>(lowered final self::A<core::int*>* #this) → () →* self::A<core::num*>*
   return () → self::A<core::num*>* => self::E|fooOfE<self::E|get#fooOfE::X*>(#this);
-static method E|barOfE<X extends self::A<core::num*>* = self::A<core::num*>*>(final self::A<core::int*>* #this, self::A<core::num*>* a) → void {}
-static method E|get#barOfE<X extends self::A<core::num*>* = self::A<core::num*>*>(final self::A<core::int*>* #this) → (self::A<core::num*>*) →* void
+static method E|barOfE<X extends self::A<core::num*>* = self::A<core::num*>*>(lowered final self::A<core::int*>* #this, self::A<core::num*>* a) → void {}
+static method E|get#barOfE<X extends self::A<core::num*>* = self::A<core::num*>*>(lowered final self::A<core::int*>* #this) → (self::A<core::num*>*) →* void
   return (self::A<core::num*>* a) → void => self::E|barOfE<self::E|get#barOfE::X*>(#this, a);
-static method E|bazOfE<X extends self::A<core::num*>* = self::A<core::num*>*, Y extends self::A<core::num*>* = self::A<core::num*>*>(final self::A<core::int*>* #this) → void {}
-static method E|get#bazOfE<X extends self::A<core::num*>* = self::A<core::num*>*>(final self::A<core::int*>* #this) → <Y extends self::A<core::num*>* = self::A<core::num*>*>() →* void
+static method E|bazOfE<X extends self::A<core::num*>* = self::A<core::num*>*, Y extends self::A<core::num*>* = self::A<core::num*>*>(lowered final self::A<core::int*>* #this) → void {}
+static method E|get#bazOfE<X extends self::A<core::num*>* = self::A<core::num*>*>(lowered final self::A<core::int*>* #this) → <Y extends self::A<core::num*>* = self::A<core::num*>*>() →* void
   return <Y extends self::A<core::num*>* = self::A<core::num*>*>() → void => self::E|bazOfE<self::E|get#bazOfE::X*, Y*>(#this);
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill.dart.outline.expect b/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill.dart.outline.expect
index f307bb3..3c9cb35 100644
--- a/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill.dart.outline.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill.dart.outline.expect
@@ -22,7 +22,7 @@
   method foo = ext::Extension|foo;
   tearoff foo = ext::Extension|get#foo;
 }
-static method Extension|foo(final core::String* #this) → dynamic
+static method Extension|foo(lowered final core::String* #this) → dynamic
   ;
-static method Extension|get#foo(final core::String* #this) → () →* dynamic
+static method Extension|get#foo(lowered final core::String* #this) → () →* dynamic
   return () → dynamic => ext::Extension|foo(#this);
diff --git a/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill.dart.strong.expect b/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill.dart.strong.expect
index 01e6ac2..aa7decf 100644
--- a/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill.dart.strong.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill.dart.strong.expect
@@ -24,7 +24,7 @@
   method foo = ext::Extension|foo;
   tearoff foo = ext::Extension|get#foo;
 }
-static method Extension|foo(final core::String* #this) → dynamic
+static method Extension|foo(lowered final core::String* #this) → dynamic
   return 42;
-static method Extension|get#foo(final core::String* #this) → () →* dynamic
+static method Extension|get#foo(lowered final core::String* #this) → () →* dynamic
   return () → dynamic => ext::Extension|foo(#this);
diff --git a/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill.dart.strong.transformed.expect b/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill.dart.strong.transformed.expect
index 01e6ac2..aa7decf 100644
--- a/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill.dart.strong.transformed.expect
@@ -24,7 +24,7 @@
   method foo = ext::Extension|foo;
   tearoff foo = ext::Extension|get#foo;
 }
-static method Extension|foo(final core::String* #this) → dynamic
+static method Extension|foo(lowered final core::String* #this) → dynamic
   return 42;
-static method Extension|get#foo(final core::String* #this) → () →* dynamic
+static method Extension|get#foo(lowered final core::String* #this) → () →* dynamic
   return () → dynamic => ext::Extension|foo(#this);
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/extension_expression_compilation_usage.yaml.world.1.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/extension_expression_compilation_usage.yaml.world.1.expect
index 73e7fda..361ccb3 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/extension_expression_compilation_usage.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/extension_expression_compilation_usage.yaml.world.1.expect
@@ -5,9 +5,9 @@
     method parseInt = main::NumberParsing|parseInt;
     tearoff parseInt = main::NumberParsing|get#parseInt;
   }
-  static method NumberParsing|parseInt(final dart.core::String* #this) → dart.core::int* {
+  static method NumberParsing|parseInt(lowered final dart.core::String* #this) → dart.core::int* {
     return dart.core::int::parse(#this);
   }
-  static method NumberParsing|get#parseInt(final dart.core::String* #this) → () →* dart.core::int*
+  static method NumberParsing|get#parseInt(lowered final dart.core::String* #this) → () →* dart.core::int*
     return () → dart.core::int* => main::NumberParsing|parseInt(#this);
 }
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/extension_usage_from_dill.yaml.world.1.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/extension_usage_from_dill.yaml.world.1.expect
index 58648d5..83ad3f0 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/extension_usage_from_dill.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/extension_usage_from_dill.yaml.world.1.expect
@@ -5,10 +5,10 @@
     method parseInt = lib1::NumberParsing|parseInt;
     tearoff parseInt = lib1::NumberParsing|get#parseInt;
   }
-  static method NumberParsing|parseInt(final dart.core::String* #this) → dart.core::int* {
+  static method NumberParsing|parseInt(lowered final dart.core::String* #this) → dart.core::int* {
     return dart.core::int::parse(#this);
   }
-  static method NumberParsing|get#parseInt(final dart.core::String* #this) → () →* dart.core::int*
+  static method NumberParsing|get#parseInt(lowered final dart.core::String* #this) → () →* dart.core::int*
     return () → dart.core::int* => lib1::NumberParsing|parseInt(#this);
 }
 library from "org-dartlang-test:///lib2.dart" as lib2 {
@@ -17,10 +17,10 @@
     method fooMe1 = lib2::DuplicateName|fooMe1;
     tearoff fooMe1 = lib2::DuplicateName|get#fooMe1;
   }
-  static method DuplicateName|fooMe1(final dart.core::String* #this) → dart.core::String* {
+  static method DuplicateName|fooMe1(lowered final dart.core::String* #this) → dart.core::String* {
     return "Foo1";
   }
-  static method DuplicateName|get#fooMe1(final dart.core::String* #this) → () →* dart.core::String*
+  static method DuplicateName|get#fooMe1(lowered final dart.core::String* #this) → () →* dart.core::String*
     return () → dart.core::String* => lib2::DuplicateName|fooMe1(#this);
 }
 library from "org-dartlang-test:///lib3.dart" as lib3 {
@@ -29,10 +29,10 @@
     method fooMe2 = lib3::DuplicateName|fooMe2;
     tearoff fooMe2 = lib3::DuplicateName|get#fooMe2;
   }
-  static method DuplicateName|fooMe2(final dart.core::String* #this) → dart.core::String* {
+  static method DuplicateName|fooMe2(lowered final dart.core::String* #this) → dart.core::String* {
     return "Foo2";
   }
-  static method DuplicateName|get#fooMe2(final dart.core::String* #this) → () →* dart.core::String*
+  static method DuplicateName|get#fooMe2(lowered final dart.core::String* #this) → () →* dart.core::String*
     return () → dart.core::String* => lib3::DuplicateName|fooMe2(#this);
 }
 library from "org-dartlang-test:///main.dart" as main {
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/extension_usage_from_dill.yaml.world.2.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/extension_usage_from_dill.yaml.world.2.expect
index 58648d5..83ad3f0 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/extension_usage_from_dill.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/extension_usage_from_dill.yaml.world.2.expect
@@ -5,10 +5,10 @@
     method parseInt = lib1::NumberParsing|parseInt;
     tearoff parseInt = lib1::NumberParsing|get#parseInt;
   }
-  static method NumberParsing|parseInt(final dart.core::String* #this) → dart.core::int* {
+  static method NumberParsing|parseInt(lowered final dart.core::String* #this) → dart.core::int* {
     return dart.core::int::parse(#this);
   }
-  static method NumberParsing|get#parseInt(final dart.core::String* #this) → () →* dart.core::int*
+  static method NumberParsing|get#parseInt(lowered final dart.core::String* #this) → () →* dart.core::int*
     return () → dart.core::int* => lib1::NumberParsing|parseInt(#this);
 }
 library from "org-dartlang-test:///lib2.dart" as lib2 {
@@ -17,10 +17,10 @@
     method fooMe1 = lib2::DuplicateName|fooMe1;
     tearoff fooMe1 = lib2::DuplicateName|get#fooMe1;
   }
-  static method DuplicateName|fooMe1(final dart.core::String* #this) → dart.core::String* {
+  static method DuplicateName|fooMe1(lowered final dart.core::String* #this) → dart.core::String* {
     return "Foo1";
   }
-  static method DuplicateName|get#fooMe1(final dart.core::String* #this) → () →* dart.core::String*
+  static method DuplicateName|get#fooMe1(lowered final dart.core::String* #this) → () →* dart.core::String*
     return () → dart.core::String* => lib2::DuplicateName|fooMe1(#this);
 }
 library from "org-dartlang-test:///lib3.dart" as lib3 {
@@ -29,10 +29,10 @@
     method fooMe2 = lib3::DuplicateName|fooMe2;
     tearoff fooMe2 = lib3::DuplicateName|get#fooMe2;
   }
-  static method DuplicateName|fooMe2(final dart.core::String* #this) → dart.core::String* {
+  static method DuplicateName|fooMe2(lowered final dart.core::String* #this) → dart.core::String* {
     return "Foo2";
   }
-  static method DuplicateName|get#fooMe2(final dart.core::String* #this) → () →* dart.core::String*
+  static method DuplicateName|get#fooMe2(lowered final dart.core::String* #this) → () →* dart.core::String*
     return () → dart.core::String* => lib3::DuplicateName|fooMe2(#this);
 }
 library from "org-dartlang-test:///main.dart" as main {
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_19.yaml.world.1.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_19.yaml.world.1.expect
index 07336f4..c11a0be 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_19.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_19.yaml.world.1.expect
@@ -29,14 +29,14 @@
   }
   static field dart.core::int* A2|staticField = 42;
   static final field dart.core::int* A2|staticFinalField = 42;
-  static method A2|method1(final main::A1* #this) → main::A1* {
+  static method A2|method1(lowered final main::A1* #this) → main::A1* {
     return #this;
   }
-  static method A2|get#method1(final main::A1* #this) → () →* main::A1*
+  static method A2|get#method1(lowered final main::A1* #this) → () →* main::A1*
     return () → main::A1* => main::A2|method1(#this);
-  static method A2|get#getter1(final main::A1* #this) → dart.core::String*
+  static method A2|get#getter1(lowered final main::A1* #this) → dart.core::String*
     return "42!";
-  static method A2|set#setter1(final main::A1* #this, dart.core::String* s) → void {}
+  static method A2|set#setter1(lowered final main::A1* #this, dart.core::String* s) → void {}
   static method A2|method2() → main::A1* {
     return null;
   }
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_19.yaml.world.2.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_19.yaml.world.2.expect
index 07336f4..c11a0be 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_19.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_19.yaml.world.2.expect
@@ -29,14 +29,14 @@
   }
   static field dart.core::int* A2|staticField = 42;
   static final field dart.core::int* A2|staticFinalField = 42;
-  static method A2|method1(final main::A1* #this) → main::A1* {
+  static method A2|method1(lowered final main::A1* #this) → main::A1* {
     return #this;
   }
-  static method A2|get#method1(final main::A1* #this) → () →* main::A1*
+  static method A2|get#method1(lowered final main::A1* #this) → () →* main::A1*
     return () → main::A1* => main::A2|method1(#this);
-  static method A2|get#getter1(final main::A1* #this) → dart.core::String*
+  static method A2|get#getter1(lowered final main::A1* #this) → dart.core::String*
     return "42!";
-  static method A2|set#setter1(final main::A1* #this, dart.core::String* s) → void {}
+  static method A2|set#setter1(lowered final main::A1* #this, dart.core::String* s) → void {}
   static method A2|method2() → main::A1* {
     return null;
   }
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_20.yaml.world.1.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_20.yaml.world.1.expect
index a9ef23e..c5238dd 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_20.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_20.yaml.world.1.expect
@@ -25,14 +25,14 @@
     set setter1 = main::_extension#0|set#setter1;
     static set setter2 = set main::_extension#0|setter2;
   }
-  static method _extension#0|method1(final main::A1* #this) → main::A1* {
+  static method _extension#0|method1(lowered final main::A1* #this) → main::A1* {
     return #this;
   }
-  static method _extension#0|get#method1(final main::A1* #this) → () →* main::A1*
+  static method _extension#0|get#method1(lowered final main::A1* #this) → () →* main::A1*
     return () → main::A1* => main::_extension#0|method1(#this);
-  static method _extension#0|get#getter1(final main::A1* #this) → dart.core::String*
+  static method _extension#0|get#getter1(lowered final main::A1* #this) → dart.core::String*
     return "42!";
-  static method _extension#0|set#setter1(final main::A1* #this, dart.core::String* s) → void {}
+  static method _extension#0|set#setter1(lowered final main::A1* #this, dart.core::String* s) → void {}
   static method _extension#0|method2() → main::A1* {
     return null;
   }
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_20.yaml.world.2.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_20.yaml.world.2.expect
index a9ef23e..c5238dd 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_20.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_20.yaml.world.2.expect
@@ -25,14 +25,14 @@
     set setter1 = main::_extension#0|set#setter1;
     static set setter2 = set main::_extension#0|setter2;
   }
-  static method _extension#0|method1(final main::A1* #this) → main::A1* {
+  static method _extension#0|method1(lowered final main::A1* #this) → main::A1* {
     return #this;
   }
-  static method _extension#0|get#method1(final main::A1* #this) → () →* main::A1*
+  static method _extension#0|get#method1(lowered final main::A1* #this) → () →* main::A1*
     return () → main::A1* => main::_extension#0|method1(#this);
-  static method _extension#0|get#getter1(final main::A1* #this) → dart.core::String*
+  static method _extension#0|get#getter1(lowered final main::A1* #this) → dart.core::String*
     return "42!";
-  static method _extension#0|set#setter1(final main::A1* #this, dart.core::String* s) → void {}
+  static method _extension#0|set#setter1(lowered final main::A1* #this, dart.core::String* s) → void {}
   static method _extension#0|method2() → main::A1* {
     return null;
   }
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_34.yaml.world.1.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_34.yaml.world.1.expect
index 6a509d9..c1889db 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_34.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_34.yaml.world.1.expect
@@ -12,8 +12,8 @@
     method method2 = lib1::Extension2|method2;
     tearoff method2 = lib1::Extension2|get#method2;
   }
-  static method Extension2|method2(final main::Class* #this) → void {}
-  static method Extension2|get#method2(final main::Class* #this) → () →* void
+  static method Extension2|method2(lowered final main::Class* #this) → void {}
+  static method Extension2|get#method2(lowered final main::Class* #this) → () →* void
     return () → void => lib1::Extension2|method2(#this);
   static method lib1() → dynamic {
     main::Class* a = new main::Class::•();
@@ -30,8 +30,8 @@
     method method3 = lib2::Extension3|method3;
     tearoff method3 = lib2::Extension3|get#method3;
   }
-  static method Extension3|method3(final main::Class* #this) → void {}
-  static method Extension3|get#method3(final main::Class* #this) → () →* void
+  static method Extension3|method3(lowered final main::Class* #this) → void {}
+  static method Extension3|get#method3(lowered final main::Class* #this) → () →* void
     return () → void => lib2::Extension3|method3(#this);
   static method lib2() → dynamic {
     main::Class* a = new main::Class::•();
@@ -65,8 +65,8 @@
     method method = main::Extension|method;
     tearoff method = main::Extension|get#method;
   }
-  static method Extension|method(final main::Class* #this) → void {}
-  static method Extension|get#method(final main::Class* #this) → () →* void
+  static method Extension|method(lowered final main::Class* #this) → void {}
+  static method Extension|get#method(lowered final main::Class* #this) → () →* void
     return () → void => main::Extension|method(#this);
   static method main() → dynamic {
     main::Class* a = new main::Class::•();
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_34.yaml.world.2.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_34.yaml.world.2.expect
index 2ffd6f9..7d35940 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_34.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_34.yaml.world.2.expect
@@ -12,8 +12,8 @@
     method method2 = lib1::Extension2|method2;
     tearoff method2 = lib1::Extension2|get#method2;
   }
-  static method Extension2|method2(final main::Class* #this) → void {}
-  static method Extension2|get#method2(final main::Class* #this) → () →* void
+  static method Extension2|method2(lowered final main::Class* #this) → void {}
+  static method Extension2|get#method2(lowered final main::Class* #this) → () →* void
     return () → void => lib1::Extension2|method2(#this);
   static method lib1() → dynamic {
     main::Class* a = new main::Class::•();
@@ -30,8 +30,8 @@
     method method3 = lib2::Extension3|method3;
     tearoff method3 = lib2::Extension3|get#method3;
   }
-  static method Extension3|method3(final main::Class* #this) → void {}
-  static method Extension3|get#method3(final main::Class* #this) → () →* void
+  static method Extension3|method3(lowered final main::Class* #this) → void {}
+  static method Extension3|get#method3(lowered final main::Class* #this) → () →* void
     return () → void => lib2::Extension3|method3(#this);
   static method lib2() → dynamic {
     main::Class* a = new main::Class::•();
@@ -65,8 +65,8 @@
     method method = main::Extension|method;
     tearoff method = main::Extension|get#method;
   }
-  static method Extension|method(final main::Class* #this) → void {}
-  static method Extension|get#method(final main::Class* #this) → () →* void
+  static method Extension|method(lowered final main::Class* #this) → void {}
+  static method Extension|get#method(lowered final main::Class* #this) → () →* void
     return () → void => main::Extension|method(#this);
   static method main() → dynamic {
     main::Class* a = new main::Class::•();
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_34.yaml.world.3.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_34.yaml.world.3.expect
index 9287c32..f07ce1c 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_34.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_34.yaml.world.3.expect
@@ -12,8 +12,8 @@
     method method2 = lib1::Extension2|method2;
     tearoff method2 = lib1::Extension2|get#method2;
   }
-  static method Extension2|method2(final main::Class* #this) → void {}
-  static method Extension2|get#method2(final main::Class* #this) → () →* void
+  static method Extension2|method2(lowered final main::Class* #this) → void {}
+  static method Extension2|get#method2(lowered final main::Class* #this) → () →* void
     return () → void => lib1::Extension2|method2(#this);
   static method lib1() → dynamic {
     main::Class* a = new main::Class::•();
@@ -30,8 +30,8 @@
     method method3 = lib2::Extension3|method3;
     tearoff method3 = lib2::Extension3|get#method3;
   }
-  static method Extension3|method3(final main::Class* #this) → void {}
-  static method Extension3|get#method3(final main::Class* #this) → () →* void
+  static method Extension3|method3(lowered final main::Class* #this) → void {}
+  static method Extension3|get#method3(lowered final main::Class* #this) → () →* void
     return () → void => lib2::Extension3|method3(#this);
   static method lib2() → dynamic {
     main::Class* a = new main::Class::•();
@@ -66,8 +66,8 @@
     method method = main::Extension|method;
     tearoff method = main::Extension|get#method;
   }
-  static method Extension|method(final main::Class* #this) → void {}
-  static method Extension|get#method(final main::Class* #this) → () →* void
+  static method Extension|method(lowered final main::Class* #this) → void {}
+  static method Extension|get#method(lowered final main::Class* #this) → () →* void
     return () → void => main::Extension|method(#this);
   static method main() → dynamic {
     main::Class* a = new main::Class::•();
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_34.yaml.world.4.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_34.yaml.world.4.expect
index 2e9599f..72bb927 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_34.yaml.world.4.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_34.yaml.world.4.expect
@@ -12,8 +12,8 @@
     method method2 = lib1::Extension2|method2;
     tearoff method2 = lib1::Extension2|get#method2;
   }
-  static method Extension2|method2(final main::Class* #this) → void {}
-  static method Extension2|get#method2(final main::Class* #this) → () →* void
+  static method Extension2|method2(lowered final main::Class* #this) → void {}
+  static method Extension2|get#method2(lowered final main::Class* #this) → () →* void
     return () → void => lib1::Extension2|method2(#this);
   static method lib1() → dynamic {
     main::Class* a = new main::Class::•();
@@ -31,8 +31,8 @@
     method method3 = lib2::Extension3|method3;
     tearoff method3 = lib2::Extension3|get#method3;
   }
-  static method Extension3|method3(final main::Class* #this) → void {}
-  static method Extension3|get#method3(final main::Class* #this) → () →* void
+  static method Extension3|method3(lowered final main::Class* #this) → void {}
+  static method Extension3|get#method3(lowered final main::Class* #this) → () →* void
     return () → void => lib2::Extension3|method3(#this);
   static method lib2() → dynamic {
     main::Class* a = new main::Class::•();
@@ -67,8 +67,8 @@
     method method = main::Extension|method;
     tearoff method = main::Extension|get#method;
   }
-  static method Extension|method(final main::Class* #this) → void {}
-  static method Extension|get#method(final main::Class* #this) → () →* void
+  static method Extension|method(lowered final main::Class* #this) → void {}
+  static method Extension|get#method(lowered final main::Class* #this) → () →* void
     return () → void => main::Extension|method(#this);
   static method main() → dynamic {
     main::Class* a = new main::Class::•();
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_40.yaml.world.1.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_40.yaml.world.1.expect
index 7c7bff1..e0981f7 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_40.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_40.yaml.world.1.expect
@@ -7,9 +7,9 @@
     method baz = lib1::Extension1|baz;
     tearoff baz = lib1::Extension1|get#baz;
   }
-  static method Extension1|baz(final main::A* #this) → dynamic
+  static method Extension1|baz(lowered final main::A* #this) → dynamic
     return 42;
-  static method Extension1|get#baz(final main::A* #this) → () →* dynamic
+  static method Extension1|get#baz(lowered final main::A* #this) → () →* dynamic
     return () → dynamic => lib1::Extension1|baz(#this);
 }
 library from "org-dartlang-test:///lib2.dart" as lib2 {
@@ -56,8 +56,8 @@
   static method main() → dynamic {
     lib2::method(new main::A::•());
   }
-  static method Extension2|boz(final main::A* #this) → dynamic
+  static method Extension2|boz(lowered final main::A* #this) → dynamic
     return 87;
-  static method Extension2|get#boz(final main::A* #this) → () →* dynamic
+  static method Extension2|get#boz(lowered final main::A* #this) → () →* dynamic
     return () → dynamic => main::Extension2|boz(#this);
 }
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_40.yaml.world.2.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_40.yaml.world.2.expect
index 3b56dcd..13f26e0 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_40.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_40.yaml.world.2.expect
@@ -7,9 +7,9 @@
     method baz = lib1::Extension1|baz;
     tearoff baz = lib1::Extension1|get#baz;
   }
-  static method Extension1|baz(final main::A* #this) → dynamic
+  static method Extension1|baz(lowered final main::A* #this) → dynamic
     return 42;
-  static method Extension1|get#baz(final main::A* #this) → () →* dynamic
+  static method Extension1|get#baz(lowered final main::A* #this) → () →* dynamic
     return () → dynamic => lib1::Extension1|baz(#this);
 }
 library from "org-dartlang-test:///lib2.dart" as lib2 {
@@ -57,8 +57,8 @@
   static method main() → dynamic {
     lib2::method(new main::A::•());
   }
-  static method Extension2|boz(final main::A* #this) → dynamic
+  static method Extension2|boz(lowered final main::A* #this) → dynamic
     return 87;
-  static method Extension2|get#boz(final main::A* #this) → () →* dynamic
+  static method Extension2|get#boz(lowered final main::A* #this) → () →* dynamic
     return () → dynamic => main::Extension2|boz(#this);
 }
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_40.yaml.world.3.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_40.yaml.world.3.expect
index 0958b1c..562f9d8 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_40.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_40.yaml.world.3.expect
@@ -7,9 +7,9 @@
     method baz = lib1::Extension1|baz;
     tearoff baz = lib1::Extension1|get#baz;
   }
-  static method Extension1|baz(final main::A* #this) → dynamic
+  static method Extension1|baz(lowered final main::A* #this) → dynamic
     return 42;
-  static method Extension1|get#baz(final main::A* #this) → () →* dynamic
+  static method Extension1|get#baz(lowered final main::A* #this) → () →* dynamic
     return () → dynamic => lib1::Extension1|baz(#this);
 }
 library from "org-dartlang-test:///lib2.dart" as lib2 {
@@ -57,8 +57,8 @@
   static method main() → dynamic {
     lib2::method(new main::A::•());
   }
-  static method Extension2|boz(final main::A* #this) → dynamic
+  static method Extension2|boz(lowered final main::A* #this) → dynamic
     return 123;
-  static method Extension2|get#boz(final main::A* #this) → () →* dynamic
+  static method Extension2|get#boz(lowered final main::A* #this) → () →* dynamic
     return () → dynamic => main::Extension2|boz(#this);
 }
diff --git a/pkg/front_end/testcases/late_lowering/compound.dart.strong.expect b/pkg/front_end/testcases/late_lowering/compound.dart.strong.expect
index 43cd6f1..39a246d 100644
--- a/pkg/front_end/testcases/late_lowering/compound.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/compound.dart.strong.expect
@@ -11,31 +11,31 @@
 import "dart:_internal" as _in;
 
 static method main() → dynamic {
-  core::int? local1;
+  lowered core::int? #local1;
   function #local1#get() → core::int
-    return let final core::int? #t1 = local1 in #t1.==(null) ?{core::int} throw new _in::LateError::localNI("local1") : #t1{core::int};
+    return let final core::int? #t1 = #local1 in #t1.==(null) ?{core::int} throw new _in::LateError::localNI("local1") : #t1{core::int};
   function #local1#set(core::int #t2) → dynamic
-    return local1 = #t2;
+    return #local1 = #t2;
   #local1#set.call(0);
   self::expect(0, #local1#get.call());
   #local1#set.call(#local1#get.call().{core::num::+}(2));
   self::expect(2, #local1#get.call());
-  core::int? local2;
+  lowered core::int? #local2;
   function #local2#get() → core::int
-    return let final core::int? #t3 = local2 in #t3.==(null) ?{core::int} local2 = 1 : #t3{core::int};
+    return let final core::int? #t3 = #local2 in #t3.==(null) ?{core::int} #local2 = 1 : #t3{core::int};
   function #local2#set(core::int #t4) → dynamic
-    return local2 = #t4;
+    return #local2 = #t4;
   self::expect(1, #local2#get.call());
   #local2#set.call(#local2#get.call().{core::num::+}(2));
   self::expect(3, #local2#get.call());
 }
 static method error() → dynamic {
-  final core::int? local;
+  lowered final core::int? #local;
   function #local#get() → core::int
-    return let final core::int? #t5 = local in #t5.==(null) ?{core::int} throw new _in::LateError::localNI("local") : #t5{core::int};
+    return let final core::int? #t5 = #local in #t5.==(null) ?{core::int} throw new _in::LateError::localNI("local") : #t5{core::int};
   function #local#set(core::int #t6) → dynamic
-    if(local.==(null))
-      return local = #t6;
+    if(#local.==(null))
+      return #local = #t6;
     else
       throw new _in::LateError::localAI("local");
   #local#set.call((let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/late_lowering/compound.dart:20:3: Error: Late variable 'local' without initializer is definitely unassigned.
diff --git a/pkg/front_end/testcases/late_lowering/compound.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/compound.dart.strong.transformed.expect
index 43cd6f1..39a246d 100644
--- a/pkg/front_end/testcases/late_lowering/compound.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/compound.dart.strong.transformed.expect
@@ -11,31 +11,31 @@
 import "dart:_internal" as _in;
 
 static method main() → dynamic {
-  core::int? local1;
+  lowered core::int? #local1;
   function #local1#get() → core::int
-    return let final core::int? #t1 = local1 in #t1.==(null) ?{core::int} throw new _in::LateError::localNI("local1") : #t1{core::int};
+    return let final core::int? #t1 = #local1 in #t1.==(null) ?{core::int} throw new _in::LateError::localNI("local1") : #t1{core::int};
   function #local1#set(core::int #t2) → dynamic
-    return local1 = #t2;
+    return #local1 = #t2;
   #local1#set.call(0);
   self::expect(0, #local1#get.call());
   #local1#set.call(#local1#get.call().{core::num::+}(2));
   self::expect(2, #local1#get.call());
-  core::int? local2;
+  lowered core::int? #local2;
   function #local2#get() → core::int
-    return let final core::int? #t3 = local2 in #t3.==(null) ?{core::int} local2 = 1 : #t3{core::int};
+    return let final core::int? #t3 = #local2 in #t3.==(null) ?{core::int} #local2 = 1 : #t3{core::int};
   function #local2#set(core::int #t4) → dynamic
-    return local2 = #t4;
+    return #local2 = #t4;
   self::expect(1, #local2#get.call());
   #local2#set.call(#local2#get.call().{core::num::+}(2));
   self::expect(3, #local2#get.call());
 }
 static method error() → dynamic {
-  final core::int? local;
+  lowered final core::int? #local;
   function #local#get() → core::int
-    return let final core::int? #t5 = local in #t5.==(null) ?{core::int} throw new _in::LateError::localNI("local") : #t5{core::int};
+    return let final core::int? #t5 = #local in #t5.==(null) ?{core::int} throw new _in::LateError::localNI("local") : #t5{core::int};
   function #local#set(core::int #t6) → dynamic
-    if(local.==(null))
-      return local = #t6;
+    if(#local.==(null))
+      return #local = #t6;
     else
       throw new _in::LateError::localAI("local");
   #local#set.call((let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/late_lowering/compound.dart:20:3: Error: Late variable 'local' without initializer is definitely unassigned.
diff --git a/pkg/front_end/testcases/late_lowering/compound.dart.weak.expect b/pkg/front_end/testcases/late_lowering/compound.dart.weak.expect
index 991bc7a..c56967b 100644
--- a/pkg/front_end/testcases/late_lowering/compound.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/compound.dart.weak.expect
@@ -11,46 +11,46 @@
 import "dart:_internal" as _in;
 
 static method main() → dynamic {
-  core::int? local1;
-  core::bool #local1#isSet = false;
+  lowered core::int? #local1;
+  lowered core::bool #local1#isSet = false;
   function #local1#get() → core::int
-    return #local1#isSet ?{core::int} local1{core::int} : throw new _in::LateError::localNI("local1");
+    return #local1#isSet ?{core::int} #local1{core::int} : throw new _in::LateError::localNI("local1");
   function #local1#set(core::int #t1) → dynamic {
     #local1#isSet = true;
-    return local1 = #t1;
+    return #local1 = #t1;
   }
   #local1#set.call(0);
   self::expect(0, #local1#get.call());
   #local1#set.call(#local1#get.call().{core::num::+}(2));
   self::expect(2, #local1#get.call());
-  core::int? local2;
-  core::bool #local2#isSet = false;
+  lowered core::int? #local2;
+  lowered core::bool #local2#isSet = false;
   function #local2#get() → core::int {
     if(!#local2#isSet) {
-      local2 = 1;
+      #local2 = 1;
       #local2#isSet = true;
     }
-    return local2{core::int};
+    return #local2{core::int};
   }
   function #local2#set(core::int #t2) → dynamic {
     #local2#isSet = true;
-    return local2 = #t2;
+    return #local2 = #t2;
   }
   self::expect(1, #local2#get.call());
   #local2#set.call(#local2#get.call().{core::num::+}(2));
   self::expect(3, #local2#get.call());
 }
 static method error() → dynamic {
-  final core::int? local;
-  core::bool #local#isSet = false;
+  lowered final core::int? #local;
+  lowered core::bool #local#isSet = false;
   function #local#get() → core::int
-    return #local#isSet ?{core::int} local{core::int} : throw new _in::LateError::localNI("local");
+    return #local#isSet ?{core::int} #local{core::int} : throw new _in::LateError::localNI("local");
   function #local#set(core::int #t3) → dynamic
     if(#local#isSet)
       throw new _in::LateError::localAI("local");
     else {
       #local#isSet = true;
-      return local = #t3;
+      return #local = #t3;
     }
   #local#set.call((let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/late_lowering/compound.dart:20:3: Error: Late variable 'local' without initializer is definitely unassigned.
   local += 0;
diff --git a/pkg/front_end/testcases/late_lowering/compound.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/compound.dart.weak.transformed.expect
index 991bc7a..c56967b 100644
--- a/pkg/front_end/testcases/late_lowering/compound.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/compound.dart.weak.transformed.expect
@@ -11,46 +11,46 @@
 import "dart:_internal" as _in;
 
 static method main() → dynamic {
-  core::int? local1;
-  core::bool #local1#isSet = false;
+  lowered core::int? #local1;
+  lowered core::bool #local1#isSet = false;
   function #local1#get() → core::int
-    return #local1#isSet ?{core::int} local1{core::int} : throw new _in::LateError::localNI("local1");
+    return #local1#isSet ?{core::int} #local1{core::int} : throw new _in::LateError::localNI("local1");
   function #local1#set(core::int #t1) → dynamic {
     #local1#isSet = true;
-    return local1 = #t1;
+    return #local1 = #t1;
   }
   #local1#set.call(0);
   self::expect(0, #local1#get.call());
   #local1#set.call(#local1#get.call().{core::num::+}(2));
   self::expect(2, #local1#get.call());
-  core::int? local2;
-  core::bool #local2#isSet = false;
+  lowered core::int? #local2;
+  lowered core::bool #local2#isSet = false;
   function #local2#get() → core::int {
     if(!#local2#isSet) {
-      local2 = 1;
+      #local2 = 1;
       #local2#isSet = true;
     }
-    return local2{core::int};
+    return #local2{core::int};
   }
   function #local2#set(core::int #t2) → dynamic {
     #local2#isSet = true;
-    return local2 = #t2;
+    return #local2 = #t2;
   }
   self::expect(1, #local2#get.call());
   #local2#set.call(#local2#get.call().{core::num::+}(2));
   self::expect(3, #local2#get.call());
 }
 static method error() → dynamic {
-  final core::int? local;
-  core::bool #local#isSet = false;
+  lowered final core::int? #local;
+  lowered core::bool #local#isSet = false;
   function #local#get() → core::int
-    return #local#isSet ?{core::int} local{core::int} : throw new _in::LateError::localNI("local");
+    return #local#isSet ?{core::int} #local{core::int} : throw new _in::LateError::localNI("local");
   function #local#set(core::int #t3) → dynamic
     if(#local#isSet)
       throw new _in::LateError::localAI("local");
     else {
       #local#isSet = true;
-      return local = #t3;
+      return #local = #t3;
     }
   #local#set.call((let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/late_lowering/compound.dart:20:3: Error: Late variable 'local' without initializer is definitely unassigned.
   local += 0;
diff --git a/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.strong.expect b/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.strong.expect
index ec6a51e..32bd105 100644
--- a/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.strong.expect
@@ -2,61 +2,61 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:16:3: Error: Late final variable 'local2' definitely assigned.
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:16:3: Error: Late final variable '#local2' definitely assigned.
 //   local2 = value; // error
-//   ^^^^^^
+//   ^^^^^^^
 //
-// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:17:3: Error: Late final variable 'local4' definitely assigned.
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:17:3: Error: Late final variable '#local4' definitely assigned.
 //   local4 = 0; // error
-//   ^^^^^^
+//   ^^^^^^^
 //
-// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:18:3: Error: Late final variable 'local6' definitely assigned.
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:18:3: Error: Late final variable '#local6' definitely assigned.
 //   local6 = 0; // error
-//   ^^^^^^
+//   ^^^^^^^
 //
-// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:30:3: Error: Late final variable 'local2' definitely assigned.
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:30:3: Error: Late final variable '#local2' definitely assigned.
 //   local2 = value; // error
-//   ^^^^^^
+//   ^^^^^^^
 //
-// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:31:3: Error: Late final variable 'local4' definitely assigned.
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:31:3: Error: Late final variable '#local4' definitely assigned.
 //   local4 = 0; // error
-//   ^^^^^^
+//   ^^^^^^^
 //
-// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:32:3: Error: Late final variable 'local6' definitely assigned.
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:32:3: Error: Late final variable '#local6' definitely assigned.
 //   local6 = 0; // error
-//   ^^^^^^
+//   ^^^^^^^
 //
-// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:50:3: Error: Late final variable 'local2' definitely assigned.
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:50:3: Error: Late final variable '#local2' definitely assigned.
 //   local2 = value; // error
-//   ^^^^^^
+//   ^^^^^^^
 //
-// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:51:3: Error: Late final variable 'local4' definitely assigned.
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:51:3: Error: Late final variable '#local4' definitely assigned.
 //   local4 = 0; // error
-//   ^^^^^^
+//   ^^^^^^^
 //
-// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:52:3: Error: Late final variable 'local6' definitely assigned.
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:52:3: Error: Late final variable '#local6' definitely assigned.
 //   local6 = 0; // error
-//   ^^^^^^
+//   ^^^^^^^
 //
-// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:70:3: Error: Late final variable 'local2' definitely assigned.
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:70:3: Error: Late final variable '#local2' definitely assigned.
 //   local2 = value; // error
-//   ^^^^^^
+//   ^^^^^^^
 //
-// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:71:3: Error: Late final variable 'local4' definitely assigned.
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:71:3: Error: Late final variable '#local4' definitely assigned.
 //   local4 = 0; // error
-//   ^^^^^^
+//   ^^^^^^^
 //
-// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:72:3: Error: Late final variable 'local6' definitely assigned.
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:72:3: Error: Late final variable '#local6' definitely assigned.
 //   local6 = 0; // error
-//   ^^^^^^
+//   ^^^^^^^
 //
-// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:80:3: Error: Late final variable 'local4' definitely assigned.
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:80:3: Error: Late final variable '#local4' definitely assigned.
 //   local4 += 0; // error
-//   ^^^^^^
+//   ^^^^^^^
 //
-// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:88:3: Error: Late final variable 'local4' definitely assigned.
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:88:3: Error: Late final variable '#local4' definitely assigned.
 //   local4 += 0; // error
-//   ^^^^^^
+//   ^^^^^^^
 //
 import self as self;
 import "dart:core" as core;
@@ -65,72 +65,72 @@
 import "dart:async";
 
 static field <T extends core::Object? = dynamic>(T%) → Null fieldDirect = <T extends core::Object? = dynamic>(T% value) → Null {
-  final T? local2;
-  core::bool #local2#isSet = false;
+  lowered final T? #local2;
+  lowered core::bool #local2#isSet = false;
   function #local2#get() → T%
-    return #local2#isSet ?{T%} local2{T%} : throw new _in::LateError::localNI("local2");
+    return #local2#isSet ?{T%} #local2{T%} : throw new _in::LateError::localNI("local2");
   function #local2#set(T% #t1) → dynamic
     if(#local2#isSet)
       throw new _in::LateError::localAI("local2");
     else {
       #local2#isSet = true;
-      return local2 = #t1;
+      return #local2 = #t1;
     }
-  final core::int? local4;
+  lowered final core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t2 = local4 in #t2.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t2{core::int};
+    return let final core::int? #t2 = #local4 in #t2.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t2{core::int};
   function #local4#set(core::int #t3) → dynamic
-    if(local4.==(null))
-      return local4 = #t3;
+    if(#local4.==(null))
+      return #local4 = #t3;
     else
       throw new _in::LateError::localAI("local4");
-  final FutureOr<core::int>? local6;
+  lowered final FutureOr<core::int>? #local6;
   function #local6#get() → FutureOr<core::int>
-    return let final FutureOr<core::int>? #t4 = local6 in #t4.==(null) ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t4{FutureOr<core::int>};
+    return let final FutureOr<core::int>? #t4 = #local6 in #t4.==(null) ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t4{FutureOr<core::int>};
   function #local6#set(FutureOr<core::int>#t5) → dynamic
-    if(local6.==(null))
-      return local6 = #t5;
+    if(#local6.==(null))
+      return #local6 = #t5;
     else
       throw new _in::LateError::localAI("local6");
   #local2#set.call(value);
   #local4#set.call(0);
   #local6#set.call(0);
-  let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:30:3: Error: Late final variable 'local2' definitely assigned.
+  let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:30:3: Error: Late final variable '#local2' definitely assigned.
   local2 = value; // error
-  ^^^^^^" in #local2#set.call(value);
-  let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:31:3: Error: Late final variable 'local4' definitely assigned.
+  ^^^^^^^" in #local2#set.call(value);
+  let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:31:3: Error: Late final variable '#local4' definitely assigned.
   local4 = 0; // error
-  ^^^^^^" in #local4#set.call(0);
-  let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:32:3: Error: Late final variable 'local6' definitely assigned.
+  ^^^^^^^" in #local4#set.call(0);
+  let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:32:3: Error: Late final variable '#local6' definitely assigned.
   local6 = 0; // error
-  ^^^^^^" in #local6#set.call(0);
+  ^^^^^^^" in #local6#set.call(0);
 };
 static field <T extends core::Object? = dynamic>(core::bool, T%) → Null fieldConditional = <T extends core::Object? = dynamic>(core::bool b, T% value) → Null {
-  final T? local2;
-  core::bool #local2#isSet = false;
+  lowered final T? #local2;
+  lowered core::bool #local2#isSet = false;
   function #local2#get() → T%
-    return #local2#isSet ?{T%} local2{T%} : throw new _in::LateError::localNI("local2");
+    return #local2#isSet ?{T%} #local2{T%} : throw new _in::LateError::localNI("local2");
   function #local2#set(T% #t9) → dynamic
     if(#local2#isSet)
       throw new _in::LateError::localAI("local2");
     else {
       #local2#isSet = true;
-      return local2 = #t9;
+      return #local2 = #t9;
     }
-  final core::int? local4;
+  lowered final core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t10 = local4 in #t10.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t10{core::int};
+    return let final core::int? #t10 = #local4 in #t10.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t10{core::int};
   function #local4#set(core::int #t11) → dynamic
-    if(local4.==(null))
-      return local4 = #t11;
+    if(#local4.==(null))
+      return #local4 = #t11;
     else
       throw new _in::LateError::localAI("local4");
-  final FutureOr<core::int>? local6;
+  lowered final FutureOr<core::int>? #local6;
   function #local6#get() → FutureOr<core::int>
-    return let final FutureOr<core::int>? #t12 = local6 in #t12.==(null) ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t12{FutureOr<core::int>};
+    return let final FutureOr<core::int>? #t12 = #local6 in #t12.==(null) ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t12{FutureOr<core::int>};
   function #local6#set(FutureOr<core::int>#t13) → dynamic
-    if(local6.==(null))
-      return local6 = #t13;
+    if(#local6.==(null))
+      return #local6 = #t13;
     else
       throw new _in::LateError::localAI("local6");
   if(b) {
@@ -141,97 +141,97 @@
   #local2#set.call(value);
   #local4#set.call(0);
   #local6#set.call(0);
-  let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:70:3: Error: Late final variable 'local2' definitely assigned.
+  let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:70:3: Error: Late final variable '#local2' definitely assigned.
   local2 = value; // error
-  ^^^^^^" in #local2#set.call(value);
-  let final<BottomType> #t15 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:71:3: Error: Late final variable 'local4' definitely assigned.
+  ^^^^^^^" in #local2#set.call(value);
+  let final<BottomType> #t15 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:71:3: Error: Late final variable '#local4' definitely assigned.
   local4 = 0; // error
-  ^^^^^^" in #local4#set.call(0);
-  let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:72:3: Error: Late final variable 'local6' definitely assigned.
+  ^^^^^^^" in #local4#set.call(0);
+  let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:72:3: Error: Late final variable '#local6' definitely assigned.
   local6 = 0; // error
-  ^^^^^^" in #local6#set.call(0);
+  ^^^^^^^" in #local6#set.call(0);
 };
 static field () → Null fieldCompound = () → Null {
-  final core::int? local4;
+  lowered final core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t17 = local4 in #t17.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t17{core::int};
+    return let final core::int? #t17 = #local4 in #t17.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t17{core::int};
   function #local4#set(core::int #t18) → dynamic
-    if(local4.==(null))
-      return local4 = #t18;
+    if(#local4.==(null))
+      return #local4 = #t18;
     else
       throw new _in::LateError::localAI("local4");
   #local4#set.call(0);
-  let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:88:3: Error: Late final variable 'local4' definitely assigned.
+  let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:88:3: Error: Late final variable '#local4' definitely assigned.
   local4 += 0; // error
-  ^^^^^^" in #local4#set.call(#local4#get.call().{core::num::+}(0));
+  ^^^^^^^" in #local4#set.call(#local4#get.call().{core::num::+}(0));
 };
 static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic {
-  final self::methodDirect::T? local2;
-  core::bool #local2#isSet = false;
+  lowered final self::methodDirect::T? #local2;
+  lowered core::bool #local2#isSet = false;
   function #local2#get() → self::methodDirect::T%
-    return #local2#isSet ?{self::methodDirect::T%} local2{self::methodDirect::T%} : throw new _in::LateError::localNI("local2");
+    return #local2#isSet ?{self::methodDirect::T%} #local2{self::methodDirect::T%} : throw new _in::LateError::localNI("local2");
   function #local2#set(self::methodDirect::T% #t20) → dynamic
     if(#local2#isSet)
       throw new _in::LateError::localAI("local2");
     else {
       #local2#isSet = true;
-      return local2 = #t20;
+      return #local2 = #t20;
     }
-  final core::int? local4;
+  lowered final core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t21 = local4 in #t21.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t21{core::int};
+    return let final core::int? #t21 = #local4 in #t21.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t21{core::int};
   function #local4#set(core::int #t22) → dynamic
-    if(local4.==(null))
-      return local4 = #t22;
+    if(#local4.==(null))
+      return #local4 = #t22;
     else
       throw new _in::LateError::localAI("local4");
-  final FutureOr<core::int>? local6;
+  lowered final FutureOr<core::int>? #local6;
   function #local6#get() → FutureOr<core::int>
-    return let final FutureOr<core::int>? #t23 = local6 in #t23.==(null) ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t23{FutureOr<core::int>};
+    return let final FutureOr<core::int>? #t23 = #local6 in #t23.==(null) ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t23{FutureOr<core::int>};
   function #local6#set(FutureOr<core::int>#t24) → dynamic
-    if(local6.==(null))
-      return local6 = #t24;
+    if(#local6.==(null))
+      return #local6 = #t24;
     else
       throw new _in::LateError::localAI("local6");
   #local2#set.call(value);
   #local4#set.call(0);
   #local6#set.call(0);
-  let final<BottomType> #t25 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:16:3: Error: Late final variable 'local2' definitely assigned.
+  let final<BottomType> #t25 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:16:3: Error: Late final variable '#local2' definitely assigned.
   local2 = value; // error
-  ^^^^^^" in #local2#set.call(value);
-  let final<BottomType> #t26 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:17:3: Error: Late final variable 'local4' definitely assigned.
+  ^^^^^^^" in #local2#set.call(value);
+  let final<BottomType> #t26 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:17:3: Error: Late final variable '#local4' definitely assigned.
   local4 = 0; // error
-  ^^^^^^" in #local4#set.call(0);
-  let final<BottomType> #t27 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:18:3: Error: Late final variable 'local6' definitely assigned.
+  ^^^^^^^" in #local4#set.call(0);
+  let final<BottomType> #t27 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:18:3: Error: Late final variable '#local6' definitely assigned.
   local6 = 0; // error
-  ^^^^^^" in #local6#set.call(0);
+  ^^^^^^^" in #local6#set.call(0);
 }
 static method methodConditional<T extends core::Object? = dynamic>(core::bool b, self::methodConditional::T% value) → dynamic {
-  final self::methodConditional::T? local2;
-  core::bool #local2#isSet = false;
+  lowered final self::methodConditional::T? #local2;
+  lowered core::bool #local2#isSet = false;
   function #local2#get() → self::methodConditional::T%
-    return #local2#isSet ?{self::methodConditional::T%} local2{self::methodConditional::T%} : throw new _in::LateError::localNI("local2");
+    return #local2#isSet ?{self::methodConditional::T%} #local2{self::methodConditional::T%} : throw new _in::LateError::localNI("local2");
   function #local2#set(self::methodConditional::T% #t28) → dynamic
     if(#local2#isSet)
       throw new _in::LateError::localAI("local2");
     else {
       #local2#isSet = true;
-      return local2 = #t28;
+      return #local2 = #t28;
     }
-  final core::int? local4;
+  lowered final core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t29 = local4 in #t29.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t29{core::int};
+    return let final core::int? #t29 = #local4 in #t29.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t29{core::int};
   function #local4#set(core::int #t30) → dynamic
-    if(local4.==(null))
-      return local4 = #t30;
+    if(#local4.==(null))
+      return #local4 = #t30;
     else
       throw new _in::LateError::localAI("local4");
-  final FutureOr<core::int>? local6;
+  lowered final FutureOr<core::int>? #local6;
   function #local6#get() → FutureOr<core::int>
-    return let final FutureOr<core::int>? #t31 = local6 in #t31.==(null) ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t31{FutureOr<core::int>};
+    return let final FutureOr<core::int>? #t31 = #local6 in #t31.==(null) ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t31{FutureOr<core::int>};
   function #local6#set(FutureOr<core::int>#t32) → dynamic
-    if(local6.==(null))
-      return local6 = #t32;
+    if(#local6.==(null))
+      return #local6 = #t32;
     else
       throw new _in::LateError::localAI("local6");
   if(b) {
@@ -242,28 +242,28 @@
   #local2#set.call(value);
   #local4#set.call(0);
   #local6#set.call(0);
-  let final<BottomType> #t33 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:50:3: Error: Late final variable 'local2' definitely assigned.
+  let final<BottomType> #t33 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:50:3: Error: Late final variable '#local2' definitely assigned.
   local2 = value; // error
-  ^^^^^^" in #local2#set.call(value);
-  let final<BottomType> #t34 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:51:3: Error: Late final variable 'local4' definitely assigned.
+  ^^^^^^^" in #local2#set.call(value);
+  let final<BottomType> #t34 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:51:3: Error: Late final variable '#local4' definitely assigned.
   local4 = 0; // error
-  ^^^^^^" in #local4#set.call(0);
-  let final<BottomType> #t35 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:52:3: Error: Late final variable 'local6' definitely assigned.
+  ^^^^^^^" in #local4#set.call(0);
+  let final<BottomType> #t35 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:52:3: Error: Late final variable '#local6' definitely assigned.
   local6 = 0; // error
-  ^^^^^^" in #local6#set.call(0);
+  ^^^^^^^" in #local6#set.call(0);
 }
 static method methodCompound() → dynamic {
-  final core::int? local4;
+  lowered final core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t36 = local4 in #t36.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t36{core::int};
+    return let final core::int? #t36 = #local4 in #t36.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t36{core::int};
   function #local4#set(core::int #t37) → dynamic
-    if(local4.==(null))
-      return local4 = #t37;
+    if(#local4.==(null))
+      return #local4 = #t37;
     else
       throw new _in::LateError::localAI("local4");
   #local4#set.call(0);
-  let final<BottomType> #t38 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:80:3: Error: Late final variable 'local4' definitely assigned.
+  let final<BottomType> #t38 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:80:3: Error: Late final variable '#local4' definitely assigned.
   local4 += 0; // error
-  ^^^^^^" in #local4#set.call(#local4#get.call().{core::num::+}(0));
+  ^^^^^^^" in #local4#set.call(#local4#get.call().{core::num::+}(0));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.strong.transformed.expect
index ec6a51e..32bd105 100644
--- a/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.strong.transformed.expect
@@ -2,61 +2,61 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:16:3: Error: Late final variable 'local2' definitely assigned.
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:16:3: Error: Late final variable '#local2' definitely assigned.
 //   local2 = value; // error
-//   ^^^^^^
+//   ^^^^^^^
 //
-// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:17:3: Error: Late final variable 'local4' definitely assigned.
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:17:3: Error: Late final variable '#local4' definitely assigned.
 //   local4 = 0; // error
-//   ^^^^^^
+//   ^^^^^^^
 //
-// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:18:3: Error: Late final variable 'local6' definitely assigned.
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:18:3: Error: Late final variable '#local6' definitely assigned.
 //   local6 = 0; // error
-//   ^^^^^^
+//   ^^^^^^^
 //
-// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:30:3: Error: Late final variable 'local2' definitely assigned.
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:30:3: Error: Late final variable '#local2' definitely assigned.
 //   local2 = value; // error
-//   ^^^^^^
+//   ^^^^^^^
 //
-// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:31:3: Error: Late final variable 'local4' definitely assigned.
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:31:3: Error: Late final variable '#local4' definitely assigned.
 //   local4 = 0; // error
-//   ^^^^^^
+//   ^^^^^^^
 //
-// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:32:3: Error: Late final variable 'local6' definitely assigned.
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:32:3: Error: Late final variable '#local6' definitely assigned.
 //   local6 = 0; // error
-//   ^^^^^^
+//   ^^^^^^^
 //
-// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:50:3: Error: Late final variable 'local2' definitely assigned.
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:50:3: Error: Late final variable '#local2' definitely assigned.
 //   local2 = value; // error
-//   ^^^^^^
+//   ^^^^^^^
 //
-// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:51:3: Error: Late final variable 'local4' definitely assigned.
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:51:3: Error: Late final variable '#local4' definitely assigned.
 //   local4 = 0; // error
-//   ^^^^^^
+//   ^^^^^^^
 //
-// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:52:3: Error: Late final variable 'local6' definitely assigned.
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:52:3: Error: Late final variable '#local6' definitely assigned.
 //   local6 = 0; // error
-//   ^^^^^^
+//   ^^^^^^^
 //
-// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:70:3: Error: Late final variable 'local2' definitely assigned.
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:70:3: Error: Late final variable '#local2' definitely assigned.
 //   local2 = value; // error
-//   ^^^^^^
+//   ^^^^^^^
 //
-// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:71:3: Error: Late final variable 'local4' definitely assigned.
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:71:3: Error: Late final variable '#local4' definitely assigned.
 //   local4 = 0; // error
-//   ^^^^^^
+//   ^^^^^^^
 //
-// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:72:3: Error: Late final variable 'local6' definitely assigned.
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:72:3: Error: Late final variable '#local6' definitely assigned.
 //   local6 = 0; // error
-//   ^^^^^^
+//   ^^^^^^^
 //
-// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:80:3: Error: Late final variable 'local4' definitely assigned.
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:80:3: Error: Late final variable '#local4' definitely assigned.
 //   local4 += 0; // error
-//   ^^^^^^
+//   ^^^^^^^
 //
-// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:88:3: Error: Late final variable 'local4' definitely assigned.
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:88:3: Error: Late final variable '#local4' definitely assigned.
 //   local4 += 0; // error
-//   ^^^^^^
+//   ^^^^^^^
 //
 import self as self;
 import "dart:core" as core;
@@ -65,72 +65,72 @@
 import "dart:async";
 
 static field <T extends core::Object? = dynamic>(T%) → Null fieldDirect = <T extends core::Object? = dynamic>(T% value) → Null {
-  final T? local2;
-  core::bool #local2#isSet = false;
+  lowered final T? #local2;
+  lowered core::bool #local2#isSet = false;
   function #local2#get() → T%
-    return #local2#isSet ?{T%} local2{T%} : throw new _in::LateError::localNI("local2");
+    return #local2#isSet ?{T%} #local2{T%} : throw new _in::LateError::localNI("local2");
   function #local2#set(T% #t1) → dynamic
     if(#local2#isSet)
       throw new _in::LateError::localAI("local2");
     else {
       #local2#isSet = true;
-      return local2 = #t1;
+      return #local2 = #t1;
     }
-  final core::int? local4;
+  lowered final core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t2 = local4 in #t2.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t2{core::int};
+    return let final core::int? #t2 = #local4 in #t2.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t2{core::int};
   function #local4#set(core::int #t3) → dynamic
-    if(local4.==(null))
-      return local4 = #t3;
+    if(#local4.==(null))
+      return #local4 = #t3;
     else
       throw new _in::LateError::localAI("local4");
-  final FutureOr<core::int>? local6;
+  lowered final FutureOr<core::int>? #local6;
   function #local6#get() → FutureOr<core::int>
-    return let final FutureOr<core::int>? #t4 = local6 in #t4.==(null) ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t4{FutureOr<core::int>};
+    return let final FutureOr<core::int>? #t4 = #local6 in #t4.==(null) ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t4{FutureOr<core::int>};
   function #local6#set(FutureOr<core::int>#t5) → dynamic
-    if(local6.==(null))
-      return local6 = #t5;
+    if(#local6.==(null))
+      return #local6 = #t5;
     else
       throw new _in::LateError::localAI("local6");
   #local2#set.call(value);
   #local4#set.call(0);
   #local6#set.call(0);
-  let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:30:3: Error: Late final variable 'local2' definitely assigned.
+  let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:30:3: Error: Late final variable '#local2' definitely assigned.
   local2 = value; // error
-  ^^^^^^" in #local2#set.call(value);
-  let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:31:3: Error: Late final variable 'local4' definitely assigned.
+  ^^^^^^^" in #local2#set.call(value);
+  let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:31:3: Error: Late final variable '#local4' definitely assigned.
   local4 = 0; // error
-  ^^^^^^" in #local4#set.call(0);
-  let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:32:3: Error: Late final variable 'local6' definitely assigned.
+  ^^^^^^^" in #local4#set.call(0);
+  let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:32:3: Error: Late final variable '#local6' definitely assigned.
   local6 = 0; // error
-  ^^^^^^" in #local6#set.call(0);
+  ^^^^^^^" in #local6#set.call(0);
 };
 static field <T extends core::Object? = dynamic>(core::bool, T%) → Null fieldConditional = <T extends core::Object? = dynamic>(core::bool b, T% value) → Null {
-  final T? local2;
-  core::bool #local2#isSet = false;
+  lowered final T? #local2;
+  lowered core::bool #local2#isSet = false;
   function #local2#get() → T%
-    return #local2#isSet ?{T%} local2{T%} : throw new _in::LateError::localNI("local2");
+    return #local2#isSet ?{T%} #local2{T%} : throw new _in::LateError::localNI("local2");
   function #local2#set(T% #t9) → dynamic
     if(#local2#isSet)
       throw new _in::LateError::localAI("local2");
     else {
       #local2#isSet = true;
-      return local2 = #t9;
+      return #local2 = #t9;
     }
-  final core::int? local4;
+  lowered final core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t10 = local4 in #t10.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t10{core::int};
+    return let final core::int? #t10 = #local4 in #t10.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t10{core::int};
   function #local4#set(core::int #t11) → dynamic
-    if(local4.==(null))
-      return local4 = #t11;
+    if(#local4.==(null))
+      return #local4 = #t11;
     else
       throw new _in::LateError::localAI("local4");
-  final FutureOr<core::int>? local6;
+  lowered final FutureOr<core::int>? #local6;
   function #local6#get() → FutureOr<core::int>
-    return let final FutureOr<core::int>? #t12 = local6 in #t12.==(null) ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t12{FutureOr<core::int>};
+    return let final FutureOr<core::int>? #t12 = #local6 in #t12.==(null) ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t12{FutureOr<core::int>};
   function #local6#set(FutureOr<core::int>#t13) → dynamic
-    if(local6.==(null))
-      return local6 = #t13;
+    if(#local6.==(null))
+      return #local6 = #t13;
     else
       throw new _in::LateError::localAI("local6");
   if(b) {
@@ -141,97 +141,97 @@
   #local2#set.call(value);
   #local4#set.call(0);
   #local6#set.call(0);
-  let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:70:3: Error: Late final variable 'local2' definitely assigned.
+  let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:70:3: Error: Late final variable '#local2' definitely assigned.
   local2 = value; // error
-  ^^^^^^" in #local2#set.call(value);
-  let final<BottomType> #t15 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:71:3: Error: Late final variable 'local4' definitely assigned.
+  ^^^^^^^" in #local2#set.call(value);
+  let final<BottomType> #t15 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:71:3: Error: Late final variable '#local4' definitely assigned.
   local4 = 0; // error
-  ^^^^^^" in #local4#set.call(0);
-  let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:72:3: Error: Late final variable 'local6' definitely assigned.
+  ^^^^^^^" in #local4#set.call(0);
+  let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:72:3: Error: Late final variable '#local6' definitely assigned.
   local6 = 0; // error
-  ^^^^^^" in #local6#set.call(0);
+  ^^^^^^^" in #local6#set.call(0);
 };
 static field () → Null fieldCompound = () → Null {
-  final core::int? local4;
+  lowered final core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t17 = local4 in #t17.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t17{core::int};
+    return let final core::int? #t17 = #local4 in #t17.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t17{core::int};
   function #local4#set(core::int #t18) → dynamic
-    if(local4.==(null))
-      return local4 = #t18;
+    if(#local4.==(null))
+      return #local4 = #t18;
     else
       throw new _in::LateError::localAI("local4");
   #local4#set.call(0);
-  let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:88:3: Error: Late final variable 'local4' definitely assigned.
+  let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:88:3: Error: Late final variable '#local4' definitely assigned.
   local4 += 0; // error
-  ^^^^^^" in #local4#set.call(#local4#get.call().{core::num::+}(0));
+  ^^^^^^^" in #local4#set.call(#local4#get.call().{core::num::+}(0));
 };
 static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic {
-  final self::methodDirect::T? local2;
-  core::bool #local2#isSet = false;
+  lowered final self::methodDirect::T? #local2;
+  lowered core::bool #local2#isSet = false;
   function #local2#get() → self::methodDirect::T%
-    return #local2#isSet ?{self::methodDirect::T%} local2{self::methodDirect::T%} : throw new _in::LateError::localNI("local2");
+    return #local2#isSet ?{self::methodDirect::T%} #local2{self::methodDirect::T%} : throw new _in::LateError::localNI("local2");
   function #local2#set(self::methodDirect::T% #t20) → dynamic
     if(#local2#isSet)
       throw new _in::LateError::localAI("local2");
     else {
       #local2#isSet = true;
-      return local2 = #t20;
+      return #local2 = #t20;
     }
-  final core::int? local4;
+  lowered final core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t21 = local4 in #t21.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t21{core::int};
+    return let final core::int? #t21 = #local4 in #t21.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t21{core::int};
   function #local4#set(core::int #t22) → dynamic
-    if(local4.==(null))
-      return local4 = #t22;
+    if(#local4.==(null))
+      return #local4 = #t22;
     else
       throw new _in::LateError::localAI("local4");
-  final FutureOr<core::int>? local6;
+  lowered final FutureOr<core::int>? #local6;
   function #local6#get() → FutureOr<core::int>
-    return let final FutureOr<core::int>? #t23 = local6 in #t23.==(null) ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t23{FutureOr<core::int>};
+    return let final FutureOr<core::int>? #t23 = #local6 in #t23.==(null) ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t23{FutureOr<core::int>};
   function #local6#set(FutureOr<core::int>#t24) → dynamic
-    if(local6.==(null))
-      return local6 = #t24;
+    if(#local6.==(null))
+      return #local6 = #t24;
     else
       throw new _in::LateError::localAI("local6");
   #local2#set.call(value);
   #local4#set.call(0);
   #local6#set.call(0);
-  let final<BottomType> #t25 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:16:3: Error: Late final variable 'local2' definitely assigned.
+  let final<BottomType> #t25 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:16:3: Error: Late final variable '#local2' definitely assigned.
   local2 = value; // error
-  ^^^^^^" in #local2#set.call(value);
-  let final<BottomType> #t26 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:17:3: Error: Late final variable 'local4' definitely assigned.
+  ^^^^^^^" in #local2#set.call(value);
+  let final<BottomType> #t26 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:17:3: Error: Late final variable '#local4' definitely assigned.
   local4 = 0; // error
-  ^^^^^^" in #local4#set.call(0);
-  let final<BottomType> #t27 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:18:3: Error: Late final variable 'local6' definitely assigned.
+  ^^^^^^^" in #local4#set.call(0);
+  let final<BottomType> #t27 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:18:3: Error: Late final variable '#local6' definitely assigned.
   local6 = 0; // error
-  ^^^^^^" in #local6#set.call(0);
+  ^^^^^^^" in #local6#set.call(0);
 }
 static method methodConditional<T extends core::Object? = dynamic>(core::bool b, self::methodConditional::T% value) → dynamic {
-  final self::methodConditional::T? local2;
-  core::bool #local2#isSet = false;
+  lowered final self::methodConditional::T? #local2;
+  lowered core::bool #local2#isSet = false;
   function #local2#get() → self::methodConditional::T%
-    return #local2#isSet ?{self::methodConditional::T%} local2{self::methodConditional::T%} : throw new _in::LateError::localNI("local2");
+    return #local2#isSet ?{self::methodConditional::T%} #local2{self::methodConditional::T%} : throw new _in::LateError::localNI("local2");
   function #local2#set(self::methodConditional::T% #t28) → dynamic
     if(#local2#isSet)
       throw new _in::LateError::localAI("local2");
     else {
       #local2#isSet = true;
-      return local2 = #t28;
+      return #local2 = #t28;
     }
-  final core::int? local4;
+  lowered final core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t29 = local4 in #t29.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t29{core::int};
+    return let final core::int? #t29 = #local4 in #t29.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t29{core::int};
   function #local4#set(core::int #t30) → dynamic
-    if(local4.==(null))
-      return local4 = #t30;
+    if(#local4.==(null))
+      return #local4 = #t30;
     else
       throw new _in::LateError::localAI("local4");
-  final FutureOr<core::int>? local6;
+  lowered final FutureOr<core::int>? #local6;
   function #local6#get() → FutureOr<core::int>
-    return let final FutureOr<core::int>? #t31 = local6 in #t31.==(null) ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t31{FutureOr<core::int>};
+    return let final FutureOr<core::int>? #t31 = #local6 in #t31.==(null) ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t31{FutureOr<core::int>};
   function #local6#set(FutureOr<core::int>#t32) → dynamic
-    if(local6.==(null))
-      return local6 = #t32;
+    if(#local6.==(null))
+      return #local6 = #t32;
     else
       throw new _in::LateError::localAI("local6");
   if(b) {
@@ -242,28 +242,28 @@
   #local2#set.call(value);
   #local4#set.call(0);
   #local6#set.call(0);
-  let final<BottomType> #t33 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:50:3: Error: Late final variable 'local2' definitely assigned.
+  let final<BottomType> #t33 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:50:3: Error: Late final variable '#local2' definitely assigned.
   local2 = value; // error
-  ^^^^^^" in #local2#set.call(value);
-  let final<BottomType> #t34 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:51:3: Error: Late final variable 'local4' definitely assigned.
+  ^^^^^^^" in #local2#set.call(value);
+  let final<BottomType> #t34 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:51:3: Error: Late final variable '#local4' definitely assigned.
   local4 = 0; // error
-  ^^^^^^" in #local4#set.call(0);
-  let final<BottomType> #t35 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:52:3: Error: Late final variable 'local6' definitely assigned.
+  ^^^^^^^" in #local4#set.call(0);
+  let final<BottomType> #t35 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:52:3: Error: Late final variable '#local6' definitely assigned.
   local6 = 0; // error
-  ^^^^^^" in #local6#set.call(0);
+  ^^^^^^^" in #local6#set.call(0);
 }
 static method methodCompound() → dynamic {
-  final core::int? local4;
+  lowered final core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t36 = local4 in #t36.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t36{core::int};
+    return let final core::int? #t36 = #local4 in #t36.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t36{core::int};
   function #local4#set(core::int #t37) → dynamic
-    if(local4.==(null))
-      return local4 = #t37;
+    if(#local4.==(null))
+      return #local4 = #t37;
     else
       throw new _in::LateError::localAI("local4");
   #local4#set.call(0);
-  let final<BottomType> #t38 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:80:3: Error: Late final variable 'local4' definitely assigned.
+  let final<BottomType> #t38 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:80:3: Error: Late final variable '#local4' definitely assigned.
   local4 += 0; // error
-  ^^^^^^" in #local4#set.call(#local4#get.call().{core::num::+}(0));
+  ^^^^^^^" in #local4#set.call(#local4#get.call().{core::num::+}(0));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.weak.expect b/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.weak.expect
index 0b4576c..aa4b724 100644
--- a/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.weak.expect
@@ -2,61 +2,61 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:16:3: Error: Late final variable 'local2' definitely assigned.
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:16:3: Error: Late final variable '#local2' definitely assigned.
 //   local2 = value; // error
-//   ^^^^^^
+//   ^^^^^^^
 //
-// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:17:3: Error: Late final variable 'local4' definitely assigned.
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:17:3: Error: Late final variable '#local4' definitely assigned.
 //   local4 = 0; // error
-//   ^^^^^^
+//   ^^^^^^^
 //
-// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:18:3: Error: Late final variable 'local6' definitely assigned.
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:18:3: Error: Late final variable '#local6' definitely assigned.
 //   local6 = 0; // error
-//   ^^^^^^
+//   ^^^^^^^
 //
-// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:30:3: Error: Late final variable 'local2' definitely assigned.
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:30:3: Error: Late final variable '#local2' definitely assigned.
 //   local2 = value; // error
-//   ^^^^^^
+//   ^^^^^^^
 //
-// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:31:3: Error: Late final variable 'local4' definitely assigned.
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:31:3: Error: Late final variable '#local4' definitely assigned.
 //   local4 = 0; // error
-//   ^^^^^^
+//   ^^^^^^^
 //
-// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:32:3: Error: Late final variable 'local6' definitely assigned.
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:32:3: Error: Late final variable '#local6' definitely assigned.
 //   local6 = 0; // error
-//   ^^^^^^
+//   ^^^^^^^
 //
-// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:50:3: Error: Late final variable 'local2' definitely assigned.
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:50:3: Error: Late final variable '#local2' definitely assigned.
 //   local2 = value; // error
-//   ^^^^^^
+//   ^^^^^^^
 //
-// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:51:3: Error: Late final variable 'local4' definitely assigned.
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:51:3: Error: Late final variable '#local4' definitely assigned.
 //   local4 = 0; // error
-//   ^^^^^^
+//   ^^^^^^^
 //
-// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:52:3: Error: Late final variable 'local6' definitely assigned.
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:52:3: Error: Late final variable '#local6' definitely assigned.
 //   local6 = 0; // error
-//   ^^^^^^
+//   ^^^^^^^
 //
-// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:70:3: Error: Late final variable 'local2' definitely assigned.
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:70:3: Error: Late final variable '#local2' definitely assigned.
 //   local2 = value; // error
-//   ^^^^^^
+//   ^^^^^^^
 //
-// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:71:3: Error: Late final variable 'local4' definitely assigned.
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:71:3: Error: Late final variable '#local4' definitely assigned.
 //   local4 = 0; // error
-//   ^^^^^^
+//   ^^^^^^^
 //
-// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:72:3: Error: Late final variable 'local6' definitely assigned.
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:72:3: Error: Late final variable '#local6' definitely assigned.
 //   local6 = 0; // error
-//   ^^^^^^
+//   ^^^^^^^
 //
-// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:80:3: Error: Late final variable 'local4' definitely assigned.
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:80:3: Error: Late final variable '#local4' definitely assigned.
 //   local4 += 0; // error
-//   ^^^^^^
+//   ^^^^^^^
 //
-// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:88:3: Error: Late final variable 'local4' definitely assigned.
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:88:3: Error: Late final variable '#local4' definitely assigned.
 //   local4 += 0; // error
-//   ^^^^^^
+//   ^^^^^^^
 //
 import self as self;
 import "dart:core" as core;
@@ -65,85 +65,85 @@
 import "dart:async";
 
 static field <T extends core::Object? = dynamic>(T%) → Null fieldDirect = <T extends core::Object? = dynamic>(T% value) → Null {
-  final T? local2;
-  core::bool #local2#isSet = false;
+  lowered final T? #local2;
+  lowered core::bool #local2#isSet = false;
   function #local2#get() → T%
-    return #local2#isSet ?{T%} local2{T%} : throw new _in::LateError::localNI("local2");
+    return #local2#isSet ?{T%} #local2{T%} : throw new _in::LateError::localNI("local2");
   function #local2#set(T% #t1) → dynamic
     if(#local2#isSet)
       throw new _in::LateError::localAI("local2");
     else {
       #local2#isSet = true;
-      return local2 = #t1;
+      return #local2 = #t1;
     }
-  final core::int? local4;
-  core::bool #local4#isSet = false;
+  lowered final core::int? #local4;
+  lowered core::bool #local4#isSet = false;
   function #local4#get() → core::int
-    return #local4#isSet ?{core::int} local4{core::int} : throw new _in::LateError::localNI("local4");
+    return #local4#isSet ?{core::int} #local4{core::int} : throw new _in::LateError::localNI("local4");
   function #local4#set(core::int #t2) → dynamic
     if(#local4#isSet)
       throw new _in::LateError::localAI("local4");
     else {
       #local4#isSet = true;
-      return local4 = #t2;
+      return #local4 = #t2;
     }
-  final FutureOr<core::int>? local6;
-  core::bool #local6#isSet = false;
+  lowered final FutureOr<core::int>? #local6;
+  lowered core::bool #local6#isSet = false;
   function #local6#get() → FutureOr<core::int>
-    return #local6#isSet ?{FutureOr<core::int>} local6{FutureOr<core::int>} : throw new _in::LateError::localNI("local6");
+    return #local6#isSet ?{FutureOr<core::int>} #local6{FutureOr<core::int>} : throw new _in::LateError::localNI("local6");
   function #local6#set(FutureOr<core::int>#t3) → dynamic
     if(#local6#isSet)
       throw new _in::LateError::localAI("local6");
     else {
       #local6#isSet = true;
-      return local6 = #t3;
+      return #local6 = #t3;
     }
   #local2#set.call(value);
   #local4#set.call(0);
   #local6#set.call(0);
-  let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:30:3: Error: Late final variable 'local2' definitely assigned.
+  let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:30:3: Error: Late final variable '#local2' definitely assigned.
   local2 = value; // error
-  ^^^^^^" in #local2#set.call(value);
-  let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:31:3: Error: Late final variable 'local4' definitely assigned.
+  ^^^^^^^" in #local2#set.call(value);
+  let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:31:3: Error: Late final variable '#local4' definitely assigned.
   local4 = 0; // error
-  ^^^^^^" in #local4#set.call(0);
-  let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:32:3: Error: Late final variable 'local6' definitely assigned.
+  ^^^^^^^" in #local4#set.call(0);
+  let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:32:3: Error: Late final variable '#local6' definitely assigned.
   local6 = 0; // error
-  ^^^^^^" in #local6#set.call(0);
+  ^^^^^^^" in #local6#set.call(0);
 };
 static field <T extends core::Object? = dynamic>(core::bool, T%) → Null fieldConditional = <T extends core::Object? = dynamic>(core::bool b, T% value) → Null {
-  final T? local2;
-  core::bool #local2#isSet = false;
+  lowered final T? #local2;
+  lowered core::bool #local2#isSet = false;
   function #local2#get() → T%
-    return #local2#isSet ?{T%} local2{T%} : throw new _in::LateError::localNI("local2");
+    return #local2#isSet ?{T%} #local2{T%} : throw new _in::LateError::localNI("local2");
   function #local2#set(T% #t7) → dynamic
     if(#local2#isSet)
       throw new _in::LateError::localAI("local2");
     else {
       #local2#isSet = true;
-      return local2 = #t7;
+      return #local2 = #t7;
     }
-  final core::int? local4;
-  core::bool #local4#isSet = false;
+  lowered final core::int? #local4;
+  lowered core::bool #local4#isSet = false;
   function #local4#get() → core::int
-    return #local4#isSet ?{core::int} local4{core::int} : throw new _in::LateError::localNI("local4");
+    return #local4#isSet ?{core::int} #local4{core::int} : throw new _in::LateError::localNI("local4");
   function #local4#set(core::int #t8) → dynamic
     if(#local4#isSet)
       throw new _in::LateError::localAI("local4");
     else {
       #local4#isSet = true;
-      return local4 = #t8;
+      return #local4 = #t8;
     }
-  final FutureOr<core::int>? local6;
-  core::bool #local6#isSet = false;
+  lowered final FutureOr<core::int>? #local6;
+  lowered core::bool #local6#isSet = false;
   function #local6#get() → FutureOr<core::int>
-    return #local6#isSet ?{FutureOr<core::int>} local6{FutureOr<core::int>} : throw new _in::LateError::localNI("local6");
+    return #local6#isSet ?{FutureOr<core::int>} #local6{FutureOr<core::int>} : throw new _in::LateError::localNI("local6");
   function #local6#set(FutureOr<core::int>#t9) → dynamic
     if(#local6#isSet)
       throw new _in::LateError::localAI("local6");
     else {
       #local6#isSet = true;
-      return local6 = #t9;
+      return #local6 = #t9;
     }
   if(b) {
     #local2#set.call(value);
@@ -153,113 +153,113 @@
   #local2#set.call(value);
   #local4#set.call(0);
   #local6#set.call(0);
-  let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:70:3: Error: Late final variable 'local2' definitely assigned.
+  let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:70:3: Error: Late final variable '#local2' definitely assigned.
   local2 = value; // error
-  ^^^^^^" in #local2#set.call(value);
-  let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:71:3: Error: Late final variable 'local4' definitely assigned.
+  ^^^^^^^" in #local2#set.call(value);
+  let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:71:3: Error: Late final variable '#local4' definitely assigned.
   local4 = 0; // error
-  ^^^^^^" in #local4#set.call(0);
-  let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:72:3: Error: Late final variable 'local6' definitely assigned.
+  ^^^^^^^" in #local4#set.call(0);
+  let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:72:3: Error: Late final variable '#local6' definitely assigned.
   local6 = 0; // error
-  ^^^^^^" in #local6#set.call(0);
+  ^^^^^^^" in #local6#set.call(0);
 };
 static field () → Null fieldCompound = () → Null {
-  final core::int? local4;
-  core::bool #local4#isSet = false;
+  lowered final core::int? #local4;
+  lowered core::bool #local4#isSet = false;
   function #local4#get() → core::int
-    return #local4#isSet ?{core::int} local4{core::int} : throw new _in::LateError::localNI("local4");
+    return #local4#isSet ?{core::int} #local4{core::int} : throw new _in::LateError::localNI("local4");
   function #local4#set(core::int #t13) → dynamic
     if(#local4#isSet)
       throw new _in::LateError::localAI("local4");
     else {
       #local4#isSet = true;
-      return local4 = #t13;
+      return #local4 = #t13;
     }
   #local4#set.call(0);
-  let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:88:3: Error: Late final variable 'local4' definitely assigned.
+  let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:88:3: Error: Late final variable '#local4' definitely assigned.
   local4 += 0; // error
-  ^^^^^^" in #local4#set.call(#local4#get.call().{core::num::+}(0));
+  ^^^^^^^" in #local4#set.call(#local4#get.call().{core::num::+}(0));
 };
 static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic {
-  final self::methodDirect::T? local2;
-  core::bool #local2#isSet = false;
+  lowered final self::methodDirect::T? #local2;
+  lowered core::bool #local2#isSet = false;
   function #local2#get() → self::methodDirect::T%
-    return #local2#isSet ?{self::methodDirect::T%} local2{self::methodDirect::T%} : throw new _in::LateError::localNI("local2");
+    return #local2#isSet ?{self::methodDirect::T%} #local2{self::methodDirect::T%} : throw new _in::LateError::localNI("local2");
   function #local2#set(self::methodDirect::T% #t15) → dynamic
     if(#local2#isSet)
       throw new _in::LateError::localAI("local2");
     else {
       #local2#isSet = true;
-      return local2 = #t15;
+      return #local2 = #t15;
     }
-  final core::int? local4;
-  core::bool #local4#isSet = false;
+  lowered final core::int? #local4;
+  lowered core::bool #local4#isSet = false;
   function #local4#get() → core::int
-    return #local4#isSet ?{core::int} local4{core::int} : throw new _in::LateError::localNI("local4");
+    return #local4#isSet ?{core::int} #local4{core::int} : throw new _in::LateError::localNI("local4");
   function #local4#set(core::int #t16) → dynamic
     if(#local4#isSet)
       throw new _in::LateError::localAI("local4");
     else {
       #local4#isSet = true;
-      return local4 = #t16;
+      return #local4 = #t16;
     }
-  final FutureOr<core::int>? local6;
-  core::bool #local6#isSet = false;
+  lowered final FutureOr<core::int>? #local6;
+  lowered core::bool #local6#isSet = false;
   function #local6#get() → FutureOr<core::int>
-    return #local6#isSet ?{FutureOr<core::int>} local6{FutureOr<core::int>} : throw new _in::LateError::localNI("local6");
+    return #local6#isSet ?{FutureOr<core::int>} #local6{FutureOr<core::int>} : throw new _in::LateError::localNI("local6");
   function #local6#set(FutureOr<core::int>#t17) → dynamic
     if(#local6#isSet)
       throw new _in::LateError::localAI("local6");
     else {
       #local6#isSet = true;
-      return local6 = #t17;
+      return #local6 = #t17;
     }
   #local2#set.call(value);
   #local4#set.call(0);
   #local6#set.call(0);
-  let final<BottomType> #t18 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:16:3: Error: Late final variable 'local2' definitely assigned.
+  let final<BottomType> #t18 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:16:3: Error: Late final variable '#local2' definitely assigned.
   local2 = value; // error
-  ^^^^^^" in #local2#set.call(value);
-  let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:17:3: Error: Late final variable 'local4' definitely assigned.
+  ^^^^^^^" in #local2#set.call(value);
+  let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:17:3: Error: Late final variable '#local4' definitely assigned.
   local4 = 0; // error
-  ^^^^^^" in #local4#set.call(0);
-  let final<BottomType> #t20 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:18:3: Error: Late final variable 'local6' definitely assigned.
+  ^^^^^^^" in #local4#set.call(0);
+  let final<BottomType> #t20 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:18:3: Error: Late final variable '#local6' definitely assigned.
   local6 = 0; // error
-  ^^^^^^" in #local6#set.call(0);
+  ^^^^^^^" in #local6#set.call(0);
 }
 static method methodConditional<T extends core::Object? = dynamic>(core::bool b, self::methodConditional::T% value) → dynamic {
-  final self::methodConditional::T? local2;
-  core::bool #local2#isSet = false;
+  lowered final self::methodConditional::T? #local2;
+  lowered core::bool #local2#isSet = false;
   function #local2#get() → self::methodConditional::T%
-    return #local2#isSet ?{self::methodConditional::T%} local2{self::methodConditional::T%} : throw new _in::LateError::localNI("local2");
+    return #local2#isSet ?{self::methodConditional::T%} #local2{self::methodConditional::T%} : throw new _in::LateError::localNI("local2");
   function #local2#set(self::methodConditional::T% #t21) → dynamic
     if(#local2#isSet)
       throw new _in::LateError::localAI("local2");
     else {
       #local2#isSet = true;
-      return local2 = #t21;
+      return #local2 = #t21;
     }
-  final core::int? local4;
-  core::bool #local4#isSet = false;
+  lowered final core::int? #local4;
+  lowered core::bool #local4#isSet = false;
   function #local4#get() → core::int
-    return #local4#isSet ?{core::int} local4{core::int} : throw new _in::LateError::localNI("local4");
+    return #local4#isSet ?{core::int} #local4{core::int} : throw new _in::LateError::localNI("local4");
   function #local4#set(core::int #t22) → dynamic
     if(#local4#isSet)
       throw new _in::LateError::localAI("local4");
     else {
       #local4#isSet = true;
-      return local4 = #t22;
+      return #local4 = #t22;
     }
-  final FutureOr<core::int>? local6;
-  core::bool #local6#isSet = false;
+  lowered final FutureOr<core::int>? #local6;
+  lowered core::bool #local6#isSet = false;
   function #local6#get() → FutureOr<core::int>
-    return #local6#isSet ?{FutureOr<core::int>} local6{FutureOr<core::int>} : throw new _in::LateError::localNI("local6");
+    return #local6#isSet ?{FutureOr<core::int>} #local6{FutureOr<core::int>} : throw new _in::LateError::localNI("local6");
   function #local6#set(FutureOr<core::int>#t23) → dynamic
     if(#local6#isSet)
       throw new _in::LateError::localAI("local6");
     else {
       #local6#isSet = true;
-      return local6 = #t23;
+      return #local6 = #t23;
     }
   if(b) {
     #local2#set.call(value);
@@ -269,31 +269,31 @@
   #local2#set.call(value);
   #local4#set.call(0);
   #local6#set.call(0);
-  let final<BottomType> #t24 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:50:3: Error: Late final variable 'local2' definitely assigned.
+  let final<BottomType> #t24 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:50:3: Error: Late final variable '#local2' definitely assigned.
   local2 = value; // error
-  ^^^^^^" in #local2#set.call(value);
-  let final<BottomType> #t25 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:51:3: Error: Late final variable 'local4' definitely assigned.
+  ^^^^^^^" in #local2#set.call(value);
+  let final<BottomType> #t25 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:51:3: Error: Late final variable '#local4' definitely assigned.
   local4 = 0; // error
-  ^^^^^^" in #local4#set.call(0);
-  let final<BottomType> #t26 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:52:3: Error: Late final variable 'local6' definitely assigned.
+  ^^^^^^^" in #local4#set.call(0);
+  let final<BottomType> #t26 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:52:3: Error: Late final variable '#local6' definitely assigned.
   local6 = 0; // error
-  ^^^^^^" in #local6#set.call(0);
+  ^^^^^^^" in #local6#set.call(0);
 }
 static method methodCompound() → dynamic {
-  final core::int? local4;
-  core::bool #local4#isSet = false;
+  lowered final core::int? #local4;
+  lowered core::bool #local4#isSet = false;
   function #local4#get() → core::int
-    return #local4#isSet ?{core::int} local4{core::int} : throw new _in::LateError::localNI("local4");
+    return #local4#isSet ?{core::int} #local4{core::int} : throw new _in::LateError::localNI("local4");
   function #local4#set(core::int #t27) → dynamic
     if(#local4#isSet)
       throw new _in::LateError::localAI("local4");
     else {
       #local4#isSet = true;
-      return local4 = #t27;
+      return #local4 = #t27;
     }
   #local4#set.call(0);
-  let final<BottomType> #t28 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:80:3: Error: Late final variable 'local4' definitely assigned.
+  let final<BottomType> #t28 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:80:3: Error: Late final variable '#local4' definitely assigned.
   local4 += 0; // error
-  ^^^^^^" in #local4#set.call(#local4#get.call().{core::num::+}(0));
+  ^^^^^^^" in #local4#set.call(#local4#get.call().{core::num::+}(0));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.weak.transformed.expect
index 0b4576c..aa4b724 100644
--- a/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.weak.transformed.expect
@@ -2,61 +2,61 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:16:3: Error: Late final variable 'local2' definitely assigned.
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:16:3: Error: Late final variable '#local2' definitely assigned.
 //   local2 = value; // error
-//   ^^^^^^
+//   ^^^^^^^
 //
-// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:17:3: Error: Late final variable 'local4' definitely assigned.
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:17:3: Error: Late final variable '#local4' definitely assigned.
 //   local4 = 0; // error
-//   ^^^^^^
+//   ^^^^^^^
 //
-// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:18:3: Error: Late final variable 'local6' definitely assigned.
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:18:3: Error: Late final variable '#local6' definitely assigned.
 //   local6 = 0; // error
-//   ^^^^^^
+//   ^^^^^^^
 //
-// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:30:3: Error: Late final variable 'local2' definitely assigned.
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:30:3: Error: Late final variable '#local2' definitely assigned.
 //   local2 = value; // error
-//   ^^^^^^
+//   ^^^^^^^
 //
-// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:31:3: Error: Late final variable 'local4' definitely assigned.
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:31:3: Error: Late final variable '#local4' definitely assigned.
 //   local4 = 0; // error
-//   ^^^^^^
+//   ^^^^^^^
 //
-// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:32:3: Error: Late final variable 'local6' definitely assigned.
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:32:3: Error: Late final variable '#local6' definitely assigned.
 //   local6 = 0; // error
-//   ^^^^^^
+//   ^^^^^^^
 //
-// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:50:3: Error: Late final variable 'local2' definitely assigned.
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:50:3: Error: Late final variable '#local2' definitely assigned.
 //   local2 = value; // error
-//   ^^^^^^
+//   ^^^^^^^
 //
-// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:51:3: Error: Late final variable 'local4' definitely assigned.
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:51:3: Error: Late final variable '#local4' definitely assigned.
 //   local4 = 0; // error
-//   ^^^^^^
+//   ^^^^^^^
 //
-// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:52:3: Error: Late final variable 'local6' definitely assigned.
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:52:3: Error: Late final variable '#local6' definitely assigned.
 //   local6 = 0; // error
-//   ^^^^^^
+//   ^^^^^^^
 //
-// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:70:3: Error: Late final variable 'local2' definitely assigned.
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:70:3: Error: Late final variable '#local2' definitely assigned.
 //   local2 = value; // error
-//   ^^^^^^
+//   ^^^^^^^
 //
-// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:71:3: Error: Late final variable 'local4' definitely assigned.
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:71:3: Error: Late final variable '#local4' definitely assigned.
 //   local4 = 0; // error
-//   ^^^^^^
+//   ^^^^^^^
 //
-// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:72:3: Error: Late final variable 'local6' definitely assigned.
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:72:3: Error: Late final variable '#local6' definitely assigned.
 //   local6 = 0; // error
-//   ^^^^^^
+//   ^^^^^^^
 //
-// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:80:3: Error: Late final variable 'local4' definitely assigned.
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:80:3: Error: Late final variable '#local4' definitely assigned.
 //   local4 += 0; // error
-//   ^^^^^^
+//   ^^^^^^^
 //
-// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:88:3: Error: Late final variable 'local4' definitely assigned.
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:88:3: Error: Late final variable '#local4' definitely assigned.
 //   local4 += 0; // error
-//   ^^^^^^
+//   ^^^^^^^
 //
 import self as self;
 import "dart:core" as core;
@@ -65,85 +65,85 @@
 import "dart:async";
 
 static field <T extends core::Object? = dynamic>(T%) → Null fieldDirect = <T extends core::Object? = dynamic>(T% value) → Null {
-  final T? local2;
-  core::bool #local2#isSet = false;
+  lowered final T? #local2;
+  lowered core::bool #local2#isSet = false;
   function #local2#get() → T%
-    return #local2#isSet ?{T%} local2{T%} : throw new _in::LateError::localNI("local2");
+    return #local2#isSet ?{T%} #local2{T%} : throw new _in::LateError::localNI("local2");
   function #local2#set(T% #t1) → dynamic
     if(#local2#isSet)
       throw new _in::LateError::localAI("local2");
     else {
       #local2#isSet = true;
-      return local2 = #t1;
+      return #local2 = #t1;
     }
-  final core::int? local4;
-  core::bool #local4#isSet = false;
+  lowered final core::int? #local4;
+  lowered core::bool #local4#isSet = false;
   function #local4#get() → core::int
-    return #local4#isSet ?{core::int} local4{core::int} : throw new _in::LateError::localNI("local4");
+    return #local4#isSet ?{core::int} #local4{core::int} : throw new _in::LateError::localNI("local4");
   function #local4#set(core::int #t2) → dynamic
     if(#local4#isSet)
       throw new _in::LateError::localAI("local4");
     else {
       #local4#isSet = true;
-      return local4 = #t2;
+      return #local4 = #t2;
     }
-  final FutureOr<core::int>? local6;
-  core::bool #local6#isSet = false;
+  lowered final FutureOr<core::int>? #local6;
+  lowered core::bool #local6#isSet = false;
   function #local6#get() → FutureOr<core::int>
-    return #local6#isSet ?{FutureOr<core::int>} local6{FutureOr<core::int>} : throw new _in::LateError::localNI("local6");
+    return #local6#isSet ?{FutureOr<core::int>} #local6{FutureOr<core::int>} : throw new _in::LateError::localNI("local6");
   function #local6#set(FutureOr<core::int>#t3) → dynamic
     if(#local6#isSet)
       throw new _in::LateError::localAI("local6");
     else {
       #local6#isSet = true;
-      return local6 = #t3;
+      return #local6 = #t3;
     }
   #local2#set.call(value);
   #local4#set.call(0);
   #local6#set.call(0);
-  let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:30:3: Error: Late final variable 'local2' definitely assigned.
+  let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:30:3: Error: Late final variable '#local2' definitely assigned.
   local2 = value; // error
-  ^^^^^^" in #local2#set.call(value);
-  let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:31:3: Error: Late final variable 'local4' definitely assigned.
+  ^^^^^^^" in #local2#set.call(value);
+  let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:31:3: Error: Late final variable '#local4' definitely assigned.
   local4 = 0; // error
-  ^^^^^^" in #local4#set.call(0);
-  let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:32:3: Error: Late final variable 'local6' definitely assigned.
+  ^^^^^^^" in #local4#set.call(0);
+  let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:32:3: Error: Late final variable '#local6' definitely assigned.
   local6 = 0; // error
-  ^^^^^^" in #local6#set.call(0);
+  ^^^^^^^" in #local6#set.call(0);
 };
 static field <T extends core::Object? = dynamic>(core::bool, T%) → Null fieldConditional = <T extends core::Object? = dynamic>(core::bool b, T% value) → Null {
-  final T? local2;
-  core::bool #local2#isSet = false;
+  lowered final T? #local2;
+  lowered core::bool #local2#isSet = false;
   function #local2#get() → T%
-    return #local2#isSet ?{T%} local2{T%} : throw new _in::LateError::localNI("local2");
+    return #local2#isSet ?{T%} #local2{T%} : throw new _in::LateError::localNI("local2");
   function #local2#set(T% #t7) → dynamic
     if(#local2#isSet)
       throw new _in::LateError::localAI("local2");
     else {
       #local2#isSet = true;
-      return local2 = #t7;
+      return #local2 = #t7;
     }
-  final core::int? local4;
-  core::bool #local4#isSet = false;
+  lowered final core::int? #local4;
+  lowered core::bool #local4#isSet = false;
   function #local4#get() → core::int
-    return #local4#isSet ?{core::int} local4{core::int} : throw new _in::LateError::localNI("local4");
+    return #local4#isSet ?{core::int} #local4{core::int} : throw new _in::LateError::localNI("local4");
   function #local4#set(core::int #t8) → dynamic
     if(#local4#isSet)
       throw new _in::LateError::localAI("local4");
     else {
       #local4#isSet = true;
-      return local4 = #t8;
+      return #local4 = #t8;
     }
-  final FutureOr<core::int>? local6;
-  core::bool #local6#isSet = false;
+  lowered final FutureOr<core::int>? #local6;
+  lowered core::bool #local6#isSet = false;
   function #local6#get() → FutureOr<core::int>
-    return #local6#isSet ?{FutureOr<core::int>} local6{FutureOr<core::int>} : throw new _in::LateError::localNI("local6");
+    return #local6#isSet ?{FutureOr<core::int>} #local6{FutureOr<core::int>} : throw new _in::LateError::localNI("local6");
   function #local6#set(FutureOr<core::int>#t9) → dynamic
     if(#local6#isSet)
       throw new _in::LateError::localAI("local6");
     else {
       #local6#isSet = true;
-      return local6 = #t9;
+      return #local6 = #t9;
     }
   if(b) {
     #local2#set.call(value);
@@ -153,113 +153,113 @@
   #local2#set.call(value);
   #local4#set.call(0);
   #local6#set.call(0);
-  let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:70:3: Error: Late final variable 'local2' definitely assigned.
+  let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:70:3: Error: Late final variable '#local2' definitely assigned.
   local2 = value; // error
-  ^^^^^^" in #local2#set.call(value);
-  let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:71:3: Error: Late final variable 'local4' definitely assigned.
+  ^^^^^^^" in #local2#set.call(value);
+  let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:71:3: Error: Late final variable '#local4' definitely assigned.
   local4 = 0; // error
-  ^^^^^^" in #local4#set.call(0);
-  let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:72:3: Error: Late final variable 'local6' definitely assigned.
+  ^^^^^^^" in #local4#set.call(0);
+  let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:72:3: Error: Late final variable '#local6' definitely assigned.
   local6 = 0; // error
-  ^^^^^^" in #local6#set.call(0);
+  ^^^^^^^" in #local6#set.call(0);
 };
 static field () → Null fieldCompound = () → Null {
-  final core::int? local4;
-  core::bool #local4#isSet = false;
+  lowered final core::int? #local4;
+  lowered core::bool #local4#isSet = false;
   function #local4#get() → core::int
-    return #local4#isSet ?{core::int} local4{core::int} : throw new _in::LateError::localNI("local4");
+    return #local4#isSet ?{core::int} #local4{core::int} : throw new _in::LateError::localNI("local4");
   function #local4#set(core::int #t13) → dynamic
     if(#local4#isSet)
       throw new _in::LateError::localAI("local4");
     else {
       #local4#isSet = true;
-      return local4 = #t13;
+      return #local4 = #t13;
     }
   #local4#set.call(0);
-  let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:88:3: Error: Late final variable 'local4' definitely assigned.
+  let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:88:3: Error: Late final variable '#local4' definitely assigned.
   local4 += 0; // error
-  ^^^^^^" in #local4#set.call(#local4#get.call().{core::num::+}(0));
+  ^^^^^^^" in #local4#set.call(#local4#get.call().{core::num::+}(0));
 };
 static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic {
-  final self::methodDirect::T? local2;
-  core::bool #local2#isSet = false;
+  lowered final self::methodDirect::T? #local2;
+  lowered core::bool #local2#isSet = false;
   function #local2#get() → self::methodDirect::T%
-    return #local2#isSet ?{self::methodDirect::T%} local2{self::methodDirect::T%} : throw new _in::LateError::localNI("local2");
+    return #local2#isSet ?{self::methodDirect::T%} #local2{self::methodDirect::T%} : throw new _in::LateError::localNI("local2");
   function #local2#set(self::methodDirect::T% #t15) → dynamic
     if(#local2#isSet)
       throw new _in::LateError::localAI("local2");
     else {
       #local2#isSet = true;
-      return local2 = #t15;
+      return #local2 = #t15;
     }
-  final core::int? local4;
-  core::bool #local4#isSet = false;
+  lowered final core::int? #local4;
+  lowered core::bool #local4#isSet = false;
   function #local4#get() → core::int
-    return #local4#isSet ?{core::int} local4{core::int} : throw new _in::LateError::localNI("local4");
+    return #local4#isSet ?{core::int} #local4{core::int} : throw new _in::LateError::localNI("local4");
   function #local4#set(core::int #t16) → dynamic
     if(#local4#isSet)
       throw new _in::LateError::localAI("local4");
     else {
       #local4#isSet = true;
-      return local4 = #t16;
+      return #local4 = #t16;
     }
-  final FutureOr<core::int>? local6;
-  core::bool #local6#isSet = false;
+  lowered final FutureOr<core::int>? #local6;
+  lowered core::bool #local6#isSet = false;
   function #local6#get() → FutureOr<core::int>
-    return #local6#isSet ?{FutureOr<core::int>} local6{FutureOr<core::int>} : throw new _in::LateError::localNI("local6");
+    return #local6#isSet ?{FutureOr<core::int>} #local6{FutureOr<core::int>} : throw new _in::LateError::localNI("local6");
   function #local6#set(FutureOr<core::int>#t17) → dynamic
     if(#local6#isSet)
       throw new _in::LateError::localAI("local6");
     else {
       #local6#isSet = true;
-      return local6 = #t17;
+      return #local6 = #t17;
     }
   #local2#set.call(value);
   #local4#set.call(0);
   #local6#set.call(0);
-  let final<BottomType> #t18 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:16:3: Error: Late final variable 'local2' definitely assigned.
+  let final<BottomType> #t18 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:16:3: Error: Late final variable '#local2' definitely assigned.
   local2 = value; // error
-  ^^^^^^" in #local2#set.call(value);
-  let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:17:3: Error: Late final variable 'local4' definitely assigned.
+  ^^^^^^^" in #local2#set.call(value);
+  let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:17:3: Error: Late final variable '#local4' definitely assigned.
   local4 = 0; // error
-  ^^^^^^" in #local4#set.call(0);
-  let final<BottomType> #t20 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:18:3: Error: Late final variable 'local6' definitely assigned.
+  ^^^^^^^" in #local4#set.call(0);
+  let final<BottomType> #t20 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:18:3: Error: Late final variable '#local6' definitely assigned.
   local6 = 0; // error
-  ^^^^^^" in #local6#set.call(0);
+  ^^^^^^^" in #local6#set.call(0);
 }
 static method methodConditional<T extends core::Object? = dynamic>(core::bool b, self::methodConditional::T% value) → dynamic {
-  final self::methodConditional::T? local2;
-  core::bool #local2#isSet = false;
+  lowered final self::methodConditional::T? #local2;
+  lowered core::bool #local2#isSet = false;
   function #local2#get() → self::methodConditional::T%
-    return #local2#isSet ?{self::methodConditional::T%} local2{self::methodConditional::T%} : throw new _in::LateError::localNI("local2");
+    return #local2#isSet ?{self::methodConditional::T%} #local2{self::methodConditional::T%} : throw new _in::LateError::localNI("local2");
   function #local2#set(self::methodConditional::T% #t21) → dynamic
     if(#local2#isSet)
       throw new _in::LateError::localAI("local2");
     else {
       #local2#isSet = true;
-      return local2 = #t21;
+      return #local2 = #t21;
     }
-  final core::int? local4;
-  core::bool #local4#isSet = false;
+  lowered final core::int? #local4;
+  lowered core::bool #local4#isSet = false;
   function #local4#get() → core::int
-    return #local4#isSet ?{core::int} local4{core::int} : throw new _in::LateError::localNI("local4");
+    return #local4#isSet ?{core::int} #local4{core::int} : throw new _in::LateError::localNI("local4");
   function #local4#set(core::int #t22) → dynamic
     if(#local4#isSet)
       throw new _in::LateError::localAI("local4");
     else {
       #local4#isSet = true;
-      return local4 = #t22;
+      return #local4 = #t22;
     }
-  final FutureOr<core::int>? local6;
-  core::bool #local6#isSet = false;
+  lowered final FutureOr<core::int>? #local6;
+  lowered core::bool #local6#isSet = false;
   function #local6#get() → FutureOr<core::int>
-    return #local6#isSet ?{FutureOr<core::int>} local6{FutureOr<core::int>} : throw new _in::LateError::localNI("local6");
+    return #local6#isSet ?{FutureOr<core::int>} #local6{FutureOr<core::int>} : throw new _in::LateError::localNI("local6");
   function #local6#set(FutureOr<core::int>#t23) → dynamic
     if(#local6#isSet)
       throw new _in::LateError::localAI("local6");
     else {
       #local6#isSet = true;
-      return local6 = #t23;
+      return #local6 = #t23;
     }
   if(b) {
     #local2#set.call(value);
@@ -269,31 +269,31 @@
   #local2#set.call(value);
   #local4#set.call(0);
   #local6#set.call(0);
-  let final<BottomType> #t24 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:50:3: Error: Late final variable 'local2' definitely assigned.
+  let final<BottomType> #t24 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:50:3: Error: Late final variable '#local2' definitely assigned.
   local2 = value; // error
-  ^^^^^^" in #local2#set.call(value);
-  let final<BottomType> #t25 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:51:3: Error: Late final variable 'local4' definitely assigned.
+  ^^^^^^^" in #local2#set.call(value);
+  let final<BottomType> #t25 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:51:3: Error: Late final variable '#local4' definitely assigned.
   local4 = 0; // error
-  ^^^^^^" in #local4#set.call(0);
-  let final<BottomType> #t26 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:52:3: Error: Late final variable 'local6' definitely assigned.
+  ^^^^^^^" in #local4#set.call(0);
+  let final<BottomType> #t26 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:52:3: Error: Late final variable '#local6' definitely assigned.
   local6 = 0; // error
-  ^^^^^^" in #local6#set.call(0);
+  ^^^^^^^" in #local6#set.call(0);
 }
 static method methodCompound() → dynamic {
-  final core::int? local4;
-  core::bool #local4#isSet = false;
+  lowered final core::int? #local4;
+  lowered core::bool #local4#isSet = false;
   function #local4#get() → core::int
-    return #local4#isSet ?{core::int} local4{core::int} : throw new _in::LateError::localNI("local4");
+    return #local4#isSet ?{core::int} #local4{core::int} : throw new _in::LateError::localNI("local4");
   function #local4#set(core::int #t27) → dynamic
     if(#local4#isSet)
       throw new _in::LateError::localAI("local4");
     else {
       #local4#isSet = true;
-      return local4 = #t27;
+      return #local4 = #t27;
     }
   #local4#set.call(0);
-  let final<BottomType> #t28 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:80:3: Error: Late final variable 'local4' definitely assigned.
+  let final<BottomType> #t28 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:80:3: Error: Late final variable '#local4' definitely assigned.
   local4 += 0; // error
-  ^^^^^^" in #local4#set.call(#local4#get.call().{core::num::+}(0));
+  ^^^^^^^" in #local4#set.call(#local4#get.call().{core::num::+}(0));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.strong.expect b/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.strong.expect
index 9fd2c07..a3ede2a 100644
--- a/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.strong.expect
@@ -98,38 +98,38 @@
 
 static field <T extends core::Object? = dynamic>(T%) → Null fieldDirect = <T extends core::Object? = dynamic>(T% value) → Null {
   T% local1;
-  T? local2;
-  core::bool #local2#isSet = false;
+  lowered T? #local2;
+  lowered core::bool #local2#isSet = false;
   function #local2#get() → T%
-    return #local2#isSet ?{T%} local2{T%} : throw new _in::LateError::localNI("local2");
+    return #local2#isSet ?{T%} #local2{T%} : throw new _in::LateError::localNI("local2");
   function #local2#set(T% #t1) → dynamic {
     #local2#isSet = true;
-    return local2 = #t1;
+    return #local2 = #t1;
   }
   core::int local3;
-  core::int? local4;
+  lowered core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t2 = local4 in #t2.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t2{core::int};
+    return let final core::int? #t2 = #local4 in #t2.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t2{core::int};
   function #local4#set(core::int #t3) → dynamic
-    return local4 = #t3;
+    return #local4 = #t3;
   FutureOr<core::int>local5;
-  FutureOr<core::int>? local6;
+  lowered FutureOr<core::int>? #local6;
   function #local6#get() → FutureOr<core::int>
-    return let final FutureOr<core::int>? #t4 = local6 in #t4.==(null) ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t4{FutureOr<core::int>};
+    return let final FutureOr<core::int>? #t4 = #local6 in #t4.==(null) ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t4{FutureOr<core::int>};
   function #local6#set(FutureOr<core::int>#t5) → dynamic
-    return local6 = #t5;
-  T? local7;
-  core::bool #local7#isSet = false;
+    return #local6 = #t5;
+  lowered T? #local7;
+  lowered core::bool #local7#isSet = false;
   function #local7#get() → T% {
     if(!#local7#isSet) {
-      local7 = value;
+      #local7 = value;
       #local7#isSet = true;
     }
-    return local7{T%};
+    return #local7{T%};
   }
   function #local7#set(T% #t6) → dynamic {
     #local7#isSet = true;
-    return local7 = #t6;
+    return #local7 = #t6;
   }
   let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:34:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
   local1; // error
@@ -153,38 +153,38 @@
 };
 static field <T extends core::Object? = dynamic>(core::bool, T%) → Null fieldConditional = <T extends core::Object? = dynamic>(core::bool b, T% value) → Null {
   T% local1;
-  T? local2;
-  core::bool #local2#isSet = false;
+  lowered T? #local2;
+  lowered core::bool #local2#isSet = false;
   function #local2#get() → T%
-    return #local2#isSet ?{T%} local2{T%} : throw new _in::LateError::localNI("local2");
+    return #local2#isSet ?{T%} #local2{T%} : throw new _in::LateError::localNI("local2");
   function #local2#set(T% #t13) → dynamic {
     #local2#isSet = true;
-    return local2 = #t13;
+    return #local2 = #t13;
   }
   core::int local3;
-  core::int? local4;
+  lowered core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t14 = local4 in #t14.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t14{core::int};
+    return let final core::int? #t14 = #local4 in #t14.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t14{core::int};
   function #local4#set(core::int #t15) → dynamic
-    return local4 = #t15;
+    return #local4 = #t15;
   FutureOr<core::int>local5;
-  FutureOr<core::int>? local6;
+  lowered FutureOr<core::int>? #local6;
   function #local6#get() → FutureOr<core::int>
-    return let final FutureOr<core::int>? #t16 = local6 in #t16.==(null) ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t16{FutureOr<core::int>};
+    return let final FutureOr<core::int>? #t16 = #local6 in #t16.==(null) ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t16{FutureOr<core::int>};
   function #local6#set(FutureOr<core::int>#t17) → dynamic
-    return local6 = #t17;
-  T? local7;
-  core::bool #local7#isSet = false;
+    return #local6 = #t17;
+  lowered T? #local7;
+  lowered core::bool #local7#isSet = false;
   function #local7#get() → T% {
     if(!#local7#isSet) {
-      local7 = value;
+      #local7 = value;
       #local7#isSet = true;
     }
-    return local7{T%};
+    return #local7{T%};
   }
   function #local7#set(T% #t18) → dynamic {
     #local7#isSet = true;
-    return local7 = #t18;
+    return #local7 = #t18;
   }
   if(b) {
     local1 = value;
@@ -211,11 +211,11 @@
 };
 static field () → Null fieldCompound = () → Null {
   core::int local3;
-  core::int? local4;
+  lowered core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t22 = local4 in #t22.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t22{core::int};
+    return let final core::int? #t22 = #local4 in #t22.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t22{core::int};
   function #local4#set(core::int #t23) → dynamic
-    return local4 = #t23;
+    return #local4 = #t23;
   local3 = (let final<BottomType> #t24 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:111:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3 += 0; // error
   ^^^^^^" in local3).{core::num::+}(0);
@@ -225,38 +225,38 @@
 };
 static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic {
   self::methodDirect::T% local1;
-  self::methodDirect::T? local2;
-  core::bool #local2#isSet = false;
+  lowered self::methodDirect::T? #local2;
+  lowered core::bool #local2#isSet = false;
   function #local2#get() → self::methodDirect::T%
-    return #local2#isSet ?{self::methodDirect::T%} local2{self::methodDirect::T%} : throw new _in::LateError::localNI("local2");
+    return #local2#isSet ?{self::methodDirect::T%} #local2{self::methodDirect::T%} : throw new _in::LateError::localNI("local2");
   function #local2#set(self::methodDirect::T% #t26) → dynamic {
     #local2#isSet = true;
-    return local2 = #t26;
+    return #local2 = #t26;
   }
   core::int local3;
-  core::int? local4;
+  lowered core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t27 = local4 in #t27.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t27{core::int};
+    return let final core::int? #t27 = #local4 in #t27.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t27{core::int};
   function #local4#set(core::int #t28) → dynamic
-    return local4 = #t28;
+    return #local4 = #t28;
   FutureOr<core::int>local5;
-  FutureOr<core::int>? local6;
+  lowered FutureOr<core::int>? #local6;
   function #local6#get() → FutureOr<core::int>
-    return let final FutureOr<core::int>? #t29 = local6 in #t29.==(null) ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t29{FutureOr<core::int>};
+    return let final FutureOr<core::int>? #t29 = #local6 in #t29.==(null) ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t29{FutureOr<core::int>};
   function #local6#set(FutureOr<core::int>#t30) → dynamic
-    return local6 = #t30;
-  self::methodDirect::T? local7;
-  core::bool #local7#isSet = false;
+    return #local6 = #t30;
+  lowered self::methodDirect::T? #local7;
+  lowered core::bool #local7#isSet = false;
   function #local7#get() → self::methodDirect::T% {
     if(!#local7#isSet) {
-      local7 = value;
+      #local7 = value;
       #local7#isSet = true;
     }
-    return local7{self::methodDirect::T%};
+    return #local7{self::methodDirect::T%};
   }
   function #local7#set(self::methodDirect::T% #t31) → dynamic {
     #local7#isSet = true;
-    return local7 = #t31;
+    return #local7 = #t31;
   }
   let final<BottomType> #t32 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:16:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
   local1; // error
@@ -280,38 +280,38 @@
 }
 static method methodConditional<T extends core::Object? = dynamic>(core::bool b, self::methodConditional::T% value) → dynamic {
   self::methodConditional::T% local1;
-  self::methodConditional::T? local2;
-  core::bool #local2#isSet = false;
+  lowered self::methodConditional::T? #local2;
+  lowered core::bool #local2#isSet = false;
   function #local2#get() → self::methodConditional::T%
-    return #local2#isSet ?{self::methodConditional::T%} local2{self::methodConditional::T%} : throw new _in::LateError::localNI("local2");
+    return #local2#isSet ?{self::methodConditional::T%} #local2{self::methodConditional::T%} : throw new _in::LateError::localNI("local2");
   function #local2#set(self::methodConditional::T% #t38) → dynamic {
     #local2#isSet = true;
-    return local2 = #t38;
+    return #local2 = #t38;
   }
   core::int local3;
-  core::int? local4;
+  lowered core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t39 = local4 in #t39.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t39{core::int};
+    return let final core::int? #t39 = #local4 in #t39.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t39{core::int};
   function #local4#set(core::int #t40) → dynamic
-    return local4 = #t40;
+    return #local4 = #t40;
   FutureOr<core::int>local5;
-  FutureOr<core::int>? local6;
+  lowered FutureOr<core::int>? #local6;
   function #local6#get() → FutureOr<core::int>
-    return let final FutureOr<core::int>? #t41 = local6 in #t41.==(null) ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t41{FutureOr<core::int>};
+    return let final FutureOr<core::int>? #t41 = #local6 in #t41.==(null) ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t41{FutureOr<core::int>};
   function #local6#set(FutureOr<core::int>#t42) → dynamic
-    return local6 = #t42;
-  self::methodConditional::T? local7;
-  core::bool #local7#isSet = false;
+    return #local6 = #t42;
+  lowered self::methodConditional::T? #local7;
+  lowered core::bool #local7#isSet = false;
   function #local7#get() → self::methodConditional::T% {
     if(!#local7#isSet) {
-      local7 = value;
+      #local7 = value;
       #local7#isSet = true;
     }
-    return local7{self::methodConditional::T%};
+    return #local7{self::methodConditional::T%};
   }
   function #local7#set(self::methodConditional::T% #t43) → dynamic {
     #local7#isSet = true;
-    return local7 = #t43;
+    return #local7 = #t43;
   }
   if(b) {
     local1 = value;
@@ -338,11 +338,11 @@
 }
 static method methodCompound() → dynamic {
   core::int local3;
-  core::int? local4;
+  lowered core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t47 = local4 in #t47.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t47{core::int};
+    return let final core::int? #t47 = #local4 in #t47.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t47{core::int};
   function #local4#set(core::int #t48) → dynamic
-    return local4 = #t48;
+    return #local4 = #t48;
   local3 = (let final<BottomType> #t49 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:103:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3 += 0; // error
   ^^^^^^" in local3).{core::num::+}(0);
diff --git a/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.strong.transformed.expect
index 9fd2c07..a3ede2a 100644
--- a/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.strong.transformed.expect
@@ -98,38 +98,38 @@
 
 static field <T extends core::Object? = dynamic>(T%) → Null fieldDirect = <T extends core::Object? = dynamic>(T% value) → Null {
   T% local1;
-  T? local2;
-  core::bool #local2#isSet = false;
+  lowered T? #local2;
+  lowered core::bool #local2#isSet = false;
   function #local2#get() → T%
-    return #local2#isSet ?{T%} local2{T%} : throw new _in::LateError::localNI("local2");
+    return #local2#isSet ?{T%} #local2{T%} : throw new _in::LateError::localNI("local2");
   function #local2#set(T% #t1) → dynamic {
     #local2#isSet = true;
-    return local2 = #t1;
+    return #local2 = #t1;
   }
   core::int local3;
-  core::int? local4;
+  lowered core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t2 = local4 in #t2.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t2{core::int};
+    return let final core::int? #t2 = #local4 in #t2.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t2{core::int};
   function #local4#set(core::int #t3) → dynamic
-    return local4 = #t3;
+    return #local4 = #t3;
   FutureOr<core::int>local5;
-  FutureOr<core::int>? local6;
+  lowered FutureOr<core::int>? #local6;
   function #local6#get() → FutureOr<core::int>
-    return let final FutureOr<core::int>? #t4 = local6 in #t4.==(null) ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t4{FutureOr<core::int>};
+    return let final FutureOr<core::int>? #t4 = #local6 in #t4.==(null) ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t4{FutureOr<core::int>};
   function #local6#set(FutureOr<core::int>#t5) → dynamic
-    return local6 = #t5;
-  T? local7;
-  core::bool #local7#isSet = false;
+    return #local6 = #t5;
+  lowered T? #local7;
+  lowered core::bool #local7#isSet = false;
   function #local7#get() → T% {
     if(!#local7#isSet) {
-      local7 = value;
+      #local7 = value;
       #local7#isSet = true;
     }
-    return local7{T%};
+    return #local7{T%};
   }
   function #local7#set(T% #t6) → dynamic {
     #local7#isSet = true;
-    return local7 = #t6;
+    return #local7 = #t6;
   }
   let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:34:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
   local1; // error
@@ -153,38 +153,38 @@
 };
 static field <T extends core::Object? = dynamic>(core::bool, T%) → Null fieldConditional = <T extends core::Object? = dynamic>(core::bool b, T% value) → Null {
   T% local1;
-  T? local2;
-  core::bool #local2#isSet = false;
+  lowered T? #local2;
+  lowered core::bool #local2#isSet = false;
   function #local2#get() → T%
-    return #local2#isSet ?{T%} local2{T%} : throw new _in::LateError::localNI("local2");
+    return #local2#isSet ?{T%} #local2{T%} : throw new _in::LateError::localNI("local2");
   function #local2#set(T% #t13) → dynamic {
     #local2#isSet = true;
-    return local2 = #t13;
+    return #local2 = #t13;
   }
   core::int local3;
-  core::int? local4;
+  lowered core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t14 = local4 in #t14.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t14{core::int};
+    return let final core::int? #t14 = #local4 in #t14.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t14{core::int};
   function #local4#set(core::int #t15) → dynamic
-    return local4 = #t15;
+    return #local4 = #t15;
   FutureOr<core::int>local5;
-  FutureOr<core::int>? local6;
+  lowered FutureOr<core::int>? #local6;
   function #local6#get() → FutureOr<core::int>
-    return let final FutureOr<core::int>? #t16 = local6 in #t16.==(null) ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t16{FutureOr<core::int>};
+    return let final FutureOr<core::int>? #t16 = #local6 in #t16.==(null) ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t16{FutureOr<core::int>};
   function #local6#set(FutureOr<core::int>#t17) → dynamic
-    return local6 = #t17;
-  T? local7;
-  core::bool #local7#isSet = false;
+    return #local6 = #t17;
+  lowered T? #local7;
+  lowered core::bool #local7#isSet = false;
   function #local7#get() → T% {
     if(!#local7#isSet) {
-      local7 = value;
+      #local7 = value;
       #local7#isSet = true;
     }
-    return local7{T%};
+    return #local7{T%};
   }
   function #local7#set(T% #t18) → dynamic {
     #local7#isSet = true;
-    return local7 = #t18;
+    return #local7 = #t18;
   }
   if(b) {
     local1 = value;
@@ -211,11 +211,11 @@
 };
 static field () → Null fieldCompound = () → Null {
   core::int local3;
-  core::int? local4;
+  lowered core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t22 = local4 in #t22.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t22{core::int};
+    return let final core::int? #t22 = #local4 in #t22.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t22{core::int};
   function #local4#set(core::int #t23) → dynamic
-    return local4 = #t23;
+    return #local4 = #t23;
   local3 = (let final<BottomType> #t24 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:111:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3 += 0; // error
   ^^^^^^" in local3).{core::num::+}(0);
@@ -225,38 +225,38 @@
 };
 static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic {
   self::methodDirect::T% local1;
-  self::methodDirect::T? local2;
-  core::bool #local2#isSet = false;
+  lowered self::methodDirect::T? #local2;
+  lowered core::bool #local2#isSet = false;
   function #local2#get() → self::methodDirect::T%
-    return #local2#isSet ?{self::methodDirect::T%} local2{self::methodDirect::T%} : throw new _in::LateError::localNI("local2");
+    return #local2#isSet ?{self::methodDirect::T%} #local2{self::methodDirect::T%} : throw new _in::LateError::localNI("local2");
   function #local2#set(self::methodDirect::T% #t26) → dynamic {
     #local2#isSet = true;
-    return local2 = #t26;
+    return #local2 = #t26;
   }
   core::int local3;
-  core::int? local4;
+  lowered core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t27 = local4 in #t27.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t27{core::int};
+    return let final core::int? #t27 = #local4 in #t27.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t27{core::int};
   function #local4#set(core::int #t28) → dynamic
-    return local4 = #t28;
+    return #local4 = #t28;
   FutureOr<core::int>local5;
-  FutureOr<core::int>? local6;
+  lowered FutureOr<core::int>? #local6;
   function #local6#get() → FutureOr<core::int>
-    return let final FutureOr<core::int>? #t29 = local6 in #t29.==(null) ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t29{FutureOr<core::int>};
+    return let final FutureOr<core::int>? #t29 = #local6 in #t29.==(null) ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t29{FutureOr<core::int>};
   function #local6#set(FutureOr<core::int>#t30) → dynamic
-    return local6 = #t30;
-  self::methodDirect::T? local7;
-  core::bool #local7#isSet = false;
+    return #local6 = #t30;
+  lowered self::methodDirect::T? #local7;
+  lowered core::bool #local7#isSet = false;
   function #local7#get() → self::methodDirect::T% {
     if(!#local7#isSet) {
-      local7 = value;
+      #local7 = value;
       #local7#isSet = true;
     }
-    return local7{self::methodDirect::T%};
+    return #local7{self::methodDirect::T%};
   }
   function #local7#set(self::methodDirect::T% #t31) → dynamic {
     #local7#isSet = true;
-    return local7 = #t31;
+    return #local7 = #t31;
   }
   let final<BottomType> #t32 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:16:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
   local1; // error
@@ -280,38 +280,38 @@
 }
 static method methodConditional<T extends core::Object? = dynamic>(core::bool b, self::methodConditional::T% value) → dynamic {
   self::methodConditional::T% local1;
-  self::methodConditional::T? local2;
-  core::bool #local2#isSet = false;
+  lowered self::methodConditional::T? #local2;
+  lowered core::bool #local2#isSet = false;
   function #local2#get() → self::methodConditional::T%
-    return #local2#isSet ?{self::methodConditional::T%} local2{self::methodConditional::T%} : throw new _in::LateError::localNI("local2");
+    return #local2#isSet ?{self::methodConditional::T%} #local2{self::methodConditional::T%} : throw new _in::LateError::localNI("local2");
   function #local2#set(self::methodConditional::T% #t38) → dynamic {
     #local2#isSet = true;
-    return local2 = #t38;
+    return #local2 = #t38;
   }
   core::int local3;
-  core::int? local4;
+  lowered core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t39 = local4 in #t39.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t39{core::int};
+    return let final core::int? #t39 = #local4 in #t39.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t39{core::int};
   function #local4#set(core::int #t40) → dynamic
-    return local4 = #t40;
+    return #local4 = #t40;
   FutureOr<core::int>local5;
-  FutureOr<core::int>? local6;
+  lowered FutureOr<core::int>? #local6;
   function #local6#get() → FutureOr<core::int>
-    return let final FutureOr<core::int>? #t41 = local6 in #t41.==(null) ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t41{FutureOr<core::int>};
+    return let final FutureOr<core::int>? #t41 = #local6 in #t41.==(null) ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t41{FutureOr<core::int>};
   function #local6#set(FutureOr<core::int>#t42) → dynamic
-    return local6 = #t42;
-  self::methodConditional::T? local7;
-  core::bool #local7#isSet = false;
+    return #local6 = #t42;
+  lowered self::methodConditional::T? #local7;
+  lowered core::bool #local7#isSet = false;
   function #local7#get() → self::methodConditional::T% {
     if(!#local7#isSet) {
-      local7 = value;
+      #local7 = value;
       #local7#isSet = true;
     }
-    return local7{self::methodConditional::T%};
+    return #local7{self::methodConditional::T%};
   }
   function #local7#set(self::methodConditional::T% #t43) → dynamic {
     #local7#isSet = true;
-    return local7 = #t43;
+    return #local7 = #t43;
   }
   if(b) {
     local1 = value;
@@ -338,11 +338,11 @@
 }
 static method methodCompound() → dynamic {
   core::int local3;
-  core::int? local4;
+  lowered core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t47 = local4 in #t47.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t47{core::int};
+    return let final core::int? #t47 = #local4 in #t47.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t47{core::int};
   function #local4#set(core::int #t48) → dynamic
-    return local4 = #t48;
+    return #local4 = #t48;
   local3 = (let final<BottomType> #t49 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:103:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3 += 0; // error
   ^^^^^^" in local3).{core::num::+}(0);
diff --git a/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.weak.expect b/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.weak.expect
index be1e0a1..9372b12 100644
--- a/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.weak.expect
@@ -98,44 +98,44 @@
 
 static field <T extends core::Object? = dynamic>(T%) → Null fieldDirect = <T extends core::Object? = dynamic>(T% value) → Null {
   T% local1;
-  T? local2;
-  core::bool #local2#isSet = false;
+  lowered T? #local2;
+  lowered core::bool #local2#isSet = false;
   function #local2#get() → T%
-    return #local2#isSet ?{T%} local2{T%} : throw new _in::LateError::localNI("local2");
+    return #local2#isSet ?{T%} #local2{T%} : throw new _in::LateError::localNI("local2");
   function #local2#set(T% #t1) → dynamic {
     #local2#isSet = true;
-    return local2 = #t1;
+    return #local2 = #t1;
   }
   core::int local3;
-  core::int? local4;
-  core::bool #local4#isSet = false;
+  lowered core::int? #local4;
+  lowered core::bool #local4#isSet = false;
   function #local4#get() → core::int
-    return #local4#isSet ?{core::int} local4{core::int} : throw new _in::LateError::localNI("local4");
+    return #local4#isSet ?{core::int} #local4{core::int} : throw new _in::LateError::localNI("local4");
   function #local4#set(core::int #t2) → dynamic {
     #local4#isSet = true;
-    return local4 = #t2;
+    return #local4 = #t2;
   }
   FutureOr<core::int>local5;
-  FutureOr<core::int>? local6;
-  core::bool #local6#isSet = false;
+  lowered FutureOr<core::int>? #local6;
+  lowered core::bool #local6#isSet = false;
   function #local6#get() → FutureOr<core::int>
-    return #local6#isSet ?{FutureOr<core::int>} local6{FutureOr<core::int>} : throw new _in::LateError::localNI("local6");
+    return #local6#isSet ?{FutureOr<core::int>} #local6{FutureOr<core::int>} : throw new _in::LateError::localNI("local6");
   function #local6#set(FutureOr<core::int>#t3) → dynamic {
     #local6#isSet = true;
-    return local6 = #t3;
+    return #local6 = #t3;
   }
-  T? local7;
-  core::bool #local7#isSet = false;
+  lowered T? #local7;
+  lowered core::bool #local7#isSet = false;
   function #local7#get() → T% {
     if(!#local7#isSet) {
-      local7 = value;
+      #local7 = value;
       #local7#isSet = true;
     }
-    return local7{T%};
+    return #local7{T%};
   }
   function #local7#set(T% #t4) → dynamic {
     #local7#isSet = true;
-    return local7 = #t4;
+    return #local7 = #t4;
   }
   let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:34:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
   local1; // error
@@ -159,44 +159,44 @@
 };
 static field <T extends core::Object? = dynamic>(core::bool, T%) → Null fieldConditional = <T extends core::Object? = dynamic>(core::bool b, T% value) → Null {
   T% local1;
-  T? local2;
-  core::bool #local2#isSet = false;
+  lowered T? #local2;
+  lowered core::bool #local2#isSet = false;
   function #local2#get() → T%
-    return #local2#isSet ?{T%} local2{T%} : throw new _in::LateError::localNI("local2");
+    return #local2#isSet ?{T%} #local2{T%} : throw new _in::LateError::localNI("local2");
   function #local2#set(T% #t11) → dynamic {
     #local2#isSet = true;
-    return local2 = #t11;
+    return #local2 = #t11;
   }
   core::int local3;
-  core::int? local4;
-  core::bool #local4#isSet = false;
+  lowered core::int? #local4;
+  lowered core::bool #local4#isSet = false;
   function #local4#get() → core::int
-    return #local4#isSet ?{core::int} local4{core::int} : throw new _in::LateError::localNI("local4");
+    return #local4#isSet ?{core::int} #local4{core::int} : throw new _in::LateError::localNI("local4");
   function #local4#set(core::int #t12) → dynamic {
     #local4#isSet = true;
-    return local4 = #t12;
+    return #local4 = #t12;
   }
   FutureOr<core::int>local5;
-  FutureOr<core::int>? local6;
-  core::bool #local6#isSet = false;
+  lowered FutureOr<core::int>? #local6;
+  lowered core::bool #local6#isSet = false;
   function #local6#get() → FutureOr<core::int>
-    return #local6#isSet ?{FutureOr<core::int>} local6{FutureOr<core::int>} : throw new _in::LateError::localNI("local6");
+    return #local6#isSet ?{FutureOr<core::int>} #local6{FutureOr<core::int>} : throw new _in::LateError::localNI("local6");
   function #local6#set(FutureOr<core::int>#t13) → dynamic {
     #local6#isSet = true;
-    return local6 = #t13;
+    return #local6 = #t13;
   }
-  T? local7;
-  core::bool #local7#isSet = false;
+  lowered T? #local7;
+  lowered core::bool #local7#isSet = false;
   function #local7#get() → T% {
     if(!#local7#isSet) {
-      local7 = value;
+      #local7 = value;
       #local7#isSet = true;
     }
-    return local7{T%};
+    return #local7{T%};
   }
   function #local7#set(T% #t14) → dynamic {
     #local7#isSet = true;
-    return local7 = #t14;
+    return #local7 = #t14;
   }
   if(b) {
     local1 = value;
@@ -223,13 +223,13 @@
 };
 static field () → Null fieldCompound = () → Null {
   core::int local3;
-  core::int? local4;
-  core::bool #local4#isSet = false;
+  lowered core::int? #local4;
+  lowered core::bool #local4#isSet = false;
   function #local4#get() → core::int
-    return #local4#isSet ?{core::int} local4{core::int} : throw new _in::LateError::localNI("local4");
+    return #local4#isSet ?{core::int} #local4{core::int} : throw new _in::LateError::localNI("local4");
   function #local4#set(core::int #t18) → dynamic {
     #local4#isSet = true;
-    return local4 = #t18;
+    return #local4 = #t18;
   }
   local3 = (let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:111:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3 += 0; // error
@@ -240,44 +240,44 @@
 };
 static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic {
   self::methodDirect::T% local1;
-  self::methodDirect::T? local2;
-  core::bool #local2#isSet = false;
+  lowered self::methodDirect::T? #local2;
+  lowered core::bool #local2#isSet = false;
   function #local2#get() → self::methodDirect::T%
-    return #local2#isSet ?{self::methodDirect::T%} local2{self::methodDirect::T%} : throw new _in::LateError::localNI("local2");
+    return #local2#isSet ?{self::methodDirect::T%} #local2{self::methodDirect::T%} : throw new _in::LateError::localNI("local2");
   function #local2#set(self::methodDirect::T% #t21) → dynamic {
     #local2#isSet = true;
-    return local2 = #t21;
+    return #local2 = #t21;
   }
   core::int local3;
-  core::int? local4;
-  core::bool #local4#isSet = false;
+  lowered core::int? #local4;
+  lowered core::bool #local4#isSet = false;
   function #local4#get() → core::int
-    return #local4#isSet ?{core::int} local4{core::int} : throw new _in::LateError::localNI("local4");
+    return #local4#isSet ?{core::int} #local4{core::int} : throw new _in::LateError::localNI("local4");
   function #local4#set(core::int #t22) → dynamic {
     #local4#isSet = true;
-    return local4 = #t22;
+    return #local4 = #t22;
   }
   FutureOr<core::int>local5;
-  FutureOr<core::int>? local6;
-  core::bool #local6#isSet = false;
+  lowered FutureOr<core::int>? #local6;
+  lowered core::bool #local6#isSet = false;
   function #local6#get() → FutureOr<core::int>
-    return #local6#isSet ?{FutureOr<core::int>} local6{FutureOr<core::int>} : throw new _in::LateError::localNI("local6");
+    return #local6#isSet ?{FutureOr<core::int>} #local6{FutureOr<core::int>} : throw new _in::LateError::localNI("local6");
   function #local6#set(FutureOr<core::int>#t23) → dynamic {
     #local6#isSet = true;
-    return local6 = #t23;
+    return #local6 = #t23;
   }
-  self::methodDirect::T? local7;
-  core::bool #local7#isSet = false;
+  lowered self::methodDirect::T? #local7;
+  lowered core::bool #local7#isSet = false;
   function #local7#get() → self::methodDirect::T% {
     if(!#local7#isSet) {
-      local7 = value;
+      #local7 = value;
       #local7#isSet = true;
     }
-    return local7{self::methodDirect::T%};
+    return #local7{self::methodDirect::T%};
   }
   function #local7#set(self::methodDirect::T% #t24) → dynamic {
     #local7#isSet = true;
-    return local7 = #t24;
+    return #local7 = #t24;
   }
   let final<BottomType> #t25 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:16:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
   local1; // error
@@ -301,44 +301,44 @@
 }
 static method methodConditional<T extends core::Object? = dynamic>(core::bool b, self::methodConditional::T% value) → dynamic {
   self::methodConditional::T% local1;
-  self::methodConditional::T? local2;
-  core::bool #local2#isSet = false;
+  lowered self::methodConditional::T? #local2;
+  lowered core::bool #local2#isSet = false;
   function #local2#get() → self::methodConditional::T%
-    return #local2#isSet ?{self::methodConditional::T%} local2{self::methodConditional::T%} : throw new _in::LateError::localNI("local2");
+    return #local2#isSet ?{self::methodConditional::T%} #local2{self::methodConditional::T%} : throw new _in::LateError::localNI("local2");
   function #local2#set(self::methodConditional::T% #t31) → dynamic {
     #local2#isSet = true;
-    return local2 = #t31;
+    return #local2 = #t31;
   }
   core::int local3;
-  core::int? local4;
-  core::bool #local4#isSet = false;
+  lowered core::int? #local4;
+  lowered core::bool #local4#isSet = false;
   function #local4#get() → core::int
-    return #local4#isSet ?{core::int} local4{core::int} : throw new _in::LateError::localNI("local4");
+    return #local4#isSet ?{core::int} #local4{core::int} : throw new _in::LateError::localNI("local4");
   function #local4#set(core::int #t32) → dynamic {
     #local4#isSet = true;
-    return local4 = #t32;
+    return #local4 = #t32;
   }
   FutureOr<core::int>local5;
-  FutureOr<core::int>? local6;
-  core::bool #local6#isSet = false;
+  lowered FutureOr<core::int>? #local6;
+  lowered core::bool #local6#isSet = false;
   function #local6#get() → FutureOr<core::int>
-    return #local6#isSet ?{FutureOr<core::int>} local6{FutureOr<core::int>} : throw new _in::LateError::localNI("local6");
+    return #local6#isSet ?{FutureOr<core::int>} #local6{FutureOr<core::int>} : throw new _in::LateError::localNI("local6");
   function #local6#set(FutureOr<core::int>#t33) → dynamic {
     #local6#isSet = true;
-    return local6 = #t33;
+    return #local6 = #t33;
   }
-  self::methodConditional::T? local7;
-  core::bool #local7#isSet = false;
+  lowered self::methodConditional::T? #local7;
+  lowered core::bool #local7#isSet = false;
   function #local7#get() → self::methodConditional::T% {
     if(!#local7#isSet) {
-      local7 = value;
+      #local7 = value;
       #local7#isSet = true;
     }
-    return local7{self::methodConditional::T%};
+    return #local7{self::methodConditional::T%};
   }
   function #local7#set(self::methodConditional::T% #t34) → dynamic {
     #local7#isSet = true;
-    return local7 = #t34;
+    return #local7 = #t34;
   }
   if(b) {
     local1 = value;
@@ -365,13 +365,13 @@
 }
 static method methodCompound() → dynamic {
   core::int local3;
-  core::int? local4;
-  core::bool #local4#isSet = false;
+  lowered core::int? #local4;
+  lowered core::bool #local4#isSet = false;
   function #local4#get() → core::int
-    return #local4#isSet ?{core::int} local4{core::int} : throw new _in::LateError::localNI("local4");
+    return #local4#isSet ?{core::int} #local4{core::int} : throw new _in::LateError::localNI("local4");
   function #local4#set(core::int #t38) → dynamic {
     #local4#isSet = true;
-    return local4 = #t38;
+    return #local4 = #t38;
   }
   local3 = (let final<BottomType> #t39 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:103:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3 += 0; // error
diff --git a/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.weak.transformed.expect
index be1e0a1..9372b12 100644
--- a/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.weak.transformed.expect
@@ -98,44 +98,44 @@
 
 static field <T extends core::Object? = dynamic>(T%) → Null fieldDirect = <T extends core::Object? = dynamic>(T% value) → Null {
   T% local1;
-  T? local2;
-  core::bool #local2#isSet = false;
+  lowered T? #local2;
+  lowered core::bool #local2#isSet = false;
   function #local2#get() → T%
-    return #local2#isSet ?{T%} local2{T%} : throw new _in::LateError::localNI("local2");
+    return #local2#isSet ?{T%} #local2{T%} : throw new _in::LateError::localNI("local2");
   function #local2#set(T% #t1) → dynamic {
     #local2#isSet = true;
-    return local2 = #t1;
+    return #local2 = #t1;
   }
   core::int local3;
-  core::int? local4;
-  core::bool #local4#isSet = false;
+  lowered core::int? #local4;
+  lowered core::bool #local4#isSet = false;
   function #local4#get() → core::int
-    return #local4#isSet ?{core::int} local4{core::int} : throw new _in::LateError::localNI("local4");
+    return #local4#isSet ?{core::int} #local4{core::int} : throw new _in::LateError::localNI("local4");
   function #local4#set(core::int #t2) → dynamic {
     #local4#isSet = true;
-    return local4 = #t2;
+    return #local4 = #t2;
   }
   FutureOr<core::int>local5;
-  FutureOr<core::int>? local6;
-  core::bool #local6#isSet = false;
+  lowered FutureOr<core::int>? #local6;
+  lowered core::bool #local6#isSet = false;
   function #local6#get() → FutureOr<core::int>
-    return #local6#isSet ?{FutureOr<core::int>} local6{FutureOr<core::int>} : throw new _in::LateError::localNI("local6");
+    return #local6#isSet ?{FutureOr<core::int>} #local6{FutureOr<core::int>} : throw new _in::LateError::localNI("local6");
   function #local6#set(FutureOr<core::int>#t3) → dynamic {
     #local6#isSet = true;
-    return local6 = #t3;
+    return #local6 = #t3;
   }
-  T? local7;
-  core::bool #local7#isSet = false;
+  lowered T? #local7;
+  lowered core::bool #local7#isSet = false;
   function #local7#get() → T% {
     if(!#local7#isSet) {
-      local7 = value;
+      #local7 = value;
       #local7#isSet = true;
     }
-    return local7{T%};
+    return #local7{T%};
   }
   function #local7#set(T% #t4) → dynamic {
     #local7#isSet = true;
-    return local7 = #t4;
+    return #local7 = #t4;
   }
   let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:34:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
   local1; // error
@@ -159,44 +159,44 @@
 };
 static field <T extends core::Object? = dynamic>(core::bool, T%) → Null fieldConditional = <T extends core::Object? = dynamic>(core::bool b, T% value) → Null {
   T% local1;
-  T? local2;
-  core::bool #local2#isSet = false;
+  lowered T? #local2;
+  lowered core::bool #local2#isSet = false;
   function #local2#get() → T%
-    return #local2#isSet ?{T%} local2{T%} : throw new _in::LateError::localNI("local2");
+    return #local2#isSet ?{T%} #local2{T%} : throw new _in::LateError::localNI("local2");
   function #local2#set(T% #t11) → dynamic {
     #local2#isSet = true;
-    return local2 = #t11;
+    return #local2 = #t11;
   }
   core::int local3;
-  core::int? local4;
-  core::bool #local4#isSet = false;
+  lowered core::int? #local4;
+  lowered core::bool #local4#isSet = false;
   function #local4#get() → core::int
-    return #local4#isSet ?{core::int} local4{core::int} : throw new _in::LateError::localNI("local4");
+    return #local4#isSet ?{core::int} #local4{core::int} : throw new _in::LateError::localNI("local4");
   function #local4#set(core::int #t12) → dynamic {
     #local4#isSet = true;
-    return local4 = #t12;
+    return #local4 = #t12;
   }
   FutureOr<core::int>local5;
-  FutureOr<core::int>? local6;
-  core::bool #local6#isSet = false;
+  lowered FutureOr<core::int>? #local6;
+  lowered core::bool #local6#isSet = false;
   function #local6#get() → FutureOr<core::int>
-    return #local6#isSet ?{FutureOr<core::int>} local6{FutureOr<core::int>} : throw new _in::LateError::localNI("local6");
+    return #local6#isSet ?{FutureOr<core::int>} #local6{FutureOr<core::int>} : throw new _in::LateError::localNI("local6");
   function #local6#set(FutureOr<core::int>#t13) → dynamic {
     #local6#isSet = true;
-    return local6 = #t13;
+    return #local6 = #t13;
   }
-  T? local7;
-  core::bool #local7#isSet = false;
+  lowered T? #local7;
+  lowered core::bool #local7#isSet = false;
   function #local7#get() → T% {
     if(!#local7#isSet) {
-      local7 = value;
+      #local7 = value;
       #local7#isSet = true;
     }
-    return local7{T%};
+    return #local7{T%};
   }
   function #local7#set(T% #t14) → dynamic {
     #local7#isSet = true;
-    return local7 = #t14;
+    return #local7 = #t14;
   }
   if(b) {
     local1 = value;
@@ -223,13 +223,13 @@
 };
 static field () → Null fieldCompound = () → Null {
   core::int local3;
-  core::int? local4;
-  core::bool #local4#isSet = false;
+  lowered core::int? #local4;
+  lowered core::bool #local4#isSet = false;
   function #local4#get() → core::int
-    return #local4#isSet ?{core::int} local4{core::int} : throw new _in::LateError::localNI("local4");
+    return #local4#isSet ?{core::int} #local4{core::int} : throw new _in::LateError::localNI("local4");
   function #local4#set(core::int #t18) → dynamic {
     #local4#isSet = true;
-    return local4 = #t18;
+    return #local4 = #t18;
   }
   local3 = (let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:111:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3 += 0; // error
@@ -240,44 +240,44 @@
 };
 static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic {
   self::methodDirect::T% local1;
-  self::methodDirect::T? local2;
-  core::bool #local2#isSet = false;
+  lowered self::methodDirect::T? #local2;
+  lowered core::bool #local2#isSet = false;
   function #local2#get() → self::methodDirect::T%
-    return #local2#isSet ?{self::methodDirect::T%} local2{self::methodDirect::T%} : throw new _in::LateError::localNI("local2");
+    return #local2#isSet ?{self::methodDirect::T%} #local2{self::methodDirect::T%} : throw new _in::LateError::localNI("local2");
   function #local2#set(self::methodDirect::T% #t21) → dynamic {
     #local2#isSet = true;
-    return local2 = #t21;
+    return #local2 = #t21;
   }
   core::int local3;
-  core::int? local4;
-  core::bool #local4#isSet = false;
+  lowered core::int? #local4;
+  lowered core::bool #local4#isSet = false;
   function #local4#get() → core::int
-    return #local4#isSet ?{core::int} local4{core::int} : throw new _in::LateError::localNI("local4");
+    return #local4#isSet ?{core::int} #local4{core::int} : throw new _in::LateError::localNI("local4");
   function #local4#set(core::int #t22) → dynamic {
     #local4#isSet = true;
-    return local4 = #t22;
+    return #local4 = #t22;
   }
   FutureOr<core::int>local5;
-  FutureOr<core::int>? local6;
-  core::bool #local6#isSet = false;
+  lowered FutureOr<core::int>? #local6;
+  lowered core::bool #local6#isSet = false;
   function #local6#get() → FutureOr<core::int>
-    return #local6#isSet ?{FutureOr<core::int>} local6{FutureOr<core::int>} : throw new _in::LateError::localNI("local6");
+    return #local6#isSet ?{FutureOr<core::int>} #local6{FutureOr<core::int>} : throw new _in::LateError::localNI("local6");
   function #local6#set(FutureOr<core::int>#t23) → dynamic {
     #local6#isSet = true;
-    return local6 = #t23;
+    return #local6 = #t23;
   }
-  self::methodDirect::T? local7;
-  core::bool #local7#isSet = false;
+  lowered self::methodDirect::T? #local7;
+  lowered core::bool #local7#isSet = false;
   function #local7#get() → self::methodDirect::T% {
     if(!#local7#isSet) {
-      local7 = value;
+      #local7 = value;
       #local7#isSet = true;
     }
-    return local7{self::methodDirect::T%};
+    return #local7{self::methodDirect::T%};
   }
   function #local7#set(self::methodDirect::T% #t24) → dynamic {
     #local7#isSet = true;
-    return local7 = #t24;
+    return #local7 = #t24;
   }
   let final<BottomType> #t25 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:16:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
   local1; // error
@@ -301,44 +301,44 @@
 }
 static method methodConditional<T extends core::Object? = dynamic>(core::bool b, self::methodConditional::T% value) → dynamic {
   self::methodConditional::T% local1;
-  self::methodConditional::T? local2;
-  core::bool #local2#isSet = false;
+  lowered self::methodConditional::T? #local2;
+  lowered core::bool #local2#isSet = false;
   function #local2#get() → self::methodConditional::T%
-    return #local2#isSet ?{self::methodConditional::T%} local2{self::methodConditional::T%} : throw new _in::LateError::localNI("local2");
+    return #local2#isSet ?{self::methodConditional::T%} #local2{self::methodConditional::T%} : throw new _in::LateError::localNI("local2");
   function #local2#set(self::methodConditional::T% #t31) → dynamic {
     #local2#isSet = true;
-    return local2 = #t31;
+    return #local2 = #t31;
   }
   core::int local3;
-  core::int? local4;
-  core::bool #local4#isSet = false;
+  lowered core::int? #local4;
+  lowered core::bool #local4#isSet = false;
   function #local4#get() → core::int
-    return #local4#isSet ?{core::int} local4{core::int} : throw new _in::LateError::localNI("local4");
+    return #local4#isSet ?{core::int} #local4{core::int} : throw new _in::LateError::localNI("local4");
   function #local4#set(core::int #t32) → dynamic {
     #local4#isSet = true;
-    return local4 = #t32;
+    return #local4 = #t32;
   }
   FutureOr<core::int>local5;
-  FutureOr<core::int>? local6;
-  core::bool #local6#isSet = false;
+  lowered FutureOr<core::int>? #local6;
+  lowered core::bool #local6#isSet = false;
   function #local6#get() → FutureOr<core::int>
-    return #local6#isSet ?{FutureOr<core::int>} local6{FutureOr<core::int>} : throw new _in::LateError::localNI("local6");
+    return #local6#isSet ?{FutureOr<core::int>} #local6{FutureOr<core::int>} : throw new _in::LateError::localNI("local6");
   function #local6#set(FutureOr<core::int>#t33) → dynamic {
     #local6#isSet = true;
-    return local6 = #t33;
+    return #local6 = #t33;
   }
-  self::methodConditional::T? local7;
-  core::bool #local7#isSet = false;
+  lowered self::methodConditional::T? #local7;
+  lowered core::bool #local7#isSet = false;
   function #local7#get() → self::methodConditional::T% {
     if(!#local7#isSet) {
-      local7 = value;
+      #local7 = value;
       #local7#isSet = true;
     }
-    return local7{self::methodConditional::T%};
+    return #local7{self::methodConditional::T%};
   }
   function #local7#set(self::methodConditional::T% #t34) → dynamic {
     #local7#isSet = true;
-    return local7 = #t34;
+    return #local7 = #t34;
   }
   if(b) {
     local1 = value;
@@ -365,13 +365,13 @@
 }
 static method methodCompound() → dynamic {
   core::int local3;
-  core::int? local4;
-  core::bool #local4#isSet = false;
+  lowered core::int? #local4;
+  lowered core::bool #local4#isSet = false;
   function #local4#get() → core::int
-    return #local4#isSet ?{core::int} local4{core::int} : throw new _in::LateError::localNI("local4");
+    return #local4#isSet ?{core::int} #local4{core::int} : throw new _in::LateError::localNI("local4");
   function #local4#set(core::int #t38) → dynamic {
     #local4#isSet = true;
-    return local4 = #t38;
+    return #local4 = #t38;
   }
   local3 = (let final<BottomType> #t39 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:103:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3 += 0; // error
diff --git a/pkg/front_end/testcases/late_lowering/infer_from_late_variable.dart.strong.expect b/pkg/front_end/testcases/late_lowering/infer_from_late_variable.dart.strong.expect
index 18df179..b34786e 100644
--- a/pkg/front_end/testcases/late_lowering/infer_from_late_variable.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/infer_from_late_variable.dart.strong.expect
@@ -6,10 +6,10 @@
 static method f<T extends core::Object? = dynamic>(self::f::T% t) → self::f::T%
   return t;
 static method main() → dynamic {
-  core::int? local;
+  lowered core::int? #local;
   function #local#get() → core::int
-    return let final core::int? #t1 = local in #t1.==(null) ?{core::int} throw new _in::LateError::localNI("local") : #t1{core::int};
+    return let final core::int? #t1 = #local in #t1.==(null) ?{core::int} throw new _in::LateError::localNI("local") : #t1{core::int};
   function #local#set(core::int #t2) → dynamic
-    return local = #t2;
+    return #local = #t2;
   #local#set.call(self::f<core::int>(0));
 }
diff --git a/pkg/front_end/testcases/late_lowering/infer_from_late_variable.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/infer_from_late_variable.dart.strong.transformed.expect
index 18df179..b34786e 100644
--- a/pkg/front_end/testcases/late_lowering/infer_from_late_variable.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/infer_from_late_variable.dart.strong.transformed.expect
@@ -6,10 +6,10 @@
 static method f<T extends core::Object? = dynamic>(self::f::T% t) → self::f::T%
   return t;
 static method main() → dynamic {
-  core::int? local;
+  lowered core::int? #local;
   function #local#get() → core::int
-    return let final core::int? #t1 = local in #t1.==(null) ?{core::int} throw new _in::LateError::localNI("local") : #t1{core::int};
+    return let final core::int? #t1 = #local in #t1.==(null) ?{core::int} throw new _in::LateError::localNI("local") : #t1{core::int};
   function #local#set(core::int #t2) → dynamic
-    return local = #t2;
+    return #local = #t2;
   #local#set.call(self::f<core::int>(0));
 }
diff --git a/pkg/front_end/testcases/late_lowering/infer_from_late_variable.dart.weak.expect b/pkg/front_end/testcases/late_lowering/infer_from_late_variable.dart.weak.expect
index a9eee6d..4a7ba84 100644
--- a/pkg/front_end/testcases/late_lowering/infer_from_late_variable.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/infer_from_late_variable.dart.weak.expect
@@ -6,13 +6,13 @@
 static method f<T extends core::Object? = dynamic>(self::f::T% t) → self::f::T%
   return t;
 static method main() → dynamic {
-  core::int? local;
-  core::bool #local#isSet = false;
+  lowered core::int? #local;
+  lowered core::bool #local#isSet = false;
   function #local#get() → core::int
-    return #local#isSet ?{core::int} local{core::int} : throw new _in::LateError::localNI("local");
+    return #local#isSet ?{core::int} #local{core::int} : throw new _in::LateError::localNI("local");
   function #local#set(core::int #t1) → dynamic {
     #local#isSet = true;
-    return local = #t1;
+    return #local = #t1;
   }
   #local#set.call(self::f<core::int>(0));
 }
diff --git a/pkg/front_end/testcases/late_lowering/infer_from_late_variable.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/infer_from_late_variable.dart.weak.transformed.expect
index a9eee6d..4a7ba84 100644
--- a/pkg/front_end/testcases/late_lowering/infer_from_late_variable.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/infer_from_late_variable.dart.weak.transformed.expect
@@ -6,13 +6,13 @@
 static method f<T extends core::Object? = dynamic>(self::f::T% t) → self::f::T%
   return t;
 static method main() → dynamic {
-  core::int? local;
-  core::bool #local#isSet = false;
+  lowered core::int? #local;
+  lowered core::bool #local#isSet = false;
   function #local#get() → core::int
-    return #local#isSet ?{core::int} local{core::int} : throw new _in::LateError::localNI("local");
+    return #local#isSet ?{core::int} #local{core::int} : throw new _in::LateError::localNI("local");
   function #local#set(core::int #t1) → dynamic {
     #local#isSet = true;
-    return local = #t1;
+    return #local = #t1;
   }
   #local#set.call(self::f<core::int>(0));
 }
diff --git a/pkg/front_end/testcases/late_lowering/issue40373b.dart.strong.expect b/pkg/front_end/testcases/late_lowering/issue40373b.dart.strong.expect
index 8eb1418..b788f31 100644
--- a/pkg/front_end/testcases/late_lowering/issue40373b.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/issue40373b.dart.strong.expect
@@ -42,16 +42,16 @@
     self::_#g = #t3;
   }
 static method main() → dynamic {
-  final dynamic l;
-  core::bool #l#isSet = false;
+  lowered final dynamic #l;
+  lowered core::bool #l#isSet = false;
   function #l#get() → dynamic
-    return #l#isSet ?{dynamic} l : throw new _in::LateError::localNI("l");
+    return #l#isSet ?{dynamic} #l : throw new _in::LateError::localNI("l");
   function #l#set(dynamic #t4) → dynamic
     if(#l#isSet)
       throw new _in::LateError::localAI("l");
     else {
       #l#isSet = true;
-      return l = #t4;
+      return #l = #t4;
     }
   self::g = "Lily";
   self::C::s = "was";
diff --git a/pkg/front_end/testcases/late_lowering/issue40373b.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/issue40373b.dart.strong.transformed.expect
index 8eb1418..b788f31 100644
--- a/pkg/front_end/testcases/late_lowering/issue40373b.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/issue40373b.dart.strong.transformed.expect
@@ -42,16 +42,16 @@
     self::_#g = #t3;
   }
 static method main() → dynamic {
-  final dynamic l;
-  core::bool #l#isSet = false;
+  lowered final dynamic #l;
+  lowered core::bool #l#isSet = false;
   function #l#get() → dynamic
-    return #l#isSet ?{dynamic} l : throw new _in::LateError::localNI("l");
+    return #l#isSet ?{dynamic} #l : throw new _in::LateError::localNI("l");
   function #l#set(dynamic #t4) → dynamic
     if(#l#isSet)
       throw new _in::LateError::localAI("l");
     else {
       #l#isSet = true;
-      return l = #t4;
+      return #l = #t4;
     }
   self::g = "Lily";
   self::C::s = "was";
diff --git a/pkg/front_end/testcases/late_lowering/issue40373b.dart.weak.expect b/pkg/front_end/testcases/late_lowering/issue40373b.dart.weak.expect
index 8eb1418..b788f31 100644
--- a/pkg/front_end/testcases/late_lowering/issue40373b.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/issue40373b.dart.weak.expect
@@ -42,16 +42,16 @@
     self::_#g = #t3;
   }
 static method main() → dynamic {
-  final dynamic l;
-  core::bool #l#isSet = false;
+  lowered final dynamic #l;
+  lowered core::bool #l#isSet = false;
   function #l#get() → dynamic
-    return #l#isSet ?{dynamic} l : throw new _in::LateError::localNI("l");
+    return #l#isSet ?{dynamic} #l : throw new _in::LateError::localNI("l");
   function #l#set(dynamic #t4) → dynamic
     if(#l#isSet)
       throw new _in::LateError::localAI("l");
     else {
       #l#isSet = true;
-      return l = #t4;
+      return #l = #t4;
     }
   self::g = "Lily";
   self::C::s = "was";
diff --git a/pkg/front_end/testcases/late_lowering/issue40373b.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/issue40373b.dart.weak.transformed.expect
index 8eb1418..b788f31 100644
--- a/pkg/front_end/testcases/late_lowering/issue40373b.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/issue40373b.dart.weak.transformed.expect
@@ -42,16 +42,16 @@
     self::_#g = #t3;
   }
 static method main() → dynamic {
-  final dynamic l;
-  core::bool #l#isSet = false;
+  lowered final dynamic #l;
+  lowered core::bool #l#isSet = false;
   function #l#get() → dynamic
-    return #l#isSet ?{dynamic} l : throw new _in::LateError::localNI("l");
+    return #l#isSet ?{dynamic} #l : throw new _in::LateError::localNI("l");
   function #l#set(dynamic #t4) → dynamic
     if(#l#isSet)
       throw new _in::LateError::localAI("l");
     else {
       #l#isSet = true;
-      return l = #t4;
+      return #l = #t4;
     }
   self::g = "Lily";
   self::C::s = "was";
diff --git a/pkg/front_end/testcases/late_lowering/issue40601.dart.strong.expect b/pkg/front_end/testcases/late_lowering/issue40601.dart.strong.expect
index 7e000ad..6de62a5 100644
--- a/pkg/front_end/testcases/late_lowering/issue40601.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/issue40601.dart.strong.expect
@@ -10,13 +10,13 @@
   abstract method baz() → self::A::T%;
   method bar(generic-covariant-impl self::A::T% value) → dynamic {}
   method foo() → dynamic {
-    self::A::T? value;
-    core::bool #value#isSet = false;
+    lowered self::A::T? #value;
+    lowered core::bool #value#isSet = false;
     function #value#get() → self::A::T%
-      return #value#isSet ?{self::A::T%} value{self::A::T%} : throw new _in::LateError::localNI("value");
+      return #value#isSet ?{self::A::T%} #value{self::A::T%} : throw new _in::LateError::localNI("value");
     function #value#set(self::A::T% #t1) → dynamic {
       #value#isSet = true;
-      return value = #t1;
+      return #value = #t1;
     }
     () → dynamic result = () → dynamic => this.{self::A::bar}(#value#get.call());
     (() → Null {
diff --git a/pkg/front_end/testcases/late_lowering/issue40601.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/issue40601.dart.strong.transformed.expect
index 7e000ad..6de62a5 100644
--- a/pkg/front_end/testcases/late_lowering/issue40601.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/issue40601.dart.strong.transformed.expect
@@ -10,13 +10,13 @@
   abstract method baz() → self::A::T%;
   method bar(generic-covariant-impl self::A::T% value) → dynamic {}
   method foo() → dynamic {
-    self::A::T? value;
-    core::bool #value#isSet = false;
+    lowered self::A::T? #value;
+    lowered core::bool #value#isSet = false;
     function #value#get() → self::A::T%
-      return #value#isSet ?{self::A::T%} value{self::A::T%} : throw new _in::LateError::localNI("value");
+      return #value#isSet ?{self::A::T%} #value{self::A::T%} : throw new _in::LateError::localNI("value");
     function #value#set(self::A::T% #t1) → dynamic {
       #value#isSet = true;
-      return value = #t1;
+      return #value = #t1;
     }
     () → dynamic result = () → dynamic => this.{self::A::bar}(#value#get.call());
     (() → Null {
diff --git a/pkg/front_end/testcases/late_lowering/issue40601.dart.weak.expect b/pkg/front_end/testcases/late_lowering/issue40601.dart.weak.expect
index 7e000ad..6de62a5 100644
--- a/pkg/front_end/testcases/late_lowering/issue40601.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/issue40601.dart.weak.expect
@@ -10,13 +10,13 @@
   abstract method baz() → self::A::T%;
   method bar(generic-covariant-impl self::A::T% value) → dynamic {}
   method foo() → dynamic {
-    self::A::T? value;
-    core::bool #value#isSet = false;
+    lowered self::A::T? #value;
+    lowered core::bool #value#isSet = false;
     function #value#get() → self::A::T%
-      return #value#isSet ?{self::A::T%} value{self::A::T%} : throw new _in::LateError::localNI("value");
+      return #value#isSet ?{self::A::T%} #value{self::A::T%} : throw new _in::LateError::localNI("value");
     function #value#set(self::A::T% #t1) → dynamic {
       #value#isSet = true;
-      return value = #t1;
+      return #value = #t1;
     }
     () → dynamic result = () → dynamic => this.{self::A::bar}(#value#get.call());
     (() → Null {
diff --git a/pkg/front_end/testcases/late_lowering/issue40601.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/issue40601.dart.weak.transformed.expect
index 7e000ad..6de62a5 100644
--- a/pkg/front_end/testcases/late_lowering/issue40601.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/issue40601.dart.weak.transformed.expect
@@ -10,13 +10,13 @@
   abstract method baz() → self::A::T%;
   method bar(generic-covariant-impl self::A::T% value) → dynamic {}
   method foo() → dynamic {
-    self::A::T? value;
-    core::bool #value#isSet = false;
+    lowered self::A::T? #value;
+    lowered core::bool #value#isSet = false;
     function #value#get() → self::A::T%
-      return #value#isSet ?{self::A::T%} value{self::A::T%} : throw new _in::LateError::localNI("value");
+      return #value#isSet ?{self::A::T%} #value{self::A::T%} : throw new _in::LateError::localNI("value");
     function #value#set(self::A::T% #t1) → dynamic {
       #value#isSet = true;
-      return value = #t1;
+      return #value = #t1;
     }
     () → dynamic result = () → dynamic => this.{self::A::bar}(#value#get.call());
     (() → Null {
diff --git a/pkg/front_end/testcases/late_lowering/issue44372.dart.strong.expect b/pkg/front_end/testcases/late_lowering/issue44372.dart.strong.expect
index 016d6f4..2e8255b 100644
--- a/pkg/front_end/testcases/late_lowering/issue44372.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/issue44372.dart.strong.expect
@@ -4,14 +4,14 @@
 import "dart:_internal" as _in;
 
 static method main(core::List<core::String> args) → dynamic {
-  () →? core::int recursiveInitLocal;
+  lowered () →? core::int #recursiveInitLocal;
   function #recursiveInitLocal#get() → () → core::int
-    return let final () →? core::int #t1 = recursiveInitLocal in #t1.==(null) ?{() → core::int} throw new _in::LateError::localNI("recursiveInitLocal") : #t1{() → core::int};
+    return let final () →? core::int #t1 = #recursiveInitLocal in #t1.==(null) ?{() → core::int} throw new _in::LateError::localNI("recursiveInitLocal") : #t1{() → core::int};
   function #recursiveInitLocal#set(() → core::int #t2) → dynamic
-    return recursiveInitLocal = #t2;
-  final core::int? local;
+    return #recursiveInitLocal = #t2;
+  lowered final core::int? #local;
   function #local#get() → core::int
-    return let final core::int? #t3 = local in #t3.==(null) ?{core::int} let final core::int #t4 = #recursiveInitLocal#get.call().call() in local.==(null) ?{core::int} local = #t4 : throw new _in::LateError::localADI("local") : #t3{core::int};
+    return let final core::int? #t3 = #local in #t3.==(null) ?{core::int} let final core::int #t4 = #recursiveInitLocal#get.call().call() in #local.==(null) ?{core::int} #local = #t4 : throw new _in::LateError::localADI("local") : #t3{core::int};
   core::bool doRecursiveInitLocal = true;
   #recursiveInitLocal#set.call(() → core::int {
     core::print("Executing initializer");
diff --git a/pkg/front_end/testcases/late_lowering/issue44372.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/issue44372.dart.strong.transformed.expect
index 016d6f4..2e8255b 100644
--- a/pkg/front_end/testcases/late_lowering/issue44372.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/issue44372.dart.strong.transformed.expect
@@ -4,14 +4,14 @@
 import "dart:_internal" as _in;
 
 static method main(core::List<core::String> args) → dynamic {
-  () →? core::int recursiveInitLocal;
+  lowered () →? core::int #recursiveInitLocal;
   function #recursiveInitLocal#get() → () → core::int
-    return let final () →? core::int #t1 = recursiveInitLocal in #t1.==(null) ?{() → core::int} throw new _in::LateError::localNI("recursiveInitLocal") : #t1{() → core::int};
+    return let final () →? core::int #t1 = #recursiveInitLocal in #t1.==(null) ?{() → core::int} throw new _in::LateError::localNI("recursiveInitLocal") : #t1{() → core::int};
   function #recursiveInitLocal#set(() → core::int #t2) → dynamic
-    return recursiveInitLocal = #t2;
-  final core::int? local;
+    return #recursiveInitLocal = #t2;
+  lowered final core::int? #local;
   function #local#get() → core::int
-    return let final core::int? #t3 = local in #t3.==(null) ?{core::int} let final core::int #t4 = #recursiveInitLocal#get.call().call() in local.==(null) ?{core::int} local = #t4 : throw new _in::LateError::localADI("local") : #t3{core::int};
+    return let final core::int? #t3 = #local in #t3.==(null) ?{core::int} let final core::int #t4 = #recursiveInitLocal#get.call().call() in #local.==(null) ?{core::int} #local = #t4 : throw new _in::LateError::localADI("local") : #t3{core::int};
   core::bool doRecursiveInitLocal = true;
   #recursiveInitLocal#set.call(() → core::int {
     core::print("Executing initializer");
diff --git a/pkg/front_end/testcases/late_lowering/issue44372.dart.weak.expect b/pkg/front_end/testcases/late_lowering/issue44372.dart.weak.expect
index 515c1f2..16f8718 100644
--- a/pkg/front_end/testcases/late_lowering/issue44372.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/issue44372.dart.weak.expect
@@ -4,25 +4,25 @@
 import "dart:_internal" as _in;
 
 static method main(core::List<core::String> args) → dynamic {
-  () →? core::int recursiveInitLocal;
-  core::bool #recursiveInitLocal#isSet = false;
+  lowered () →? core::int #recursiveInitLocal;
+  lowered core::bool #recursiveInitLocal#isSet = false;
   function #recursiveInitLocal#get() → () → core::int
-    return #recursiveInitLocal#isSet ?{() → core::int} recursiveInitLocal{() → core::int} : throw new _in::LateError::localNI("recursiveInitLocal");
+    return #recursiveInitLocal#isSet ?{() → core::int} #recursiveInitLocal{() → core::int} : throw new _in::LateError::localNI("recursiveInitLocal");
   function #recursiveInitLocal#set(() → core::int #t1) → dynamic {
     #recursiveInitLocal#isSet = true;
-    return recursiveInitLocal = #t1;
+    return #recursiveInitLocal = #t1;
   }
-  final core::int? local;
-  core::bool #local#isSet = false;
+  lowered final core::int? #local;
+  lowered core::bool #local#isSet = false;
   function #local#get() → core::int {
     if(!#local#isSet) {
       final core::int #t2 = #recursiveInitLocal#get.call().call();
       if(#local#isSet)
         throw new _in::LateError::localADI("local");
-      local = #t2;
+      #local = #t2;
       #local#isSet = true;
     }
-    return local{core::int};
+    return #local{core::int};
   }
   core::bool doRecursiveInitLocal = true;
   #recursiveInitLocal#set.call(() → core::int {
diff --git a/pkg/front_end/testcases/late_lowering/issue44372.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/issue44372.dart.weak.transformed.expect
index 515c1f2..16f8718 100644
--- a/pkg/front_end/testcases/late_lowering/issue44372.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/issue44372.dart.weak.transformed.expect
@@ -4,25 +4,25 @@
 import "dart:_internal" as _in;
 
 static method main(core::List<core::String> args) → dynamic {
-  () →? core::int recursiveInitLocal;
-  core::bool #recursiveInitLocal#isSet = false;
+  lowered () →? core::int #recursiveInitLocal;
+  lowered core::bool #recursiveInitLocal#isSet = false;
   function #recursiveInitLocal#get() → () → core::int
-    return #recursiveInitLocal#isSet ?{() → core::int} recursiveInitLocal{() → core::int} : throw new _in::LateError::localNI("recursiveInitLocal");
+    return #recursiveInitLocal#isSet ?{() → core::int} #recursiveInitLocal{() → core::int} : throw new _in::LateError::localNI("recursiveInitLocal");
   function #recursiveInitLocal#set(() → core::int #t1) → dynamic {
     #recursiveInitLocal#isSet = true;
-    return recursiveInitLocal = #t1;
+    return #recursiveInitLocal = #t1;
   }
-  final core::int? local;
-  core::bool #local#isSet = false;
+  lowered final core::int? #local;
+  lowered core::bool #local#isSet = false;
   function #local#get() → core::int {
     if(!#local#isSet) {
       final core::int #t2 = #recursiveInitLocal#get.call().call();
       if(#local#isSet)
         throw new _in::LateError::localADI("local");
-      local = #t2;
+      #local = #t2;
       #local#isSet = true;
     }
-    return local{core::int};
+    return #local{core::int};
   }
   core::bool doRecursiveInitLocal = true;
   #recursiveInitLocal#set.call(() → core::int {
diff --git a/pkg/front_end/testcases/late_lowering/late_final_local_with_initializer.dart.strong.expect b/pkg/front_end/testcases/late_lowering/late_final_local_with_initializer.dart.strong.expect
index ff4583f..b219a6f 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_local_with_initializer.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_local_with_initializer.dart.strong.expect
@@ -8,9 +8,9 @@
   function initLateLocal(core::int value) → core::int {
     return lateLocalInit = value;
   }
-  final core::int? lateLocal;
+  lowered final core::int? #lateLocal;
   function #lateLocal#get() → core::int
-    return let final core::int? #t1 = lateLocal in #t1.==(null) ?{core::int} let final core::int #t2 = initLateLocal.call(123) in lateLocal.==(null) ?{core::int} lateLocal = #t2 : throw new _in::LateError::localADI("lateLocal") : #t1{core::int};
+    return let final core::int? #t1 = #lateLocal in #t1.==(null) ?{core::int} let final core::int #t2 = initLateLocal.call(123) in #lateLocal.==(null) ?{core::int} #lateLocal = #t2 : throw new _in::LateError::localADI("lateLocal") : #t1{core::int};
   self::expect(null, lateLocalInit);
   self::expect(123, #lateLocal#get.call());
   self::expect(123, lateLocalInit);
@@ -19,17 +19,17 @@
     function initLateGenericLocal(T% value) → T% {
       return lateGenericLocalInit = value;
     }
-    final T? lateGenericLocal;
-    core::bool #lateGenericLocal#isSet = false;
+    lowered final T? #lateGenericLocal;
+    lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T% {
       if(!#lateGenericLocal#isSet) {
         final T% #t3 = initLateGenericLocal.call(value);
         if(#lateGenericLocal#isSet)
           throw new _in::LateError::localADI("lateGenericLocal");
-        lateGenericLocal = #t3;
+        #lateGenericLocal = #t3;
         #lateGenericLocal#isSet = true;
       }
-      return lateGenericLocal{T%};
+      return #lateGenericLocal{T%};
     }
     self::expect(null, lateGenericLocalInit);
     self::expect(value, #lateGenericLocal#get.call());
diff --git a/pkg/front_end/testcases/late_lowering/late_final_local_with_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/late_final_local_with_initializer.dart.strong.transformed.expect
index ff4583f..b219a6f 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_local_with_initializer.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_local_with_initializer.dart.strong.transformed.expect
@@ -8,9 +8,9 @@
   function initLateLocal(core::int value) → core::int {
     return lateLocalInit = value;
   }
-  final core::int? lateLocal;
+  lowered final core::int? #lateLocal;
   function #lateLocal#get() → core::int
-    return let final core::int? #t1 = lateLocal in #t1.==(null) ?{core::int} let final core::int #t2 = initLateLocal.call(123) in lateLocal.==(null) ?{core::int} lateLocal = #t2 : throw new _in::LateError::localADI("lateLocal") : #t1{core::int};
+    return let final core::int? #t1 = #lateLocal in #t1.==(null) ?{core::int} let final core::int #t2 = initLateLocal.call(123) in #lateLocal.==(null) ?{core::int} #lateLocal = #t2 : throw new _in::LateError::localADI("lateLocal") : #t1{core::int};
   self::expect(null, lateLocalInit);
   self::expect(123, #lateLocal#get.call());
   self::expect(123, lateLocalInit);
@@ -19,17 +19,17 @@
     function initLateGenericLocal(T% value) → T% {
       return lateGenericLocalInit = value;
     }
-    final T? lateGenericLocal;
-    core::bool #lateGenericLocal#isSet = false;
+    lowered final T? #lateGenericLocal;
+    lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T% {
       if(!#lateGenericLocal#isSet) {
         final T% #t3 = initLateGenericLocal.call(value);
         if(#lateGenericLocal#isSet)
           throw new _in::LateError::localADI("lateGenericLocal");
-        lateGenericLocal = #t3;
+        #lateGenericLocal = #t3;
         #lateGenericLocal#isSet = true;
       }
-      return lateGenericLocal{T%};
+      return #lateGenericLocal{T%};
     }
     self::expect(null, lateGenericLocalInit);
     self::expect(value, #lateGenericLocal#get.call());
diff --git a/pkg/front_end/testcases/late_lowering/late_final_local_with_initializer.dart.weak.expect b/pkg/front_end/testcases/late_lowering/late_final_local_with_initializer.dart.weak.expect
index 5125e21..fd2146f 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_local_with_initializer.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_local_with_initializer.dart.weak.expect
@@ -8,17 +8,17 @@
   function initLateLocal(core::int value) → core::int {
     return lateLocalInit = value;
   }
-  final core::int? lateLocal;
-  core::bool #lateLocal#isSet = false;
+  lowered final core::int? #lateLocal;
+  lowered core::bool #lateLocal#isSet = false;
   function #lateLocal#get() → core::int {
     if(!#lateLocal#isSet) {
       final core::int #t1 = initLateLocal.call(123);
       if(#lateLocal#isSet)
         throw new _in::LateError::localADI("lateLocal");
-      lateLocal = #t1;
+      #lateLocal = #t1;
       #lateLocal#isSet = true;
     }
-    return lateLocal{core::int};
+    return #lateLocal{core::int};
   }
   self::expect(null, lateLocalInit);
   self::expect(123, #lateLocal#get.call());
@@ -28,17 +28,17 @@
     function initLateGenericLocal(T% value) → T% {
       return lateGenericLocalInit = value;
     }
-    final T? lateGenericLocal;
-    core::bool #lateGenericLocal#isSet = false;
+    lowered final T? #lateGenericLocal;
+    lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T% {
       if(!#lateGenericLocal#isSet) {
         final T% #t2 = initLateGenericLocal.call(value);
         if(#lateGenericLocal#isSet)
           throw new _in::LateError::localADI("lateGenericLocal");
-        lateGenericLocal = #t2;
+        #lateGenericLocal = #t2;
         #lateGenericLocal#isSet = true;
       }
-      return lateGenericLocal{T%};
+      return #lateGenericLocal{T%};
     }
     self::expect(null, lateGenericLocalInit);
     self::expect(value, #lateGenericLocal#get.call());
diff --git a/pkg/front_end/testcases/late_lowering/late_final_local_with_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/late_final_local_with_initializer.dart.weak.transformed.expect
index 5125e21..fd2146f 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_local_with_initializer.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_local_with_initializer.dart.weak.transformed.expect
@@ -8,17 +8,17 @@
   function initLateLocal(core::int value) → core::int {
     return lateLocalInit = value;
   }
-  final core::int? lateLocal;
-  core::bool #lateLocal#isSet = false;
+  lowered final core::int? #lateLocal;
+  lowered core::bool #lateLocal#isSet = false;
   function #lateLocal#get() → core::int {
     if(!#lateLocal#isSet) {
       final core::int #t1 = initLateLocal.call(123);
       if(#lateLocal#isSet)
         throw new _in::LateError::localADI("lateLocal");
-      lateLocal = #t1;
+      #lateLocal = #t1;
       #lateLocal#isSet = true;
     }
-    return lateLocal{core::int};
+    return #lateLocal{core::int};
   }
   self::expect(null, lateLocalInit);
   self::expect(123, #lateLocal#get.call());
@@ -28,17 +28,17 @@
     function initLateGenericLocal(T% value) → T% {
       return lateGenericLocalInit = value;
     }
-    final T? lateGenericLocal;
-    core::bool #lateGenericLocal#isSet = false;
+    lowered final T? #lateGenericLocal;
+    lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T% {
       if(!#lateGenericLocal#isSet) {
         final T% #t2 = initLateGenericLocal.call(value);
         if(#lateGenericLocal#isSet)
           throw new _in::LateError::localADI("lateGenericLocal");
-        lateGenericLocal = #t2;
+        #lateGenericLocal = #t2;
         #lateGenericLocal#isSet = true;
       }
-      return lateGenericLocal{T%};
+      return #lateGenericLocal{T%};
     }
     self::expect(null, lateGenericLocalInit);
     self::expect(value, #lateGenericLocal#get.call());
diff --git a/pkg/front_end/testcases/late_lowering/late_final_local_without_initializer.dart.strong.expect b/pkg/front_end/testcases/late_lowering/late_final_local_without_initializer.dart.strong.expect
index 5052aa475..2240a48 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_local_without_initializer.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_local_without_initializer.dart.strong.expect
@@ -5,12 +5,12 @@
 
 static method main() → dynamic {
   core::bool b = false;
-  final core::int? lateLocal;
+  lowered final core::int? #lateLocal;
   function #lateLocal#get() → core::int
-    return let final core::int? #t1 = lateLocal in #t1.==(null) ?{core::int} throw new _in::LateError::localNI("lateLocal") : #t1{core::int};
+    return let final core::int? #t1 = #lateLocal in #t1.==(null) ?{core::int} throw new _in::LateError::localNI("lateLocal") : #t1{core::int};
   function #lateLocal#set(core::int #t2) → dynamic
-    if(lateLocal.==(null))
-      return lateLocal = #t2;
+    if(#lateLocal.==(null))
+      return #lateLocal = #t2;
     else
       throw new _in::LateError::localAI("lateLocal");
   if(b) {
@@ -23,16 +23,16 @@
   }
   self::throws(() → core::int => #lateLocal#set.call(124), "Write value to initialized lateLocal");
   function local<T extends core::Object? = dynamic>(T% value) → Null {
-    final T? lateGenericLocal;
-    core::bool #lateGenericLocal#isSet = false;
+    lowered final T? #lateGenericLocal;
+    lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T%
-      return #lateGenericLocal#isSet ?{T%} lateGenericLocal{T%} : throw new _in::LateError::localNI("lateGenericLocal");
+      return #lateGenericLocal#isSet ?{T%} #lateGenericLocal{T%} : throw new _in::LateError::localNI("lateGenericLocal");
     function #lateGenericLocal#set(T% #t3) → dynamic
       if(#lateGenericLocal#isSet)
         throw new _in::LateError::localAI("lateGenericLocal");
       else {
         #lateGenericLocal#isSet = true;
-        return lateGenericLocal = #t3;
+        return #lateGenericLocal = #t3;
       }
     if(b) {
       #lateGenericLocal#set.call(value);
diff --git a/pkg/front_end/testcases/late_lowering/late_final_local_without_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/late_final_local_without_initializer.dart.strong.transformed.expect
index 5052aa475..2240a48 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_local_without_initializer.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_local_without_initializer.dart.strong.transformed.expect
@@ -5,12 +5,12 @@
 
 static method main() → dynamic {
   core::bool b = false;
-  final core::int? lateLocal;
+  lowered final core::int? #lateLocal;
   function #lateLocal#get() → core::int
-    return let final core::int? #t1 = lateLocal in #t1.==(null) ?{core::int} throw new _in::LateError::localNI("lateLocal") : #t1{core::int};
+    return let final core::int? #t1 = #lateLocal in #t1.==(null) ?{core::int} throw new _in::LateError::localNI("lateLocal") : #t1{core::int};
   function #lateLocal#set(core::int #t2) → dynamic
-    if(lateLocal.==(null))
-      return lateLocal = #t2;
+    if(#lateLocal.==(null))
+      return #lateLocal = #t2;
     else
       throw new _in::LateError::localAI("lateLocal");
   if(b) {
@@ -23,16 +23,16 @@
   }
   self::throws(() → core::int => #lateLocal#set.call(124), "Write value to initialized lateLocal");
   function local<T extends core::Object? = dynamic>(T% value) → Null {
-    final T? lateGenericLocal;
-    core::bool #lateGenericLocal#isSet = false;
+    lowered final T? #lateGenericLocal;
+    lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T%
-      return #lateGenericLocal#isSet ?{T%} lateGenericLocal{T%} : throw new _in::LateError::localNI("lateGenericLocal");
+      return #lateGenericLocal#isSet ?{T%} #lateGenericLocal{T%} : throw new _in::LateError::localNI("lateGenericLocal");
     function #lateGenericLocal#set(T% #t3) → dynamic
       if(#lateGenericLocal#isSet)
         throw new _in::LateError::localAI("lateGenericLocal");
       else {
         #lateGenericLocal#isSet = true;
-        return lateGenericLocal = #t3;
+        return #lateGenericLocal = #t3;
       }
     if(b) {
       #lateGenericLocal#set.call(value);
diff --git a/pkg/front_end/testcases/late_lowering/late_final_local_without_initializer.dart.weak.expect b/pkg/front_end/testcases/late_lowering/late_final_local_without_initializer.dart.weak.expect
index 4a3c1ef..8f08ee7 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_local_without_initializer.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_local_without_initializer.dart.weak.expect
@@ -5,16 +5,16 @@
 
 static method main() → dynamic {
   core::bool b = false;
-  final core::int? lateLocal;
-  core::bool #lateLocal#isSet = false;
+  lowered final core::int? #lateLocal;
+  lowered core::bool #lateLocal#isSet = false;
   function #lateLocal#get() → core::int
-    return #lateLocal#isSet ?{core::int} lateLocal{core::int} : throw new _in::LateError::localNI("lateLocal");
+    return #lateLocal#isSet ?{core::int} #lateLocal{core::int} : throw new _in::LateError::localNI("lateLocal");
   function #lateLocal#set(core::int #t1) → dynamic
     if(#lateLocal#isSet)
       throw new _in::LateError::localAI("lateLocal");
     else {
       #lateLocal#isSet = true;
-      return lateLocal = #t1;
+      return #lateLocal = #t1;
     }
   if(b) {
     #lateLocal#set.call(123);
@@ -26,16 +26,16 @@
   }
   self::throws(() → core::int => #lateLocal#set.call(124), "Write value to initialized lateLocal");
   function local<T extends core::Object? = dynamic>(T% value) → Null {
-    final T? lateGenericLocal;
-    core::bool #lateGenericLocal#isSet = false;
+    lowered final T? #lateGenericLocal;
+    lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T%
-      return #lateGenericLocal#isSet ?{T%} lateGenericLocal{T%} : throw new _in::LateError::localNI("lateGenericLocal");
+      return #lateGenericLocal#isSet ?{T%} #lateGenericLocal{T%} : throw new _in::LateError::localNI("lateGenericLocal");
     function #lateGenericLocal#set(T% #t2) → dynamic
       if(#lateGenericLocal#isSet)
         throw new _in::LateError::localAI("lateGenericLocal");
       else {
         #lateGenericLocal#isSet = true;
-        return lateGenericLocal = #t2;
+        return #lateGenericLocal = #t2;
       }
     if(b) {
       #lateGenericLocal#set.call(value);
diff --git a/pkg/front_end/testcases/late_lowering/late_final_local_without_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/late_final_local_without_initializer.dart.weak.transformed.expect
index 4a3c1ef..8f08ee7 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_local_without_initializer.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_local_without_initializer.dart.weak.transformed.expect
@@ -5,16 +5,16 @@
 
 static method main() → dynamic {
   core::bool b = false;
-  final core::int? lateLocal;
-  core::bool #lateLocal#isSet = false;
+  lowered final core::int? #lateLocal;
+  lowered core::bool #lateLocal#isSet = false;
   function #lateLocal#get() → core::int
-    return #lateLocal#isSet ?{core::int} lateLocal{core::int} : throw new _in::LateError::localNI("lateLocal");
+    return #lateLocal#isSet ?{core::int} #lateLocal{core::int} : throw new _in::LateError::localNI("lateLocal");
   function #lateLocal#set(core::int #t1) → dynamic
     if(#lateLocal#isSet)
       throw new _in::LateError::localAI("lateLocal");
     else {
       #lateLocal#isSet = true;
-      return lateLocal = #t1;
+      return #lateLocal = #t1;
     }
   if(b) {
     #lateLocal#set.call(123);
@@ -26,16 +26,16 @@
   }
   self::throws(() → core::int => #lateLocal#set.call(124), "Write value to initialized lateLocal");
   function local<T extends core::Object? = dynamic>(T% value) → Null {
-    final T? lateGenericLocal;
-    core::bool #lateGenericLocal#isSet = false;
+    lowered final T? #lateGenericLocal;
+    lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T%
-      return #lateGenericLocal#isSet ?{T%} lateGenericLocal{T%} : throw new _in::LateError::localNI("lateGenericLocal");
+      return #lateGenericLocal#isSet ?{T%} #lateGenericLocal{T%} : throw new _in::LateError::localNI("lateGenericLocal");
     function #lateGenericLocal#set(T% #t2) → dynamic
       if(#lateGenericLocal#isSet)
         throw new _in::LateError::localAI("lateGenericLocal");
       else {
         #lateGenericLocal#isSet = true;
-        return lateGenericLocal = #t2;
+        return #lateGenericLocal = #t2;
       }
     if(b) {
       #lateGenericLocal#set.call(value);
diff --git a/pkg/front_end/testcases/late_lowering/late_final_nullable_local_with_initializer.dart.strong.expect b/pkg/front_end/testcases/late_lowering/late_final_nullable_local_with_initializer.dart.strong.expect
index 6292291..d2e95b9 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_nullable_local_with_initializer.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_nullable_local_with_initializer.dart.strong.expect
@@ -8,17 +8,17 @@
   function initLateLocal(core::int? value) → core::int? {
     return lateLocalInit = value;
   }
-  final core::int? lateLocal;
-  core::bool #lateLocal#isSet = false;
+  lowered final core::int? #lateLocal;
+  lowered core::bool #lateLocal#isSet = false;
   function #lateLocal#get() → core::int? {
     if(!#lateLocal#isSet) {
       final core::int? #t1 = initLateLocal.call(123);
       if(#lateLocal#isSet)
         throw new _in::LateError::localADI("lateLocal");
-      lateLocal = #t1;
+      #lateLocal = #t1;
       #lateLocal#isSet = true;
     }
-    return lateLocal;
+    return #lateLocal;
   }
   self::expect(null, lateLocalInit);
   self::expect(123, #lateLocal#get.call());
@@ -28,17 +28,17 @@
     function initLateGenericLocal(T? value) → T? {
       return lateGenericLocalInit = value;
     }
-    final T? lateGenericLocal;
-    core::bool #lateGenericLocal#isSet = false;
+    lowered final T? #lateGenericLocal;
+    lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T? {
       if(!#lateGenericLocal#isSet) {
         final T? #t2 = initLateGenericLocal.call(value);
         if(#lateGenericLocal#isSet)
           throw new _in::LateError::localADI("lateGenericLocal");
-        lateGenericLocal = #t2;
+        #lateGenericLocal = #t2;
         #lateGenericLocal#isSet = true;
       }
-      return lateGenericLocal;
+      return #lateGenericLocal;
     }
     self::expect(null, lateGenericLocalInit);
     self::expect(value, #lateGenericLocal#get.call());
diff --git a/pkg/front_end/testcases/late_lowering/late_final_nullable_local_with_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/late_final_nullable_local_with_initializer.dart.strong.transformed.expect
index 6292291..d2e95b9 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_nullable_local_with_initializer.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_nullable_local_with_initializer.dart.strong.transformed.expect
@@ -8,17 +8,17 @@
   function initLateLocal(core::int? value) → core::int? {
     return lateLocalInit = value;
   }
-  final core::int? lateLocal;
-  core::bool #lateLocal#isSet = false;
+  lowered final core::int? #lateLocal;
+  lowered core::bool #lateLocal#isSet = false;
   function #lateLocal#get() → core::int? {
     if(!#lateLocal#isSet) {
       final core::int? #t1 = initLateLocal.call(123);
       if(#lateLocal#isSet)
         throw new _in::LateError::localADI("lateLocal");
-      lateLocal = #t1;
+      #lateLocal = #t1;
       #lateLocal#isSet = true;
     }
-    return lateLocal;
+    return #lateLocal;
   }
   self::expect(null, lateLocalInit);
   self::expect(123, #lateLocal#get.call());
@@ -28,17 +28,17 @@
     function initLateGenericLocal(T? value) → T? {
       return lateGenericLocalInit = value;
     }
-    final T? lateGenericLocal;
-    core::bool #lateGenericLocal#isSet = false;
+    lowered final T? #lateGenericLocal;
+    lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T? {
       if(!#lateGenericLocal#isSet) {
         final T? #t2 = initLateGenericLocal.call(value);
         if(#lateGenericLocal#isSet)
           throw new _in::LateError::localADI("lateGenericLocal");
-        lateGenericLocal = #t2;
+        #lateGenericLocal = #t2;
         #lateGenericLocal#isSet = true;
       }
-      return lateGenericLocal;
+      return #lateGenericLocal;
     }
     self::expect(null, lateGenericLocalInit);
     self::expect(value, #lateGenericLocal#get.call());
diff --git a/pkg/front_end/testcases/late_lowering/late_final_nullable_local_with_initializer.dart.weak.expect b/pkg/front_end/testcases/late_lowering/late_final_nullable_local_with_initializer.dart.weak.expect
index 6292291..d2e95b9 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_nullable_local_with_initializer.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_nullable_local_with_initializer.dart.weak.expect
@@ -8,17 +8,17 @@
   function initLateLocal(core::int? value) → core::int? {
     return lateLocalInit = value;
   }
-  final core::int? lateLocal;
-  core::bool #lateLocal#isSet = false;
+  lowered final core::int? #lateLocal;
+  lowered core::bool #lateLocal#isSet = false;
   function #lateLocal#get() → core::int? {
     if(!#lateLocal#isSet) {
       final core::int? #t1 = initLateLocal.call(123);
       if(#lateLocal#isSet)
         throw new _in::LateError::localADI("lateLocal");
-      lateLocal = #t1;
+      #lateLocal = #t1;
       #lateLocal#isSet = true;
     }
-    return lateLocal;
+    return #lateLocal;
   }
   self::expect(null, lateLocalInit);
   self::expect(123, #lateLocal#get.call());
@@ -28,17 +28,17 @@
     function initLateGenericLocal(T? value) → T? {
       return lateGenericLocalInit = value;
     }
-    final T? lateGenericLocal;
-    core::bool #lateGenericLocal#isSet = false;
+    lowered final T? #lateGenericLocal;
+    lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T? {
       if(!#lateGenericLocal#isSet) {
         final T? #t2 = initLateGenericLocal.call(value);
         if(#lateGenericLocal#isSet)
           throw new _in::LateError::localADI("lateGenericLocal");
-        lateGenericLocal = #t2;
+        #lateGenericLocal = #t2;
         #lateGenericLocal#isSet = true;
       }
-      return lateGenericLocal;
+      return #lateGenericLocal;
     }
     self::expect(null, lateGenericLocalInit);
     self::expect(value, #lateGenericLocal#get.call());
diff --git a/pkg/front_end/testcases/late_lowering/late_final_nullable_local_with_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/late_final_nullable_local_with_initializer.dart.weak.transformed.expect
index 6292291..d2e95b9 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_nullable_local_with_initializer.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_nullable_local_with_initializer.dart.weak.transformed.expect
@@ -8,17 +8,17 @@
   function initLateLocal(core::int? value) → core::int? {
     return lateLocalInit = value;
   }
-  final core::int? lateLocal;
-  core::bool #lateLocal#isSet = false;
+  lowered final core::int? #lateLocal;
+  lowered core::bool #lateLocal#isSet = false;
   function #lateLocal#get() → core::int? {
     if(!#lateLocal#isSet) {
       final core::int? #t1 = initLateLocal.call(123);
       if(#lateLocal#isSet)
         throw new _in::LateError::localADI("lateLocal");
-      lateLocal = #t1;
+      #lateLocal = #t1;
       #lateLocal#isSet = true;
     }
-    return lateLocal;
+    return #lateLocal;
   }
   self::expect(null, lateLocalInit);
   self::expect(123, #lateLocal#get.call());
@@ -28,17 +28,17 @@
     function initLateGenericLocal(T? value) → T? {
       return lateGenericLocalInit = value;
     }
-    final T? lateGenericLocal;
-    core::bool #lateGenericLocal#isSet = false;
+    lowered final T? #lateGenericLocal;
+    lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T? {
       if(!#lateGenericLocal#isSet) {
         final T? #t2 = initLateGenericLocal.call(value);
         if(#lateGenericLocal#isSet)
           throw new _in::LateError::localADI("lateGenericLocal");
-        lateGenericLocal = #t2;
+        #lateGenericLocal = #t2;
         #lateGenericLocal#isSet = true;
       }
-      return lateGenericLocal;
+      return #lateGenericLocal;
     }
     self::expect(null, lateGenericLocalInit);
     self::expect(value, #lateGenericLocal#get.call());
diff --git a/pkg/front_end/testcases/late_lowering/late_final_nullable_local_without_initializer.dart.strong.expect b/pkg/front_end/testcases/late_lowering/late_final_nullable_local_without_initializer.dart.strong.expect
index 37fa15a..5d5693d 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_nullable_local_without_initializer.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_nullable_local_without_initializer.dart.strong.expect
@@ -4,16 +4,16 @@
 import "dart:_internal" as _in;
 
 static method main() → dynamic {
-  final core::int? lateLocal;
-  core::bool #lateLocal#isSet = false;
+  lowered final core::int? #lateLocal;
+  lowered core::bool #lateLocal#isSet = false;
   function #lateLocal#get() → core::int?
-    return #lateLocal#isSet ?{core::int?} lateLocal : throw new _in::LateError::localNI("lateLocal");
+    return #lateLocal#isSet ?{core::int?} #lateLocal : throw new _in::LateError::localNI("lateLocal");
   function #lateLocal#set(core::int? #t1) → dynamic
     if(#lateLocal#isSet)
       throw new _in::LateError::localAI("lateLocal");
     else {
       #lateLocal#isSet = true;
-      return lateLocal = #t1;
+      return #lateLocal = #t1;
     }
   self::throws(() → core::int? => #lateLocal#get.call(), "Read value from uninitialized lateLocal");
   if(1.{core::num::==}(1)) {
@@ -22,16 +22,16 @@
   self::expect(123, #lateLocal#get.call());
   self::throws(() → core::int => #lateLocal#set.call(124), "Write value to initialized lateLocal");
   function local<T extends core::Object? = dynamic>(T? value) → Null {
-    final T? lateGenericLocal;
-    core::bool #lateGenericLocal#isSet = false;
+    lowered final T? #lateGenericLocal;
+    lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T?
-      return #lateGenericLocal#isSet ?{T?} lateGenericLocal : throw new _in::LateError::localNI("lateGenericLocal");
+      return #lateGenericLocal#isSet ?{T?} #lateGenericLocal : throw new _in::LateError::localNI("lateGenericLocal");
     function #lateGenericLocal#set(T? #t2) → dynamic
       if(#lateGenericLocal#isSet)
         throw new _in::LateError::localAI("lateGenericLocal");
       else {
         #lateGenericLocal#isSet = true;
-        return lateGenericLocal = #t2;
+        return #lateGenericLocal = #t2;
       }
     self::throws(() → T? => #lateGenericLocal#get.call(), "Read value from uninitialized lateGenericLocal");
     if(1.{core::num::==}(1)) {
diff --git a/pkg/front_end/testcases/late_lowering/late_final_nullable_local_without_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/late_final_nullable_local_without_initializer.dart.strong.transformed.expect
index 3dfd218..15d60ff 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_nullable_local_without_initializer.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_nullable_local_without_initializer.dart.strong.transformed.expect
@@ -4,16 +4,16 @@
 import "dart:_internal" as _in;
 
 static method main() → dynamic {
-  final core::int? lateLocal;
-  core::bool #lateLocal#isSet = false;
+  lowered final core::int? #lateLocal;
+  lowered core::bool #lateLocal#isSet = false;
   function #lateLocal#get() → core::int?
-    return #lateLocal#isSet ?{core::int?} lateLocal : throw new _in::LateError::localNI("lateLocal");
+    return #lateLocal#isSet ?{core::int?} #lateLocal : throw new _in::LateError::localNI("lateLocal");
   function #lateLocal#set(core::int? #t1) → dynamic
     if(#lateLocal#isSet)
       throw new _in::LateError::localAI("lateLocal");
     else {
       #lateLocal#isSet = true;
-      return lateLocal = #t1;
+      return #lateLocal = #t1;
     }
   self::throws(() → core::int? => #lateLocal#get.call(), "Read value from uninitialized lateLocal");
   if(1.{core::num::==}(1)) {
@@ -22,16 +22,16 @@
   self::expect(123, #lateLocal#get.call());
   self::throws(() → core::int => #lateLocal#set.call(124), "Write value to initialized lateLocal");
   function local<T extends core::Object? = dynamic>(T? value) → Null {
-    final T? lateGenericLocal;
-    core::bool #lateGenericLocal#isSet = false;
+    lowered final T? #lateGenericLocal;
+    lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T?
-      return #lateGenericLocal#isSet ?{T?} lateGenericLocal : throw new _in::LateError::localNI("lateGenericLocal");
+      return #lateGenericLocal#isSet ?{T?} #lateGenericLocal : throw new _in::LateError::localNI("lateGenericLocal");
     function #lateGenericLocal#set(T? #t2) → dynamic
       if(#lateGenericLocal#isSet)
         throw new _in::LateError::localAI("lateGenericLocal");
       else {
         #lateGenericLocal#isSet = true;
-        return lateGenericLocal = #t2;
+        return #lateGenericLocal = #t2;
       }
     self::throws(() → T? => #lateGenericLocal#get.call(), "Read value from uninitialized lateGenericLocal");
     if(1.{core::num::==}(1)) {
diff --git a/pkg/front_end/testcases/late_lowering/late_final_nullable_local_without_initializer.dart.weak.expect b/pkg/front_end/testcases/late_lowering/late_final_nullable_local_without_initializer.dart.weak.expect
index 37fa15a..5d5693d 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_nullable_local_without_initializer.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_nullable_local_without_initializer.dart.weak.expect
@@ -4,16 +4,16 @@
 import "dart:_internal" as _in;
 
 static method main() → dynamic {
-  final core::int? lateLocal;
-  core::bool #lateLocal#isSet = false;
+  lowered final core::int? #lateLocal;
+  lowered core::bool #lateLocal#isSet = false;
   function #lateLocal#get() → core::int?
-    return #lateLocal#isSet ?{core::int?} lateLocal : throw new _in::LateError::localNI("lateLocal");
+    return #lateLocal#isSet ?{core::int?} #lateLocal : throw new _in::LateError::localNI("lateLocal");
   function #lateLocal#set(core::int? #t1) → dynamic
     if(#lateLocal#isSet)
       throw new _in::LateError::localAI("lateLocal");
     else {
       #lateLocal#isSet = true;
-      return lateLocal = #t1;
+      return #lateLocal = #t1;
     }
   self::throws(() → core::int? => #lateLocal#get.call(), "Read value from uninitialized lateLocal");
   if(1.{core::num::==}(1)) {
@@ -22,16 +22,16 @@
   self::expect(123, #lateLocal#get.call());
   self::throws(() → core::int => #lateLocal#set.call(124), "Write value to initialized lateLocal");
   function local<T extends core::Object? = dynamic>(T? value) → Null {
-    final T? lateGenericLocal;
-    core::bool #lateGenericLocal#isSet = false;
+    lowered final T? #lateGenericLocal;
+    lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T?
-      return #lateGenericLocal#isSet ?{T?} lateGenericLocal : throw new _in::LateError::localNI("lateGenericLocal");
+      return #lateGenericLocal#isSet ?{T?} #lateGenericLocal : throw new _in::LateError::localNI("lateGenericLocal");
     function #lateGenericLocal#set(T? #t2) → dynamic
       if(#lateGenericLocal#isSet)
         throw new _in::LateError::localAI("lateGenericLocal");
       else {
         #lateGenericLocal#isSet = true;
-        return lateGenericLocal = #t2;
+        return #lateGenericLocal = #t2;
       }
     self::throws(() → T? => #lateGenericLocal#get.call(), "Read value from uninitialized lateGenericLocal");
     if(1.{core::num::==}(1)) {
diff --git a/pkg/front_end/testcases/late_lowering/late_final_nullable_local_without_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/late_final_nullable_local_without_initializer.dart.weak.transformed.expect
index 3dfd218..15d60ff 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_nullable_local_without_initializer.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_nullable_local_without_initializer.dart.weak.transformed.expect
@@ -4,16 +4,16 @@
 import "dart:_internal" as _in;
 
 static method main() → dynamic {
-  final core::int? lateLocal;
-  core::bool #lateLocal#isSet = false;
+  lowered final core::int? #lateLocal;
+  lowered core::bool #lateLocal#isSet = false;
   function #lateLocal#get() → core::int?
-    return #lateLocal#isSet ?{core::int?} lateLocal : throw new _in::LateError::localNI("lateLocal");
+    return #lateLocal#isSet ?{core::int?} #lateLocal : throw new _in::LateError::localNI("lateLocal");
   function #lateLocal#set(core::int? #t1) → dynamic
     if(#lateLocal#isSet)
       throw new _in::LateError::localAI("lateLocal");
     else {
       #lateLocal#isSet = true;
-      return lateLocal = #t1;
+      return #lateLocal = #t1;
     }
   self::throws(() → core::int? => #lateLocal#get.call(), "Read value from uninitialized lateLocal");
   if(1.{core::num::==}(1)) {
@@ -22,16 +22,16 @@
   self::expect(123, #lateLocal#get.call());
   self::throws(() → core::int => #lateLocal#set.call(124), "Write value to initialized lateLocal");
   function local<T extends core::Object? = dynamic>(T? value) → Null {
-    final T? lateGenericLocal;
-    core::bool #lateGenericLocal#isSet = false;
+    lowered final T? #lateGenericLocal;
+    lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T?
-      return #lateGenericLocal#isSet ?{T?} lateGenericLocal : throw new _in::LateError::localNI("lateGenericLocal");
+      return #lateGenericLocal#isSet ?{T?} #lateGenericLocal : throw new _in::LateError::localNI("lateGenericLocal");
     function #lateGenericLocal#set(T? #t2) → dynamic
       if(#lateGenericLocal#isSet)
         throw new _in::LateError::localAI("lateGenericLocal");
       else {
         #lateGenericLocal#isSet = true;
-        return lateGenericLocal = #t2;
+        return #lateGenericLocal = #t2;
       }
     self::throws(() → T? => #lateGenericLocal#get.call(), "Read value from uninitialized lateGenericLocal");
     if(1.{core::num::==}(1)) {
diff --git a/pkg/front_end/testcases/late_lowering/late_future_or.dart.strong.expect b/pkg/front_end/testcases/late_lowering/late_future_or.dart.strong.expect
index f28f0a7..2a49ff2 100644
--- a/pkg/front_end/testcases/late_lowering/late_future_or.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/late_future_or.dart.strong.expect
@@ -50,45 +50,45 @@
     this.{self::C::_#C#field5} = #t6;
   }
   method method() → dynamic {
-    FutureOr<dynamic>? local1;
-    core::bool #local1#isSet = false;
+    lowered FutureOr<dynamic>? #local1;
+    lowered core::bool #local1#isSet = false;
     function #local1#get() → FutureOr<dynamic>
-      return #local1#isSet ?{FutureOr<dynamic>} local1 : throw new _in::LateError::localNI("local1");
+      return #local1#isSet ?{FutureOr<dynamic>} #local1 : throw new _in::LateError::localNI("local1");
     function #local1#set(FutureOr<dynamic>#t7) → dynamic {
       #local1#isSet = true;
-      return local1 = #t7;
+      return #local1 = #t7;
     }
-    FutureOr<dynamic>? local2;
-    core::bool #local2#isSet = false;
+    lowered FutureOr<dynamic>? #local2;
+    lowered core::bool #local2#isSet = false;
     function #local2#get() → FutureOr<dynamic>?
-      return #local2#isSet ?{FutureOr<dynamic>?} local2 : throw new _in::LateError::localNI("local2");
+      return #local2#isSet ?{FutureOr<dynamic>?} #local2 : throw new _in::LateError::localNI("local2");
     function #local2#set(FutureOr<dynamic>? #t8) → dynamic {
       #local2#isSet = true;
-      return local2 = #t8;
+      return #local2 = #t8;
     }
-    FutureOr<self::C::T%>? local3;
-    core::bool #local3#isSet = false;
+    lowered FutureOr<self::C::T%>? #local3;
+    lowered core::bool #local3#isSet = false;
     function #local3#get() → FutureOr<self::C::T%>
-      return #local3#isSet ?{FutureOr<self::C::T%>} local3{FutureOr<self::C::T%>} : throw new _in::LateError::localNI("local3");
+      return #local3#isSet ?{FutureOr<self::C::T%>} #local3{FutureOr<self::C::T%>} : throw new _in::LateError::localNI("local3");
     function #local3#set(FutureOr<self::C::T%>#t9) → dynamic {
       #local3#isSet = true;
-      return local3 = #t9;
+      return #local3 = #t9;
     }
-    FutureOr<self::C::T?>? local4;
-    core::bool #local4#isSet = false;
+    lowered FutureOr<self::C::T?>? #local4;
+    lowered core::bool #local4#isSet = false;
     function #local4#get() → FutureOr<self::C::T?>
-      return #local4#isSet ?{FutureOr<self::C::T?>} local4 : throw new _in::LateError::localNI("local4");
+      return #local4#isSet ?{FutureOr<self::C::T?>} #local4 : throw new _in::LateError::localNI("local4");
     function #local4#set(FutureOr<self::C::T?>#t10) → dynamic {
       #local4#isSet = true;
-      return local4 = #t10;
+      return #local4 = #t10;
     }
-    FutureOr<self::C::T?>? local5;
-    core::bool #local5#isSet = false;
+    lowered FutureOr<self::C::T?>? #local5;
+    lowered core::bool #local5#isSet = false;
     function #local5#get() → FutureOr<self::C::T?>?
-      return #local5#isSet ?{FutureOr<self::C::T?>?} local5 : throw new _in::LateError::localNI("local5");
+      return #local5#isSet ?{FutureOr<self::C::T?>?} #local5 : throw new _in::LateError::localNI("local5");
     function #local5#set(FutureOr<self::C::T?>? #t11) → dynamic {
       #local5#isSet = true;
-      return local5 = #t11;
+      return #local5 = #t11;
     }
   }
 }
diff --git a/pkg/front_end/testcases/late_lowering/late_future_or.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/late_future_or.dart.strong.transformed.expect
index f28f0a7..2a49ff2 100644
--- a/pkg/front_end/testcases/late_lowering/late_future_or.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_future_or.dart.strong.transformed.expect
@@ -50,45 +50,45 @@
     this.{self::C::_#C#field5} = #t6;
   }
   method method() → dynamic {
-    FutureOr<dynamic>? local1;
-    core::bool #local1#isSet = false;
+    lowered FutureOr<dynamic>? #local1;
+    lowered core::bool #local1#isSet = false;
     function #local1#get() → FutureOr<dynamic>
-      return #local1#isSet ?{FutureOr<dynamic>} local1 : throw new _in::LateError::localNI("local1");
+      return #local1#isSet ?{FutureOr<dynamic>} #local1 : throw new _in::LateError::localNI("local1");
     function #local1#set(FutureOr<dynamic>#t7) → dynamic {
       #local1#isSet = true;
-      return local1 = #t7;
+      return #local1 = #t7;
     }
-    FutureOr<dynamic>? local2;
-    core::bool #local2#isSet = false;
+    lowered FutureOr<dynamic>? #local2;
+    lowered core::bool #local2#isSet = false;
     function #local2#get() → FutureOr<dynamic>?
-      return #local2#isSet ?{FutureOr<dynamic>?} local2 : throw new _in::LateError::localNI("local2");
+      return #local2#isSet ?{FutureOr<dynamic>?} #local2 : throw new _in::LateError::localNI("local2");
     function #local2#set(FutureOr<dynamic>? #t8) → dynamic {
       #local2#isSet = true;
-      return local2 = #t8;
+      return #local2 = #t8;
     }
-    FutureOr<self::C::T%>? local3;
-    core::bool #local3#isSet = false;
+    lowered FutureOr<self::C::T%>? #local3;
+    lowered core::bool #local3#isSet = false;
     function #local3#get() → FutureOr<self::C::T%>
-      return #local3#isSet ?{FutureOr<self::C::T%>} local3{FutureOr<self::C::T%>} : throw new _in::LateError::localNI("local3");
+      return #local3#isSet ?{FutureOr<self::C::T%>} #local3{FutureOr<self::C::T%>} : throw new _in::LateError::localNI("local3");
     function #local3#set(FutureOr<self::C::T%>#t9) → dynamic {
       #local3#isSet = true;
-      return local3 = #t9;
+      return #local3 = #t9;
     }
-    FutureOr<self::C::T?>? local4;
-    core::bool #local4#isSet = false;
+    lowered FutureOr<self::C::T?>? #local4;
+    lowered core::bool #local4#isSet = false;
     function #local4#get() → FutureOr<self::C::T?>
-      return #local4#isSet ?{FutureOr<self::C::T?>} local4 : throw new _in::LateError::localNI("local4");
+      return #local4#isSet ?{FutureOr<self::C::T?>} #local4 : throw new _in::LateError::localNI("local4");
     function #local4#set(FutureOr<self::C::T?>#t10) → dynamic {
       #local4#isSet = true;
-      return local4 = #t10;
+      return #local4 = #t10;
     }
-    FutureOr<self::C::T?>? local5;
-    core::bool #local5#isSet = false;
+    lowered FutureOr<self::C::T?>? #local5;
+    lowered core::bool #local5#isSet = false;
     function #local5#get() → FutureOr<self::C::T?>?
-      return #local5#isSet ?{FutureOr<self::C::T?>?} local5 : throw new _in::LateError::localNI("local5");
+      return #local5#isSet ?{FutureOr<self::C::T?>?} #local5 : throw new _in::LateError::localNI("local5");
     function #local5#set(FutureOr<self::C::T?>? #t11) → dynamic {
       #local5#isSet = true;
-      return local5 = #t11;
+      return #local5 = #t11;
     }
   }
 }
diff --git a/pkg/front_end/testcases/late_lowering/late_future_or.dart.weak.expect b/pkg/front_end/testcases/late_lowering/late_future_or.dart.weak.expect
index 78cd9c9..0ac8dba 100644
--- a/pkg/front_end/testcases/late_lowering/late_future_or.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/late_future_or.dart.weak.expect
@@ -50,45 +50,45 @@
     this.{self::C::_#C#field5} = #t6;
   }
   method method() → dynamic {
-    FutureOr<dynamic>? local1;
-    core::bool #local1#isSet = false;
+    lowered FutureOr<dynamic>? #local1;
+    lowered core::bool #local1#isSet = false;
     function #local1#get() → FutureOr<dynamic>
-      return #local1#isSet ?{FutureOr<dynamic>} local1 : throw new _in::LateError::localNI("local1");
+      return #local1#isSet ?{FutureOr<dynamic>} #local1 : throw new _in::LateError::localNI("local1");
     function #local1#set(FutureOr<dynamic>#t7) → dynamic {
       #local1#isSet = true;
-      return local1 = #t7;
+      return #local1 = #t7;
     }
-    FutureOr<dynamic>? local2;
-    core::bool #local2#isSet = false;
+    lowered FutureOr<dynamic>? #local2;
+    lowered core::bool #local2#isSet = false;
     function #local2#get() → FutureOr<dynamic>?
-      return #local2#isSet ?{FutureOr<dynamic>?} local2 : throw new _in::LateError::localNI("local2");
+      return #local2#isSet ?{FutureOr<dynamic>?} #local2 : throw new _in::LateError::localNI("local2");
     function #local2#set(FutureOr<dynamic>? #t8) → dynamic {
       #local2#isSet = true;
-      return local2 = #t8;
+      return #local2 = #t8;
     }
-    FutureOr<self::C::T%>? local3;
-    core::bool #local3#isSet = false;
+    lowered FutureOr<self::C::T%>? #local3;
+    lowered core::bool #local3#isSet = false;
     function #local3#get() → FutureOr<self::C::T%>
-      return #local3#isSet ?{FutureOr<self::C::T%>} local3{FutureOr<self::C::T%>} : throw new _in::LateError::localNI("local3");
+      return #local3#isSet ?{FutureOr<self::C::T%>} #local3{FutureOr<self::C::T%>} : throw new _in::LateError::localNI("local3");
     function #local3#set(FutureOr<self::C::T%>#t9) → dynamic {
       #local3#isSet = true;
-      return local3 = #t9;
+      return #local3 = #t9;
     }
-    FutureOr<self::C::T?>? local4;
-    core::bool #local4#isSet = false;
+    lowered FutureOr<self::C::T?>? #local4;
+    lowered core::bool #local4#isSet = false;
     function #local4#get() → FutureOr<self::C::T?>
-      return #local4#isSet ?{FutureOr<self::C::T?>} local4 : throw new _in::LateError::localNI("local4");
+      return #local4#isSet ?{FutureOr<self::C::T?>} #local4 : throw new _in::LateError::localNI("local4");
     function #local4#set(FutureOr<self::C::T?>#t10) → dynamic {
       #local4#isSet = true;
-      return local4 = #t10;
+      return #local4 = #t10;
     }
-    FutureOr<self::C::T?>? local5;
-    core::bool #local5#isSet = false;
+    lowered FutureOr<self::C::T?>? #local5;
+    lowered core::bool #local5#isSet = false;
     function #local5#get() → FutureOr<self::C::T?>?
-      return #local5#isSet ?{FutureOr<self::C::T?>?} local5 : throw new _in::LateError::localNI("local5");
+      return #local5#isSet ?{FutureOr<self::C::T?>?} #local5 : throw new _in::LateError::localNI("local5");
     function #local5#set(FutureOr<self::C::T?>? #t11) → dynamic {
       #local5#isSet = true;
-      return local5 = #t11;
+      return #local5 = #t11;
     }
   }
 }
diff --git a/pkg/front_end/testcases/late_lowering/late_future_or.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/late_future_or.dart.weak.transformed.expect
index 78cd9c9..0ac8dba 100644
--- a/pkg/front_end/testcases/late_lowering/late_future_or.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_future_or.dart.weak.transformed.expect
@@ -50,45 +50,45 @@
     this.{self::C::_#C#field5} = #t6;
   }
   method method() → dynamic {
-    FutureOr<dynamic>? local1;
-    core::bool #local1#isSet = false;
+    lowered FutureOr<dynamic>? #local1;
+    lowered core::bool #local1#isSet = false;
     function #local1#get() → FutureOr<dynamic>
-      return #local1#isSet ?{FutureOr<dynamic>} local1 : throw new _in::LateError::localNI("local1");
+      return #local1#isSet ?{FutureOr<dynamic>} #local1 : throw new _in::LateError::localNI("local1");
     function #local1#set(FutureOr<dynamic>#t7) → dynamic {
       #local1#isSet = true;
-      return local1 = #t7;
+      return #local1 = #t7;
     }
-    FutureOr<dynamic>? local2;
-    core::bool #local2#isSet = false;
+    lowered FutureOr<dynamic>? #local2;
+    lowered core::bool #local2#isSet = false;
     function #local2#get() → FutureOr<dynamic>?
-      return #local2#isSet ?{FutureOr<dynamic>?} local2 : throw new _in::LateError::localNI("local2");
+      return #local2#isSet ?{FutureOr<dynamic>?} #local2 : throw new _in::LateError::localNI("local2");
     function #local2#set(FutureOr<dynamic>? #t8) → dynamic {
       #local2#isSet = true;
-      return local2 = #t8;
+      return #local2 = #t8;
     }
-    FutureOr<self::C::T%>? local3;
-    core::bool #local3#isSet = false;
+    lowered FutureOr<self::C::T%>? #local3;
+    lowered core::bool #local3#isSet = false;
     function #local3#get() → FutureOr<self::C::T%>
-      return #local3#isSet ?{FutureOr<self::C::T%>} local3{FutureOr<self::C::T%>} : throw new _in::LateError::localNI("local3");
+      return #local3#isSet ?{FutureOr<self::C::T%>} #local3{FutureOr<self::C::T%>} : throw new _in::LateError::localNI("local3");
     function #local3#set(FutureOr<self::C::T%>#t9) → dynamic {
       #local3#isSet = true;
-      return local3 = #t9;
+      return #local3 = #t9;
     }
-    FutureOr<self::C::T?>? local4;
-    core::bool #local4#isSet = false;
+    lowered FutureOr<self::C::T?>? #local4;
+    lowered core::bool #local4#isSet = false;
     function #local4#get() → FutureOr<self::C::T?>
-      return #local4#isSet ?{FutureOr<self::C::T?>} local4 : throw new _in::LateError::localNI("local4");
+      return #local4#isSet ?{FutureOr<self::C::T?>} #local4 : throw new _in::LateError::localNI("local4");
     function #local4#set(FutureOr<self::C::T?>#t10) → dynamic {
       #local4#isSet = true;
-      return local4 = #t10;
+      return #local4 = #t10;
     }
-    FutureOr<self::C::T?>? local5;
-    core::bool #local5#isSet = false;
+    lowered FutureOr<self::C::T?>? #local5;
+    lowered core::bool #local5#isSet = false;
     function #local5#get() → FutureOr<self::C::T?>?
-      return #local5#isSet ?{FutureOr<self::C::T?>?} local5 : throw new _in::LateError::localNI("local5");
+      return #local5#isSet ?{FutureOr<self::C::T?>?} #local5 : throw new _in::LateError::localNI("local5");
     function #local5#set(FutureOr<self::C::T?>? #t11) → dynamic {
       #local5#isSet = true;
-      return local5 = #t11;
+      return #local5 = #t11;
     }
   }
 }
diff --git a/pkg/front_end/testcases/late_lowering/late_local_with_initializer.dart.strong.expect b/pkg/front_end/testcases/late_lowering/late_local_with_initializer.dart.strong.expect
index d08871e..77cb4ba 100644
--- a/pkg/front_end/testcases/late_lowering/late_local_with_initializer.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/late_local_with_initializer.dart.strong.expect
@@ -3,27 +3,27 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::int? lateLocal;
+  lowered core::int? #lateLocal;
   function #lateLocal#get() → core::int
-    return let final core::int? #t1 = lateLocal in #t1.==(null) ?{core::int} lateLocal = 123 : #t1{core::int};
+    return let final core::int? #t1 = #lateLocal in #t1.==(null) ?{core::int} #lateLocal = 123 : #t1{core::int};
   function #lateLocal#set(core::int #t2) → dynamic
-    return lateLocal = #t2;
+    return #lateLocal = #t2;
   self::expect(123, #lateLocal#get.call());
   self::expect(124, #lateLocal#set.call(124));
   self::expect(124, #lateLocal#get.call());
   function local<T extends core::Object? = dynamic>(T% value1, T% value2) → Null {
-    T? lateGenericLocal;
-    core::bool #lateGenericLocal#isSet = false;
+    lowered T? #lateGenericLocal;
+    lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T% {
       if(!#lateGenericLocal#isSet) {
-        lateGenericLocal = value1;
+        #lateGenericLocal = value1;
         #lateGenericLocal#isSet = true;
       }
-      return lateGenericLocal{T%};
+      return #lateGenericLocal{T%};
     }
     function #lateGenericLocal#set(T% #t3) → dynamic {
       #lateGenericLocal#isSet = true;
-      return lateGenericLocal = #t3;
+      return #lateGenericLocal = #t3;
     }
     self::expect(value1, #lateGenericLocal#get.call());
     self::expect(value2, #lateGenericLocal#set.call(value2));
diff --git a/pkg/front_end/testcases/late_lowering/late_local_with_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/late_local_with_initializer.dart.strong.transformed.expect
index d08871e..77cb4ba 100644
--- a/pkg/front_end/testcases/late_lowering/late_local_with_initializer.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_local_with_initializer.dart.strong.transformed.expect
@@ -3,27 +3,27 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::int? lateLocal;
+  lowered core::int? #lateLocal;
   function #lateLocal#get() → core::int
-    return let final core::int? #t1 = lateLocal in #t1.==(null) ?{core::int} lateLocal = 123 : #t1{core::int};
+    return let final core::int? #t1 = #lateLocal in #t1.==(null) ?{core::int} #lateLocal = 123 : #t1{core::int};
   function #lateLocal#set(core::int #t2) → dynamic
-    return lateLocal = #t2;
+    return #lateLocal = #t2;
   self::expect(123, #lateLocal#get.call());
   self::expect(124, #lateLocal#set.call(124));
   self::expect(124, #lateLocal#get.call());
   function local<T extends core::Object? = dynamic>(T% value1, T% value2) → Null {
-    T? lateGenericLocal;
-    core::bool #lateGenericLocal#isSet = false;
+    lowered T? #lateGenericLocal;
+    lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T% {
       if(!#lateGenericLocal#isSet) {
-        lateGenericLocal = value1;
+        #lateGenericLocal = value1;
         #lateGenericLocal#isSet = true;
       }
-      return lateGenericLocal{T%};
+      return #lateGenericLocal{T%};
     }
     function #lateGenericLocal#set(T% #t3) → dynamic {
       #lateGenericLocal#isSet = true;
-      return lateGenericLocal = #t3;
+      return #lateGenericLocal = #t3;
     }
     self::expect(value1, #lateGenericLocal#get.call());
     self::expect(value2, #lateGenericLocal#set.call(value2));
diff --git a/pkg/front_end/testcases/late_lowering/late_local_with_initializer.dart.weak.expect b/pkg/front_end/testcases/late_lowering/late_local_with_initializer.dart.weak.expect
index c681474..8942212 100644
--- a/pkg/front_end/testcases/late_lowering/late_local_with_initializer.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/late_local_with_initializer.dart.weak.expect
@@ -3,35 +3,35 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::int? lateLocal;
-  core::bool #lateLocal#isSet = false;
+  lowered core::int? #lateLocal;
+  lowered core::bool #lateLocal#isSet = false;
   function #lateLocal#get() → core::int {
     if(!#lateLocal#isSet) {
-      lateLocal = 123;
+      #lateLocal = 123;
       #lateLocal#isSet = true;
     }
-    return lateLocal{core::int};
+    return #lateLocal{core::int};
   }
   function #lateLocal#set(core::int #t1) → dynamic {
     #lateLocal#isSet = true;
-    return lateLocal = #t1;
+    return #lateLocal = #t1;
   }
   self::expect(123, #lateLocal#get.call());
   self::expect(124, #lateLocal#set.call(124));
   self::expect(124, #lateLocal#get.call());
   function local<T extends core::Object? = dynamic>(T% value1, T% value2) → Null {
-    T? lateGenericLocal;
-    core::bool #lateGenericLocal#isSet = false;
+    lowered T? #lateGenericLocal;
+    lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T% {
       if(!#lateGenericLocal#isSet) {
-        lateGenericLocal = value1;
+        #lateGenericLocal = value1;
         #lateGenericLocal#isSet = true;
       }
-      return lateGenericLocal{T%};
+      return #lateGenericLocal{T%};
     }
     function #lateGenericLocal#set(T% #t2) → dynamic {
       #lateGenericLocal#isSet = true;
-      return lateGenericLocal = #t2;
+      return #lateGenericLocal = #t2;
     }
     self::expect(value1, #lateGenericLocal#get.call());
     self::expect(value2, #lateGenericLocal#set.call(value2));
diff --git a/pkg/front_end/testcases/late_lowering/late_local_with_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/late_local_with_initializer.dart.weak.transformed.expect
index c681474..8942212 100644
--- a/pkg/front_end/testcases/late_lowering/late_local_with_initializer.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_local_with_initializer.dart.weak.transformed.expect
@@ -3,35 +3,35 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::int? lateLocal;
-  core::bool #lateLocal#isSet = false;
+  lowered core::int? #lateLocal;
+  lowered core::bool #lateLocal#isSet = false;
   function #lateLocal#get() → core::int {
     if(!#lateLocal#isSet) {
-      lateLocal = 123;
+      #lateLocal = 123;
       #lateLocal#isSet = true;
     }
-    return lateLocal{core::int};
+    return #lateLocal{core::int};
   }
   function #lateLocal#set(core::int #t1) → dynamic {
     #lateLocal#isSet = true;
-    return lateLocal = #t1;
+    return #lateLocal = #t1;
   }
   self::expect(123, #lateLocal#get.call());
   self::expect(124, #lateLocal#set.call(124));
   self::expect(124, #lateLocal#get.call());
   function local<T extends core::Object? = dynamic>(T% value1, T% value2) → Null {
-    T? lateGenericLocal;
-    core::bool #lateGenericLocal#isSet = false;
+    lowered T? #lateGenericLocal;
+    lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T% {
       if(!#lateGenericLocal#isSet) {
-        lateGenericLocal = value1;
+        #lateGenericLocal = value1;
         #lateGenericLocal#isSet = true;
       }
-      return lateGenericLocal{T%};
+      return #lateGenericLocal{T%};
     }
     function #lateGenericLocal#set(T% #t2) → dynamic {
       #lateGenericLocal#isSet = true;
-      return lateGenericLocal = #t2;
+      return #lateGenericLocal = #t2;
     }
     self::expect(value1, #lateGenericLocal#get.call());
     self::expect(value2, #lateGenericLocal#set.call(value2));
diff --git a/pkg/front_end/testcases/late_lowering/late_local_without_initializer.dart.strong.expect b/pkg/front_end/testcases/late_lowering/late_local_without_initializer.dart.strong.expect
index 0f888e9..a8ded51 100644
--- a/pkg/front_end/testcases/late_lowering/late_local_without_initializer.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/late_local_without_initializer.dart.strong.expect
@@ -4,22 +4,22 @@
 import "dart:_internal" as _in;
 
 static method main() → dynamic {
-  core::int? lateLocal;
+  lowered core::int? #lateLocal;
   function #lateLocal#get() → core::int
-    return let final core::int? #t1 = lateLocal in #t1.==(null) ?{core::int} throw new _in::LateError::localNI("lateLocal") : #t1{core::int};
+    return let final core::int? #t1 = #lateLocal in #t1.==(null) ?{core::int} throw new _in::LateError::localNI("lateLocal") : #t1{core::int};
   function #lateLocal#set(core::int #t2) → dynamic
-    return lateLocal = #t2;
+    return #lateLocal = #t2;
   self::throws(() → core::int => #lateLocal#get.call(), "Read value from uninitialized lateLocal");
   self::expect(123, #lateLocal#set.call(123));
   self::expect(123, #lateLocal#get.call());
   function local<T extends core::Object? = dynamic>(T% value) → Null {
-    T? lateGenericLocal;
-    core::bool #lateGenericLocal#isSet = false;
+    lowered T? #lateGenericLocal;
+    lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T%
-      return #lateGenericLocal#isSet ?{T%} lateGenericLocal{T%} : throw new _in::LateError::localNI("lateGenericLocal");
+      return #lateGenericLocal#isSet ?{T%} #lateGenericLocal{T%} : throw new _in::LateError::localNI("lateGenericLocal");
     function #lateGenericLocal#set(T% #t3) → dynamic {
       #lateGenericLocal#isSet = true;
-      return lateGenericLocal = #t3;
+      return #lateGenericLocal = #t3;
     }
     self::throws(() → T% => #lateGenericLocal#get.call(), "Read value from uninitialized lateGenericLocal");
     self::expect(value, #lateGenericLocal#set.call(value));
diff --git a/pkg/front_end/testcases/late_lowering/late_local_without_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/late_local_without_initializer.dart.strong.transformed.expect
index 0f888e9..a8ded51 100644
--- a/pkg/front_end/testcases/late_lowering/late_local_without_initializer.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_local_without_initializer.dart.strong.transformed.expect
@@ -4,22 +4,22 @@
 import "dart:_internal" as _in;
 
 static method main() → dynamic {
-  core::int? lateLocal;
+  lowered core::int? #lateLocal;
   function #lateLocal#get() → core::int
-    return let final core::int? #t1 = lateLocal in #t1.==(null) ?{core::int} throw new _in::LateError::localNI("lateLocal") : #t1{core::int};
+    return let final core::int? #t1 = #lateLocal in #t1.==(null) ?{core::int} throw new _in::LateError::localNI("lateLocal") : #t1{core::int};
   function #lateLocal#set(core::int #t2) → dynamic
-    return lateLocal = #t2;
+    return #lateLocal = #t2;
   self::throws(() → core::int => #lateLocal#get.call(), "Read value from uninitialized lateLocal");
   self::expect(123, #lateLocal#set.call(123));
   self::expect(123, #lateLocal#get.call());
   function local<T extends core::Object? = dynamic>(T% value) → Null {
-    T? lateGenericLocal;
-    core::bool #lateGenericLocal#isSet = false;
+    lowered T? #lateGenericLocal;
+    lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T%
-      return #lateGenericLocal#isSet ?{T%} lateGenericLocal{T%} : throw new _in::LateError::localNI("lateGenericLocal");
+      return #lateGenericLocal#isSet ?{T%} #lateGenericLocal{T%} : throw new _in::LateError::localNI("lateGenericLocal");
     function #lateGenericLocal#set(T% #t3) → dynamic {
       #lateGenericLocal#isSet = true;
-      return lateGenericLocal = #t3;
+      return #lateGenericLocal = #t3;
     }
     self::throws(() → T% => #lateGenericLocal#get.call(), "Read value from uninitialized lateGenericLocal");
     self::expect(value, #lateGenericLocal#set.call(value));
diff --git a/pkg/front_end/testcases/late_lowering/late_local_without_initializer.dart.weak.expect b/pkg/front_end/testcases/late_lowering/late_local_without_initializer.dart.weak.expect
index 49dc955..44d30d6 100644
--- a/pkg/front_end/testcases/late_lowering/late_local_without_initializer.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/late_local_without_initializer.dart.weak.expect
@@ -4,25 +4,25 @@
 import "dart:_internal" as _in;
 
 static method main() → dynamic {
-  core::int? lateLocal;
-  core::bool #lateLocal#isSet = false;
+  lowered core::int? #lateLocal;
+  lowered core::bool #lateLocal#isSet = false;
   function #lateLocal#get() → core::int
-    return #lateLocal#isSet ?{core::int} lateLocal{core::int} : throw new _in::LateError::localNI("lateLocal");
+    return #lateLocal#isSet ?{core::int} #lateLocal{core::int} : throw new _in::LateError::localNI("lateLocal");
   function #lateLocal#set(core::int #t1) → dynamic {
     #lateLocal#isSet = true;
-    return lateLocal = #t1;
+    return #lateLocal = #t1;
   }
   self::throws(() → core::int => #lateLocal#get.call(), "Read value from uninitialized lateLocal");
   self::expect(123, #lateLocal#set.call(123));
   self::expect(123, #lateLocal#get.call());
   function local<T extends core::Object? = dynamic>(T% value) → Null {
-    T? lateGenericLocal;
-    core::bool #lateGenericLocal#isSet = false;
+    lowered T? #lateGenericLocal;
+    lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T%
-      return #lateGenericLocal#isSet ?{T%} lateGenericLocal{T%} : throw new _in::LateError::localNI("lateGenericLocal");
+      return #lateGenericLocal#isSet ?{T%} #lateGenericLocal{T%} : throw new _in::LateError::localNI("lateGenericLocal");
     function #lateGenericLocal#set(T% #t2) → dynamic {
       #lateGenericLocal#isSet = true;
-      return lateGenericLocal = #t2;
+      return #lateGenericLocal = #t2;
     }
     self::throws(() → T% => #lateGenericLocal#get.call(), "Read value from uninitialized lateGenericLocal");
     self::expect(value, #lateGenericLocal#set.call(value));
diff --git a/pkg/front_end/testcases/late_lowering/late_local_without_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/late_local_without_initializer.dart.weak.transformed.expect
index 49dc955..44d30d6 100644
--- a/pkg/front_end/testcases/late_lowering/late_local_without_initializer.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_local_without_initializer.dart.weak.transformed.expect
@@ -4,25 +4,25 @@
 import "dart:_internal" as _in;
 
 static method main() → dynamic {
-  core::int? lateLocal;
-  core::bool #lateLocal#isSet = false;
+  lowered core::int? #lateLocal;
+  lowered core::bool #lateLocal#isSet = false;
   function #lateLocal#get() → core::int
-    return #lateLocal#isSet ?{core::int} lateLocal{core::int} : throw new _in::LateError::localNI("lateLocal");
+    return #lateLocal#isSet ?{core::int} #lateLocal{core::int} : throw new _in::LateError::localNI("lateLocal");
   function #lateLocal#set(core::int #t1) → dynamic {
     #lateLocal#isSet = true;
-    return lateLocal = #t1;
+    return #lateLocal = #t1;
   }
   self::throws(() → core::int => #lateLocal#get.call(), "Read value from uninitialized lateLocal");
   self::expect(123, #lateLocal#set.call(123));
   self::expect(123, #lateLocal#get.call());
   function local<T extends core::Object? = dynamic>(T% value) → Null {
-    T? lateGenericLocal;
-    core::bool #lateGenericLocal#isSet = false;
+    lowered T? #lateGenericLocal;
+    lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T%
-      return #lateGenericLocal#isSet ?{T%} lateGenericLocal{T%} : throw new _in::LateError::localNI("lateGenericLocal");
+      return #lateGenericLocal#isSet ?{T%} #lateGenericLocal{T%} : throw new _in::LateError::localNI("lateGenericLocal");
     function #lateGenericLocal#set(T% #t2) → dynamic {
       #lateGenericLocal#isSet = true;
-      return lateGenericLocal = #t2;
+      return #lateGenericLocal = #t2;
     }
     self::throws(() → T% => #lateGenericLocal#get.call(), "Read value from uninitialized lateGenericLocal");
     self::expect(value, #lateGenericLocal#set.call(value));
diff --git a/pkg/front_end/testcases/late_lowering/late_lowering_bitmasks.dart.strong.expect b/pkg/front_end/testcases/late_lowering/late_lowering_bitmasks.dart.strong.expect
index 1bb57d1..b8d325b 100644
--- a/pkg/front_end/testcases/late_lowering/late_lowering_bitmasks.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/late_lowering_bitmasks.dart.strong.expect
@@ -56,71 +56,71 @@
 static field core::int? _#initializedFinalTopLevelField = null;
 static method main() → dynamic {}
 static method method() → dynamic {
-  core::int? nullableUninitializedNonFinalLocal;
-  core::bool #nullableUninitializedNonFinalLocal#isSet = false;
+  lowered core::int? #nullableUninitializedNonFinalLocal;
+  lowered core::bool #nullableUninitializedNonFinalLocal#isSet = false;
   function #nullableUninitializedNonFinalLocal#get() → core::int?
-    return #nullableUninitializedNonFinalLocal#isSet ?{core::int?} nullableUninitializedNonFinalLocal : throw new _in::LateError::localNI("nullableUninitializedNonFinalLocal");
+    return #nullableUninitializedNonFinalLocal#isSet ?{core::int?} #nullableUninitializedNonFinalLocal : throw new _in::LateError::localNI("nullableUninitializedNonFinalLocal");
   function #nullableUninitializedNonFinalLocal#set(core::int? #t17) → dynamic {
     #nullableUninitializedNonFinalLocal#isSet = true;
-    return nullableUninitializedNonFinalLocal = #t17;
+    return #nullableUninitializedNonFinalLocal = #t17;
   }
-  core::int? nonNullableUninitializedNonFinalLocal;
+  lowered core::int? #nonNullableUninitializedNonFinalLocal;
   function #nonNullableUninitializedNonFinalLocal#get() → core::int
-    return let final core::int? #t18 = nonNullableUninitializedNonFinalLocal in #t18.==(null) ?{core::int} throw new _in::LateError::localNI("nonNullableUninitializedNonFinalLocal") : #t18{core::int};
+    return let final core::int? #t18 = #nonNullableUninitializedNonFinalLocal in #t18.==(null) ?{core::int} throw new _in::LateError::localNI("nonNullableUninitializedNonFinalLocal") : #t18{core::int};
   function #nonNullableUninitializedNonFinalLocal#set(core::int #t19) → dynamic
-    return nonNullableUninitializedNonFinalLocal = #t19;
-  final core::int? nullableUninitializedFinalLocal;
-  core::bool #nullableUninitializedFinalLocal#isSet = false;
+    return #nonNullableUninitializedNonFinalLocal = #t19;
+  lowered final core::int? #nullableUninitializedFinalLocal;
+  lowered core::bool #nullableUninitializedFinalLocal#isSet = false;
   function #nullableUninitializedFinalLocal#get() → core::int?
-    return #nullableUninitializedFinalLocal#isSet ?{core::int?} nullableUninitializedFinalLocal : throw new _in::LateError::localNI("nullableUninitializedFinalLocal");
+    return #nullableUninitializedFinalLocal#isSet ?{core::int?} #nullableUninitializedFinalLocal : throw new _in::LateError::localNI("nullableUninitializedFinalLocal");
   function #nullableUninitializedFinalLocal#set(core::int? #t20) → dynamic
     if(#nullableUninitializedFinalLocal#isSet)
       throw new _in::LateError::localAI("nullableUninitializedFinalLocal");
     else {
       #nullableUninitializedFinalLocal#isSet = true;
-      return nullableUninitializedFinalLocal = #t20;
+      return #nullableUninitializedFinalLocal = #t20;
     }
-  final core::int? nonNullableUninitializedFinalLocal;
+  lowered final core::int? #nonNullableUninitializedFinalLocal;
   function #nonNullableUninitializedFinalLocal#get() → core::int
-    return let final core::int? #t21 = nonNullableUninitializedFinalLocal in #t21.==(null) ?{core::int} throw new _in::LateError::localNI("nonNullableUninitializedFinalLocal") : #t21{core::int};
+    return let final core::int? #t21 = #nonNullableUninitializedFinalLocal in #t21.==(null) ?{core::int} throw new _in::LateError::localNI("nonNullableUninitializedFinalLocal") : #t21{core::int};
   function #nonNullableUninitializedFinalLocal#set(core::int #t22) → dynamic
-    if(nonNullableUninitializedFinalLocal.==(null))
-      return nonNullableUninitializedFinalLocal = #t22;
+    if(#nonNullableUninitializedFinalLocal.==(null))
+      return #nonNullableUninitializedFinalLocal = #t22;
     else
       throw new _in::LateError::localAI("nonNullableUninitializedFinalLocal");
-  core::int? nullableInitializedNonFinalLocal;
-  core::bool #nullableInitializedNonFinalLocal#isSet = false;
+  lowered core::int? #nullableInitializedNonFinalLocal;
+  lowered core::bool #nullableInitializedNonFinalLocal#isSet = false;
   function #nullableInitializedNonFinalLocal#get() → core::int? {
     if(!#nullableInitializedNonFinalLocal#isSet) {
-      nullableInitializedNonFinalLocal = 0;
+      #nullableInitializedNonFinalLocal = 0;
       #nullableInitializedNonFinalLocal#isSet = true;
     }
-    return nullableInitializedNonFinalLocal;
+    return #nullableInitializedNonFinalLocal;
   }
   function #nullableInitializedNonFinalLocal#set(core::int? #t23) → dynamic {
     #nullableInitializedNonFinalLocal#isSet = true;
-    return nullableInitializedNonFinalLocal = #t23;
+    return #nullableInitializedNonFinalLocal = #t23;
   }
-  core::int? nonNullableInitializedNonFinalLocal;
+  lowered core::int? #nonNullableInitializedNonFinalLocal;
   function #nonNullableInitializedNonFinalLocal#get() → core::int
-    return let final core::int? #t24 = nonNullableInitializedNonFinalLocal in #t24.==(null) ?{core::int} nonNullableInitializedNonFinalLocal = 0 : #t24{core::int};
+    return let final core::int? #t24 = #nonNullableInitializedNonFinalLocal in #t24.==(null) ?{core::int} #nonNullableInitializedNonFinalLocal = 0 : #t24{core::int};
   function #nonNullableInitializedNonFinalLocal#set(core::int #t25) → dynamic
-    return nonNullableInitializedNonFinalLocal = #t25;
-  final core::int? nullableInitializedFinalLocal;
-  core::bool #nullableInitializedFinalLocal#isSet = false;
+    return #nonNullableInitializedNonFinalLocal = #t25;
+  lowered final core::int? #nullableInitializedFinalLocal;
+  lowered core::bool #nullableInitializedFinalLocal#isSet = false;
   function #nullableInitializedFinalLocal#get() → core::int? {
     if(!#nullableInitializedFinalLocal#isSet) {
       final core::int? #t26 = 0;
       if(#nullableInitializedFinalLocal#isSet)
         throw new _in::LateError::localADI("nullableInitializedFinalLocal");
-      nullableInitializedFinalLocal = #t26;
+      #nullableInitializedFinalLocal = #t26;
       #nullableInitializedFinalLocal#isSet = true;
     }
-    return nullableInitializedFinalLocal;
+    return #nullableInitializedFinalLocal;
   }
-  final core::int? nonNullableInitializedFinalLocal;
+  lowered final core::int? #nonNullableInitializedFinalLocal;
   function #nonNullableInitializedFinalLocal#get() → core::int
-    return let final core::int? #t27 = nonNullableInitializedFinalLocal in #t27.==(null) ?{core::int} let final core::int #t28 = 0 in nonNullableInitializedFinalLocal.==(null) ?{core::int} nonNullableInitializedFinalLocal = #t28 : throw new _in::LateError::localADI("nonNullableInitializedFinalLocal") : #t27{core::int};
+    return let final core::int? #t27 = #nonNullableInitializedFinalLocal in #t27.==(null) ?{core::int} let final core::int #t28 = 0 in #nonNullableInitializedFinalLocal.==(null) ?{core::int} #nonNullableInitializedFinalLocal = #t28 : throw new _in::LateError::localADI("nonNullableInitializedFinalLocal") : #t27{core::int};
 }
 static get uninitializedNonFinalTopLevelField() → core::int
   return let final core::int? #t29 = self::_#uninitializedNonFinalTopLevelField in #t29.==(null) ?{core::int} throw new _in::LateError::fieldNI("uninitializedNonFinalTopLevelField") : #t29{core::int};
diff --git a/pkg/front_end/testcases/late_lowering/late_lowering_bitmasks.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/late_lowering_bitmasks.dart.strong.transformed.expect
index a71870d..dd059f5 100644
--- a/pkg/front_end/testcases/late_lowering/late_lowering_bitmasks.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_lowering_bitmasks.dart.strong.transformed.expect
@@ -56,71 +56,71 @@
 static field core::int? _#initializedFinalTopLevelField = null;
 static method main() → dynamic {}
 static method method() → dynamic {
-  core::int? nullableUninitializedNonFinalLocal;
-  core::bool #nullableUninitializedNonFinalLocal#isSet = false;
+  lowered core::int? #nullableUninitializedNonFinalLocal;
+  lowered core::bool #nullableUninitializedNonFinalLocal#isSet = false;
   function #nullableUninitializedNonFinalLocal#get() → core::int?
-    return #nullableUninitializedNonFinalLocal#isSet ?{core::int?} nullableUninitializedNonFinalLocal : throw new _in::LateError::localNI("nullableUninitializedNonFinalLocal");
+    return #nullableUninitializedNonFinalLocal#isSet ?{core::int?} #nullableUninitializedNonFinalLocal : throw new _in::LateError::localNI("nullableUninitializedNonFinalLocal");
   function #nullableUninitializedNonFinalLocal#set(core::int? #t17) → dynamic {
     #nullableUninitializedNonFinalLocal#isSet = true;
-    return nullableUninitializedNonFinalLocal = #t17;
+    return #nullableUninitializedNonFinalLocal = #t17;
   }
-  core::int? nonNullableUninitializedNonFinalLocal;
+  lowered core::int? #nonNullableUninitializedNonFinalLocal;
   function #nonNullableUninitializedNonFinalLocal#get() → core::int
-    return let final core::int? #t18 = nonNullableUninitializedNonFinalLocal in #t18.==(null) ?{core::int} throw new _in::LateError::localNI("nonNullableUninitializedNonFinalLocal") : #t18{core::int};
+    return let final core::int? #t18 = #nonNullableUninitializedNonFinalLocal in #t18.==(null) ?{core::int} throw new _in::LateError::localNI("nonNullableUninitializedNonFinalLocal") : #t18{core::int};
   function #nonNullableUninitializedNonFinalLocal#set(core::int #t19) → dynamic
-    return nonNullableUninitializedNonFinalLocal = #t19;
-  final core::int? nullableUninitializedFinalLocal;
-  core::bool #nullableUninitializedFinalLocal#isSet = false;
+    return #nonNullableUninitializedNonFinalLocal = #t19;
+  lowered final core::int? #nullableUninitializedFinalLocal;
+  lowered core::bool #nullableUninitializedFinalLocal#isSet = false;
   function #nullableUninitializedFinalLocal#get() → core::int?
-    return #nullableUninitializedFinalLocal#isSet ?{core::int?} nullableUninitializedFinalLocal : throw new _in::LateError::localNI("nullableUninitializedFinalLocal");
+    return #nullableUninitializedFinalLocal#isSet ?{core::int?} #nullableUninitializedFinalLocal : throw new _in::LateError::localNI("nullableUninitializedFinalLocal");
   function #nullableUninitializedFinalLocal#set(core::int? #t20) → dynamic
     if(#nullableUninitializedFinalLocal#isSet)
       throw new _in::LateError::localAI("nullableUninitializedFinalLocal");
     else {
       #nullableUninitializedFinalLocal#isSet = true;
-      return nullableUninitializedFinalLocal = #t20;
+      return #nullableUninitializedFinalLocal = #t20;
     }
-  final core::int? nonNullableUninitializedFinalLocal;
+  lowered final core::int? #nonNullableUninitializedFinalLocal;
   function #nonNullableUninitializedFinalLocal#get() → core::int
-    return let final core::int? #t21 = nonNullableUninitializedFinalLocal in #t21.==(null) ?{core::int} throw new _in::LateError::localNI("nonNullableUninitializedFinalLocal") : #t21{core::int};
+    return let final core::int? #t21 = #nonNullableUninitializedFinalLocal in #t21.==(null) ?{core::int} throw new _in::LateError::localNI("nonNullableUninitializedFinalLocal") : #t21{core::int};
   function #nonNullableUninitializedFinalLocal#set(core::int #t22) → dynamic
-    if(nonNullableUninitializedFinalLocal.==(null))
-      return nonNullableUninitializedFinalLocal = #t22;
+    if(#nonNullableUninitializedFinalLocal.==(null))
+      return #nonNullableUninitializedFinalLocal = #t22;
     else
       throw new _in::LateError::localAI("nonNullableUninitializedFinalLocal");
-  core::int? nullableInitializedNonFinalLocal;
-  core::bool #nullableInitializedNonFinalLocal#isSet = false;
+  lowered core::int? #nullableInitializedNonFinalLocal;
+  lowered core::bool #nullableInitializedNonFinalLocal#isSet = false;
   function #nullableInitializedNonFinalLocal#get() → core::int? {
     if(!#nullableInitializedNonFinalLocal#isSet) {
-      nullableInitializedNonFinalLocal = 0;
+      #nullableInitializedNonFinalLocal = 0;
       #nullableInitializedNonFinalLocal#isSet = true;
     }
-    return nullableInitializedNonFinalLocal;
+    return #nullableInitializedNonFinalLocal;
   }
   function #nullableInitializedNonFinalLocal#set(core::int? #t23) → dynamic {
     #nullableInitializedNonFinalLocal#isSet = true;
-    return nullableInitializedNonFinalLocal = #t23;
+    return #nullableInitializedNonFinalLocal = #t23;
   }
-  core::int? nonNullableInitializedNonFinalLocal;
+  lowered core::int? #nonNullableInitializedNonFinalLocal;
   function #nonNullableInitializedNonFinalLocal#get() → core::int
-    return let final core::int? #t24 = nonNullableInitializedNonFinalLocal in #t24.==(null) ?{core::int} nonNullableInitializedNonFinalLocal = 0 : #t24{core::int};
+    return let final core::int? #t24 = #nonNullableInitializedNonFinalLocal in #t24.==(null) ?{core::int} #nonNullableInitializedNonFinalLocal = 0 : #t24{core::int};
   function #nonNullableInitializedNonFinalLocal#set(core::int #t25) → dynamic
-    return nonNullableInitializedNonFinalLocal = #t25;
-  final core::int? nullableInitializedFinalLocal;
-  core::bool #nullableInitializedFinalLocal#isSet = false;
+    return #nonNullableInitializedNonFinalLocal = #t25;
+  lowered final core::int? #nullableInitializedFinalLocal;
+  lowered core::bool #nullableInitializedFinalLocal#isSet = false;
   function #nullableInitializedFinalLocal#get() → core::int? {
     if(!#nullableInitializedFinalLocal#isSet) {
       final core::int? #t26 = 0;
       if(#nullableInitializedFinalLocal#isSet)
         throw new _in::LateError::localADI("nullableInitializedFinalLocal");
-      nullableInitializedFinalLocal = #t26;
+      #nullableInitializedFinalLocal = #t26;
       #nullableInitializedFinalLocal#isSet = true;
     }
-    return nullableInitializedFinalLocal;
+    return #nullableInitializedFinalLocal;
   }
-  final core::int? nonNullableInitializedFinalLocal;
+  lowered final core::int? #nonNullableInitializedFinalLocal;
   function #nonNullableInitializedFinalLocal#get() → core::int
-    return let final core::int? #t27 = nonNullableInitializedFinalLocal in #t27.==(null) ?{core::int} let final core::int #t28 = 0 in nonNullableInitializedFinalLocal.==(null) ?{core::int} nonNullableInitializedFinalLocal = #t28 : throw new _in::LateError::localADI("nonNullableInitializedFinalLocal") : #t27{core::int};
+    return let final core::int? #t27 = #nonNullableInitializedFinalLocal in #t27.==(null) ?{core::int} let final core::int #t28 = 0 in #nonNullableInitializedFinalLocal.==(null) ?{core::int} #nonNullableInitializedFinalLocal = #t28 : throw new _in::LateError::localADI("nonNullableInitializedFinalLocal") : #t27{core::int};
 }
 static get uninitializedNonFinalTopLevelField() → core::int
   return let final core::int? #t29 = self::_#uninitializedNonFinalTopLevelField in #t29.==(null) ?{core::int} throw new _in::LateError::fieldNI("uninitializedNonFinalTopLevelField") : #t29{core::int};
diff --git a/pkg/front_end/testcases/late_lowering/late_lowering_bitmasks.dart.weak.expect b/pkg/front_end/testcases/late_lowering/late_lowering_bitmasks.dart.weak.expect
index e5d34d1..46b8989 100644
--- a/pkg/front_end/testcases/late_lowering/late_lowering_bitmasks.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/late_lowering_bitmasks.dart.weak.expect
@@ -106,93 +106,93 @@
 static field core::bool _#initializedFinalTopLevelField#isSet = false;
 static method main() → dynamic {}
 static method method() → dynamic {
-  core::int? nullableUninitializedNonFinalLocal;
-  core::bool #nullableUninitializedNonFinalLocal#isSet = false;
+  lowered core::int? #nullableUninitializedNonFinalLocal;
+  lowered core::bool #nullableUninitializedNonFinalLocal#isSet = false;
   function #nullableUninitializedNonFinalLocal#get() → core::int?
-    return #nullableUninitializedNonFinalLocal#isSet ?{core::int?} nullableUninitializedNonFinalLocal : throw new _in::LateError::localNI("nullableUninitializedNonFinalLocal");
+    return #nullableUninitializedNonFinalLocal#isSet ?{core::int?} #nullableUninitializedNonFinalLocal : throw new _in::LateError::localNI("nullableUninitializedNonFinalLocal");
   function #nullableUninitializedNonFinalLocal#set(core::int? #t17) → dynamic {
     #nullableUninitializedNonFinalLocal#isSet = true;
-    return nullableUninitializedNonFinalLocal = #t17;
+    return #nullableUninitializedNonFinalLocal = #t17;
   }
-  core::int? nonNullableUninitializedNonFinalLocal;
-  core::bool #nonNullableUninitializedNonFinalLocal#isSet = false;
+  lowered core::int? #nonNullableUninitializedNonFinalLocal;
+  lowered core::bool #nonNullableUninitializedNonFinalLocal#isSet = false;
   function #nonNullableUninitializedNonFinalLocal#get() → core::int
-    return #nonNullableUninitializedNonFinalLocal#isSet ?{core::int} nonNullableUninitializedNonFinalLocal{core::int} : throw new _in::LateError::localNI("nonNullableUninitializedNonFinalLocal");
+    return #nonNullableUninitializedNonFinalLocal#isSet ?{core::int} #nonNullableUninitializedNonFinalLocal{core::int} : throw new _in::LateError::localNI("nonNullableUninitializedNonFinalLocal");
   function #nonNullableUninitializedNonFinalLocal#set(core::int #t18) → dynamic {
     #nonNullableUninitializedNonFinalLocal#isSet = true;
-    return nonNullableUninitializedNonFinalLocal = #t18;
+    return #nonNullableUninitializedNonFinalLocal = #t18;
   }
-  final core::int? nullableUninitializedFinalLocal;
-  core::bool #nullableUninitializedFinalLocal#isSet = false;
+  lowered final core::int? #nullableUninitializedFinalLocal;
+  lowered core::bool #nullableUninitializedFinalLocal#isSet = false;
   function #nullableUninitializedFinalLocal#get() → core::int?
-    return #nullableUninitializedFinalLocal#isSet ?{core::int?} nullableUninitializedFinalLocal : throw new _in::LateError::localNI("nullableUninitializedFinalLocal");
+    return #nullableUninitializedFinalLocal#isSet ?{core::int?} #nullableUninitializedFinalLocal : throw new _in::LateError::localNI("nullableUninitializedFinalLocal");
   function #nullableUninitializedFinalLocal#set(core::int? #t19) → dynamic
     if(#nullableUninitializedFinalLocal#isSet)
       throw new _in::LateError::localAI("nullableUninitializedFinalLocal");
     else {
       #nullableUninitializedFinalLocal#isSet = true;
-      return nullableUninitializedFinalLocal = #t19;
+      return #nullableUninitializedFinalLocal = #t19;
     }
-  final core::int? nonNullableUninitializedFinalLocal;
-  core::bool #nonNullableUninitializedFinalLocal#isSet = false;
+  lowered final core::int? #nonNullableUninitializedFinalLocal;
+  lowered core::bool #nonNullableUninitializedFinalLocal#isSet = false;
   function #nonNullableUninitializedFinalLocal#get() → core::int
-    return #nonNullableUninitializedFinalLocal#isSet ?{core::int} nonNullableUninitializedFinalLocal{core::int} : throw new _in::LateError::localNI("nonNullableUninitializedFinalLocal");
+    return #nonNullableUninitializedFinalLocal#isSet ?{core::int} #nonNullableUninitializedFinalLocal{core::int} : throw new _in::LateError::localNI("nonNullableUninitializedFinalLocal");
   function #nonNullableUninitializedFinalLocal#set(core::int #t20) → dynamic
     if(#nonNullableUninitializedFinalLocal#isSet)
       throw new _in::LateError::localAI("nonNullableUninitializedFinalLocal");
     else {
       #nonNullableUninitializedFinalLocal#isSet = true;
-      return nonNullableUninitializedFinalLocal = #t20;
+      return #nonNullableUninitializedFinalLocal = #t20;
     }
-  core::int? nullableInitializedNonFinalLocal;
-  core::bool #nullableInitializedNonFinalLocal#isSet = false;
+  lowered core::int? #nullableInitializedNonFinalLocal;
+  lowered core::bool #nullableInitializedNonFinalLocal#isSet = false;
   function #nullableInitializedNonFinalLocal#get() → core::int? {
     if(!#nullableInitializedNonFinalLocal#isSet) {
-      nullableInitializedNonFinalLocal = 0;
+      #nullableInitializedNonFinalLocal = 0;
       #nullableInitializedNonFinalLocal#isSet = true;
     }
-    return nullableInitializedNonFinalLocal;
+    return #nullableInitializedNonFinalLocal;
   }
   function #nullableInitializedNonFinalLocal#set(core::int? #t21) → dynamic {
     #nullableInitializedNonFinalLocal#isSet = true;
-    return nullableInitializedNonFinalLocal = #t21;
+    return #nullableInitializedNonFinalLocal = #t21;
   }
-  core::int? nonNullableInitializedNonFinalLocal;
-  core::bool #nonNullableInitializedNonFinalLocal#isSet = false;
+  lowered core::int? #nonNullableInitializedNonFinalLocal;
+  lowered core::bool #nonNullableInitializedNonFinalLocal#isSet = false;
   function #nonNullableInitializedNonFinalLocal#get() → core::int {
     if(!#nonNullableInitializedNonFinalLocal#isSet) {
-      nonNullableInitializedNonFinalLocal = 0;
+      #nonNullableInitializedNonFinalLocal = 0;
       #nonNullableInitializedNonFinalLocal#isSet = true;
     }
-    return nonNullableInitializedNonFinalLocal{core::int};
+    return #nonNullableInitializedNonFinalLocal{core::int};
   }
   function #nonNullableInitializedNonFinalLocal#set(core::int #t22) → dynamic {
     #nonNullableInitializedNonFinalLocal#isSet = true;
-    return nonNullableInitializedNonFinalLocal = #t22;
+    return #nonNullableInitializedNonFinalLocal = #t22;
   }
-  final core::int? nullableInitializedFinalLocal;
-  core::bool #nullableInitializedFinalLocal#isSet = false;
+  lowered final core::int? #nullableInitializedFinalLocal;
+  lowered core::bool #nullableInitializedFinalLocal#isSet = false;
   function #nullableInitializedFinalLocal#get() → core::int? {
     if(!#nullableInitializedFinalLocal#isSet) {
       final core::int? #t23 = 0;
       if(#nullableInitializedFinalLocal#isSet)
         throw new _in::LateError::localADI("nullableInitializedFinalLocal");
-      nullableInitializedFinalLocal = #t23;
+      #nullableInitializedFinalLocal = #t23;
       #nullableInitializedFinalLocal#isSet = true;
     }
-    return nullableInitializedFinalLocal;
+    return #nullableInitializedFinalLocal;
   }
-  final core::int? nonNullableInitializedFinalLocal;
-  core::bool #nonNullableInitializedFinalLocal#isSet = false;
+  lowered final core::int? #nonNullableInitializedFinalLocal;
+  lowered core::bool #nonNullableInitializedFinalLocal#isSet = false;
   function #nonNullableInitializedFinalLocal#get() → core::int {
     if(!#nonNullableInitializedFinalLocal#isSet) {
       final core::int #t24 = 0;
       if(#nonNullableInitializedFinalLocal#isSet)
         throw new _in::LateError::localADI("nonNullableInitializedFinalLocal");
-      nonNullableInitializedFinalLocal = #t24;
+      #nonNullableInitializedFinalLocal = #t24;
       #nonNullableInitializedFinalLocal#isSet = true;
     }
-    return nonNullableInitializedFinalLocal{core::int};
+    return #nonNullableInitializedFinalLocal{core::int};
   }
 }
 static get uninitializedNonFinalTopLevelField() → core::int
diff --git a/pkg/front_end/testcases/late_lowering/late_lowering_bitmasks.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/late_lowering_bitmasks.dart.weak.transformed.expect
index e5d34d1..46b8989 100644
--- a/pkg/front_end/testcases/late_lowering/late_lowering_bitmasks.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_lowering_bitmasks.dart.weak.transformed.expect
@@ -106,93 +106,93 @@
 static field core::bool _#initializedFinalTopLevelField#isSet = false;
 static method main() → dynamic {}
 static method method() → dynamic {
-  core::int? nullableUninitializedNonFinalLocal;
-  core::bool #nullableUninitializedNonFinalLocal#isSet = false;
+  lowered core::int? #nullableUninitializedNonFinalLocal;
+  lowered core::bool #nullableUninitializedNonFinalLocal#isSet = false;
   function #nullableUninitializedNonFinalLocal#get() → core::int?
-    return #nullableUninitializedNonFinalLocal#isSet ?{core::int?} nullableUninitializedNonFinalLocal : throw new _in::LateError::localNI("nullableUninitializedNonFinalLocal");
+    return #nullableUninitializedNonFinalLocal#isSet ?{core::int?} #nullableUninitializedNonFinalLocal : throw new _in::LateError::localNI("nullableUninitializedNonFinalLocal");
   function #nullableUninitializedNonFinalLocal#set(core::int? #t17) → dynamic {
     #nullableUninitializedNonFinalLocal#isSet = true;
-    return nullableUninitializedNonFinalLocal = #t17;
+    return #nullableUninitializedNonFinalLocal = #t17;
   }
-  core::int? nonNullableUninitializedNonFinalLocal;
-  core::bool #nonNullableUninitializedNonFinalLocal#isSet = false;
+  lowered core::int? #nonNullableUninitializedNonFinalLocal;
+  lowered core::bool #nonNullableUninitializedNonFinalLocal#isSet = false;
   function #nonNullableUninitializedNonFinalLocal#get() → core::int
-    return #nonNullableUninitializedNonFinalLocal#isSet ?{core::int} nonNullableUninitializedNonFinalLocal{core::int} : throw new _in::LateError::localNI("nonNullableUninitializedNonFinalLocal");
+    return #nonNullableUninitializedNonFinalLocal#isSet ?{core::int} #nonNullableUninitializedNonFinalLocal{core::int} : throw new _in::LateError::localNI("nonNullableUninitializedNonFinalLocal");
   function #nonNullableUninitializedNonFinalLocal#set(core::int #t18) → dynamic {
     #nonNullableUninitializedNonFinalLocal#isSet = true;
-    return nonNullableUninitializedNonFinalLocal = #t18;
+    return #nonNullableUninitializedNonFinalLocal = #t18;
   }
-  final core::int? nullableUninitializedFinalLocal;
-  core::bool #nullableUninitializedFinalLocal#isSet = false;
+  lowered final core::int? #nullableUninitializedFinalLocal;
+  lowered core::bool #nullableUninitializedFinalLocal#isSet = false;
   function #nullableUninitializedFinalLocal#get() → core::int?
-    return #nullableUninitializedFinalLocal#isSet ?{core::int?} nullableUninitializedFinalLocal : throw new _in::LateError::localNI("nullableUninitializedFinalLocal");
+    return #nullableUninitializedFinalLocal#isSet ?{core::int?} #nullableUninitializedFinalLocal : throw new _in::LateError::localNI("nullableUninitializedFinalLocal");
   function #nullableUninitializedFinalLocal#set(core::int? #t19) → dynamic
     if(#nullableUninitializedFinalLocal#isSet)
       throw new _in::LateError::localAI("nullableUninitializedFinalLocal");
     else {
       #nullableUninitializedFinalLocal#isSet = true;
-      return nullableUninitializedFinalLocal = #t19;
+      return #nullableUninitializedFinalLocal = #t19;
     }
-  final core::int? nonNullableUninitializedFinalLocal;
-  core::bool #nonNullableUninitializedFinalLocal#isSet = false;
+  lowered final core::int? #nonNullableUninitializedFinalLocal;
+  lowered core::bool #nonNullableUninitializedFinalLocal#isSet = false;
   function #nonNullableUninitializedFinalLocal#get() → core::int
-    return #nonNullableUninitializedFinalLocal#isSet ?{core::int} nonNullableUninitializedFinalLocal{core::int} : throw new _in::LateError::localNI("nonNullableUninitializedFinalLocal");
+    return #nonNullableUninitializedFinalLocal#isSet ?{core::int} #nonNullableUninitializedFinalLocal{core::int} : throw new _in::LateError::localNI("nonNullableUninitializedFinalLocal");
   function #nonNullableUninitializedFinalLocal#set(core::int #t20) → dynamic
     if(#nonNullableUninitializedFinalLocal#isSet)
       throw new _in::LateError::localAI("nonNullableUninitializedFinalLocal");
     else {
       #nonNullableUninitializedFinalLocal#isSet = true;
-      return nonNullableUninitializedFinalLocal = #t20;
+      return #nonNullableUninitializedFinalLocal = #t20;
     }
-  core::int? nullableInitializedNonFinalLocal;
-  core::bool #nullableInitializedNonFinalLocal#isSet = false;
+  lowered core::int? #nullableInitializedNonFinalLocal;
+  lowered core::bool #nullableInitializedNonFinalLocal#isSet = false;
   function #nullableInitializedNonFinalLocal#get() → core::int? {
     if(!#nullableInitializedNonFinalLocal#isSet) {
-      nullableInitializedNonFinalLocal = 0;
+      #nullableInitializedNonFinalLocal = 0;
       #nullableInitializedNonFinalLocal#isSet = true;
     }
-    return nullableInitializedNonFinalLocal;
+    return #nullableInitializedNonFinalLocal;
   }
   function #nullableInitializedNonFinalLocal#set(core::int? #t21) → dynamic {
     #nullableInitializedNonFinalLocal#isSet = true;
-    return nullableInitializedNonFinalLocal = #t21;
+    return #nullableInitializedNonFinalLocal = #t21;
   }
-  core::int? nonNullableInitializedNonFinalLocal;
-  core::bool #nonNullableInitializedNonFinalLocal#isSet = false;
+  lowered core::int? #nonNullableInitializedNonFinalLocal;
+  lowered core::bool #nonNullableInitializedNonFinalLocal#isSet = false;
   function #nonNullableInitializedNonFinalLocal#get() → core::int {
     if(!#nonNullableInitializedNonFinalLocal#isSet) {
-      nonNullableInitializedNonFinalLocal = 0;
+      #nonNullableInitializedNonFinalLocal = 0;
       #nonNullableInitializedNonFinalLocal#isSet = true;
     }
-    return nonNullableInitializedNonFinalLocal{core::int};
+    return #nonNullableInitializedNonFinalLocal{core::int};
   }
   function #nonNullableInitializedNonFinalLocal#set(core::int #t22) → dynamic {
     #nonNullableInitializedNonFinalLocal#isSet = true;
-    return nonNullableInitializedNonFinalLocal = #t22;
+    return #nonNullableInitializedNonFinalLocal = #t22;
   }
-  final core::int? nullableInitializedFinalLocal;
-  core::bool #nullableInitializedFinalLocal#isSet = false;
+  lowered final core::int? #nullableInitializedFinalLocal;
+  lowered core::bool #nullableInitializedFinalLocal#isSet = false;
   function #nullableInitializedFinalLocal#get() → core::int? {
     if(!#nullableInitializedFinalLocal#isSet) {
       final core::int? #t23 = 0;
       if(#nullableInitializedFinalLocal#isSet)
         throw new _in::LateError::localADI("nullableInitializedFinalLocal");
-      nullableInitializedFinalLocal = #t23;
+      #nullableInitializedFinalLocal = #t23;
       #nullableInitializedFinalLocal#isSet = true;
     }
-    return nullableInitializedFinalLocal;
+    return #nullableInitializedFinalLocal;
   }
-  final core::int? nonNullableInitializedFinalLocal;
-  core::bool #nonNullableInitializedFinalLocal#isSet = false;
+  lowered final core::int? #nonNullableInitializedFinalLocal;
+  lowered core::bool #nonNullableInitializedFinalLocal#isSet = false;
   function #nonNullableInitializedFinalLocal#get() → core::int {
     if(!#nonNullableInitializedFinalLocal#isSet) {
       final core::int #t24 = 0;
       if(#nonNullableInitializedFinalLocal#isSet)
         throw new _in::LateError::localADI("nonNullableInitializedFinalLocal");
-      nonNullableInitializedFinalLocal = #t24;
+      #nonNullableInitializedFinalLocal = #t24;
       #nonNullableInitializedFinalLocal#isSet = true;
     }
-    return nonNullableInitializedFinalLocal{core::int};
+    return #nonNullableInitializedFinalLocal{core::int};
   }
 }
 static get uninitializedNonFinalTopLevelField() → core::int
diff --git a/pkg/front_end/testcases/late_lowering/late_nullable_local_with_initializer.dart.strong.expect b/pkg/front_end/testcases/late_lowering/late_nullable_local_with_initializer.dart.strong.expect
index 44a6c7f..12dcc96 100644
--- a/pkg/front_end/testcases/late_lowering/late_nullable_local_with_initializer.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/late_nullable_local_with_initializer.dart.strong.expect
@@ -5,35 +5,35 @@
 static method lateLocalInit() → core::int?
   return 123;
 static method main() → dynamic {
-  core::int? lateLocal;
-  core::bool #lateLocal#isSet = false;
+  lowered core::int? #lateLocal;
+  lowered core::bool #lateLocal#isSet = false;
   function #lateLocal#get() → core::int? {
     if(!#lateLocal#isSet) {
-      lateLocal = self::lateLocalInit();
+      #lateLocal = self::lateLocalInit();
       #lateLocal#isSet = true;
     }
-    return lateLocal;
+    return #lateLocal;
   }
   function #lateLocal#set(core::int? #t1) → dynamic {
     #lateLocal#isSet = true;
-    return lateLocal = #t1;
+    return #lateLocal = #t1;
   }
   self::expect(123, #lateLocal#get.call());
   self::expect(124, #lateLocal#set.call(124));
   self::expect(124, #lateLocal#get.call());
   function local<T extends core::Object? = dynamic>(T? value1, T? value2) → Null {
-    T? lateGenericLocal;
-    core::bool #lateGenericLocal#isSet = false;
+    lowered T? #lateGenericLocal;
+    lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T? {
       if(!#lateGenericLocal#isSet) {
-        lateGenericLocal = value1;
+        #lateGenericLocal = value1;
         #lateGenericLocal#isSet = true;
       }
-      return lateGenericLocal;
+      return #lateGenericLocal;
     }
     function #lateGenericLocal#set(T? #t2) → dynamic {
       #lateGenericLocal#isSet = true;
-      return lateGenericLocal = #t2;
+      return #lateGenericLocal = #t2;
     }
     self::expect(value1, #lateGenericLocal#get.call());
     self::expect(value2, #lateGenericLocal#set.call(value2));
diff --git a/pkg/front_end/testcases/late_lowering/late_nullable_local_with_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/late_nullable_local_with_initializer.dart.strong.transformed.expect
index 44a6c7f..12dcc96 100644
--- a/pkg/front_end/testcases/late_lowering/late_nullable_local_with_initializer.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_nullable_local_with_initializer.dart.strong.transformed.expect
@@ -5,35 +5,35 @@
 static method lateLocalInit() → core::int?
   return 123;
 static method main() → dynamic {
-  core::int? lateLocal;
-  core::bool #lateLocal#isSet = false;
+  lowered core::int? #lateLocal;
+  lowered core::bool #lateLocal#isSet = false;
   function #lateLocal#get() → core::int? {
     if(!#lateLocal#isSet) {
-      lateLocal = self::lateLocalInit();
+      #lateLocal = self::lateLocalInit();
       #lateLocal#isSet = true;
     }
-    return lateLocal;
+    return #lateLocal;
   }
   function #lateLocal#set(core::int? #t1) → dynamic {
     #lateLocal#isSet = true;
-    return lateLocal = #t1;
+    return #lateLocal = #t1;
   }
   self::expect(123, #lateLocal#get.call());
   self::expect(124, #lateLocal#set.call(124));
   self::expect(124, #lateLocal#get.call());
   function local<T extends core::Object? = dynamic>(T? value1, T? value2) → Null {
-    T? lateGenericLocal;
-    core::bool #lateGenericLocal#isSet = false;
+    lowered T? #lateGenericLocal;
+    lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T? {
       if(!#lateGenericLocal#isSet) {
-        lateGenericLocal = value1;
+        #lateGenericLocal = value1;
         #lateGenericLocal#isSet = true;
       }
-      return lateGenericLocal;
+      return #lateGenericLocal;
     }
     function #lateGenericLocal#set(T? #t2) → dynamic {
       #lateGenericLocal#isSet = true;
-      return lateGenericLocal = #t2;
+      return #lateGenericLocal = #t2;
     }
     self::expect(value1, #lateGenericLocal#get.call());
     self::expect(value2, #lateGenericLocal#set.call(value2));
diff --git a/pkg/front_end/testcases/late_lowering/late_nullable_local_with_initializer.dart.weak.expect b/pkg/front_end/testcases/late_lowering/late_nullable_local_with_initializer.dart.weak.expect
index 44a6c7f..12dcc96 100644
--- a/pkg/front_end/testcases/late_lowering/late_nullable_local_with_initializer.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/late_nullable_local_with_initializer.dart.weak.expect
@@ -5,35 +5,35 @@
 static method lateLocalInit() → core::int?
   return 123;
 static method main() → dynamic {
-  core::int? lateLocal;
-  core::bool #lateLocal#isSet = false;
+  lowered core::int? #lateLocal;
+  lowered core::bool #lateLocal#isSet = false;
   function #lateLocal#get() → core::int? {
     if(!#lateLocal#isSet) {
-      lateLocal = self::lateLocalInit();
+      #lateLocal = self::lateLocalInit();
       #lateLocal#isSet = true;
     }
-    return lateLocal;
+    return #lateLocal;
   }
   function #lateLocal#set(core::int? #t1) → dynamic {
     #lateLocal#isSet = true;
-    return lateLocal = #t1;
+    return #lateLocal = #t1;
   }
   self::expect(123, #lateLocal#get.call());
   self::expect(124, #lateLocal#set.call(124));
   self::expect(124, #lateLocal#get.call());
   function local<T extends core::Object? = dynamic>(T? value1, T? value2) → Null {
-    T? lateGenericLocal;
-    core::bool #lateGenericLocal#isSet = false;
+    lowered T? #lateGenericLocal;
+    lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T? {
       if(!#lateGenericLocal#isSet) {
-        lateGenericLocal = value1;
+        #lateGenericLocal = value1;
         #lateGenericLocal#isSet = true;
       }
-      return lateGenericLocal;
+      return #lateGenericLocal;
     }
     function #lateGenericLocal#set(T? #t2) → dynamic {
       #lateGenericLocal#isSet = true;
-      return lateGenericLocal = #t2;
+      return #lateGenericLocal = #t2;
     }
     self::expect(value1, #lateGenericLocal#get.call());
     self::expect(value2, #lateGenericLocal#set.call(value2));
diff --git a/pkg/front_end/testcases/late_lowering/late_nullable_local_with_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/late_nullable_local_with_initializer.dart.weak.transformed.expect
index 44a6c7f..12dcc96 100644
--- a/pkg/front_end/testcases/late_lowering/late_nullable_local_with_initializer.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_nullable_local_with_initializer.dart.weak.transformed.expect
@@ -5,35 +5,35 @@
 static method lateLocalInit() → core::int?
   return 123;
 static method main() → dynamic {
-  core::int? lateLocal;
-  core::bool #lateLocal#isSet = false;
+  lowered core::int? #lateLocal;
+  lowered core::bool #lateLocal#isSet = false;
   function #lateLocal#get() → core::int? {
     if(!#lateLocal#isSet) {
-      lateLocal = self::lateLocalInit();
+      #lateLocal = self::lateLocalInit();
       #lateLocal#isSet = true;
     }
-    return lateLocal;
+    return #lateLocal;
   }
   function #lateLocal#set(core::int? #t1) → dynamic {
     #lateLocal#isSet = true;
-    return lateLocal = #t1;
+    return #lateLocal = #t1;
   }
   self::expect(123, #lateLocal#get.call());
   self::expect(124, #lateLocal#set.call(124));
   self::expect(124, #lateLocal#get.call());
   function local<T extends core::Object? = dynamic>(T? value1, T? value2) → Null {
-    T? lateGenericLocal;
-    core::bool #lateGenericLocal#isSet = false;
+    lowered T? #lateGenericLocal;
+    lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T? {
       if(!#lateGenericLocal#isSet) {
-        lateGenericLocal = value1;
+        #lateGenericLocal = value1;
         #lateGenericLocal#isSet = true;
       }
-      return lateGenericLocal;
+      return #lateGenericLocal;
     }
     function #lateGenericLocal#set(T? #t2) → dynamic {
       #lateGenericLocal#isSet = true;
-      return lateGenericLocal = #t2;
+      return #lateGenericLocal = #t2;
     }
     self::expect(value1, #lateGenericLocal#get.call());
     self::expect(value2, #lateGenericLocal#set.call(value2));
diff --git a/pkg/front_end/testcases/late_lowering/late_nullable_local_without_initializer.dart.strong.expect b/pkg/front_end/testcases/late_lowering/late_nullable_local_without_initializer.dart.strong.expect
index d1c2417..a635204 100644
--- a/pkg/front_end/testcases/late_lowering/late_nullable_local_without_initializer.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/late_nullable_local_without_initializer.dart.strong.expect
@@ -4,25 +4,25 @@
 import "dart:_internal" as _in;
 
 static method main() → dynamic {
-  core::int? lateLocal;
-  core::bool #lateLocal#isSet = false;
+  lowered core::int? #lateLocal;
+  lowered core::bool #lateLocal#isSet = false;
   function #lateLocal#get() → core::int?
-    return #lateLocal#isSet ?{core::int?} lateLocal : throw new _in::LateError::localNI("lateLocal");
+    return #lateLocal#isSet ?{core::int?} #lateLocal : throw new _in::LateError::localNI("lateLocal");
   function #lateLocal#set(core::int? #t1) → dynamic {
     #lateLocal#isSet = true;
-    return lateLocal = #t1;
+    return #lateLocal = #t1;
   }
   self::throws(() → core::int? => #lateLocal#get.call(), "Read value from uninitialized lateLocal");
   self::expect(123, #lateLocal#set.call(123));
   self::expect(123, #lateLocal#get.call());
   function local<T extends core::Object? = dynamic>(T? value) → Null {
-    T? lateGenericLocal;
-    core::bool #lateGenericLocal#isSet = false;
+    lowered T? #lateGenericLocal;
+    lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T?
-      return #lateGenericLocal#isSet ?{T?} lateGenericLocal : throw new _in::LateError::localNI("lateGenericLocal");
+      return #lateGenericLocal#isSet ?{T?} #lateGenericLocal : throw new _in::LateError::localNI("lateGenericLocal");
     function #lateGenericLocal#set(T? #t2) → dynamic {
       #lateGenericLocal#isSet = true;
-      return lateGenericLocal = #t2;
+      return #lateGenericLocal = #t2;
     }
     self::throws(() → T? => #lateGenericLocal#get.call(), "Read value from uninitialized lateGenericLocal");
     self::expect(value, #lateGenericLocal#set.call(value));
diff --git a/pkg/front_end/testcases/late_lowering/late_nullable_local_without_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/late_nullable_local_without_initializer.dart.strong.transformed.expect
index d1c2417..a635204 100644
--- a/pkg/front_end/testcases/late_lowering/late_nullable_local_without_initializer.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_nullable_local_without_initializer.dart.strong.transformed.expect
@@ -4,25 +4,25 @@
 import "dart:_internal" as _in;
 
 static method main() → dynamic {
-  core::int? lateLocal;
-  core::bool #lateLocal#isSet = false;
+  lowered core::int? #lateLocal;
+  lowered core::bool #lateLocal#isSet = false;
   function #lateLocal#get() → core::int?
-    return #lateLocal#isSet ?{core::int?} lateLocal : throw new _in::LateError::localNI("lateLocal");
+    return #lateLocal#isSet ?{core::int?} #lateLocal : throw new _in::LateError::localNI("lateLocal");
   function #lateLocal#set(core::int? #t1) → dynamic {
     #lateLocal#isSet = true;
-    return lateLocal = #t1;
+    return #lateLocal = #t1;
   }
   self::throws(() → core::int? => #lateLocal#get.call(), "Read value from uninitialized lateLocal");
   self::expect(123, #lateLocal#set.call(123));
   self::expect(123, #lateLocal#get.call());
   function local<T extends core::Object? = dynamic>(T? value) → Null {
-    T? lateGenericLocal;
-    core::bool #lateGenericLocal#isSet = false;
+    lowered T? #lateGenericLocal;
+    lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T?
-      return #lateGenericLocal#isSet ?{T?} lateGenericLocal : throw new _in::LateError::localNI("lateGenericLocal");
+      return #lateGenericLocal#isSet ?{T?} #lateGenericLocal : throw new _in::LateError::localNI("lateGenericLocal");
     function #lateGenericLocal#set(T? #t2) → dynamic {
       #lateGenericLocal#isSet = true;
-      return lateGenericLocal = #t2;
+      return #lateGenericLocal = #t2;
     }
     self::throws(() → T? => #lateGenericLocal#get.call(), "Read value from uninitialized lateGenericLocal");
     self::expect(value, #lateGenericLocal#set.call(value));
diff --git a/pkg/front_end/testcases/late_lowering/late_nullable_local_without_initializer.dart.weak.expect b/pkg/front_end/testcases/late_lowering/late_nullable_local_without_initializer.dart.weak.expect
index d1c2417..a635204 100644
--- a/pkg/front_end/testcases/late_lowering/late_nullable_local_without_initializer.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/late_nullable_local_without_initializer.dart.weak.expect
@@ -4,25 +4,25 @@
 import "dart:_internal" as _in;
 
 static method main() → dynamic {
-  core::int? lateLocal;
-  core::bool #lateLocal#isSet = false;
+  lowered core::int? #lateLocal;
+  lowered core::bool #lateLocal#isSet = false;
   function #lateLocal#get() → core::int?
-    return #lateLocal#isSet ?{core::int?} lateLocal : throw new _in::LateError::localNI("lateLocal");
+    return #lateLocal#isSet ?{core::int?} #lateLocal : throw new _in::LateError::localNI("lateLocal");
   function #lateLocal#set(core::int? #t1) → dynamic {
     #lateLocal#isSet = true;
-    return lateLocal = #t1;
+    return #lateLocal = #t1;
   }
   self::throws(() → core::int? => #lateLocal#get.call(), "Read value from uninitialized lateLocal");
   self::expect(123, #lateLocal#set.call(123));
   self::expect(123, #lateLocal#get.call());
   function local<T extends core::Object? = dynamic>(T? value) → Null {
-    T? lateGenericLocal;
-    core::bool #lateGenericLocal#isSet = false;
+    lowered T? #lateGenericLocal;
+    lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T?
-      return #lateGenericLocal#isSet ?{T?} lateGenericLocal : throw new _in::LateError::localNI("lateGenericLocal");
+      return #lateGenericLocal#isSet ?{T?} #lateGenericLocal : throw new _in::LateError::localNI("lateGenericLocal");
     function #lateGenericLocal#set(T? #t2) → dynamic {
       #lateGenericLocal#isSet = true;
-      return lateGenericLocal = #t2;
+      return #lateGenericLocal = #t2;
     }
     self::throws(() → T? => #lateGenericLocal#get.call(), "Read value from uninitialized lateGenericLocal");
     self::expect(value, #lateGenericLocal#set.call(value));
diff --git a/pkg/front_end/testcases/late_lowering/late_nullable_local_without_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/late_nullable_local_without_initializer.dart.weak.transformed.expect
index d1c2417..a635204 100644
--- a/pkg/front_end/testcases/late_lowering/late_nullable_local_without_initializer.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_nullable_local_without_initializer.dart.weak.transformed.expect
@@ -4,25 +4,25 @@
 import "dart:_internal" as _in;
 
 static method main() → dynamic {
-  core::int? lateLocal;
-  core::bool #lateLocal#isSet = false;
+  lowered core::int? #lateLocal;
+  lowered core::bool #lateLocal#isSet = false;
   function #lateLocal#get() → core::int?
-    return #lateLocal#isSet ?{core::int?} lateLocal : throw new _in::LateError::localNI("lateLocal");
+    return #lateLocal#isSet ?{core::int?} #lateLocal : throw new _in::LateError::localNI("lateLocal");
   function #lateLocal#set(core::int? #t1) → dynamic {
     #lateLocal#isSet = true;
-    return lateLocal = #t1;
+    return #lateLocal = #t1;
   }
   self::throws(() → core::int? => #lateLocal#get.call(), "Read value from uninitialized lateLocal");
   self::expect(123, #lateLocal#set.call(123));
   self::expect(123, #lateLocal#get.call());
   function local<T extends core::Object? = dynamic>(T? value) → Null {
-    T? lateGenericLocal;
-    core::bool #lateGenericLocal#isSet = false;
+    lowered T? #lateGenericLocal;
+    lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T?
-      return #lateGenericLocal#isSet ?{T?} lateGenericLocal : throw new _in::LateError::localNI("lateGenericLocal");
+      return #lateGenericLocal#isSet ?{T?} #lateGenericLocal : throw new _in::LateError::localNI("lateGenericLocal");
     function #lateGenericLocal#set(T? #t2) → dynamic {
       #lateGenericLocal#isSet = true;
-      return lateGenericLocal = #t2;
+      return #lateGenericLocal = #t2;
     }
     self::throws(() → T? => #lateGenericLocal#get.call(), "Read value from uninitialized lateGenericLocal");
     self::expect(value, #lateGenericLocal#set.call(value));
diff --git a/pkg/front_end/testcases/late_lowering/later.dart.strong.expect b/pkg/front_end/testcases/late_lowering/later.dart.strong.expect
index 1876a7a..0b84933 100644
--- a/pkg/front_end/testcases/late_lowering/later.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/later.dart.strong.expect
@@ -137,25 +137,25 @@
   return "hest";
 }
 static method fisk() → dynamic async {
-  core::String? s1;
+  lowered core::String? #s1;
   function #s1#get() → core::String
-    return let final core::String? #t8 = s1 in #t8.==(null) ?{core::String} s1 = invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:40:20: Error: `await` expressions are not supported in late local initializers.
+    return let final core::String? #t8 = #s1 in #t8.==(null) ?{core::String} #s1 = invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:40:20: Error: `await` expressions are not supported in late local initializers.
   late String s1 = await hest(); // Error.
                    ^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} core::String : #t8{core::String};
   function #s1#set(core::String #t9) → dynamic
-    return s1 = #t9;
-  core::String? s2;
+    return #s1 = #t9;
+  lowered core::String? #s2;
   function #s2#get() → core::String
-    return let final core::String? #t10 = s2 in #t10.==(null) ?{core::String} s2 = "${#C1}${invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:41:30: Error: `await` expressions are not supported in late local initializers.
+    return let final core::String? #t10 = #s2 in #t10.==(null) ?{core::String} #s2 = "${#C1}${invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:41:30: Error: `await` expressions are not supported in late local initializers.
   late String s2 = '\${fisk}\${await hest()}\${fisk}'; // Error.
                              ^^^^^"}${#C1}" : #t10{core::String};
   function #s2#set(core::String #t11) → dynamic
-    return s2 = #t11;
-  core::Function? f;
+    return #s2 = #t11;
+  lowered core::Function? #f;
   function #f#get() → core::Function
-    return let final core::Function? #t12 = f in #t12.==(null) ?{core::Function} f = () → asy::Future<dynamic> async => await self::hest() : #t12{core::Function};
+    return let final core::Function? #t12 = #f in #t12.==(null) ?{core::Function} #f = () → asy::Future<dynamic> async => await self::hest() : #t12{core::Function};
   function #f#set(core::Function #t13) → dynamic
-    return f = #t13;
+    return #f = #t13;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/late_lowering/later.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/later.dart.strong.transformed.expect
index 0ac77b2..f251299 100644
--- a/pkg/front_end/testcases/late_lowering/later.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/later.dart.strong.transformed.expect
@@ -202,23 +202,23 @@
     try {
       #L3:
       {
-        core::String? s1;
+        lowered core::String? #s1;
         function #s1#get() → core::String
-          return let final core::String? #t11 = s1 in #t11.==(null) ?{core::String} s1 = invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:40:20: Error: `await` expressions are not supported in late local initializers.
+          return let final core::String? #t11 = #s1 in #t11.==(null) ?{core::String} #s1 = invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:40:20: Error: `await` expressions are not supported in late local initializers.
   late String s1 = await hest(); // Error.
                    ^^^^^" : #t11{core::String};
         function #s1#set(core::String #t12) → dynamic
-          return s1 = #t12;
-        core::String? s2;
+          return #s1 = #t12;
+        lowered core::String? #s2;
         function #s2#get() → core::String
-          return let final core::String? #t13 = s2 in #t13.==(null) ?{core::String} s2 = "${#C1}${invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:41:30: Error: `await` expressions are not supported in late local initializers.
+          return let final core::String? #t13 = #s2 in #t13.==(null) ?{core::String} #s2 = "${#C1}${invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:41:30: Error: `await` expressions are not supported in late local initializers.
   late String s2 = '\${fisk}\${await hest()}\${fisk}'; // Error.
                              ^^^^^"}${#C1}" : #t13{core::String};
         function #s2#set(core::String #t14) → dynamic
-          return s2 = #t14;
-        core::Function? f;
+          return #s2 = #t14;
+        lowered core::Function? #f;
         function #f#get() → core::Function
-          return let final core::Function? #t15 = f in #t15.==(null) ?{core::Function} f = () → asy::Future<dynamic> /* originally async */ {
+          return let final core::Function? #t15 = #f in #t15.==(null) ?{core::Function} #f = () → asy::Future<dynamic> /* originally async */ {
             final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
             core::bool* :is_sync = false;
             FutureOr<dynamic>? :return_value;
@@ -248,7 +248,7 @@
             return :async_future;
           } : #t15{core::Function};
         function #f#set(core::Function #t17) → dynamic
-          return f = #t17;
+          return #f = #t17;
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
diff --git a/pkg/front_end/testcases/late_lowering/later.dart.weak.expect b/pkg/front_end/testcases/late_lowering/later.dart.weak.expect
index 267e384..7123dd80 100644
--- a/pkg/front_end/testcases/late_lowering/later.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/later.dart.weak.expect
@@ -157,48 +157,48 @@
   return "hest";
 }
 static method fisk() → dynamic async {
-  core::String? s1;
-  core::bool #s1#isSet = false;
+  lowered core::String? #s1;
+  lowered core::bool #s1#isSet = false;
   function #s1#get() → core::String {
     if(!#s1#isSet) {
-      s1 = invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:40:20: Error: `await` expressions are not supported in late local initializers.
+      #s1 = invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:40:20: Error: `await` expressions are not supported in late local initializers.
   late String s1 = await hest(); // Error.
                    ^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
       #s1#isSet = true;
     }
-    return s1{core::String};
+    return #s1{core::String};
   }
   function #s1#set(core::String #t8) → dynamic {
     #s1#isSet = true;
-    return s1 = #t8;
+    return #s1 = #t8;
   }
-  core::String? s2;
-  core::bool #s2#isSet = false;
+  lowered core::String? #s2;
+  lowered core::bool #s2#isSet = false;
   function #s2#get() → core::String {
     if(!#s2#isSet) {
-      s2 = "${#C1}${invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:41:30: Error: `await` expressions are not supported in late local initializers.
+      #s2 = "${#C1}${invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:41:30: Error: `await` expressions are not supported in late local initializers.
   late String s2 = '\${fisk}\${await hest()}\${fisk}'; // Error.
                              ^^^^^"}${#C1}";
       #s2#isSet = true;
     }
-    return s2{core::String};
+    return #s2{core::String};
   }
   function #s2#set(core::String #t9) → dynamic {
     #s2#isSet = true;
-    return s2 = #t9;
+    return #s2 = #t9;
   }
-  core::Function? f;
-  core::bool #f#isSet = false;
+  lowered core::Function? #f;
+  lowered core::bool #f#isSet = false;
   function #f#get() → core::Function {
     if(!#f#isSet) {
-      f = () → asy::Future<dynamic> async => await self::hest();
+      #f = () → asy::Future<dynamic> async => await self::hest();
       #f#isSet = true;
     }
-    return f{core::Function};
+    return #f{core::Function};
   }
   function #f#set(core::Function #t10) → dynamic {
     #f#isSet = true;
-    return f = #t10;
+    return #f = #t10;
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/late_lowering/later.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/later.dart.weak.transformed.expect
index ffd2c5b..11b98b1 100644
--- a/pkg/front_end/testcases/late_lowering/later.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/later.dart.weak.transformed.expect
@@ -222,41 +222,41 @@
     try {
       #L3:
       {
-        core::String? s1;
-        core::bool #s1#isSet = false;
+        lowered core::String? #s1;
+        lowered core::bool #s1#isSet = false;
         function #s1#get() → core::String {
           if(!#s1#isSet) {
-            s1 = invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:40:20: Error: `await` expressions are not supported in late local initializers.
+            #s1 = invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:40:20: Error: `await` expressions are not supported in late local initializers.
   late String s1 = await hest(); // Error.
                    ^^^^^";
             #s1#isSet = true;
           }
-          return s1{core::String};
+          return #s1{core::String};
         }
         function #s1#set(core::String #t11) → dynamic {
           #s1#isSet = true;
-          return s1 = #t11;
+          return #s1 = #t11;
         }
-        core::String? s2;
-        core::bool #s2#isSet = false;
+        lowered core::String? #s2;
+        lowered core::bool #s2#isSet = false;
         function #s2#get() → core::String {
           if(!#s2#isSet) {
-            s2 = "${#C1}${invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:41:30: Error: `await` expressions are not supported in late local initializers.
+            #s2 = "${#C1}${invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:41:30: Error: `await` expressions are not supported in late local initializers.
   late String s2 = '\${fisk}\${await hest()}\${fisk}'; // Error.
                              ^^^^^"}${#C1}";
             #s2#isSet = true;
           }
-          return s2{core::String};
+          return #s2{core::String};
         }
         function #s2#set(core::String #t12) → dynamic {
           #s2#isSet = true;
-          return s2 = #t12;
+          return #s2 = #t12;
         }
-        core::Function? f;
-        core::bool #f#isSet = false;
+        lowered core::Function? #f;
+        lowered core::bool #f#isSet = false;
         function #f#get() → core::Function {
           if(!#f#isSet) {
-            f = () → asy::Future<dynamic> /* originally async */ {
+            #f = () → asy::Future<dynamic> /* originally async */ {
               final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
               core::bool* :is_sync = false;
               FutureOr<dynamic>? :return_value;
@@ -287,11 +287,11 @@
             };
             #f#isSet = true;
           }
-          return f{core::Function};
+          return #f{core::Function};
         }
         function #f#set(core::Function #t14) → dynamic {
           #f#isSet = true;
-          return f = #t14;
+          return #f = #t14;
         }
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
diff --git a/pkg/front_end/testcases/late_lowering/non_nullable_from_opt_out.dart.strong.expect b/pkg/front_end/testcases/late_lowering/non_nullable_from_opt_out.dart.strong.expect
index 03ef078..184faaf 100644
--- a/pkg/front_end/testcases/late_lowering/non_nullable_from_opt_out.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/non_nullable_from_opt_out.dart.strong.expect
@@ -109,33 +109,33 @@
     non::_#finalTopLevelField = #t13;
   }
 static method method<T extends core::Object = core::Object>(core::bool b, core::int i, non::method::T t) → dynamic {
-  core::int? local;
+  lowered core::int? #local;
   function #local#get() → core::int
-    return let final core::int? #t14 = local in #t14.==(null) ?{core::int} throw new _in::LateError::localNI("local") : #t14{core::int};
+    return let final core::int? #t14 = #local in #t14.==(null) ?{core::int} throw new _in::LateError::localNI("local") : #t14{core::int};
   function #local#set(core::int #t15) → dynamic
-    return local = #t15;
-  final dynamic finalLocal;
-  core::bool #finalLocal#isSet = false;
+    return #local = #t15;
+  lowered final dynamic #finalLocal;
+  lowered core::bool #finalLocal#isSet = false;
   function #finalLocal#get() → dynamic
-    return #finalLocal#isSet ?{dynamic} finalLocal : throw new _in::LateError::localNI("finalLocal");
+    return #finalLocal#isSet ?{dynamic} #finalLocal : throw new _in::LateError::localNI("finalLocal");
   function #finalLocal#set(dynamic #t16) → dynamic
     if(#finalLocal#isSet)
       throw new _in::LateError::localAI("finalLocal");
     else {
       #finalLocal#isSet = true;
-      return finalLocal = #t16;
+      return #finalLocal = #t16;
     }
-  non::method::T? localTypeVariable;
+  lowered non::method::T? #localTypeVariable;
   function #localTypeVariable#get() → non::method::T
-    return let final non::method::T? #t17 = localTypeVariable in #t17.==(null) ?{non::method::T} throw new _in::LateError::localNI("localTypeVariable") : #t17{non::method::T};
+    return let final non::method::T? #t17 = #localTypeVariable in #t17.==(null) ?{non::method::T} throw new _in::LateError::localNI("localTypeVariable") : #t17{non::method::T};
   function #localTypeVariable#set(non::method::T #t18) → dynamic
-    return localTypeVariable = #t18;
-  final non::method::T? finalLocalTypeVariable;
+    return #localTypeVariable = #t18;
+  lowered final non::method::T? #finalLocalTypeVariable;
   function #finalLocalTypeVariable#get() → non::method::T
-    return let final non::method::T? #t19 = finalLocalTypeVariable in #t19.==(null) ?{non::method::T} throw new _in::LateError::localNI("finalLocalTypeVariable") : #t19{non::method::T};
+    return let final non::method::T? #t19 = #finalLocalTypeVariable in #t19.==(null) ?{non::method::T} throw new _in::LateError::localNI("finalLocalTypeVariable") : #t19{non::method::T};
   function #finalLocalTypeVariable#set(non::method::T #t20) → dynamic
-    if(finalLocalTypeVariable.==(null))
-      return finalLocalTypeVariable = #t20;
+    if(#finalLocalTypeVariable.==(null))
+      return #finalLocalTypeVariable = #t20;
     else
       throw new _in::LateError::localAI("finalLocalTypeVariable");
   if(b) {
diff --git a/pkg/front_end/testcases/late_lowering/non_nullable_from_opt_out.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/non_nullable_from_opt_out.dart.strong.transformed.expect
index 03ef078..184faaf 100644
--- a/pkg/front_end/testcases/late_lowering/non_nullable_from_opt_out.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/non_nullable_from_opt_out.dart.strong.transformed.expect
@@ -109,33 +109,33 @@
     non::_#finalTopLevelField = #t13;
   }
 static method method<T extends core::Object = core::Object>(core::bool b, core::int i, non::method::T t) → dynamic {
-  core::int? local;
+  lowered core::int? #local;
   function #local#get() → core::int
-    return let final core::int? #t14 = local in #t14.==(null) ?{core::int} throw new _in::LateError::localNI("local") : #t14{core::int};
+    return let final core::int? #t14 = #local in #t14.==(null) ?{core::int} throw new _in::LateError::localNI("local") : #t14{core::int};
   function #local#set(core::int #t15) → dynamic
-    return local = #t15;
-  final dynamic finalLocal;
-  core::bool #finalLocal#isSet = false;
+    return #local = #t15;
+  lowered final dynamic #finalLocal;
+  lowered core::bool #finalLocal#isSet = false;
   function #finalLocal#get() → dynamic
-    return #finalLocal#isSet ?{dynamic} finalLocal : throw new _in::LateError::localNI("finalLocal");
+    return #finalLocal#isSet ?{dynamic} #finalLocal : throw new _in::LateError::localNI("finalLocal");
   function #finalLocal#set(dynamic #t16) → dynamic
     if(#finalLocal#isSet)
       throw new _in::LateError::localAI("finalLocal");
     else {
       #finalLocal#isSet = true;
-      return finalLocal = #t16;
+      return #finalLocal = #t16;
     }
-  non::method::T? localTypeVariable;
+  lowered non::method::T? #localTypeVariable;
   function #localTypeVariable#get() → non::method::T
-    return let final non::method::T? #t17 = localTypeVariable in #t17.==(null) ?{non::method::T} throw new _in::LateError::localNI("localTypeVariable") : #t17{non::method::T};
+    return let final non::method::T? #t17 = #localTypeVariable in #t17.==(null) ?{non::method::T} throw new _in::LateError::localNI("localTypeVariable") : #t17{non::method::T};
   function #localTypeVariable#set(non::method::T #t18) → dynamic
-    return localTypeVariable = #t18;
-  final non::method::T? finalLocalTypeVariable;
+    return #localTypeVariable = #t18;
+  lowered final non::method::T? #finalLocalTypeVariable;
   function #finalLocalTypeVariable#get() → non::method::T
-    return let final non::method::T? #t19 = finalLocalTypeVariable in #t19.==(null) ?{non::method::T} throw new _in::LateError::localNI("finalLocalTypeVariable") : #t19{non::method::T};
+    return let final non::method::T? #t19 = #finalLocalTypeVariable in #t19.==(null) ?{non::method::T} throw new _in::LateError::localNI("finalLocalTypeVariable") : #t19{non::method::T};
   function #finalLocalTypeVariable#set(non::method::T #t20) → dynamic
-    if(finalLocalTypeVariable.==(null))
-      return finalLocalTypeVariable = #t20;
+    if(#finalLocalTypeVariable.==(null))
+      return #finalLocalTypeVariable = #t20;
     else
       throw new _in::LateError::localAI("finalLocalTypeVariable");
   if(b) {
diff --git a/pkg/front_end/testcases/late_lowering/non_nullable_from_opt_out.dart.weak.expect b/pkg/front_end/testcases/late_lowering/non_nullable_from_opt_out.dart.weak.expect
index 53ea9c9..7555788 100644
--- a/pkg/front_end/testcases/late_lowering/non_nullable_from_opt_out.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/non_nullable_from_opt_out.dart.weak.expect
@@ -117,43 +117,43 @@
     non::_#finalTopLevelField = #t13;
   }
 static method method<T extends core::Object = core::Object>(core::bool b, core::int i, non::method::T t) → dynamic {
-  core::int? local;
-  core::bool #local#isSet = false;
+  lowered core::int? #local;
+  lowered core::bool #local#isSet = false;
   function #local#get() → core::int
-    return #local#isSet ?{core::int} local{core::int} : throw new _in::LateError::localNI("local");
+    return #local#isSet ?{core::int} #local{core::int} : throw new _in::LateError::localNI("local");
   function #local#set(core::int #t14) → dynamic {
     #local#isSet = true;
-    return local = #t14;
+    return #local = #t14;
   }
-  final dynamic finalLocal;
-  core::bool #finalLocal#isSet = false;
+  lowered final dynamic #finalLocal;
+  lowered core::bool #finalLocal#isSet = false;
   function #finalLocal#get() → dynamic
-    return #finalLocal#isSet ?{dynamic} finalLocal : throw new _in::LateError::localNI("finalLocal");
+    return #finalLocal#isSet ?{dynamic} #finalLocal : throw new _in::LateError::localNI("finalLocal");
   function #finalLocal#set(dynamic #t15) → dynamic
     if(#finalLocal#isSet)
       throw new _in::LateError::localAI("finalLocal");
     else {
       #finalLocal#isSet = true;
-      return finalLocal = #t15;
+      return #finalLocal = #t15;
     }
-  non::method::T? localTypeVariable;
-  core::bool #localTypeVariable#isSet = false;
+  lowered non::method::T? #localTypeVariable;
+  lowered core::bool #localTypeVariable#isSet = false;
   function #localTypeVariable#get() → non::method::T
-    return #localTypeVariable#isSet ?{non::method::T} localTypeVariable{non::method::T} : throw new _in::LateError::localNI("localTypeVariable");
+    return #localTypeVariable#isSet ?{non::method::T} #localTypeVariable{non::method::T} : throw new _in::LateError::localNI("localTypeVariable");
   function #localTypeVariable#set(non::method::T #t16) → dynamic {
     #localTypeVariable#isSet = true;
-    return localTypeVariable = #t16;
+    return #localTypeVariable = #t16;
   }
-  final non::method::T? finalLocalTypeVariable;
-  core::bool #finalLocalTypeVariable#isSet = false;
+  lowered final non::method::T? #finalLocalTypeVariable;
+  lowered core::bool #finalLocalTypeVariable#isSet = false;
   function #finalLocalTypeVariable#get() → non::method::T
-    return #finalLocalTypeVariable#isSet ?{non::method::T} finalLocalTypeVariable{non::method::T} : throw new _in::LateError::localNI("finalLocalTypeVariable");
+    return #finalLocalTypeVariable#isSet ?{non::method::T} #finalLocalTypeVariable{non::method::T} : throw new _in::LateError::localNI("finalLocalTypeVariable");
   function #finalLocalTypeVariable#set(non::method::T #t17) → dynamic
     if(#finalLocalTypeVariable#isSet)
       throw new _in::LateError::localAI("finalLocalTypeVariable");
     else {
       #finalLocalTypeVariable#isSet = true;
-      return finalLocalTypeVariable = #t17;
+      return #finalLocalTypeVariable = #t17;
     }
   if(b) {
     #local#set.call(i);
diff --git a/pkg/front_end/testcases/late_lowering/non_nullable_from_opt_out.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/non_nullable_from_opt_out.dart.weak.transformed.expect
index 53ea9c9..7555788 100644
--- a/pkg/front_end/testcases/late_lowering/non_nullable_from_opt_out.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/non_nullable_from_opt_out.dart.weak.transformed.expect
@@ -117,43 +117,43 @@
     non::_#finalTopLevelField = #t13;
   }
 static method method<T extends core::Object = core::Object>(core::bool b, core::int i, non::method::T t) → dynamic {
-  core::int? local;
-  core::bool #local#isSet = false;
+  lowered core::int? #local;
+  lowered core::bool #local#isSet = false;
   function #local#get() → core::int
-    return #local#isSet ?{core::int} local{core::int} : throw new _in::LateError::localNI("local");
+    return #local#isSet ?{core::int} #local{core::int} : throw new _in::LateError::localNI("local");
   function #local#set(core::int #t14) → dynamic {
     #local#isSet = true;
-    return local = #t14;
+    return #local = #t14;
   }
-  final dynamic finalLocal;
-  core::bool #finalLocal#isSet = false;
+  lowered final dynamic #finalLocal;
+  lowered core::bool #finalLocal#isSet = false;
   function #finalLocal#get() → dynamic
-    return #finalLocal#isSet ?{dynamic} finalLocal : throw new _in::LateError::localNI("finalLocal");
+    return #finalLocal#isSet ?{dynamic} #finalLocal : throw new _in::LateError::localNI("finalLocal");
   function #finalLocal#set(dynamic #t15) → dynamic
     if(#finalLocal#isSet)
       throw new _in::LateError::localAI("finalLocal");
     else {
       #finalLocal#isSet = true;
-      return finalLocal = #t15;
+      return #finalLocal = #t15;
     }
-  non::method::T? localTypeVariable;
-  core::bool #localTypeVariable#isSet = false;
+  lowered non::method::T? #localTypeVariable;
+  lowered core::bool #localTypeVariable#isSet = false;
   function #localTypeVariable#get() → non::method::T
-    return #localTypeVariable#isSet ?{non::method::T} localTypeVariable{non::method::T} : throw new _in::LateError::localNI("localTypeVariable");
+    return #localTypeVariable#isSet ?{non::method::T} #localTypeVariable{non::method::T} : throw new _in::LateError::localNI("localTypeVariable");
   function #localTypeVariable#set(non::method::T #t16) → dynamic {
     #localTypeVariable#isSet = true;
-    return localTypeVariable = #t16;
+    return #localTypeVariable = #t16;
   }
-  final non::method::T? finalLocalTypeVariable;
-  core::bool #finalLocalTypeVariable#isSet = false;
+  lowered final non::method::T? #finalLocalTypeVariable;
+  lowered core::bool #finalLocalTypeVariable#isSet = false;
   function #finalLocalTypeVariable#get() → non::method::T
-    return #finalLocalTypeVariable#isSet ?{non::method::T} finalLocalTypeVariable{non::method::T} : throw new _in::LateError::localNI("finalLocalTypeVariable");
+    return #finalLocalTypeVariable#isSet ?{non::method::T} #finalLocalTypeVariable{non::method::T} : throw new _in::LateError::localNI("finalLocalTypeVariable");
   function #finalLocalTypeVariable#set(non::method::T #t17) → dynamic
     if(#finalLocalTypeVariable#isSet)
       throw new _in::LateError::localAI("finalLocalTypeVariable");
     else {
       #finalLocalTypeVariable#isSet = true;
-      return finalLocalTypeVariable = #t17;
+      return #finalLocalTypeVariable = #t17;
     }
   if(b) {
     #local#set.call(i);
diff --git a/pkg/front_end/testcases/late_lowering/return_late.dart.strong.expect b/pkg/front_end/testcases/late_lowering/return_late.dart.strong.expect
index 1cc4a59..2ad5eb6 100644
--- a/pkg/front_end/testcases/late_lowering/return_late.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/return_late.dart.strong.expect
@@ -8,43 +8,43 @@
     : self::Class::field = field, super core::Object::•()
     ;
   method returnTypeVariable() → self::Class::E% {
-    self::Class::E? result;
-    core::bool #result#isSet = false;
+    lowered self::Class::E? #result;
+    lowered core::bool #result#isSet = false;
     function #result#get() → self::Class::E% {
       if(!#result#isSet) {
-        result = this.{self::Class::field};
+        #result = this.{self::Class::field};
         #result#isSet = true;
       }
-      return result{self::Class::E%};
+      return #result{self::Class::E%};
     }
     function #result#set(self::Class::E% #t1) → dynamic {
       #result#isSet = true;
-      return result = #t1;
+      return #result = #t1;
     }
     return #result#get.call();
   }
 }
 static method returnNonNullable(core::int value) → core::int {
-  core::int? result;
+  lowered core::int? #result;
   function #result#get() → core::int
-    return let final core::int? #t2 = result in #t2.==(null) ?{core::int} result = value : #t2{core::int};
+    return let final core::int? #t2 = #result in #t2.==(null) ?{core::int} #result = value : #t2{core::int};
   function #result#set(core::int #t3) → dynamic
-    return result = #t3;
+    return #result = #t3;
   return #result#get.call();
 }
 static method returnNullable(core::int? value) → core::int? {
-  core::int? result;
-  core::bool #result#isSet = false;
+  lowered core::int? #result;
+  lowered core::bool #result#isSet = false;
   function #result#get() → core::int? {
     if(!#result#isSet) {
-      result = value;
+      #result = value;
       #result#isSet = true;
     }
-    return result;
+    return #result;
   }
   function #result#set(core::int? #t4) → dynamic {
     #result#isSet = true;
-    return result = #t4;
+    return #result = #t4;
   }
   return #result#get.call();
 }
diff --git a/pkg/front_end/testcases/late_lowering/return_late.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/return_late.dart.strong.transformed.expect
index 1cc4a59..2ad5eb6 100644
--- a/pkg/front_end/testcases/late_lowering/return_late.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/return_late.dart.strong.transformed.expect
@@ -8,43 +8,43 @@
     : self::Class::field = field, super core::Object::•()
     ;
   method returnTypeVariable() → self::Class::E% {
-    self::Class::E? result;
-    core::bool #result#isSet = false;
+    lowered self::Class::E? #result;
+    lowered core::bool #result#isSet = false;
     function #result#get() → self::Class::E% {
       if(!#result#isSet) {
-        result = this.{self::Class::field};
+        #result = this.{self::Class::field};
         #result#isSet = true;
       }
-      return result{self::Class::E%};
+      return #result{self::Class::E%};
     }
     function #result#set(self::Class::E% #t1) → dynamic {
       #result#isSet = true;
-      return result = #t1;
+      return #result = #t1;
     }
     return #result#get.call();
   }
 }
 static method returnNonNullable(core::int value) → core::int {
-  core::int? result;
+  lowered core::int? #result;
   function #result#get() → core::int
-    return let final core::int? #t2 = result in #t2.==(null) ?{core::int} result = value : #t2{core::int};
+    return let final core::int? #t2 = #result in #t2.==(null) ?{core::int} #result = value : #t2{core::int};
   function #result#set(core::int #t3) → dynamic
-    return result = #t3;
+    return #result = #t3;
   return #result#get.call();
 }
 static method returnNullable(core::int? value) → core::int? {
-  core::int? result;
-  core::bool #result#isSet = false;
+  lowered core::int? #result;
+  lowered core::bool #result#isSet = false;
   function #result#get() → core::int? {
     if(!#result#isSet) {
-      result = value;
+      #result = value;
       #result#isSet = true;
     }
-    return result;
+    return #result;
   }
   function #result#set(core::int? #t4) → dynamic {
     #result#isSet = true;
-    return result = #t4;
+    return #result = #t4;
   }
   return #result#get.call();
 }
diff --git a/pkg/front_end/testcases/late_lowering/return_late.dart.weak.expect b/pkg/front_end/testcases/late_lowering/return_late.dart.weak.expect
index 9db48a4..3270539 100644
--- a/pkg/front_end/testcases/late_lowering/return_late.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/return_late.dart.weak.expect
@@ -8,51 +8,51 @@
     : self::Class::field = field, super core::Object::•()
     ;
   method returnTypeVariable() → self::Class::E% {
-    self::Class::E? result;
-    core::bool #result#isSet = false;
+    lowered self::Class::E? #result;
+    lowered core::bool #result#isSet = false;
     function #result#get() → self::Class::E% {
       if(!#result#isSet) {
-        result = this.{self::Class::field};
+        #result = this.{self::Class::field};
         #result#isSet = true;
       }
-      return result{self::Class::E%};
+      return #result{self::Class::E%};
     }
     function #result#set(self::Class::E% #t1) → dynamic {
       #result#isSet = true;
-      return result = #t1;
+      return #result = #t1;
     }
     return #result#get.call();
   }
 }
 static method returnNonNullable(core::int value) → core::int {
-  core::int? result;
-  core::bool #result#isSet = false;
+  lowered core::int? #result;
+  lowered core::bool #result#isSet = false;
   function #result#get() → core::int {
     if(!#result#isSet) {
-      result = value;
+      #result = value;
       #result#isSet = true;
     }
-    return result{core::int};
+    return #result{core::int};
   }
   function #result#set(core::int #t2) → dynamic {
     #result#isSet = true;
-    return result = #t2;
+    return #result = #t2;
   }
   return #result#get.call();
 }
 static method returnNullable(core::int? value) → core::int? {
-  core::int? result;
-  core::bool #result#isSet = false;
+  lowered core::int? #result;
+  lowered core::bool #result#isSet = false;
   function #result#get() → core::int? {
     if(!#result#isSet) {
-      result = value;
+      #result = value;
       #result#isSet = true;
     }
-    return result;
+    return #result;
   }
   function #result#set(core::int? #t3) → dynamic {
     #result#isSet = true;
-    return result = #t3;
+    return #result = #t3;
   }
   return #result#get.call();
 }
diff --git a/pkg/front_end/testcases/late_lowering/return_late.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/return_late.dart.weak.transformed.expect
index 9db48a4..3270539 100644
--- a/pkg/front_end/testcases/late_lowering/return_late.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/return_late.dart.weak.transformed.expect
@@ -8,51 +8,51 @@
     : self::Class::field = field, super core::Object::•()
     ;
   method returnTypeVariable() → self::Class::E% {
-    self::Class::E? result;
-    core::bool #result#isSet = false;
+    lowered self::Class::E? #result;
+    lowered core::bool #result#isSet = false;
     function #result#get() → self::Class::E% {
       if(!#result#isSet) {
-        result = this.{self::Class::field};
+        #result = this.{self::Class::field};
         #result#isSet = true;
       }
-      return result{self::Class::E%};
+      return #result{self::Class::E%};
     }
     function #result#set(self::Class::E% #t1) → dynamic {
       #result#isSet = true;
-      return result = #t1;
+      return #result = #t1;
     }
     return #result#get.call();
   }
 }
 static method returnNonNullable(core::int value) → core::int {
-  core::int? result;
-  core::bool #result#isSet = false;
+  lowered core::int? #result;
+  lowered core::bool #result#isSet = false;
   function #result#get() → core::int {
     if(!#result#isSet) {
-      result = value;
+      #result = value;
       #result#isSet = true;
     }
-    return result{core::int};
+    return #result{core::int};
   }
   function #result#set(core::int #t2) → dynamic {
     #result#isSet = true;
-    return result = #t2;
+    return #result = #t2;
   }
   return #result#get.call();
 }
 static method returnNullable(core::int? value) → core::int? {
-  core::int? result;
-  core::bool #result#isSet = false;
+  lowered core::int? #result;
+  lowered core::bool #result#isSet = false;
   function #result#get() → core::int? {
     if(!#result#isSet) {
-      result = value;
+      #result = value;
       #result#isSet = true;
     }
-    return result;
+    return #result;
   }
   function #result#set(core::int? #t3) → dynamic {
     #result#isSet = true;
-    return result = #t3;
+    return #result = #t3;
   }
   return #result#get.call();
 }
diff --git a/pkg/front_end/testcases/late_lowering/skip_late_final_uninitialized_instance_fields/main.dart.strong.expect b/pkg/front_end/testcases/late_lowering/skip_late_final_uninitialized_instance_fields/main.dart.strong.expect
index df92880..74bb4fc 100644
--- a/pkg/front_end/testcases/late_lowering/skip_late_final_uninitialized_instance_fields/main.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/skip_late_final_uninitialized_instance_fields/main.dart.strong.expect
@@ -52,71 +52,71 @@
 static field core::int? _#initializedFinalTopLevelField = null;
 static method main() → dynamic {}
 static method method() → dynamic {
-  core::int? nullableUninitializedNonFinalLocal;
-  core::bool #nullableUninitializedNonFinalLocal#isSet = false;
+  lowered core::int? #nullableUninitializedNonFinalLocal;
+  lowered core::bool #nullableUninitializedNonFinalLocal#isSet = false;
   function #nullableUninitializedNonFinalLocal#get() → core::int?
-    return #nullableUninitializedNonFinalLocal#isSet ?{core::int?} nullableUninitializedNonFinalLocal : throw new _in::LateError::localNI("nullableUninitializedNonFinalLocal");
+    return #nullableUninitializedNonFinalLocal#isSet ?{core::int?} #nullableUninitializedNonFinalLocal : throw new _in::LateError::localNI("nullableUninitializedNonFinalLocal");
   function #nullableUninitializedNonFinalLocal#set(core::int? #t15) → dynamic {
     #nullableUninitializedNonFinalLocal#isSet = true;
-    return nullableUninitializedNonFinalLocal = #t15;
+    return #nullableUninitializedNonFinalLocal = #t15;
   }
-  core::int? nonNullableUninitializedNonFinalLocal;
+  lowered core::int? #nonNullableUninitializedNonFinalLocal;
   function #nonNullableUninitializedNonFinalLocal#get() → core::int
-    return let final core::int? #t16 = nonNullableUninitializedNonFinalLocal in #t16.==(null) ?{core::int} throw new _in::LateError::localNI("nonNullableUninitializedNonFinalLocal") : #t16{core::int};
+    return let final core::int? #t16 = #nonNullableUninitializedNonFinalLocal in #t16.==(null) ?{core::int} throw new _in::LateError::localNI("nonNullableUninitializedNonFinalLocal") : #t16{core::int};
   function #nonNullableUninitializedNonFinalLocal#set(core::int #t17) → dynamic
-    return nonNullableUninitializedNonFinalLocal = #t17;
-  final core::int? nullableUninitializedFinalLocal;
-  core::bool #nullableUninitializedFinalLocal#isSet = false;
+    return #nonNullableUninitializedNonFinalLocal = #t17;
+  lowered final core::int? #nullableUninitializedFinalLocal;
+  lowered core::bool #nullableUninitializedFinalLocal#isSet = false;
   function #nullableUninitializedFinalLocal#get() → core::int?
-    return #nullableUninitializedFinalLocal#isSet ?{core::int?} nullableUninitializedFinalLocal : throw new _in::LateError::localNI("nullableUninitializedFinalLocal");
+    return #nullableUninitializedFinalLocal#isSet ?{core::int?} #nullableUninitializedFinalLocal : throw new _in::LateError::localNI("nullableUninitializedFinalLocal");
   function #nullableUninitializedFinalLocal#set(core::int? #t18) → dynamic
     if(#nullableUninitializedFinalLocal#isSet)
       throw new _in::LateError::localAI("nullableUninitializedFinalLocal");
     else {
       #nullableUninitializedFinalLocal#isSet = true;
-      return nullableUninitializedFinalLocal = #t18;
+      return #nullableUninitializedFinalLocal = #t18;
     }
-  final core::int? nonNullableUninitializedFinalLocal;
+  lowered final core::int? #nonNullableUninitializedFinalLocal;
   function #nonNullableUninitializedFinalLocal#get() → core::int
-    return let final core::int? #t19 = nonNullableUninitializedFinalLocal in #t19.==(null) ?{core::int} throw new _in::LateError::localNI("nonNullableUninitializedFinalLocal") : #t19{core::int};
+    return let final core::int? #t19 = #nonNullableUninitializedFinalLocal in #t19.==(null) ?{core::int} throw new _in::LateError::localNI("nonNullableUninitializedFinalLocal") : #t19{core::int};
   function #nonNullableUninitializedFinalLocal#set(core::int #t20) → dynamic
-    if(nonNullableUninitializedFinalLocal.==(null))
-      return nonNullableUninitializedFinalLocal = #t20;
+    if(#nonNullableUninitializedFinalLocal.==(null))
+      return #nonNullableUninitializedFinalLocal = #t20;
     else
       throw new _in::LateError::localAI("nonNullableUninitializedFinalLocal");
-  core::int? nullableInitializedNonFinalLocal;
-  core::bool #nullableInitializedNonFinalLocal#isSet = false;
+  lowered core::int? #nullableInitializedNonFinalLocal;
+  lowered core::bool #nullableInitializedNonFinalLocal#isSet = false;
   function #nullableInitializedNonFinalLocal#get() → core::int? {
     if(!#nullableInitializedNonFinalLocal#isSet) {
-      nullableInitializedNonFinalLocal = 0;
+      #nullableInitializedNonFinalLocal = 0;
       #nullableInitializedNonFinalLocal#isSet = true;
     }
-    return nullableInitializedNonFinalLocal;
+    return #nullableInitializedNonFinalLocal;
   }
   function #nullableInitializedNonFinalLocal#set(core::int? #t21) → dynamic {
     #nullableInitializedNonFinalLocal#isSet = true;
-    return nullableInitializedNonFinalLocal = #t21;
+    return #nullableInitializedNonFinalLocal = #t21;
   }
-  core::int? nonNullableInitializedNonFinalLocal;
+  lowered core::int? #nonNullableInitializedNonFinalLocal;
   function #nonNullableInitializedNonFinalLocal#get() → core::int
-    return let final core::int? #t22 = nonNullableInitializedNonFinalLocal in #t22.==(null) ?{core::int} nonNullableInitializedNonFinalLocal = 0 : #t22{core::int};
+    return let final core::int? #t22 = #nonNullableInitializedNonFinalLocal in #t22.==(null) ?{core::int} #nonNullableInitializedNonFinalLocal = 0 : #t22{core::int};
   function #nonNullableInitializedNonFinalLocal#set(core::int #t23) → dynamic
-    return nonNullableInitializedNonFinalLocal = #t23;
-  final core::int? nullableInitializedFinalLocal;
-  core::bool #nullableInitializedFinalLocal#isSet = false;
+    return #nonNullableInitializedNonFinalLocal = #t23;
+  lowered final core::int? #nullableInitializedFinalLocal;
+  lowered core::bool #nullableInitializedFinalLocal#isSet = false;
   function #nullableInitializedFinalLocal#get() → core::int? {
     if(!#nullableInitializedFinalLocal#isSet) {
       final core::int? #t24 = 0;
       if(#nullableInitializedFinalLocal#isSet)
         throw new _in::LateError::localADI("nullableInitializedFinalLocal");
-      nullableInitializedFinalLocal = #t24;
+      #nullableInitializedFinalLocal = #t24;
       #nullableInitializedFinalLocal#isSet = true;
     }
-    return nullableInitializedFinalLocal;
+    return #nullableInitializedFinalLocal;
   }
-  final core::int? nonNullableInitializedFinalLocal;
+  lowered final core::int? #nonNullableInitializedFinalLocal;
   function #nonNullableInitializedFinalLocal#get() → core::int
-    return let final core::int? #t25 = nonNullableInitializedFinalLocal in #t25.==(null) ?{core::int} let final core::int #t26 = 0 in nonNullableInitializedFinalLocal.==(null) ?{core::int} nonNullableInitializedFinalLocal = #t26 : throw new _in::LateError::localADI("nonNullableInitializedFinalLocal") : #t25{core::int};
+    return let final core::int? #t25 = #nonNullableInitializedFinalLocal in #t25.==(null) ?{core::int} let final core::int #t26 = 0 in #nonNullableInitializedFinalLocal.==(null) ?{core::int} #nonNullableInitializedFinalLocal = #t26 : throw new _in::LateError::localADI("nonNullableInitializedFinalLocal") : #t25{core::int};
 }
 static get uninitializedNonFinalTopLevelField() → core::int
   return let final core::int? #t27 = self::_#uninitializedNonFinalTopLevelField in #t27.==(null) ?{core::int} throw new _in::LateError::fieldNI("uninitializedNonFinalTopLevelField") : #t27{core::int};
diff --git a/pkg/front_end/testcases/late_lowering/skip_late_final_uninitialized_instance_fields/main.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/skip_late_final_uninitialized_instance_fields/main.dart.strong.transformed.expect
index c2964fd..64e9c55 100644
--- a/pkg/front_end/testcases/late_lowering/skip_late_final_uninitialized_instance_fields/main.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/skip_late_final_uninitialized_instance_fields/main.dart.strong.transformed.expect
@@ -52,71 +52,71 @@
 static field core::int? _#initializedFinalTopLevelField = null;
 static method main() → dynamic {}
 static method method() → dynamic {
-  core::int? nullableUninitializedNonFinalLocal;
-  core::bool #nullableUninitializedNonFinalLocal#isSet = false;
+  lowered core::int? #nullableUninitializedNonFinalLocal;
+  lowered core::bool #nullableUninitializedNonFinalLocal#isSet = false;
   function #nullableUninitializedNonFinalLocal#get() → core::int?
-    return #nullableUninitializedNonFinalLocal#isSet ?{core::int?} nullableUninitializedNonFinalLocal : throw new _in::LateError::localNI("nullableUninitializedNonFinalLocal");
+    return #nullableUninitializedNonFinalLocal#isSet ?{core::int?} #nullableUninitializedNonFinalLocal : throw new _in::LateError::localNI("nullableUninitializedNonFinalLocal");
   function #nullableUninitializedNonFinalLocal#set(core::int? #t15) → dynamic {
     #nullableUninitializedNonFinalLocal#isSet = true;
-    return nullableUninitializedNonFinalLocal = #t15;
+    return #nullableUninitializedNonFinalLocal = #t15;
   }
-  core::int? nonNullableUninitializedNonFinalLocal;
+  lowered core::int? #nonNullableUninitializedNonFinalLocal;
   function #nonNullableUninitializedNonFinalLocal#get() → core::int
-    return let final core::int? #t16 = nonNullableUninitializedNonFinalLocal in #t16.==(null) ?{core::int} throw new _in::LateError::localNI("nonNullableUninitializedNonFinalLocal") : #t16{core::int};
+    return let final core::int? #t16 = #nonNullableUninitializedNonFinalLocal in #t16.==(null) ?{core::int} throw new _in::LateError::localNI("nonNullableUninitializedNonFinalLocal") : #t16{core::int};
   function #nonNullableUninitializedNonFinalLocal#set(core::int #t17) → dynamic
-    return nonNullableUninitializedNonFinalLocal = #t17;
-  final core::int? nullableUninitializedFinalLocal;
-  core::bool #nullableUninitializedFinalLocal#isSet = false;
+    return #nonNullableUninitializedNonFinalLocal = #t17;
+  lowered final core::int? #nullableUninitializedFinalLocal;
+  lowered core::bool #nullableUninitializedFinalLocal#isSet = false;
   function #nullableUninitializedFinalLocal#get() → core::int?
-    return #nullableUninitializedFinalLocal#isSet ?{core::int?} nullableUninitializedFinalLocal : throw new _in::LateError::localNI("nullableUninitializedFinalLocal");
+    return #nullableUninitializedFinalLocal#isSet ?{core::int?} #nullableUninitializedFinalLocal : throw new _in::LateError::localNI("nullableUninitializedFinalLocal");
   function #nullableUninitializedFinalLocal#set(core::int? #t18) → dynamic
     if(#nullableUninitializedFinalLocal#isSet)
       throw new _in::LateError::localAI("nullableUninitializedFinalLocal");
     else {
       #nullableUninitializedFinalLocal#isSet = true;
-      return nullableUninitializedFinalLocal = #t18;
+      return #nullableUninitializedFinalLocal = #t18;
     }
-  final core::int? nonNullableUninitializedFinalLocal;
+  lowered final core::int? #nonNullableUninitializedFinalLocal;
   function #nonNullableUninitializedFinalLocal#get() → core::int
-    return let final core::int? #t19 = nonNullableUninitializedFinalLocal in #t19.==(null) ?{core::int} throw new _in::LateError::localNI("nonNullableUninitializedFinalLocal") : #t19{core::int};
+    return let final core::int? #t19 = #nonNullableUninitializedFinalLocal in #t19.==(null) ?{core::int} throw new _in::LateError::localNI("nonNullableUninitializedFinalLocal") : #t19{core::int};
   function #nonNullableUninitializedFinalLocal#set(core::int #t20) → dynamic
-    if(nonNullableUninitializedFinalLocal.==(null))
-      return nonNullableUninitializedFinalLocal = #t20;
+    if(#nonNullableUninitializedFinalLocal.==(null))
+      return #nonNullableUninitializedFinalLocal = #t20;
     else
       throw new _in::LateError::localAI("nonNullableUninitializedFinalLocal");
-  core::int? nullableInitializedNonFinalLocal;
-  core::bool #nullableInitializedNonFinalLocal#isSet = false;
+  lowered core::int? #nullableInitializedNonFinalLocal;
+  lowered core::bool #nullableInitializedNonFinalLocal#isSet = false;
   function #nullableInitializedNonFinalLocal#get() → core::int? {
     if(!#nullableInitializedNonFinalLocal#isSet) {
-      nullableInitializedNonFinalLocal = 0;
+      #nullableInitializedNonFinalLocal = 0;
       #nullableInitializedNonFinalLocal#isSet = true;
     }
-    return nullableInitializedNonFinalLocal;
+    return #nullableInitializedNonFinalLocal;
   }
   function #nullableInitializedNonFinalLocal#set(core::int? #t21) → dynamic {
     #nullableInitializedNonFinalLocal#isSet = true;
-    return nullableInitializedNonFinalLocal = #t21;
+    return #nullableInitializedNonFinalLocal = #t21;
   }
-  core::int? nonNullableInitializedNonFinalLocal;
+  lowered core::int? #nonNullableInitializedNonFinalLocal;
   function #nonNullableInitializedNonFinalLocal#get() → core::int
-    return let final core::int? #t22 = nonNullableInitializedNonFinalLocal in #t22.==(null) ?{core::int} nonNullableInitializedNonFinalLocal = 0 : #t22{core::int};
+    return let final core::int? #t22 = #nonNullableInitializedNonFinalLocal in #t22.==(null) ?{core::int} #nonNullableInitializedNonFinalLocal = 0 : #t22{core::int};
   function #nonNullableInitializedNonFinalLocal#set(core::int #t23) → dynamic
-    return nonNullableInitializedNonFinalLocal = #t23;
-  final core::int? nullableInitializedFinalLocal;
-  core::bool #nullableInitializedFinalLocal#isSet = false;
+    return #nonNullableInitializedNonFinalLocal = #t23;
+  lowered final core::int? #nullableInitializedFinalLocal;
+  lowered core::bool #nullableInitializedFinalLocal#isSet = false;
   function #nullableInitializedFinalLocal#get() → core::int? {
     if(!#nullableInitializedFinalLocal#isSet) {
       final core::int? #t24 = 0;
       if(#nullableInitializedFinalLocal#isSet)
         throw new _in::LateError::localADI("nullableInitializedFinalLocal");
-      nullableInitializedFinalLocal = #t24;
+      #nullableInitializedFinalLocal = #t24;
       #nullableInitializedFinalLocal#isSet = true;
     }
-    return nullableInitializedFinalLocal;
+    return #nullableInitializedFinalLocal;
   }
-  final core::int? nonNullableInitializedFinalLocal;
+  lowered final core::int? #nonNullableInitializedFinalLocal;
   function #nonNullableInitializedFinalLocal#get() → core::int
-    return let final core::int? #t25 = nonNullableInitializedFinalLocal in #t25.==(null) ?{core::int} let final core::int #t26 = 0 in nonNullableInitializedFinalLocal.==(null) ?{core::int} nonNullableInitializedFinalLocal = #t26 : throw new _in::LateError::localADI("nonNullableInitializedFinalLocal") : #t25{core::int};
+    return let final core::int? #t25 = #nonNullableInitializedFinalLocal in #t25.==(null) ?{core::int} let final core::int #t26 = 0 in #nonNullableInitializedFinalLocal.==(null) ?{core::int} #nonNullableInitializedFinalLocal = #t26 : throw new _in::LateError::localADI("nonNullableInitializedFinalLocal") : #t25{core::int};
 }
 static get uninitializedNonFinalTopLevelField() → core::int
   return let final core::int? #t27 = self::_#uninitializedNonFinalTopLevelField in #t27.==(null) ?{core::int} throw new _in::LateError::fieldNI("uninitializedNonFinalTopLevelField") : #t27{core::int};
diff --git a/pkg/front_end/testcases/late_lowering/skip_late_final_uninitialized_instance_fields/main.dart.weak.expect b/pkg/front_end/testcases/late_lowering/skip_late_final_uninitialized_instance_fields/main.dart.weak.expect
index e3cd765..079c847 100644
--- a/pkg/front_end/testcases/late_lowering/skip_late_final_uninitialized_instance_fields/main.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/skip_late_final_uninitialized_instance_fields/main.dart.weak.expect
@@ -99,93 +99,93 @@
 static field core::bool _#initializedFinalTopLevelField#isSet = false;
 static method main() → dynamic {}
 static method method() → dynamic {
-  core::int? nullableUninitializedNonFinalLocal;
-  core::bool #nullableUninitializedNonFinalLocal#isSet = false;
+  lowered core::int? #nullableUninitializedNonFinalLocal;
+  lowered core::bool #nullableUninitializedNonFinalLocal#isSet = false;
   function #nullableUninitializedNonFinalLocal#get() → core::int?
-    return #nullableUninitializedNonFinalLocal#isSet ?{core::int?} nullableUninitializedNonFinalLocal : throw new _in::LateError::localNI("nullableUninitializedNonFinalLocal");
+    return #nullableUninitializedNonFinalLocal#isSet ?{core::int?} #nullableUninitializedNonFinalLocal : throw new _in::LateError::localNI("nullableUninitializedNonFinalLocal");
   function #nullableUninitializedNonFinalLocal#set(core::int? #t15) → dynamic {
     #nullableUninitializedNonFinalLocal#isSet = true;
-    return nullableUninitializedNonFinalLocal = #t15;
+    return #nullableUninitializedNonFinalLocal = #t15;
   }
-  core::int? nonNullableUninitializedNonFinalLocal;
-  core::bool #nonNullableUninitializedNonFinalLocal#isSet = false;
+  lowered core::int? #nonNullableUninitializedNonFinalLocal;
+  lowered core::bool #nonNullableUninitializedNonFinalLocal#isSet = false;
   function #nonNullableUninitializedNonFinalLocal#get() → core::int
-    return #nonNullableUninitializedNonFinalLocal#isSet ?{core::int} nonNullableUninitializedNonFinalLocal{core::int} : throw new _in::LateError::localNI("nonNullableUninitializedNonFinalLocal");
+    return #nonNullableUninitializedNonFinalLocal#isSet ?{core::int} #nonNullableUninitializedNonFinalLocal{core::int} : throw new _in::LateError::localNI("nonNullableUninitializedNonFinalLocal");
   function #nonNullableUninitializedNonFinalLocal#set(core::int #t16) → dynamic {
     #nonNullableUninitializedNonFinalLocal#isSet = true;
-    return nonNullableUninitializedNonFinalLocal = #t16;
+    return #nonNullableUninitializedNonFinalLocal = #t16;
   }
-  final core::int? nullableUninitializedFinalLocal;
-  core::bool #nullableUninitializedFinalLocal#isSet = false;
+  lowered final core::int? #nullableUninitializedFinalLocal;
+  lowered core::bool #nullableUninitializedFinalLocal#isSet = false;
   function #nullableUninitializedFinalLocal#get() → core::int?
-    return #nullableUninitializedFinalLocal#isSet ?{core::int?} nullableUninitializedFinalLocal : throw new _in::LateError::localNI("nullableUninitializedFinalLocal");
+    return #nullableUninitializedFinalLocal#isSet ?{core::int?} #nullableUninitializedFinalLocal : throw new _in::LateError::localNI("nullableUninitializedFinalLocal");
   function #nullableUninitializedFinalLocal#set(core::int? #t17) → dynamic
     if(#nullableUninitializedFinalLocal#isSet)
       throw new _in::LateError::localAI("nullableUninitializedFinalLocal");
     else {
       #nullableUninitializedFinalLocal#isSet = true;
-      return nullableUninitializedFinalLocal = #t17;
+      return #nullableUninitializedFinalLocal = #t17;
     }
-  final core::int? nonNullableUninitializedFinalLocal;
-  core::bool #nonNullableUninitializedFinalLocal#isSet = false;
+  lowered final core::int? #nonNullableUninitializedFinalLocal;
+  lowered core::bool #nonNullableUninitializedFinalLocal#isSet = false;
   function #nonNullableUninitializedFinalLocal#get() → core::int
-    return #nonNullableUninitializedFinalLocal#isSet ?{core::int} nonNullableUninitializedFinalLocal{core::int} : throw new _in::LateError::localNI("nonNullableUninitializedFinalLocal");
+    return #nonNullableUninitializedFinalLocal#isSet ?{core::int} #nonNullableUninitializedFinalLocal{core::int} : throw new _in::LateError::localNI("nonNullableUninitializedFinalLocal");
   function #nonNullableUninitializedFinalLocal#set(core::int #t18) → dynamic
     if(#nonNullableUninitializedFinalLocal#isSet)
       throw new _in::LateError::localAI("nonNullableUninitializedFinalLocal");
     else {
       #nonNullableUninitializedFinalLocal#isSet = true;
-      return nonNullableUninitializedFinalLocal = #t18;
+      return #nonNullableUninitializedFinalLocal = #t18;
     }
-  core::int? nullableInitializedNonFinalLocal;
-  core::bool #nullableInitializedNonFinalLocal#isSet = false;
+  lowered core::int? #nullableInitializedNonFinalLocal;
+  lowered core::bool #nullableInitializedNonFinalLocal#isSet = false;
   function #nullableInitializedNonFinalLocal#get() → core::int? {
     if(!#nullableInitializedNonFinalLocal#isSet) {
-      nullableInitializedNonFinalLocal = 0;
+      #nullableInitializedNonFinalLocal = 0;
       #nullableInitializedNonFinalLocal#isSet = true;
     }
-    return nullableInitializedNonFinalLocal;
+    return #nullableInitializedNonFinalLocal;
   }
   function #nullableInitializedNonFinalLocal#set(core::int? #t19) → dynamic {
     #nullableInitializedNonFinalLocal#isSet = true;
-    return nullableInitializedNonFinalLocal = #t19;
+    return #nullableInitializedNonFinalLocal = #t19;
   }
-  core::int? nonNullableInitializedNonFinalLocal;
-  core::bool #nonNullableInitializedNonFinalLocal#isSet = false;
+  lowered core::int? #nonNullableInitializedNonFinalLocal;
+  lowered core::bool #nonNullableInitializedNonFinalLocal#isSet = false;
   function #nonNullableInitializedNonFinalLocal#get() → core::int {
     if(!#nonNullableInitializedNonFinalLocal#isSet) {
-      nonNullableInitializedNonFinalLocal = 0;
+      #nonNullableInitializedNonFinalLocal = 0;
       #nonNullableInitializedNonFinalLocal#isSet = true;
     }
-    return nonNullableInitializedNonFinalLocal{core::int};
+    return #nonNullableInitializedNonFinalLocal{core::int};
   }
   function #nonNullableInitializedNonFinalLocal#set(core::int #t20) → dynamic {
     #nonNullableInitializedNonFinalLocal#isSet = true;
-    return nonNullableInitializedNonFinalLocal = #t20;
+    return #nonNullableInitializedNonFinalLocal = #t20;
   }
-  final core::int? nullableInitializedFinalLocal;
-  core::bool #nullableInitializedFinalLocal#isSet = false;
+  lowered final core::int? #nullableInitializedFinalLocal;
+  lowered core::bool #nullableInitializedFinalLocal#isSet = false;
   function #nullableInitializedFinalLocal#get() → core::int? {
     if(!#nullableInitializedFinalLocal#isSet) {
       final core::int? #t21 = 0;
       if(#nullableInitializedFinalLocal#isSet)
         throw new _in::LateError::localADI("nullableInitializedFinalLocal");
-      nullableInitializedFinalLocal = #t21;
+      #nullableInitializedFinalLocal = #t21;
       #nullableInitializedFinalLocal#isSet = true;
     }
-    return nullableInitializedFinalLocal;
+    return #nullableInitializedFinalLocal;
   }
-  final core::int? nonNullableInitializedFinalLocal;
-  core::bool #nonNullableInitializedFinalLocal#isSet = false;
+  lowered final core::int? #nonNullableInitializedFinalLocal;
+  lowered core::bool #nonNullableInitializedFinalLocal#isSet = false;
   function #nonNullableInitializedFinalLocal#get() → core::int {
     if(!#nonNullableInitializedFinalLocal#isSet) {
       final core::int #t22 = 0;
       if(#nonNullableInitializedFinalLocal#isSet)
         throw new _in::LateError::localADI("nonNullableInitializedFinalLocal");
-      nonNullableInitializedFinalLocal = #t22;
+      #nonNullableInitializedFinalLocal = #t22;
       #nonNullableInitializedFinalLocal#isSet = true;
     }
-    return nonNullableInitializedFinalLocal{core::int};
+    return #nonNullableInitializedFinalLocal{core::int};
   }
 }
 static get uninitializedNonFinalTopLevelField() → core::int
diff --git a/pkg/front_end/testcases/late_lowering/skip_late_final_uninitialized_instance_fields/main.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/skip_late_final_uninitialized_instance_fields/main.dart.weak.transformed.expect
index e3cd765..079c847 100644
--- a/pkg/front_end/testcases/late_lowering/skip_late_final_uninitialized_instance_fields/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/skip_late_final_uninitialized_instance_fields/main.dart.weak.transformed.expect
@@ -99,93 +99,93 @@
 static field core::bool _#initializedFinalTopLevelField#isSet = false;
 static method main() → dynamic {}
 static method method() → dynamic {
-  core::int? nullableUninitializedNonFinalLocal;
-  core::bool #nullableUninitializedNonFinalLocal#isSet = false;
+  lowered core::int? #nullableUninitializedNonFinalLocal;
+  lowered core::bool #nullableUninitializedNonFinalLocal#isSet = false;
   function #nullableUninitializedNonFinalLocal#get() → core::int?
-    return #nullableUninitializedNonFinalLocal#isSet ?{core::int?} nullableUninitializedNonFinalLocal : throw new _in::LateError::localNI("nullableUninitializedNonFinalLocal");
+    return #nullableUninitializedNonFinalLocal#isSet ?{core::int?} #nullableUninitializedNonFinalLocal : throw new _in::LateError::localNI("nullableUninitializedNonFinalLocal");
   function #nullableUninitializedNonFinalLocal#set(core::int? #t15) → dynamic {
     #nullableUninitializedNonFinalLocal#isSet = true;
-    return nullableUninitializedNonFinalLocal = #t15;
+    return #nullableUninitializedNonFinalLocal = #t15;
   }
-  core::int? nonNullableUninitializedNonFinalLocal;
-  core::bool #nonNullableUninitializedNonFinalLocal#isSet = false;
+  lowered core::int? #nonNullableUninitializedNonFinalLocal;
+  lowered core::bool #nonNullableUninitializedNonFinalLocal#isSet = false;
   function #nonNullableUninitializedNonFinalLocal#get() → core::int
-    return #nonNullableUninitializedNonFinalLocal#isSet ?{core::int} nonNullableUninitializedNonFinalLocal{core::int} : throw new _in::LateError::localNI("nonNullableUninitializedNonFinalLocal");
+    return #nonNullableUninitializedNonFinalLocal#isSet ?{core::int} #nonNullableUninitializedNonFinalLocal{core::int} : throw new _in::LateError::localNI("nonNullableUninitializedNonFinalLocal");
   function #nonNullableUninitializedNonFinalLocal#set(core::int #t16) → dynamic {
     #nonNullableUninitializedNonFinalLocal#isSet = true;
-    return nonNullableUninitializedNonFinalLocal = #t16;
+    return #nonNullableUninitializedNonFinalLocal = #t16;
   }
-  final core::int? nullableUninitializedFinalLocal;
-  core::bool #nullableUninitializedFinalLocal#isSet = false;
+  lowered final core::int? #nullableUninitializedFinalLocal;
+  lowered core::bool #nullableUninitializedFinalLocal#isSet = false;
   function #nullableUninitializedFinalLocal#get() → core::int?
-    return #nullableUninitializedFinalLocal#isSet ?{core::int?} nullableUninitializedFinalLocal : throw new _in::LateError::localNI("nullableUninitializedFinalLocal");
+    return #nullableUninitializedFinalLocal#isSet ?{core::int?} #nullableUninitializedFinalLocal : throw new _in::LateError::localNI("nullableUninitializedFinalLocal");
   function #nullableUninitializedFinalLocal#set(core::int? #t17) → dynamic
     if(#nullableUninitializedFinalLocal#isSet)
       throw new _in::LateError::localAI("nullableUninitializedFinalLocal");
     else {
       #nullableUninitializedFinalLocal#isSet = true;
-      return nullableUninitializedFinalLocal = #t17;
+      return #nullableUninitializedFinalLocal = #t17;
     }
-  final core::int? nonNullableUninitializedFinalLocal;
-  core::bool #nonNullableUninitializedFinalLocal#isSet = false;
+  lowered final core::int? #nonNullableUninitializedFinalLocal;
+  lowered core::bool #nonNullableUninitializedFinalLocal#isSet = false;
   function #nonNullableUninitializedFinalLocal#get() → core::int
-    return #nonNullableUninitializedFinalLocal#isSet ?{core::int} nonNullableUninitializedFinalLocal{core::int} : throw new _in::LateError::localNI("nonNullableUninitializedFinalLocal");
+    return #nonNullableUninitializedFinalLocal#isSet ?{core::int} #nonNullableUninitializedFinalLocal{core::int} : throw new _in::LateError::localNI("nonNullableUninitializedFinalLocal");
   function #nonNullableUninitializedFinalLocal#set(core::int #t18) → dynamic
     if(#nonNullableUninitializedFinalLocal#isSet)
       throw new _in::LateError::localAI("nonNullableUninitializedFinalLocal");
     else {
       #nonNullableUninitializedFinalLocal#isSet = true;
-      return nonNullableUninitializedFinalLocal = #t18;
+      return #nonNullableUninitializedFinalLocal = #t18;
     }
-  core::int? nullableInitializedNonFinalLocal;
-  core::bool #nullableInitializedNonFinalLocal#isSet = false;
+  lowered core::int? #nullableInitializedNonFinalLocal;
+  lowered core::bool #nullableInitializedNonFinalLocal#isSet = false;
   function #nullableInitializedNonFinalLocal#get() → core::int? {
     if(!#nullableInitializedNonFinalLocal#isSet) {
-      nullableInitializedNonFinalLocal = 0;
+      #nullableInitializedNonFinalLocal = 0;
       #nullableInitializedNonFinalLocal#isSet = true;
     }
-    return nullableInitializedNonFinalLocal;
+    return #nullableInitializedNonFinalLocal;
   }
   function #nullableInitializedNonFinalLocal#set(core::int? #t19) → dynamic {
     #nullableInitializedNonFinalLocal#isSet = true;
-    return nullableInitializedNonFinalLocal = #t19;
+    return #nullableInitializedNonFinalLocal = #t19;
   }
-  core::int? nonNullableInitializedNonFinalLocal;
-  core::bool #nonNullableInitializedNonFinalLocal#isSet = false;
+  lowered core::int? #nonNullableInitializedNonFinalLocal;
+  lowered core::bool #nonNullableInitializedNonFinalLocal#isSet = false;
   function #nonNullableInitializedNonFinalLocal#get() → core::int {
     if(!#nonNullableInitializedNonFinalLocal#isSet) {
-      nonNullableInitializedNonFinalLocal = 0;
+      #nonNullableInitializedNonFinalLocal = 0;
       #nonNullableInitializedNonFinalLocal#isSet = true;
     }
-    return nonNullableInitializedNonFinalLocal{core::int};
+    return #nonNullableInitializedNonFinalLocal{core::int};
   }
   function #nonNullableInitializedNonFinalLocal#set(core::int #t20) → dynamic {
     #nonNullableInitializedNonFinalLocal#isSet = true;
-    return nonNullableInitializedNonFinalLocal = #t20;
+    return #nonNullableInitializedNonFinalLocal = #t20;
   }
-  final core::int? nullableInitializedFinalLocal;
-  core::bool #nullableInitializedFinalLocal#isSet = false;
+  lowered final core::int? #nullableInitializedFinalLocal;
+  lowered core::bool #nullableInitializedFinalLocal#isSet = false;
   function #nullableInitializedFinalLocal#get() → core::int? {
     if(!#nullableInitializedFinalLocal#isSet) {
       final core::int? #t21 = 0;
       if(#nullableInitializedFinalLocal#isSet)
         throw new _in::LateError::localADI("nullableInitializedFinalLocal");
-      nullableInitializedFinalLocal = #t21;
+      #nullableInitializedFinalLocal = #t21;
       #nullableInitializedFinalLocal#isSet = true;
     }
-    return nullableInitializedFinalLocal;
+    return #nullableInitializedFinalLocal;
   }
-  final core::int? nonNullableInitializedFinalLocal;
-  core::bool #nonNullableInitializedFinalLocal#isSet = false;
+  lowered final core::int? #nonNullableInitializedFinalLocal;
+  lowered core::bool #nonNullableInitializedFinalLocal#isSet = false;
   function #nonNullableInitializedFinalLocal#get() → core::int {
     if(!#nonNullableInitializedFinalLocal#isSet) {
       final core::int #t22 = 0;
       if(#nonNullableInitializedFinalLocal#isSet)
         throw new _in::LateError::localADI("nonNullableInitializedFinalLocal");
-      nonNullableInitializedFinalLocal = #t22;
+      #nonNullableInitializedFinalLocal = #t22;
       #nonNullableInitializedFinalLocal#isSet = true;
     }
-    return nonNullableInitializedFinalLocal{core::int};
+    return #nonNullableInitializedFinalLocal{core::int};
   }
 }
 static get uninitializedNonFinalTopLevelField() → core::int
diff --git a/pkg/front_end/testcases/late_lowering_sentinel/late_locals.dart.strong.expect b/pkg/front_end/testcases/late_lowering_sentinel/late_locals.dart.strong.expect
index 9d4ef45..729f30f 100644
--- a/pkg/front_end/testcases/late_lowering_sentinel/late_locals.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering_sentinel/late_locals.dart.strong.expect
@@ -4,52 +4,52 @@
 import "dart:_internal" as _in;
 
 static method test() → dynamic {
-  core::int? nullableTopLevelLocal = _in::createSentinel<core::int?>();
+  lowered core::int? #nullableTopLevelLocal = _in::createSentinel<core::int?>();
   function #nullableTopLevelLocal#get() → core::int?
-    return let final core::int? #t1 = nullableTopLevelLocal in _in::isSentinel(#t1) ?{core::int?} throw new _in::LateError::localNI("nullableTopLevelLocal") : #t1{core::int?};
+    return let final core::int? #t1 = #nullableTopLevelLocal in _in::isSentinel(#t1) ?{core::int?} throw new _in::LateError::localNI("nullableTopLevelLocal") : #t1{core::int?};
   function #nullableTopLevelLocal#set(core::int? #t2) → dynamic
-    return nullableTopLevelLocal = #t2;
-  core::int? nonNullableTopLevelLocal;
+    return #nullableTopLevelLocal = #t2;
+  lowered core::int? #nonNullableTopLevelLocal;
   function #nonNullableTopLevelLocal#get() → core::int
-    return let final core::int? #t3 = nonNullableTopLevelLocal in #t3.==(null) ?{core::int} throw new _in::LateError::localNI("nonNullableTopLevelLocal") : #t3{core::int};
+    return let final core::int? #t3 = #nonNullableTopLevelLocal in #t3.==(null) ?{core::int} throw new _in::LateError::localNI("nonNullableTopLevelLocal") : #t3{core::int};
   function #nonNullableTopLevelLocal#set(core::int #t4) → dynamic
-    return nonNullableTopLevelLocal = #t4;
-  core::int? nullableTopLevelLocalWithInitializer = _in::createSentinel<core::int?>();
+    return #nonNullableTopLevelLocal = #t4;
+  lowered core::int? #nullableTopLevelLocalWithInitializer = _in::createSentinel<core::int?>();
   function #nullableTopLevelLocalWithInitializer#get() → core::int?
-    return let final core::int? #t5 = nullableTopLevelLocalWithInitializer in _in::isSentinel(#t5) ?{core::int?} nullableTopLevelLocalWithInitializer = null : #t5{core::int?};
+    return let final core::int? #t5 = #nullableTopLevelLocalWithInitializer in _in::isSentinel(#t5) ?{core::int?} #nullableTopLevelLocalWithInitializer = null : #t5{core::int?};
   function #nullableTopLevelLocalWithInitializer#set(core::int? #t6) → dynamic
-    return nullableTopLevelLocalWithInitializer = #t6;
-  core::int? nonNullableTopLevelLocalWithInitializer;
+    return #nullableTopLevelLocalWithInitializer = #t6;
+  lowered core::int? #nonNullableTopLevelLocalWithInitializer;
   function #nonNullableTopLevelLocalWithInitializer#get() → core::int
-    return let final core::int? #t7 = nonNullableTopLevelLocalWithInitializer in #t7.==(null) ?{core::int} nonNullableTopLevelLocalWithInitializer = 0 : #t7{core::int};
+    return let final core::int? #t7 = #nonNullableTopLevelLocalWithInitializer in #t7.==(null) ?{core::int} #nonNullableTopLevelLocalWithInitializer = 0 : #t7{core::int};
   function #nonNullableTopLevelLocalWithInitializer#set(core::int #t8) → dynamic
-    return nonNullableTopLevelLocalWithInitializer = #t8;
-  final core::int? nullableFinalTopLevelLocal = _in::createSentinel<core::int?>();
+    return #nonNullableTopLevelLocalWithInitializer = #t8;
+  lowered final core::int? #nullableFinalTopLevelLocal = _in::createSentinel<core::int?>();
   function #nullableFinalTopLevelLocal#get() → core::int?
-    return let final core::int? #t9 = nullableFinalTopLevelLocal in _in::isSentinel(#t9) ?{core::int?} throw new _in::LateError::localNI("nullableFinalTopLevelLocal") : #t9{core::int?};
+    return let final core::int? #t9 = #nullableFinalTopLevelLocal in _in::isSentinel(#t9) ?{core::int?} throw new _in::LateError::localNI("nullableFinalTopLevelLocal") : #t9{core::int?};
   function #nullableFinalTopLevelLocal#set(core::int? #t10) → dynamic
-    if(_in::isSentinel(nullableFinalTopLevelLocal))
-      return nullableFinalTopLevelLocal = #t10;
+    if(_in::isSentinel(#nullableFinalTopLevelLocal))
+      return #nullableFinalTopLevelLocal = #t10;
     else
       throw new _in::LateError::localAI("nullableFinalTopLevelLocal");
-  final core::int? nonNullableFinalTopLevelLocal;
+  lowered final core::int? #nonNullableFinalTopLevelLocal;
   function #nonNullableFinalTopLevelLocal#get() → core::int
-    return let final core::int? #t11 = nonNullableFinalTopLevelLocal in #t11.==(null) ?{core::int} throw new _in::LateError::localNI("nonNullableFinalTopLevelLocal") : #t11{core::int};
+    return let final core::int? #t11 = #nonNullableFinalTopLevelLocal in #t11.==(null) ?{core::int} throw new _in::LateError::localNI("nonNullableFinalTopLevelLocal") : #t11{core::int};
   function #nonNullableFinalTopLevelLocal#set(core::int #t12) → dynamic
-    if(nonNullableFinalTopLevelLocal.==(null))
-      return nonNullableFinalTopLevelLocal = #t12;
+    if(#nonNullableFinalTopLevelLocal.==(null))
+      return #nonNullableFinalTopLevelLocal = #t12;
     else
       throw new _in::LateError::localAI("nonNullableFinalTopLevelLocal");
-  final core::int? nullableFinalTopLevelLocalWithInitializer = _in::createSentinel<core::int?>();
+  lowered final core::int? #nullableFinalTopLevelLocalWithInitializer = _in::createSentinel<core::int?>();
   function #nullableFinalTopLevelLocalWithInitializer#get() → core::int?
-    return let final core::int? #t13 = nullableFinalTopLevelLocalWithInitializer in _in::isSentinel(#t13) ?{core::int?} let final core::int? #t14 = null in _in::isSentinel(nullableFinalTopLevelLocalWithInitializer) ?{core::int?} nullableFinalTopLevelLocalWithInitializer = #t14 : throw new _in::LateError::localADI("nullableFinalTopLevelLocalWithInitializer") : #t13;
-  final core::int? nonNullableFinalTopLevelLocalWithInitializer;
+    return let final core::int? #t13 = #nullableFinalTopLevelLocalWithInitializer in _in::isSentinel(#t13) ?{core::int?} let final core::int? #t14 = null in _in::isSentinel(#nullableFinalTopLevelLocalWithInitializer) ?{core::int?} #nullableFinalTopLevelLocalWithInitializer = #t14 : throw new _in::LateError::localADI("nullableFinalTopLevelLocalWithInitializer") : #t13;
+  lowered final core::int? #nonNullableFinalTopLevelLocalWithInitializer;
   function #nonNullableFinalTopLevelLocalWithInitializer#get() → core::int
-    return let final core::int? #t15 = nonNullableFinalTopLevelLocalWithInitializer in #t15.==(null) ?{core::int} let final core::int #t16 = 0 in nonNullableFinalTopLevelLocalWithInitializer.==(null) ?{core::int} nonNullableFinalTopLevelLocalWithInitializer = #t16 : throw new _in::LateError::localADI("nonNullableFinalTopLevelLocalWithInitializer") : #t15{core::int};
-  Null neverLocal;
+    return let final core::int? #t15 = #nonNullableFinalTopLevelLocalWithInitializer in #t15.==(null) ?{core::int} let final core::int #t16 = 0 in #nonNullableFinalTopLevelLocalWithInitializer.==(null) ?{core::int} #nonNullableFinalTopLevelLocalWithInitializer = #t16 : throw new _in::LateError::localADI("nonNullableFinalTopLevelLocalWithInitializer") : #t15{core::int};
+  lowered Null #neverLocal;
   function #neverLocal#get() → Never
-    return let final Never? #t17 = neverLocal in #t17.==(null) ?{Never} throw new _in::LateError::localNI("neverLocal") : #t17{Never};
+    return let final Never? #t17 = #neverLocal in #t17.==(null) ?{Never} throw new _in::LateError::localNI("neverLocal") : #t17{Never};
   function #neverLocal#set(Never #t18) → dynamic
-    return neverLocal = #t18;
+    return #neverLocal = #t18;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/late_lowering_sentinel/late_locals.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering_sentinel/late_locals.dart.strong.transformed.expect
index 1dfd282..28acc1d 100644
--- a/pkg/front_end/testcases/late_lowering_sentinel/late_locals.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering_sentinel/late_locals.dart.strong.transformed.expect
@@ -4,53 +4,53 @@
 import "dart:_internal" as _in;
 
 static method test() → dynamic {
-  core::int? nullableTopLevelLocal = _in::createSentinel<core::int?>();
+  lowered core::int? #nullableTopLevelLocal = _in::createSentinel<core::int?>();
   function #nullableTopLevelLocal#get() → core::int?
-    return let final core::int? #t1 = nullableTopLevelLocal in _in::isSentinel(#t1) ?{core::int?} throw new _in::LateError::localNI("nullableTopLevelLocal") : #t1{core::int?};
+    return let final core::int? #t1 = #nullableTopLevelLocal in _in::isSentinel(#t1) ?{core::int?} throw new _in::LateError::localNI("nullableTopLevelLocal") : #t1{core::int?};
   function #nullableTopLevelLocal#set(core::int? #t2) → dynamic
-    return nullableTopLevelLocal = #t2;
-  core::int? nonNullableTopLevelLocal;
+    return #nullableTopLevelLocal = #t2;
+  lowered core::int? #nonNullableTopLevelLocal;
   function #nonNullableTopLevelLocal#get() → core::int
-    return let final core::int? #t3 = nonNullableTopLevelLocal in #t3.==(null) ?{core::int} throw new _in::LateError::localNI("nonNullableTopLevelLocal") : #t3{core::int};
+    return let final core::int? #t3 = #nonNullableTopLevelLocal in #t3.==(null) ?{core::int} throw new _in::LateError::localNI("nonNullableTopLevelLocal") : #t3{core::int};
   function #nonNullableTopLevelLocal#set(core::int #t4) → dynamic
-    return nonNullableTopLevelLocal = #t4;
-  core::int? nullableTopLevelLocalWithInitializer = _in::createSentinel<core::int?>();
+    return #nonNullableTopLevelLocal = #t4;
+  lowered core::int? #nullableTopLevelLocalWithInitializer = _in::createSentinel<core::int?>();
   function #nullableTopLevelLocalWithInitializer#get() → core::int?
-    return let final core::int? #t5 = nullableTopLevelLocalWithInitializer in _in::isSentinel(#t5) ?{core::int?} nullableTopLevelLocalWithInitializer = null : #t5{core::int?};
+    return let final core::int? #t5 = #nullableTopLevelLocalWithInitializer in _in::isSentinel(#t5) ?{core::int?} #nullableTopLevelLocalWithInitializer = null : #t5{core::int?};
   function #nullableTopLevelLocalWithInitializer#set(core::int? #t6) → dynamic
-    return nullableTopLevelLocalWithInitializer = #t6;
-  core::int? nonNullableTopLevelLocalWithInitializer;
+    return #nullableTopLevelLocalWithInitializer = #t6;
+  lowered core::int? #nonNullableTopLevelLocalWithInitializer;
   function #nonNullableTopLevelLocalWithInitializer#get() → core::int
-    return let final core::int? #t7 = nonNullableTopLevelLocalWithInitializer in #t7.==(null) ?{core::int} nonNullableTopLevelLocalWithInitializer = 0 : #t7{core::int};
+    return let final core::int? #t7 = #nonNullableTopLevelLocalWithInitializer in #t7.==(null) ?{core::int} #nonNullableTopLevelLocalWithInitializer = 0 : #t7{core::int};
   function #nonNullableTopLevelLocalWithInitializer#set(core::int #t8) → dynamic
-    return nonNullableTopLevelLocalWithInitializer = #t8;
-  final core::int? nullableFinalTopLevelLocal = _in::createSentinel<core::int?>();
+    return #nonNullableTopLevelLocalWithInitializer = #t8;
+  lowered final core::int? #nullableFinalTopLevelLocal = _in::createSentinel<core::int?>();
   function #nullableFinalTopLevelLocal#get() → core::int?
-    return let final core::int? #t9 = nullableFinalTopLevelLocal in _in::isSentinel(#t9) ?{core::int?} throw new _in::LateError::localNI("nullableFinalTopLevelLocal") : #t9{core::int?};
+    return let final core::int? #t9 = #nullableFinalTopLevelLocal in _in::isSentinel(#t9) ?{core::int?} throw new _in::LateError::localNI("nullableFinalTopLevelLocal") : #t9{core::int?};
   function #nullableFinalTopLevelLocal#set(core::int? #t10) → dynamic
-    if(_in::isSentinel(nullableFinalTopLevelLocal))
-      return nullableFinalTopLevelLocal = #t10;
+    if(_in::isSentinel(#nullableFinalTopLevelLocal))
+      return #nullableFinalTopLevelLocal = #t10;
     else
       throw new _in::LateError::localAI("nullableFinalTopLevelLocal");
-  final core::int? nonNullableFinalTopLevelLocal;
+  lowered final core::int? #nonNullableFinalTopLevelLocal;
   function #nonNullableFinalTopLevelLocal#get() → core::int
-    return let final core::int? #t11 = nonNullableFinalTopLevelLocal in #t11.==(null) ?{core::int} throw new _in::LateError::localNI("nonNullableFinalTopLevelLocal") : #t11{core::int};
+    return let final core::int? #t11 = #nonNullableFinalTopLevelLocal in #t11.==(null) ?{core::int} throw new _in::LateError::localNI("nonNullableFinalTopLevelLocal") : #t11{core::int};
   function #nonNullableFinalTopLevelLocal#set(core::int #t12) → dynamic
-    if(nonNullableFinalTopLevelLocal.==(null))
-      return nonNullableFinalTopLevelLocal = #t12;
+    if(#nonNullableFinalTopLevelLocal.==(null))
+      return #nonNullableFinalTopLevelLocal = #t12;
     else
       throw new _in::LateError::localAI("nonNullableFinalTopLevelLocal");
-  final core::int? nullableFinalTopLevelLocalWithInitializer = _in::createSentinel<core::int?>();
+  lowered final core::int? #nullableFinalTopLevelLocalWithInitializer = _in::createSentinel<core::int?>();
   function #nullableFinalTopLevelLocalWithInitializer#get() → core::int?
-    return let final core::int? #t13 = nullableFinalTopLevelLocalWithInitializer in _in::isSentinel(#t13) ?{core::int?} let final core::int? #t14 = null in _in::isSentinel(nullableFinalTopLevelLocalWithInitializer) ?{core::int?} nullableFinalTopLevelLocalWithInitializer = #t14 : throw new _in::LateError::localADI("nullableFinalTopLevelLocalWithInitializer") : #t13;
-  final core::int? nonNullableFinalTopLevelLocalWithInitializer;
+    return let final core::int? #t13 = #nullableFinalTopLevelLocalWithInitializer in _in::isSentinel(#t13) ?{core::int?} let final core::int? #t14 = null in _in::isSentinel(#nullableFinalTopLevelLocalWithInitializer) ?{core::int?} #nullableFinalTopLevelLocalWithInitializer = #t14 : throw new _in::LateError::localADI("nullableFinalTopLevelLocalWithInitializer") : #t13;
+  lowered final core::int? #nonNullableFinalTopLevelLocalWithInitializer;
   function #nonNullableFinalTopLevelLocalWithInitializer#get() → core::int
-    return let final core::int? #t15 = nonNullableFinalTopLevelLocalWithInitializer in #t15.==(null) ?{core::int} let final core::int #t16 = 0 in nonNullableFinalTopLevelLocalWithInitializer.==(null) ?{core::int} nonNullableFinalTopLevelLocalWithInitializer = #t16 : throw new _in::LateError::localADI("nonNullableFinalTopLevelLocalWithInitializer") : #t15{core::int};
-  Null neverLocal;
+    return let final core::int? #t15 = #nonNullableFinalTopLevelLocalWithInitializer in #t15.==(null) ?{core::int} let final core::int #t16 = 0 in #nonNullableFinalTopLevelLocalWithInitializer.==(null) ?{core::int} #nonNullableFinalTopLevelLocalWithInitializer = #t16 : throw new _in::LateError::localADI("nonNullableFinalTopLevelLocalWithInitializer") : #t15{core::int};
+  lowered Null #neverLocal;
   function #neverLocal#get() → Never
-    return let final Never? #t17 = neverLocal in #t17.==(null) ?{Never} throw new _in::LateError::localNI("neverLocal") : #t17{Never};
+    return let final Never? #t17 = #neverLocal in #t17.==(null) ?{Never} throw new _in::LateError::localNI("neverLocal") : #t17{Never};
   function #neverLocal#set(Never #t18) → dynamic
-    return neverLocal = #t18;
+    return #neverLocal = #t18;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/late_lowering_sentinel/late_locals.dart.weak.expect b/pkg/front_end/testcases/late_lowering_sentinel/late_locals.dart.weak.expect
index 9a53f0d..98019ae 100644
--- a/pkg/front_end/testcases/late_lowering_sentinel/late_locals.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering_sentinel/late_locals.dart.weak.expect
@@ -4,52 +4,52 @@
 import "dart:_internal" as _in;
 
 static method test() → dynamic {
-  core::int? nullableTopLevelLocal = _in::createSentinel<core::int?>();
+  lowered core::int? #nullableTopLevelLocal = _in::createSentinel<core::int?>();
   function #nullableTopLevelLocal#get() → core::int?
-    return let final core::int? #t1 = nullableTopLevelLocal in _in::isSentinel(#t1) ?{core::int?} throw new _in::LateError::localNI("nullableTopLevelLocal") : #t1{core::int?};
+    return let final core::int? #t1 = #nullableTopLevelLocal in _in::isSentinel(#t1) ?{core::int?} throw new _in::LateError::localNI("nullableTopLevelLocal") : #t1{core::int?};
   function #nullableTopLevelLocal#set(core::int? #t2) → dynamic
-    return nullableTopLevelLocal = #t2;
-  core::int? nonNullableTopLevelLocal = _in::createSentinel<core::int>();
+    return #nullableTopLevelLocal = #t2;
+  lowered core::int? #nonNullableTopLevelLocal = _in::createSentinel<core::int>();
   function #nonNullableTopLevelLocal#get() → core::int
-    return let final core::int? #t3 = nonNullableTopLevelLocal in _in::isSentinel(#t3) ?{core::int} throw new _in::LateError::localNI("nonNullableTopLevelLocal") : #t3{core::int};
+    return let final core::int? #t3 = #nonNullableTopLevelLocal in _in::isSentinel(#t3) ?{core::int} throw new _in::LateError::localNI("nonNullableTopLevelLocal") : #t3{core::int};
   function #nonNullableTopLevelLocal#set(core::int #t4) → dynamic
-    return nonNullableTopLevelLocal = #t4;
-  core::int? nullableTopLevelLocalWithInitializer = _in::createSentinel<core::int?>();
+    return #nonNullableTopLevelLocal = #t4;
+  lowered core::int? #nullableTopLevelLocalWithInitializer = _in::createSentinel<core::int?>();
   function #nullableTopLevelLocalWithInitializer#get() → core::int?
-    return let final core::int? #t5 = nullableTopLevelLocalWithInitializer in _in::isSentinel(#t5) ?{core::int?} nullableTopLevelLocalWithInitializer = null : #t5{core::int?};
+    return let final core::int? #t5 = #nullableTopLevelLocalWithInitializer in _in::isSentinel(#t5) ?{core::int?} #nullableTopLevelLocalWithInitializer = null : #t5{core::int?};
   function #nullableTopLevelLocalWithInitializer#set(core::int? #t6) → dynamic
-    return nullableTopLevelLocalWithInitializer = #t6;
-  core::int? nonNullableTopLevelLocalWithInitializer = _in::createSentinel<core::int>();
+    return #nullableTopLevelLocalWithInitializer = #t6;
+  lowered core::int? #nonNullableTopLevelLocalWithInitializer = _in::createSentinel<core::int>();
   function #nonNullableTopLevelLocalWithInitializer#get() → core::int
-    return let final core::int? #t7 = nonNullableTopLevelLocalWithInitializer in _in::isSentinel(#t7) ?{core::int} nonNullableTopLevelLocalWithInitializer = 0 : #t7{core::int};
+    return let final core::int? #t7 = #nonNullableTopLevelLocalWithInitializer in _in::isSentinel(#t7) ?{core::int} #nonNullableTopLevelLocalWithInitializer = 0 : #t7{core::int};
   function #nonNullableTopLevelLocalWithInitializer#set(core::int #t8) → dynamic
-    return nonNullableTopLevelLocalWithInitializer = #t8;
-  final core::int? nullableFinalTopLevelLocal = _in::createSentinel<core::int?>();
+    return #nonNullableTopLevelLocalWithInitializer = #t8;
+  lowered final core::int? #nullableFinalTopLevelLocal = _in::createSentinel<core::int?>();
   function #nullableFinalTopLevelLocal#get() → core::int?
-    return let final core::int? #t9 = nullableFinalTopLevelLocal in _in::isSentinel(#t9) ?{core::int?} throw new _in::LateError::localNI("nullableFinalTopLevelLocal") : #t9{core::int?};
+    return let final core::int? #t9 = #nullableFinalTopLevelLocal in _in::isSentinel(#t9) ?{core::int?} throw new _in::LateError::localNI("nullableFinalTopLevelLocal") : #t9{core::int?};
   function #nullableFinalTopLevelLocal#set(core::int? #t10) → dynamic
-    if(_in::isSentinel(nullableFinalTopLevelLocal))
-      return nullableFinalTopLevelLocal = #t10;
+    if(_in::isSentinel(#nullableFinalTopLevelLocal))
+      return #nullableFinalTopLevelLocal = #t10;
     else
       throw new _in::LateError::localAI("nullableFinalTopLevelLocal");
-  final core::int? nonNullableFinalTopLevelLocal = _in::createSentinel<core::int>();
+  lowered final core::int? #nonNullableFinalTopLevelLocal = _in::createSentinel<core::int>();
   function #nonNullableFinalTopLevelLocal#get() → core::int
-    return let final core::int? #t11 = nonNullableFinalTopLevelLocal in _in::isSentinel(#t11) ?{core::int} throw new _in::LateError::localNI("nonNullableFinalTopLevelLocal") : #t11{core::int};
+    return let final core::int? #t11 = #nonNullableFinalTopLevelLocal in _in::isSentinel(#t11) ?{core::int} throw new _in::LateError::localNI("nonNullableFinalTopLevelLocal") : #t11{core::int};
   function #nonNullableFinalTopLevelLocal#set(core::int #t12) → dynamic
-    if(_in::isSentinel(nonNullableFinalTopLevelLocal))
-      return nonNullableFinalTopLevelLocal = #t12;
+    if(_in::isSentinel(#nonNullableFinalTopLevelLocal))
+      return #nonNullableFinalTopLevelLocal = #t12;
     else
       throw new _in::LateError::localAI("nonNullableFinalTopLevelLocal");
-  final core::int? nullableFinalTopLevelLocalWithInitializer = _in::createSentinel<core::int?>();
+  lowered final core::int? #nullableFinalTopLevelLocalWithInitializer = _in::createSentinel<core::int?>();
   function #nullableFinalTopLevelLocalWithInitializer#get() → core::int?
-    return let final core::int? #t13 = nullableFinalTopLevelLocalWithInitializer in _in::isSentinel(#t13) ?{core::int?} let final core::int? #t14 = null in _in::isSentinel(nullableFinalTopLevelLocalWithInitializer) ?{core::int?} nullableFinalTopLevelLocalWithInitializer = #t14 : throw new _in::LateError::localADI("nullableFinalTopLevelLocalWithInitializer") : #t13;
-  final core::int? nonNullableFinalTopLevelLocalWithInitializer = _in::createSentinel<core::int>();
+    return let final core::int? #t13 = #nullableFinalTopLevelLocalWithInitializer in _in::isSentinel(#t13) ?{core::int?} let final core::int? #t14 = null in _in::isSentinel(#nullableFinalTopLevelLocalWithInitializer) ?{core::int?} #nullableFinalTopLevelLocalWithInitializer = #t14 : throw new _in::LateError::localADI("nullableFinalTopLevelLocalWithInitializer") : #t13;
+  lowered final core::int? #nonNullableFinalTopLevelLocalWithInitializer = _in::createSentinel<core::int>();
   function #nonNullableFinalTopLevelLocalWithInitializer#get() → core::int
-    return let final core::int #t15 = nonNullableFinalTopLevelLocalWithInitializer in _in::isSentinel(#t15) ?{core::int} let final core::int #t16 = 0 in _in::isSentinel(nonNullableFinalTopLevelLocalWithInitializer) ?{core::int} nonNullableFinalTopLevelLocalWithInitializer = #t16 : throw new _in::LateError::localADI("nonNullableFinalTopLevelLocalWithInitializer") : #t15;
-  Null neverLocal = _in::createSentinel<Never>();
+    return let final core::int #t15 = #nonNullableFinalTopLevelLocalWithInitializer in _in::isSentinel(#t15) ?{core::int} let final core::int #t16 = 0 in _in::isSentinel(#nonNullableFinalTopLevelLocalWithInitializer) ?{core::int} #nonNullableFinalTopLevelLocalWithInitializer = #t16 : throw new _in::LateError::localADI("nonNullableFinalTopLevelLocalWithInitializer") : #t15;
+  lowered Null #neverLocal = _in::createSentinel<Never>();
   function #neverLocal#get() → Never
-    return let final Never? #t17 = neverLocal in _in::isSentinel(#t17) ?{Never} throw new _in::LateError::localNI("neverLocal") : #t17{Never};
+    return let final Never? #t17 = #neverLocal in _in::isSentinel(#t17) ?{Never} throw new _in::LateError::localNI("neverLocal") : #t17{Never};
   function #neverLocal#set(Never #t18) → dynamic
-    return neverLocal = #t18;
+    return #neverLocal = #t18;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/late_lowering_sentinel/late_locals.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering_sentinel/late_locals.dart.weak.transformed.expect
index b4188db..01ccc85 100644
--- a/pkg/front_end/testcases/late_lowering_sentinel/late_locals.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering_sentinel/late_locals.dart.weak.transformed.expect
@@ -4,53 +4,53 @@
 import "dart:_internal" as _in;
 
 static method test() → dynamic {
-  core::int? nullableTopLevelLocal = _in::createSentinel<core::int?>();
+  lowered core::int? #nullableTopLevelLocal = _in::createSentinel<core::int?>();
   function #nullableTopLevelLocal#get() → core::int?
-    return let final core::int? #t1 = nullableTopLevelLocal in _in::isSentinel(#t1) ?{core::int?} throw new _in::LateError::localNI("nullableTopLevelLocal") : #t1{core::int?};
+    return let final core::int? #t1 = #nullableTopLevelLocal in _in::isSentinel(#t1) ?{core::int?} throw new _in::LateError::localNI("nullableTopLevelLocal") : #t1{core::int?};
   function #nullableTopLevelLocal#set(core::int? #t2) → dynamic
-    return nullableTopLevelLocal = #t2;
-  core::int? nonNullableTopLevelLocal = _in::createSentinel<core::int>();
+    return #nullableTopLevelLocal = #t2;
+  lowered core::int? #nonNullableTopLevelLocal = _in::createSentinel<core::int>();
   function #nonNullableTopLevelLocal#get() → core::int
-    return let final core::int? #t3 = nonNullableTopLevelLocal in _in::isSentinel(#t3) ?{core::int} throw new _in::LateError::localNI("nonNullableTopLevelLocal") : #t3{core::int};
+    return let final core::int? #t3 = #nonNullableTopLevelLocal in _in::isSentinel(#t3) ?{core::int} throw new _in::LateError::localNI("nonNullableTopLevelLocal") : #t3{core::int};
   function #nonNullableTopLevelLocal#set(core::int #t4) → dynamic
-    return nonNullableTopLevelLocal = #t4;
-  core::int? nullableTopLevelLocalWithInitializer = _in::createSentinel<core::int?>();
+    return #nonNullableTopLevelLocal = #t4;
+  lowered core::int? #nullableTopLevelLocalWithInitializer = _in::createSentinel<core::int?>();
   function #nullableTopLevelLocalWithInitializer#get() → core::int?
-    return let final core::int? #t5 = nullableTopLevelLocalWithInitializer in _in::isSentinel(#t5) ?{core::int?} nullableTopLevelLocalWithInitializer = null : #t5{core::int?};
+    return let final core::int? #t5 = #nullableTopLevelLocalWithInitializer in _in::isSentinel(#t5) ?{core::int?} #nullableTopLevelLocalWithInitializer = null : #t5{core::int?};
   function #nullableTopLevelLocalWithInitializer#set(core::int? #t6) → dynamic
-    return nullableTopLevelLocalWithInitializer = #t6;
-  core::int? nonNullableTopLevelLocalWithInitializer = _in::createSentinel<core::int>();
+    return #nullableTopLevelLocalWithInitializer = #t6;
+  lowered core::int? #nonNullableTopLevelLocalWithInitializer = _in::createSentinel<core::int>();
   function #nonNullableTopLevelLocalWithInitializer#get() → core::int
-    return let final core::int? #t7 = nonNullableTopLevelLocalWithInitializer in _in::isSentinel(#t7) ?{core::int} nonNullableTopLevelLocalWithInitializer = 0 : #t7{core::int};
+    return let final core::int? #t7 = #nonNullableTopLevelLocalWithInitializer in _in::isSentinel(#t7) ?{core::int} #nonNullableTopLevelLocalWithInitializer = 0 : #t7{core::int};
   function #nonNullableTopLevelLocalWithInitializer#set(core::int #t8) → dynamic
-    return nonNullableTopLevelLocalWithInitializer = #t8;
-  final core::int? nullableFinalTopLevelLocal = _in::createSentinel<core::int?>();
+    return #nonNullableTopLevelLocalWithInitializer = #t8;
+  lowered final core::int? #nullableFinalTopLevelLocal = _in::createSentinel<core::int?>();
   function #nullableFinalTopLevelLocal#get() → core::int?
-    return let final core::int? #t9 = nullableFinalTopLevelLocal in _in::isSentinel(#t9) ?{core::int?} throw new _in::LateError::localNI("nullableFinalTopLevelLocal") : #t9{core::int?};
+    return let final core::int? #t9 = #nullableFinalTopLevelLocal in _in::isSentinel(#t9) ?{core::int?} throw new _in::LateError::localNI("nullableFinalTopLevelLocal") : #t9{core::int?};
   function #nullableFinalTopLevelLocal#set(core::int? #t10) → dynamic
-    if(_in::isSentinel(nullableFinalTopLevelLocal))
-      return nullableFinalTopLevelLocal = #t10;
+    if(_in::isSentinel(#nullableFinalTopLevelLocal))
+      return #nullableFinalTopLevelLocal = #t10;
     else
       throw new _in::LateError::localAI("nullableFinalTopLevelLocal");
-  final core::int? nonNullableFinalTopLevelLocal = _in::createSentinel<core::int>();
+  lowered final core::int? #nonNullableFinalTopLevelLocal = _in::createSentinel<core::int>();
   function #nonNullableFinalTopLevelLocal#get() → core::int
-    return let final core::int? #t11 = nonNullableFinalTopLevelLocal in _in::isSentinel(#t11) ?{core::int} throw new _in::LateError::localNI("nonNullableFinalTopLevelLocal") : #t11{core::int};
+    return let final core::int? #t11 = #nonNullableFinalTopLevelLocal in _in::isSentinel(#t11) ?{core::int} throw new _in::LateError::localNI("nonNullableFinalTopLevelLocal") : #t11{core::int};
   function #nonNullableFinalTopLevelLocal#set(core::int #t12) → dynamic
-    if(_in::isSentinel(nonNullableFinalTopLevelLocal))
-      return nonNullableFinalTopLevelLocal = #t12;
+    if(_in::isSentinel(#nonNullableFinalTopLevelLocal))
+      return #nonNullableFinalTopLevelLocal = #t12;
     else
       throw new _in::LateError::localAI("nonNullableFinalTopLevelLocal");
-  final core::int? nullableFinalTopLevelLocalWithInitializer = _in::createSentinel<core::int?>();
+  lowered final core::int? #nullableFinalTopLevelLocalWithInitializer = _in::createSentinel<core::int?>();
   function #nullableFinalTopLevelLocalWithInitializer#get() → core::int?
-    return let final core::int? #t13 = nullableFinalTopLevelLocalWithInitializer in _in::isSentinel(#t13) ?{core::int?} let final core::int? #t14 = null in _in::isSentinel(nullableFinalTopLevelLocalWithInitializer) ?{core::int?} nullableFinalTopLevelLocalWithInitializer = #t14 : throw new _in::LateError::localADI("nullableFinalTopLevelLocalWithInitializer") : #t13;
-  final core::int? nonNullableFinalTopLevelLocalWithInitializer = _in::createSentinel<core::int>();
+    return let final core::int? #t13 = #nullableFinalTopLevelLocalWithInitializer in _in::isSentinel(#t13) ?{core::int?} let final core::int? #t14 = null in _in::isSentinel(#nullableFinalTopLevelLocalWithInitializer) ?{core::int?} #nullableFinalTopLevelLocalWithInitializer = #t14 : throw new _in::LateError::localADI("nullableFinalTopLevelLocalWithInitializer") : #t13;
+  lowered final core::int? #nonNullableFinalTopLevelLocalWithInitializer = _in::createSentinel<core::int>();
   function #nonNullableFinalTopLevelLocalWithInitializer#get() → core::int
-    return let final core::int #t15 = nonNullableFinalTopLevelLocalWithInitializer in _in::isSentinel(#t15) ?{core::int} let final core::int #t16 = 0 in _in::isSentinel(nonNullableFinalTopLevelLocalWithInitializer) ?{core::int} nonNullableFinalTopLevelLocalWithInitializer = #t16 : throw new _in::LateError::localADI("nonNullableFinalTopLevelLocalWithInitializer") : #t15;
-  Null neverLocal = _in::createSentinel<Never>();
+    return let final core::int #t15 = #nonNullableFinalTopLevelLocalWithInitializer in _in::isSentinel(#t15) ?{core::int} let final core::int #t16 = 0 in _in::isSentinel(#nonNullableFinalTopLevelLocalWithInitializer) ?{core::int} #nonNullableFinalTopLevelLocalWithInitializer = #t16 : throw new _in::LateError::localADI("nonNullableFinalTopLevelLocalWithInitializer") : #t15;
+  lowered Null #neverLocal = _in::createSentinel<Never>();
   function #neverLocal#get() → Never
-    return let final Never? #t17 = neverLocal in _in::isSentinel(#t17) ?{Never} throw new _in::LateError::localNI("neverLocal") : #t17{Never};
+    return let final Never? #t17 = #neverLocal in _in::isSentinel(#t17) ?{Never} throw new _in::LateError::localNI("neverLocal") : #t17{Never};
   function #neverLocal#set(Never #t18) → dynamic
-    return neverLocal = #t18;
+    return #neverLocal = #t18;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/nnbd/extension_bounds.dart.outline.expect b/pkg/front_end/testcases/nnbd/extension_bounds.dart.outline.expect
index 5a8fb0d..6cec804 100644
--- a/pkg/front_end/testcases/nnbd/extension_bounds.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/extension_bounds.dart.outline.expect
@@ -62,105 +62,105 @@
   method method5 = self::Extension5|method5;
   tearoff method5 = self::Extension5|get#method5;
 }
-static method Extension1|method1<T extends core::Object = core::Object, S extends core::Object = core::Object>(final self::Extension1|method1::T #this) → dynamic
+static method Extension1|method1<T extends core::Object = core::Object, S extends core::Object = core::Object>(lowered final self::Extension1|method1::T #this) → dynamic
   ;
-static method Extension1|get#method1<T extends core::Object = core::Object>(final self::Extension1|get#method1::T #this) → <S extends core::Object = core::Object>() → dynamic
+static method Extension1|get#method1<T extends core::Object = core::Object>(lowered final self::Extension1|get#method1::T #this) → <S extends core::Object = core::Object>() → dynamic
   return <S extends core::Object = core::Object>() → dynamic => self::Extension1|method1<self::Extension1|get#method1::T, S>(#this);
-static method Extension1|method2<T extends core::Object = core::Object, S extends core::String = core::String>(final self::Extension1|method2::T #this) → dynamic
+static method Extension1|method2<T extends core::Object = core::Object, S extends core::String = core::String>(lowered final self::Extension1|method2::T #this) → dynamic
   ;
-static method Extension1|get#method2<T extends core::Object = core::Object>(final self::Extension1|get#method2::T #this) → <S extends core::String = core::String>() → dynamic
+static method Extension1|get#method2<T extends core::Object = core::Object>(lowered final self::Extension1|get#method2::T #this) → <S extends core::String = core::String>() → dynamic
   return <S extends core::String = core::String>() → dynamic => self::Extension1|method2<self::Extension1|get#method2::T, S>(#this);
-static method Extension1|method3<T extends core::Object = core::Object, S extends dynamic = dynamic>(final self::Extension1|method3::T #this) → dynamic
+static method Extension1|method3<T extends core::Object = core::Object, S extends dynamic = dynamic>(lowered final self::Extension1|method3::T #this) → dynamic
   ;
-static method Extension1|get#method3<T extends core::Object = core::Object>(final self::Extension1|get#method3::T #this) → <S extends dynamic = dynamic>() → dynamic
+static method Extension1|get#method3<T extends core::Object = core::Object>(lowered final self::Extension1|get#method3::T #this) → <S extends dynamic = dynamic>() → dynamic
   return <S extends dynamic = dynamic>() → dynamic => self::Extension1|method3<self::Extension1|get#method3::T, S%>(#this);
-static method Extension1|method4<T extends core::Object = core::Object, S extends core::Object? = dynamic>(final self::Extension1|method4::T #this) → dynamic
+static method Extension1|method4<T extends core::Object = core::Object, S extends core::Object? = dynamic>(lowered final self::Extension1|method4::T #this) → dynamic
   ;
-static method Extension1|get#method4<T extends core::Object = core::Object>(final self::Extension1|get#method4::T #this) → <S extends core::Object? = dynamic>() → dynamic
+static method Extension1|get#method4<T extends core::Object = core::Object>(lowered final self::Extension1|get#method4::T #this) → <S extends core::Object? = dynamic>() → dynamic
   return <S extends core::Object? = dynamic>() → dynamic => self::Extension1|method4<self::Extension1|get#method4::T, S%>(#this);
-static method Extension1|method5<T extends core::Object = core::Object, S extends core::Object? = core::Object?>(final self::Extension1|method5::T #this) → dynamic
+static method Extension1|method5<T extends core::Object = core::Object, S extends core::Object? = core::Object?>(lowered final self::Extension1|method5::T #this) → dynamic
   ;
-static method Extension1|get#method5<T extends core::Object = core::Object>(final self::Extension1|get#method5::T #this) → <S extends core::Object? = core::Object?>() → dynamic
+static method Extension1|get#method5<T extends core::Object = core::Object>(lowered final self::Extension1|get#method5::T #this) → <S extends core::Object? = core::Object?>() → dynamic
   return <S extends core::Object? = core::Object?>() → dynamic => self::Extension1|method5<self::Extension1|get#method5::T, S%>(#this);
-static method Extension2|method1<T extends core::String = core::String, S extends core::Object = core::Object>(final self::Extension2|method1::T #this) → dynamic
+static method Extension2|method1<T extends core::String = core::String, S extends core::Object = core::Object>(lowered final self::Extension2|method1::T #this) → dynamic
   ;
-static method Extension2|get#method1<T extends core::String = core::String>(final self::Extension2|get#method1::T #this) → <S extends core::Object = core::Object>() → dynamic
+static method Extension2|get#method1<T extends core::String = core::String>(lowered final self::Extension2|get#method1::T #this) → <S extends core::Object = core::Object>() → dynamic
   return <S extends core::Object = core::Object>() → dynamic => self::Extension2|method1<self::Extension2|get#method1::T, S>(#this);
-static method Extension2|method2<T extends core::String = core::String, S extends core::String = core::String>(final self::Extension2|method2::T #this) → dynamic
+static method Extension2|method2<T extends core::String = core::String, S extends core::String = core::String>(lowered final self::Extension2|method2::T #this) → dynamic
   ;
-static method Extension2|get#method2<T extends core::String = core::String>(final self::Extension2|get#method2::T #this) → <S extends core::String = core::String>() → dynamic
+static method Extension2|get#method2<T extends core::String = core::String>(lowered final self::Extension2|get#method2::T #this) → <S extends core::String = core::String>() → dynamic
   return <S extends core::String = core::String>() → dynamic => self::Extension2|method2<self::Extension2|get#method2::T, S>(#this);
-static method Extension2|method3<T extends core::String = core::String, S extends dynamic = dynamic>(final self::Extension2|method3::T #this) → dynamic
+static method Extension2|method3<T extends core::String = core::String, S extends dynamic = dynamic>(lowered final self::Extension2|method3::T #this) → dynamic
   ;
-static method Extension2|get#method3<T extends core::String = core::String>(final self::Extension2|get#method3::T #this) → <S extends dynamic = dynamic>() → dynamic
+static method Extension2|get#method3<T extends core::String = core::String>(lowered final self::Extension2|get#method3::T #this) → <S extends dynamic = dynamic>() → dynamic
   return <S extends dynamic = dynamic>() → dynamic => self::Extension2|method3<self::Extension2|get#method3::T, S%>(#this);
-static method Extension2|get#method4<T extends core::String = core::String>(final self::Extension2|get#method4::T #this) → <S extends core::Object? = dynamic>() → dynamic
+static method Extension2|get#method4<T extends core::String = core::String>(lowered final self::Extension2|get#method4::T #this) → <S extends core::Object? = dynamic>() → dynamic
   return <S extends core::Object? = dynamic>() → dynamic => self::Extension2|method4<self::Extension2|get#method4::T, S%>(#this);
-static method Extension2|method4<T extends core::String = core::String, S extends core::Object? = dynamic>(final self::Extension2|method4::T #this) → dynamic
+static method Extension2|method4<T extends core::String = core::String, S extends core::Object? = dynamic>(lowered final self::Extension2|method4::T #this) → dynamic
   ;
-static method Extension2|method5<T extends core::String = core::String, S extends core::Object? = core::Object?>(final self::Extension2|method5::T #this) → dynamic
+static method Extension2|method5<T extends core::String = core::String, S extends core::Object? = core::Object?>(lowered final self::Extension2|method5::T #this) → dynamic
   ;
-static method Extension2|get#method5<T extends core::String = core::String>(final self::Extension2|get#method5::T #this) → <S extends core::Object? = core::Object?>() → dynamic
+static method Extension2|get#method5<T extends core::String = core::String>(lowered final self::Extension2|get#method5::T #this) → <S extends core::Object? = core::Object?>() → dynamic
   return <S extends core::Object? = core::Object?>() → dynamic => self::Extension2|method5<self::Extension2|get#method5::T, S%>(#this);
-static method Extension3|method1<T extends dynamic = dynamic, S extends core::Object = core::Object>(final self::Extension3|method1::T% #this) → dynamic
+static method Extension3|method1<T extends dynamic = dynamic, S extends core::Object = core::Object>(lowered final self::Extension3|method1::T% #this) → dynamic
   ;
-static method Extension3|get#method1<T extends dynamic = dynamic>(final self::Extension3|get#method1::T% #this) → <S extends core::Object = core::Object>() → dynamic
+static method Extension3|get#method1<T extends dynamic = dynamic>(lowered final self::Extension3|get#method1::T% #this) → <S extends core::Object = core::Object>() → dynamic
   return <S extends core::Object = core::Object>() → dynamic => self::Extension3|method1<self::Extension3|get#method1::T%, S>(#this);
-static method Extension3|method2<T extends dynamic = dynamic, S extends core::String = core::String>(final self::Extension3|method2::T% #this) → dynamic
+static method Extension3|method2<T extends dynamic = dynamic, S extends core::String = core::String>(lowered final self::Extension3|method2::T% #this) → dynamic
   ;
-static method Extension3|get#method2<T extends dynamic = dynamic>(final self::Extension3|get#method2::T% #this) → <S extends core::String = core::String>() → dynamic
+static method Extension3|get#method2<T extends dynamic = dynamic>(lowered final self::Extension3|get#method2::T% #this) → <S extends core::String = core::String>() → dynamic
   return <S extends core::String = core::String>() → dynamic => self::Extension3|method2<self::Extension3|get#method2::T%, S>(#this);
-static method Extension3|method3<T extends dynamic = dynamic, S extends dynamic = dynamic>(final self::Extension3|method3::T% #this) → dynamic
+static method Extension3|method3<T extends dynamic = dynamic, S extends dynamic = dynamic>(lowered final self::Extension3|method3::T% #this) → dynamic
   ;
-static method Extension3|get#method3<T extends dynamic = dynamic>(final self::Extension3|get#method3::T% #this) → <S extends dynamic = dynamic>() → dynamic
+static method Extension3|get#method3<T extends dynamic = dynamic>(lowered final self::Extension3|get#method3::T% #this) → <S extends dynamic = dynamic>() → dynamic
   return <S extends dynamic = dynamic>() → dynamic => self::Extension3|method3<self::Extension3|get#method3::T%, S%>(#this);
-static method Extension3|method4<T extends dynamic = dynamic, S extends core::Object? = dynamic>(final self::Extension3|method4::T% #this) → dynamic
+static method Extension3|method4<T extends dynamic = dynamic, S extends core::Object? = dynamic>(lowered final self::Extension3|method4::T% #this) → dynamic
   ;
-static method Extension3|get#method4<T extends dynamic = dynamic>(final self::Extension3|get#method4::T% #this) → <S extends core::Object? = dynamic>() → dynamic
+static method Extension3|get#method4<T extends dynamic = dynamic>(lowered final self::Extension3|get#method4::T% #this) → <S extends core::Object? = dynamic>() → dynamic
   return <S extends core::Object? = dynamic>() → dynamic => self::Extension3|method4<self::Extension3|get#method4::T%, S%>(#this);
-static method Extension3|method5<T extends dynamic = dynamic, S extends core::Object? = core::Object?>(final self::Extension3|method5::T% #this) → dynamic
+static method Extension3|method5<T extends dynamic = dynamic, S extends core::Object? = core::Object?>(lowered final self::Extension3|method5::T% #this) → dynamic
   ;
-static method Extension3|get#method5<T extends dynamic = dynamic>(final self::Extension3|get#method5::T% #this) → <S extends core::Object? = core::Object?>() → dynamic
+static method Extension3|get#method5<T extends dynamic = dynamic>(lowered final self::Extension3|get#method5::T% #this) → <S extends core::Object? = core::Object?>() → dynamic
   return <S extends core::Object? = core::Object?>() → dynamic => self::Extension3|method5<self::Extension3|get#method5::T%, S%>(#this);
-static method Extension4|method1<T extends core::Object? = dynamic, S extends core::Object = core::Object>(final self::Extension4|method1::T% #this) → dynamic
+static method Extension4|method1<T extends core::Object? = dynamic, S extends core::Object = core::Object>(lowered final self::Extension4|method1::T% #this) → dynamic
   ;
-static method Extension4|get#method1<T extends core::Object? = dynamic>(final self::Extension4|get#method1::T% #this) → <S extends core::Object = core::Object>() → dynamic
+static method Extension4|get#method1<T extends core::Object? = dynamic>(lowered final self::Extension4|get#method1::T% #this) → <S extends core::Object = core::Object>() → dynamic
   return <S extends core::Object = core::Object>() → dynamic => self::Extension4|method1<self::Extension4|get#method1::T%, S>(#this);
-static method Extension4|method2<T extends core::Object? = dynamic, S extends core::String = core::String>(final self::Extension4|method2::T% #this) → dynamic
+static method Extension4|method2<T extends core::Object? = dynamic, S extends core::String = core::String>(lowered final self::Extension4|method2::T% #this) → dynamic
   ;
-static method Extension4|get#method2<T extends core::Object? = dynamic>(final self::Extension4|get#method2::T% #this) → <S extends core::String = core::String>() → dynamic
+static method Extension4|get#method2<T extends core::Object? = dynamic>(lowered final self::Extension4|get#method2::T% #this) → <S extends core::String = core::String>() → dynamic
   return <S extends core::String = core::String>() → dynamic => self::Extension4|method2<self::Extension4|get#method2::T%, S>(#this);
-static method Extension4|method3<T extends core::Object? = dynamic, S extends dynamic = dynamic>(final self::Extension4|method3::T% #this) → dynamic
+static method Extension4|method3<T extends core::Object? = dynamic, S extends dynamic = dynamic>(lowered final self::Extension4|method3::T% #this) → dynamic
   ;
-static method Extension4|get#method3<T extends core::Object? = dynamic>(final self::Extension4|get#method3::T% #this) → <S extends dynamic = dynamic>() → dynamic
+static method Extension4|get#method3<T extends core::Object? = dynamic>(lowered final self::Extension4|get#method3::T% #this) → <S extends dynamic = dynamic>() → dynamic
   return <S extends dynamic = dynamic>() → dynamic => self::Extension4|method3<self::Extension4|get#method3::T%, S%>(#this);
-static method Extension4|method4<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(final self::Extension4|method4::T% #this) → dynamic
+static method Extension4|method4<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(lowered final self::Extension4|method4::T% #this) → dynamic
   ;
-static method Extension4|get#method4<T extends core::Object? = dynamic>(final self::Extension4|get#method4::T% #this) → <S extends core::Object? = dynamic>() → dynamic
+static method Extension4|get#method4<T extends core::Object? = dynamic>(lowered final self::Extension4|get#method4::T% #this) → <S extends core::Object? = dynamic>() → dynamic
   return <S extends core::Object? = dynamic>() → dynamic => self::Extension4|method4<self::Extension4|get#method4::T%, S%>(#this);
-static method Extension4|method5<T extends core::Object? = dynamic, S extends core::Object? = core::Object?>(final self::Extension4|method5::T% #this) → dynamic
+static method Extension4|method5<T extends core::Object? = dynamic, S extends core::Object? = core::Object?>(lowered final self::Extension4|method5::T% #this) → dynamic
   ;
-static method Extension4|get#method5<T extends core::Object? = dynamic>(final self::Extension4|get#method5::T% #this) → <S extends core::Object? = core::Object?>() → dynamic
+static method Extension4|get#method5<T extends core::Object? = dynamic>(lowered final self::Extension4|get#method5::T% #this) → <S extends core::Object? = core::Object?>() → dynamic
   return <S extends core::Object? = core::Object?>() → dynamic => self::Extension4|method5<self::Extension4|get#method5::T%, S%>(#this);
-static method Extension5|method1<T extends core::Object? = core::Object?, S extends core::Object = core::Object>(final self::Extension5|method1::T% #this) → dynamic
+static method Extension5|method1<T extends core::Object? = core::Object?, S extends core::Object = core::Object>(lowered final self::Extension5|method1::T% #this) → dynamic
   ;
-static method Extension5|get#method1<T extends core::Object? = core::Object?>(final self::Extension5|get#method1::T% #this) → <S extends core::Object = core::Object>() → dynamic
+static method Extension5|get#method1<T extends core::Object? = core::Object?>(lowered final self::Extension5|get#method1::T% #this) → <S extends core::Object = core::Object>() → dynamic
   return <S extends core::Object = core::Object>() → dynamic => self::Extension5|method1<self::Extension5|get#method1::T%, S>(#this);
-static method Extension5|method2<T extends core::Object? = core::Object?, S extends core::String = core::String>(final self::Extension5|method2::T% #this) → dynamic
+static method Extension5|method2<T extends core::Object? = core::Object?, S extends core::String = core::String>(lowered final self::Extension5|method2::T% #this) → dynamic
   ;
-static method Extension5|get#method2<T extends core::Object? = core::Object?>(final self::Extension5|get#method2::T% #this) → <S extends core::String = core::String>() → dynamic
+static method Extension5|get#method2<T extends core::Object? = core::Object?>(lowered final self::Extension5|get#method2::T% #this) → <S extends core::String = core::String>() → dynamic
   return <S extends core::String = core::String>() → dynamic => self::Extension5|method2<self::Extension5|get#method2::T%, S>(#this);
-static method Extension5|method3<T extends core::Object? = core::Object?, S extends dynamic = dynamic>(final self::Extension5|method3::T% #this) → dynamic
+static method Extension5|method3<T extends core::Object? = core::Object?, S extends dynamic = dynamic>(lowered final self::Extension5|method3::T% #this) → dynamic
   ;
-static method Extension5|get#method3<T extends core::Object? = core::Object?>(final self::Extension5|get#method3::T% #this) → <S extends dynamic = dynamic>() → dynamic
+static method Extension5|get#method3<T extends core::Object? = core::Object?>(lowered final self::Extension5|get#method3::T% #this) → <S extends dynamic = dynamic>() → dynamic
   return <S extends dynamic = dynamic>() → dynamic => self::Extension5|method3<self::Extension5|get#method3::T%, S%>(#this);
-static method Extension5|method4<T extends core::Object? = core::Object?, S extends core::Object? = dynamic>(final self::Extension5|method4::T% #this) → dynamic
+static method Extension5|method4<T extends core::Object? = core::Object?, S extends core::Object? = dynamic>(lowered final self::Extension5|method4::T% #this) → dynamic
   ;
-static method Extension5|get#method4<T extends core::Object? = core::Object?>(final self::Extension5|get#method4::T% #this) → <S extends core::Object? = dynamic>() → dynamic
+static method Extension5|get#method4<T extends core::Object? = core::Object?>(lowered final self::Extension5|get#method4::T% #this) → <S extends core::Object? = dynamic>() → dynamic
   return <S extends core::Object? = dynamic>() → dynamic => self::Extension5|method4<self::Extension5|get#method4::T%, S%>(#this);
-static method Extension5|method5<T extends core::Object? = core::Object?, S extends core::Object? = core::Object?>(final self::Extension5|method5::T% #this) → dynamic
+static method Extension5|method5<T extends core::Object? = core::Object?, S extends core::Object? = core::Object?>(lowered final self::Extension5|method5::T% #this) → dynamic
   ;
-static method Extension5|get#method5<T extends core::Object? = core::Object?>(final self::Extension5|get#method5::T% #this) → <S extends core::Object? = core::Object?>() → dynamic
+static method Extension5|get#method5<T extends core::Object? = core::Object?>(lowered final self::Extension5|get#method5::T% #this) → <S extends core::Object? = core::Object?>() → dynamic
   return <S extends core::Object? = core::Object?>() → dynamic => self::Extension5|method5<self::Extension5|get#method5::T%, S%>(#this);
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/nnbd/extension_bounds.dart.strong.expect b/pkg/front_end/testcases/nnbd/extension_bounds.dart.strong.expect
index 0cf68fa..c1de6b4 100644
--- a/pkg/front_end/testcases/nnbd/extension_bounds.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/extension_bounds.dart.strong.expect
@@ -62,79 +62,79 @@
   method method5 = self::Extension5|method5;
   tearoff method5 = self::Extension5|get#method5;
 }
-static method Extension1|method1<T extends core::Object = core::Object, S extends core::Object = core::Object>(final self::Extension1|method1::T #this) → dynamic {}
-static method Extension1|get#method1<T extends core::Object = core::Object>(final self::Extension1|get#method1::T #this) → <S extends core::Object = core::Object>() → dynamic
+static method Extension1|method1<T extends core::Object = core::Object, S extends core::Object = core::Object>(lowered final self::Extension1|method1::T #this) → dynamic {}
+static method Extension1|get#method1<T extends core::Object = core::Object>(lowered final self::Extension1|get#method1::T #this) → <S extends core::Object = core::Object>() → dynamic
   return <S extends core::Object = core::Object>() → dynamic => self::Extension1|method1<self::Extension1|get#method1::T, S>(#this);
-static method Extension1|method2<T extends core::Object = core::Object, S extends core::String = core::String>(final self::Extension1|method2::T #this) → dynamic {}
-static method Extension1|get#method2<T extends core::Object = core::Object>(final self::Extension1|get#method2::T #this) → <S extends core::String = core::String>() → dynamic
+static method Extension1|method2<T extends core::Object = core::Object, S extends core::String = core::String>(lowered final self::Extension1|method2::T #this) → dynamic {}
+static method Extension1|get#method2<T extends core::Object = core::Object>(lowered final self::Extension1|get#method2::T #this) → <S extends core::String = core::String>() → dynamic
   return <S extends core::String = core::String>() → dynamic => self::Extension1|method2<self::Extension1|get#method2::T, S>(#this);
-static method Extension1|method3<T extends core::Object = core::Object, S extends dynamic = dynamic>(final self::Extension1|method3::T #this) → dynamic {}
-static method Extension1|get#method3<T extends core::Object = core::Object>(final self::Extension1|get#method3::T #this) → <S extends dynamic = dynamic>() → dynamic
+static method Extension1|method3<T extends core::Object = core::Object, S extends dynamic = dynamic>(lowered final self::Extension1|method3::T #this) → dynamic {}
+static method Extension1|get#method3<T extends core::Object = core::Object>(lowered final self::Extension1|get#method3::T #this) → <S extends dynamic = dynamic>() → dynamic
   return <S extends dynamic = dynamic>() → dynamic => self::Extension1|method3<self::Extension1|get#method3::T, S%>(#this);
-static method Extension1|method4<T extends core::Object = core::Object, S extends core::Object? = dynamic>(final self::Extension1|method4::T #this) → dynamic {}
-static method Extension1|get#method4<T extends core::Object = core::Object>(final self::Extension1|get#method4::T #this) → <S extends core::Object? = dynamic>() → dynamic
+static method Extension1|method4<T extends core::Object = core::Object, S extends core::Object? = dynamic>(lowered final self::Extension1|method4::T #this) → dynamic {}
+static method Extension1|get#method4<T extends core::Object = core::Object>(lowered final self::Extension1|get#method4::T #this) → <S extends core::Object? = dynamic>() → dynamic
   return <S extends core::Object? = dynamic>() → dynamic => self::Extension1|method4<self::Extension1|get#method4::T, S%>(#this);
-static method Extension1|method5<T extends core::Object = core::Object, S extends core::Object? = core::Object?>(final self::Extension1|method5::T #this) → dynamic {}
-static method Extension1|get#method5<T extends core::Object = core::Object>(final self::Extension1|get#method5::T #this) → <S extends core::Object? = core::Object?>() → dynamic
+static method Extension1|method5<T extends core::Object = core::Object, S extends core::Object? = core::Object?>(lowered final self::Extension1|method5::T #this) → dynamic {}
+static method Extension1|get#method5<T extends core::Object = core::Object>(lowered final self::Extension1|get#method5::T #this) → <S extends core::Object? = core::Object?>() → dynamic
   return <S extends core::Object? = core::Object?>() → dynamic => self::Extension1|method5<self::Extension1|get#method5::T, S%>(#this);
-static method Extension2|method1<T extends core::String = core::String, S extends core::Object = core::Object>(final self::Extension2|method1::T #this) → dynamic {}
-static method Extension2|get#method1<T extends core::String = core::String>(final self::Extension2|get#method1::T #this) → <S extends core::Object = core::Object>() → dynamic
+static method Extension2|method1<T extends core::String = core::String, S extends core::Object = core::Object>(lowered final self::Extension2|method1::T #this) → dynamic {}
+static method Extension2|get#method1<T extends core::String = core::String>(lowered final self::Extension2|get#method1::T #this) → <S extends core::Object = core::Object>() → dynamic
   return <S extends core::Object = core::Object>() → dynamic => self::Extension2|method1<self::Extension2|get#method1::T, S>(#this);
-static method Extension2|method2<T extends core::String = core::String, S extends core::String = core::String>(final self::Extension2|method2::T #this) → dynamic {}
-static method Extension2|get#method2<T extends core::String = core::String>(final self::Extension2|get#method2::T #this) → <S extends core::String = core::String>() → dynamic
+static method Extension2|method2<T extends core::String = core::String, S extends core::String = core::String>(lowered final self::Extension2|method2::T #this) → dynamic {}
+static method Extension2|get#method2<T extends core::String = core::String>(lowered final self::Extension2|get#method2::T #this) → <S extends core::String = core::String>() → dynamic
   return <S extends core::String = core::String>() → dynamic => self::Extension2|method2<self::Extension2|get#method2::T, S>(#this);
-static method Extension2|method3<T extends core::String = core::String, S extends dynamic = dynamic>(final self::Extension2|method3::T #this) → dynamic {}
-static method Extension2|get#method3<T extends core::String = core::String>(final self::Extension2|get#method3::T #this) → <S extends dynamic = dynamic>() → dynamic
+static method Extension2|method3<T extends core::String = core::String, S extends dynamic = dynamic>(lowered final self::Extension2|method3::T #this) → dynamic {}
+static method Extension2|get#method3<T extends core::String = core::String>(lowered final self::Extension2|get#method3::T #this) → <S extends dynamic = dynamic>() → dynamic
   return <S extends dynamic = dynamic>() → dynamic => self::Extension2|method3<self::Extension2|get#method3::T, S%>(#this);
-static method Extension2|get#method4<T extends core::String = core::String>(final self::Extension2|get#method4::T #this) → <S extends core::Object? = dynamic>() → dynamic
+static method Extension2|get#method4<T extends core::String = core::String>(lowered final self::Extension2|get#method4::T #this) → <S extends core::Object? = dynamic>() → dynamic
   return <S extends core::Object? = dynamic>() → dynamic => self::Extension2|method4<self::Extension2|get#method4::T, S%>(#this);
-static method Extension2|method4<T extends core::String = core::String, S extends core::Object? = dynamic>(final self::Extension2|method4::T #this) → dynamic {}
-static method Extension2|method5<T extends core::String = core::String, S extends core::Object? = core::Object?>(final self::Extension2|method5::T #this) → dynamic {}
-static method Extension2|get#method5<T extends core::String = core::String>(final self::Extension2|get#method5::T #this) → <S extends core::Object? = core::Object?>() → dynamic
+static method Extension2|method4<T extends core::String = core::String, S extends core::Object? = dynamic>(lowered final self::Extension2|method4::T #this) → dynamic {}
+static method Extension2|method5<T extends core::String = core::String, S extends core::Object? = core::Object?>(lowered final self::Extension2|method5::T #this) → dynamic {}
+static method Extension2|get#method5<T extends core::String = core::String>(lowered final self::Extension2|get#method5::T #this) → <S extends core::Object? = core::Object?>() → dynamic
   return <S extends core::Object? = core::Object?>() → dynamic => self::Extension2|method5<self::Extension2|get#method5::T, S%>(#this);
-static method Extension3|method1<T extends dynamic = dynamic, S extends core::Object = core::Object>(final self::Extension3|method1::T% #this) → dynamic {}
-static method Extension3|get#method1<T extends dynamic = dynamic>(final self::Extension3|get#method1::T% #this) → <S extends core::Object = core::Object>() → dynamic
+static method Extension3|method1<T extends dynamic = dynamic, S extends core::Object = core::Object>(lowered final self::Extension3|method1::T% #this) → dynamic {}
+static method Extension3|get#method1<T extends dynamic = dynamic>(lowered final self::Extension3|get#method1::T% #this) → <S extends core::Object = core::Object>() → dynamic
   return <S extends core::Object = core::Object>() → dynamic => self::Extension3|method1<self::Extension3|get#method1::T%, S>(#this);
-static method Extension3|method2<T extends dynamic = dynamic, S extends core::String = core::String>(final self::Extension3|method2::T% #this) → dynamic {}
-static method Extension3|get#method2<T extends dynamic = dynamic>(final self::Extension3|get#method2::T% #this) → <S extends core::String = core::String>() → dynamic
+static method Extension3|method2<T extends dynamic = dynamic, S extends core::String = core::String>(lowered final self::Extension3|method2::T% #this) → dynamic {}
+static method Extension3|get#method2<T extends dynamic = dynamic>(lowered final self::Extension3|get#method2::T% #this) → <S extends core::String = core::String>() → dynamic
   return <S extends core::String = core::String>() → dynamic => self::Extension3|method2<self::Extension3|get#method2::T%, S>(#this);
-static method Extension3|method3<T extends dynamic = dynamic, S extends dynamic = dynamic>(final self::Extension3|method3::T% #this) → dynamic {}
-static method Extension3|get#method3<T extends dynamic = dynamic>(final self::Extension3|get#method3::T% #this) → <S extends dynamic = dynamic>() → dynamic
+static method Extension3|method3<T extends dynamic = dynamic, S extends dynamic = dynamic>(lowered final self::Extension3|method3::T% #this) → dynamic {}
+static method Extension3|get#method3<T extends dynamic = dynamic>(lowered final self::Extension3|get#method3::T% #this) → <S extends dynamic = dynamic>() → dynamic
   return <S extends dynamic = dynamic>() → dynamic => self::Extension3|method3<self::Extension3|get#method3::T%, S%>(#this);
-static method Extension3|method4<T extends dynamic = dynamic, S extends core::Object? = dynamic>(final self::Extension3|method4::T% #this) → dynamic {}
-static method Extension3|get#method4<T extends dynamic = dynamic>(final self::Extension3|get#method4::T% #this) → <S extends core::Object? = dynamic>() → dynamic
+static method Extension3|method4<T extends dynamic = dynamic, S extends core::Object? = dynamic>(lowered final self::Extension3|method4::T% #this) → dynamic {}
+static method Extension3|get#method4<T extends dynamic = dynamic>(lowered final self::Extension3|get#method4::T% #this) → <S extends core::Object? = dynamic>() → dynamic
   return <S extends core::Object? = dynamic>() → dynamic => self::Extension3|method4<self::Extension3|get#method4::T%, S%>(#this);
-static method Extension3|method5<T extends dynamic = dynamic, S extends core::Object? = core::Object?>(final self::Extension3|method5::T% #this) → dynamic {}
-static method Extension3|get#method5<T extends dynamic = dynamic>(final self::Extension3|get#method5::T% #this) → <S extends core::Object? = core::Object?>() → dynamic
+static method Extension3|method5<T extends dynamic = dynamic, S extends core::Object? = core::Object?>(lowered final self::Extension3|method5::T% #this) → dynamic {}
+static method Extension3|get#method5<T extends dynamic = dynamic>(lowered final self::Extension3|get#method5::T% #this) → <S extends core::Object? = core::Object?>() → dynamic
   return <S extends core::Object? = core::Object?>() → dynamic => self::Extension3|method5<self::Extension3|get#method5::T%, S%>(#this);
-static method Extension4|method1<T extends core::Object? = dynamic, S extends core::Object = core::Object>(final self::Extension4|method1::T% #this) → dynamic {}
-static method Extension4|get#method1<T extends core::Object? = dynamic>(final self::Extension4|get#method1::T% #this) → <S extends core::Object = core::Object>() → dynamic
+static method Extension4|method1<T extends core::Object? = dynamic, S extends core::Object = core::Object>(lowered final self::Extension4|method1::T% #this) → dynamic {}
+static method Extension4|get#method1<T extends core::Object? = dynamic>(lowered final self::Extension4|get#method1::T% #this) → <S extends core::Object = core::Object>() → dynamic
   return <S extends core::Object = core::Object>() → dynamic => self::Extension4|method1<self::Extension4|get#method1::T%, S>(#this);
-static method Extension4|method2<T extends core::Object? = dynamic, S extends core::String = core::String>(final self::Extension4|method2::T% #this) → dynamic {}
-static method Extension4|get#method2<T extends core::Object? = dynamic>(final self::Extension4|get#method2::T% #this) → <S extends core::String = core::String>() → dynamic
+static method Extension4|method2<T extends core::Object? = dynamic, S extends core::String = core::String>(lowered final self::Extension4|method2::T% #this) → dynamic {}
+static method Extension4|get#method2<T extends core::Object? = dynamic>(lowered final self::Extension4|get#method2::T% #this) → <S extends core::String = core::String>() → dynamic
   return <S extends core::String = core::String>() → dynamic => self::Extension4|method2<self::Extension4|get#method2::T%, S>(#this);
-static method Extension4|method3<T extends core::Object? = dynamic, S extends dynamic = dynamic>(final self::Extension4|method3::T% #this) → dynamic {}
-static method Extension4|get#method3<T extends core::Object? = dynamic>(final self::Extension4|get#method3::T% #this) → <S extends dynamic = dynamic>() → dynamic
+static method Extension4|method3<T extends core::Object? = dynamic, S extends dynamic = dynamic>(lowered final self::Extension4|method3::T% #this) → dynamic {}
+static method Extension4|get#method3<T extends core::Object? = dynamic>(lowered final self::Extension4|get#method3::T% #this) → <S extends dynamic = dynamic>() → dynamic
   return <S extends dynamic = dynamic>() → dynamic => self::Extension4|method3<self::Extension4|get#method3::T%, S%>(#this);
-static method Extension4|method4<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(final self::Extension4|method4::T% #this) → dynamic {}
-static method Extension4|get#method4<T extends core::Object? = dynamic>(final self::Extension4|get#method4::T% #this) → <S extends core::Object? = dynamic>() → dynamic
+static method Extension4|method4<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(lowered final self::Extension4|method4::T% #this) → dynamic {}
+static method Extension4|get#method4<T extends core::Object? = dynamic>(lowered final self::Extension4|get#method4::T% #this) → <S extends core::Object? = dynamic>() → dynamic
   return <S extends core::Object? = dynamic>() → dynamic => self::Extension4|method4<self::Extension4|get#method4::T%, S%>(#this);
-static method Extension4|method5<T extends core::Object? = dynamic, S extends core::Object? = core::Object?>(final self::Extension4|method5::T% #this) → dynamic {}
-static method Extension4|get#method5<T extends core::Object? = dynamic>(final self::Extension4|get#method5::T% #this) → <S extends core::Object? = core::Object?>() → dynamic
+static method Extension4|method5<T extends core::Object? = dynamic, S extends core::Object? = core::Object?>(lowered final self::Extension4|method5::T% #this) → dynamic {}
+static method Extension4|get#method5<T extends core::Object? = dynamic>(lowered final self::Extension4|get#method5::T% #this) → <S extends core::Object? = core::Object?>() → dynamic
   return <S extends core::Object? = core::Object?>() → dynamic => self::Extension4|method5<self::Extension4|get#method5::T%, S%>(#this);
-static method Extension5|method1<T extends core::Object? = core::Object?, S extends core::Object = core::Object>(final self::Extension5|method1::T% #this) → dynamic {}
-static method Extension5|get#method1<T extends core::Object? = core::Object?>(final self::Extension5|get#method1::T% #this) → <S extends core::Object = core::Object>() → dynamic
+static method Extension5|method1<T extends core::Object? = core::Object?, S extends core::Object = core::Object>(lowered final self::Extension5|method1::T% #this) → dynamic {}
+static method Extension5|get#method1<T extends core::Object? = core::Object?>(lowered final self::Extension5|get#method1::T% #this) → <S extends core::Object = core::Object>() → dynamic
   return <S extends core::Object = core::Object>() → dynamic => self::Extension5|method1<self::Extension5|get#method1::T%, S>(#this);
-static method Extension5|method2<T extends core::Object? = core::Object?, S extends core::String = core::String>(final self::Extension5|method2::T% #this) → dynamic {}
-static method Extension5|get#method2<T extends core::Object? = core::Object?>(final self::Extension5|get#method2::T% #this) → <S extends core::String = core::String>() → dynamic
+static method Extension5|method2<T extends core::Object? = core::Object?, S extends core::String = core::String>(lowered final self::Extension5|method2::T% #this) → dynamic {}
+static method Extension5|get#method2<T extends core::Object? = core::Object?>(lowered final self::Extension5|get#method2::T% #this) → <S extends core::String = core::String>() → dynamic
   return <S extends core::String = core::String>() → dynamic => self::Extension5|method2<self::Extension5|get#method2::T%, S>(#this);
-static method Extension5|method3<T extends core::Object? = core::Object?, S extends dynamic = dynamic>(final self::Extension5|method3::T% #this) → dynamic {}
-static method Extension5|get#method3<T extends core::Object? = core::Object?>(final self::Extension5|get#method3::T% #this) → <S extends dynamic = dynamic>() → dynamic
+static method Extension5|method3<T extends core::Object? = core::Object?, S extends dynamic = dynamic>(lowered final self::Extension5|method3::T% #this) → dynamic {}
+static method Extension5|get#method3<T extends core::Object? = core::Object?>(lowered final self::Extension5|get#method3::T% #this) → <S extends dynamic = dynamic>() → dynamic
   return <S extends dynamic = dynamic>() → dynamic => self::Extension5|method3<self::Extension5|get#method3::T%, S%>(#this);
-static method Extension5|method4<T extends core::Object? = core::Object?, S extends core::Object? = dynamic>(final self::Extension5|method4::T% #this) → dynamic {}
-static method Extension5|get#method4<T extends core::Object? = core::Object?>(final self::Extension5|get#method4::T% #this) → <S extends core::Object? = dynamic>() → dynamic
+static method Extension5|method4<T extends core::Object? = core::Object?, S extends core::Object? = dynamic>(lowered final self::Extension5|method4::T% #this) → dynamic {}
+static method Extension5|get#method4<T extends core::Object? = core::Object?>(lowered final self::Extension5|get#method4::T% #this) → <S extends core::Object? = dynamic>() → dynamic
   return <S extends core::Object? = dynamic>() → dynamic => self::Extension5|method4<self::Extension5|get#method4::T%, S%>(#this);
-static method Extension5|method5<T extends core::Object? = core::Object?, S extends core::Object? = core::Object?>(final self::Extension5|method5::T% #this) → dynamic {}
-static method Extension5|get#method5<T extends core::Object? = core::Object?>(final self::Extension5|get#method5::T% #this) → <S extends core::Object? = core::Object?>() → dynamic
+static method Extension5|method5<T extends core::Object? = core::Object?, S extends core::Object? = core::Object?>(lowered final self::Extension5|method5::T% #this) → dynamic {}
+static method Extension5|get#method5<T extends core::Object? = core::Object?>(lowered final self::Extension5|get#method5::T% #this) → <S extends core::Object? = core::Object?>() → dynamic
   return <S extends core::Object? = core::Object?>() → dynamic => self::Extension5|method5<self::Extension5|get#method5::T%, S%>(#this);
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/extension_bounds.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/extension_bounds.dart.strong.transformed.expect
index 0cf68fa..c1de6b4 100644
--- a/pkg/front_end/testcases/nnbd/extension_bounds.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/extension_bounds.dart.strong.transformed.expect
@@ -62,79 +62,79 @@
   method method5 = self::Extension5|method5;
   tearoff method5 = self::Extension5|get#method5;
 }
-static method Extension1|method1<T extends core::Object = core::Object, S extends core::Object = core::Object>(final self::Extension1|method1::T #this) → dynamic {}
-static method Extension1|get#method1<T extends core::Object = core::Object>(final self::Extension1|get#method1::T #this) → <S extends core::Object = core::Object>() → dynamic
+static method Extension1|method1<T extends core::Object = core::Object, S extends core::Object = core::Object>(lowered final self::Extension1|method1::T #this) → dynamic {}
+static method Extension1|get#method1<T extends core::Object = core::Object>(lowered final self::Extension1|get#method1::T #this) → <S extends core::Object = core::Object>() → dynamic
   return <S extends core::Object = core::Object>() → dynamic => self::Extension1|method1<self::Extension1|get#method1::T, S>(#this);
-static method Extension1|method2<T extends core::Object = core::Object, S extends core::String = core::String>(final self::Extension1|method2::T #this) → dynamic {}
-static method Extension1|get#method2<T extends core::Object = core::Object>(final self::Extension1|get#method2::T #this) → <S extends core::String = core::String>() → dynamic
+static method Extension1|method2<T extends core::Object = core::Object, S extends core::String = core::String>(lowered final self::Extension1|method2::T #this) → dynamic {}
+static method Extension1|get#method2<T extends core::Object = core::Object>(lowered final self::Extension1|get#method2::T #this) → <S extends core::String = core::String>() → dynamic
   return <S extends core::String = core::String>() → dynamic => self::Extension1|method2<self::Extension1|get#method2::T, S>(#this);
-static method Extension1|method3<T extends core::Object = core::Object, S extends dynamic = dynamic>(final self::Extension1|method3::T #this) → dynamic {}
-static method Extension1|get#method3<T extends core::Object = core::Object>(final self::Extension1|get#method3::T #this) → <S extends dynamic = dynamic>() → dynamic
+static method Extension1|method3<T extends core::Object = core::Object, S extends dynamic = dynamic>(lowered final self::Extension1|method3::T #this) → dynamic {}
+static method Extension1|get#method3<T extends core::Object = core::Object>(lowered final self::Extension1|get#method3::T #this) → <S extends dynamic = dynamic>() → dynamic
   return <S extends dynamic = dynamic>() → dynamic => self::Extension1|method3<self::Extension1|get#method3::T, S%>(#this);
-static method Extension1|method4<T extends core::Object = core::Object, S extends core::Object? = dynamic>(final self::Extension1|method4::T #this) → dynamic {}
-static method Extension1|get#method4<T extends core::Object = core::Object>(final self::Extension1|get#method4::T #this) → <S extends core::Object? = dynamic>() → dynamic
+static method Extension1|method4<T extends core::Object = core::Object, S extends core::Object? = dynamic>(lowered final self::Extension1|method4::T #this) → dynamic {}
+static method Extension1|get#method4<T extends core::Object = core::Object>(lowered final self::Extension1|get#method4::T #this) → <S extends core::Object? = dynamic>() → dynamic
   return <S extends core::Object? = dynamic>() → dynamic => self::Extension1|method4<self::Extension1|get#method4::T, S%>(#this);
-static method Extension1|method5<T extends core::Object = core::Object, S extends core::Object? = core::Object?>(final self::Extension1|method5::T #this) → dynamic {}
-static method Extension1|get#method5<T extends core::Object = core::Object>(final self::Extension1|get#method5::T #this) → <S extends core::Object? = core::Object?>() → dynamic
+static method Extension1|method5<T extends core::Object = core::Object, S extends core::Object? = core::Object?>(lowered final self::Extension1|method5::T #this) → dynamic {}
+static method Extension1|get#method5<T extends core::Object = core::Object>(lowered final self::Extension1|get#method5::T #this) → <S extends core::Object? = core::Object?>() → dynamic
   return <S extends core::Object? = core::Object?>() → dynamic => self::Extension1|method5<self::Extension1|get#method5::T, S%>(#this);
-static method Extension2|method1<T extends core::String = core::String, S extends core::Object = core::Object>(final self::Extension2|method1::T #this) → dynamic {}
-static method Extension2|get#method1<T extends core::String = core::String>(final self::Extension2|get#method1::T #this) → <S extends core::Object = core::Object>() → dynamic
+static method Extension2|method1<T extends core::String = core::String, S extends core::Object = core::Object>(lowered final self::Extension2|method1::T #this) → dynamic {}
+static method Extension2|get#method1<T extends core::String = core::String>(lowered final self::Extension2|get#method1::T #this) → <S extends core::Object = core::Object>() → dynamic
   return <S extends core::Object = core::Object>() → dynamic => self::Extension2|method1<self::Extension2|get#method1::T, S>(#this);
-static method Extension2|method2<T extends core::String = core::String, S extends core::String = core::String>(final self::Extension2|method2::T #this) → dynamic {}
-static method Extension2|get#method2<T extends core::String = core::String>(final self::Extension2|get#method2::T #this) → <S extends core::String = core::String>() → dynamic
+static method Extension2|method2<T extends core::String = core::String, S extends core::String = core::String>(lowered final self::Extension2|method2::T #this) → dynamic {}
+static method Extension2|get#method2<T extends core::String = core::String>(lowered final self::Extension2|get#method2::T #this) → <S extends core::String = core::String>() → dynamic
   return <S extends core::String = core::String>() → dynamic => self::Extension2|method2<self::Extension2|get#method2::T, S>(#this);
-static method Extension2|method3<T extends core::String = core::String, S extends dynamic = dynamic>(final self::Extension2|method3::T #this) → dynamic {}
-static method Extension2|get#method3<T extends core::String = core::String>(final self::Extension2|get#method3::T #this) → <S extends dynamic = dynamic>() → dynamic
+static method Extension2|method3<T extends core::String = core::String, S extends dynamic = dynamic>(lowered final self::Extension2|method3::T #this) → dynamic {}
+static method Extension2|get#method3<T extends core::String = core::String>(lowered final self::Extension2|get#method3::T #this) → <S extends dynamic = dynamic>() → dynamic
   return <S extends dynamic = dynamic>() → dynamic => self::Extension2|method3<self::Extension2|get#method3::T, S%>(#this);
-static method Extension2|get#method4<T extends core::String = core::String>(final self::Extension2|get#method4::T #this) → <S extends core::Object? = dynamic>() → dynamic
+static method Extension2|get#method4<T extends core::String = core::String>(lowered final self::Extension2|get#method4::T #this) → <S extends core::Object? = dynamic>() → dynamic
   return <S extends core::Object? = dynamic>() → dynamic => self::Extension2|method4<self::Extension2|get#method4::T, S%>(#this);
-static method Extension2|method4<T extends core::String = core::String, S extends core::Object? = dynamic>(final self::Extension2|method4::T #this) → dynamic {}
-static method Extension2|method5<T extends core::String = core::String, S extends core::Object? = core::Object?>(final self::Extension2|method5::T #this) → dynamic {}
-static method Extension2|get#method5<T extends core::String = core::String>(final self::Extension2|get#method5::T #this) → <S extends core::Object? = core::Object?>() → dynamic
+static method Extension2|method4<T extends core::String = core::String, S extends core::Object? = dynamic>(lowered final self::Extension2|method4::T #this) → dynamic {}
+static method Extension2|method5<T extends core::String = core::String, S extends core::Object? = core::Object?>(lowered final self::Extension2|method5::T #this) → dynamic {}
+static method Extension2|get#method5<T extends core::String = core::String>(lowered final self::Extension2|get#method5::T #this) → <S extends core::Object? = core::Object?>() → dynamic
   return <S extends core::Object? = core::Object?>() → dynamic => self::Extension2|method5<self::Extension2|get#method5::T, S%>(#this);
-static method Extension3|method1<T extends dynamic = dynamic, S extends core::Object = core::Object>(final self::Extension3|method1::T% #this) → dynamic {}
-static method Extension3|get#method1<T extends dynamic = dynamic>(final self::Extension3|get#method1::T% #this) → <S extends core::Object = core::Object>() → dynamic
+static method Extension3|method1<T extends dynamic = dynamic, S extends core::Object = core::Object>(lowered final self::Extension3|method1::T% #this) → dynamic {}
+static method Extension3|get#method1<T extends dynamic = dynamic>(lowered final self::Extension3|get#method1::T% #this) → <S extends core::Object = core::Object>() → dynamic
   return <S extends core::Object = core::Object>() → dynamic => self::Extension3|method1<self::Extension3|get#method1::T%, S>(#this);
-static method Extension3|method2<T extends dynamic = dynamic, S extends core::String = core::String>(final self::Extension3|method2::T% #this) → dynamic {}
-static method Extension3|get#method2<T extends dynamic = dynamic>(final self::Extension3|get#method2::T% #this) → <S extends core::String = core::String>() → dynamic
+static method Extension3|method2<T extends dynamic = dynamic, S extends core::String = core::String>(lowered final self::Extension3|method2::T% #this) → dynamic {}
+static method Extension3|get#method2<T extends dynamic = dynamic>(lowered final self::Extension3|get#method2::T% #this) → <S extends core::String = core::String>() → dynamic
   return <S extends core::String = core::String>() → dynamic => self::Extension3|method2<self::Extension3|get#method2::T%, S>(#this);
-static method Extension3|method3<T extends dynamic = dynamic, S extends dynamic = dynamic>(final self::Extension3|method3::T% #this) → dynamic {}
-static method Extension3|get#method3<T extends dynamic = dynamic>(final self::Extension3|get#method3::T% #this) → <S extends dynamic = dynamic>() → dynamic
+static method Extension3|method3<T extends dynamic = dynamic, S extends dynamic = dynamic>(lowered final self::Extension3|method3::T% #this) → dynamic {}
+static method Extension3|get#method3<T extends dynamic = dynamic>(lowered final self::Extension3|get#method3::T% #this) → <S extends dynamic = dynamic>() → dynamic
   return <S extends dynamic = dynamic>() → dynamic => self::Extension3|method3<self::Extension3|get#method3::T%, S%>(#this);
-static method Extension3|method4<T extends dynamic = dynamic, S extends core::Object? = dynamic>(final self::Extension3|method4::T% #this) → dynamic {}
-static method Extension3|get#method4<T extends dynamic = dynamic>(final self::Extension3|get#method4::T% #this) → <S extends core::Object? = dynamic>() → dynamic
+static method Extension3|method4<T extends dynamic = dynamic, S extends core::Object? = dynamic>(lowered final self::Extension3|method4::T% #this) → dynamic {}
+static method Extension3|get#method4<T extends dynamic = dynamic>(lowered final self::Extension3|get#method4::T% #this) → <S extends core::Object? = dynamic>() → dynamic
   return <S extends core::Object? = dynamic>() → dynamic => self::Extension3|method4<self::Extension3|get#method4::T%, S%>(#this);
-static method Extension3|method5<T extends dynamic = dynamic, S extends core::Object? = core::Object?>(final self::Extension3|method5::T% #this) → dynamic {}
-static method Extension3|get#method5<T extends dynamic = dynamic>(final self::Extension3|get#method5::T% #this) → <S extends core::Object? = core::Object?>() → dynamic
+static method Extension3|method5<T extends dynamic = dynamic, S extends core::Object? = core::Object?>(lowered final self::Extension3|method5::T% #this) → dynamic {}
+static method Extension3|get#method5<T extends dynamic = dynamic>(lowered final self::Extension3|get#method5::T% #this) → <S extends core::Object? = core::Object?>() → dynamic
   return <S extends core::Object? = core::Object?>() → dynamic => self::Extension3|method5<self::Extension3|get#method5::T%, S%>(#this);
-static method Extension4|method1<T extends core::Object? = dynamic, S extends core::Object = core::Object>(final self::Extension4|method1::T% #this) → dynamic {}
-static method Extension4|get#method1<T extends core::Object? = dynamic>(final self::Extension4|get#method1::T% #this) → <S extends core::Object = core::Object>() → dynamic
+static method Extension4|method1<T extends core::Object? = dynamic, S extends core::Object = core::Object>(lowered final self::Extension4|method1::T% #this) → dynamic {}
+static method Extension4|get#method1<T extends core::Object? = dynamic>(lowered final self::Extension4|get#method1::T% #this) → <S extends core::Object = core::Object>() → dynamic
   return <S extends core::Object = core::Object>() → dynamic => self::Extension4|method1<self::Extension4|get#method1::T%, S>(#this);
-static method Extension4|method2<T extends core::Object? = dynamic, S extends core::String = core::String>(final self::Extension4|method2::T% #this) → dynamic {}
-static method Extension4|get#method2<T extends core::Object? = dynamic>(final self::Extension4|get#method2::T% #this) → <S extends core::String = core::String>() → dynamic
+static method Extension4|method2<T extends core::Object? = dynamic, S extends core::String = core::String>(lowered final self::Extension4|method2::T% #this) → dynamic {}
+static method Extension4|get#method2<T extends core::Object? = dynamic>(lowered final self::Extension4|get#method2::T% #this) → <S extends core::String = core::String>() → dynamic
   return <S extends core::String = core::String>() → dynamic => self::Extension4|method2<self::Extension4|get#method2::T%, S>(#this);
-static method Extension4|method3<T extends core::Object? = dynamic, S extends dynamic = dynamic>(final self::Extension4|method3::T% #this) → dynamic {}
-static method Extension4|get#method3<T extends core::Object? = dynamic>(final self::Extension4|get#method3::T% #this) → <S extends dynamic = dynamic>() → dynamic
+static method Extension4|method3<T extends core::Object? = dynamic, S extends dynamic = dynamic>(lowered final self::Extension4|method3::T% #this) → dynamic {}
+static method Extension4|get#method3<T extends core::Object? = dynamic>(lowered final self::Extension4|get#method3::T% #this) → <S extends dynamic = dynamic>() → dynamic
   return <S extends dynamic = dynamic>() → dynamic => self::Extension4|method3<self::Extension4|get#method3::T%, S%>(#this);
-static method Extension4|method4<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(final self::Extension4|method4::T% #this) → dynamic {}
-static method Extension4|get#method4<T extends core::Object? = dynamic>(final self::Extension4|get#method4::T% #this) → <S extends core::Object? = dynamic>() → dynamic
+static method Extension4|method4<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(lowered final self::Extension4|method4::T% #this) → dynamic {}
+static method Extension4|get#method4<T extends core::Object? = dynamic>(lowered final self::Extension4|get#method4::T% #this) → <S extends core::Object? = dynamic>() → dynamic
   return <S extends core::Object? = dynamic>() → dynamic => self::Extension4|method4<self::Extension4|get#method4::T%, S%>(#this);
-static method Extension4|method5<T extends core::Object? = dynamic, S extends core::Object? = core::Object?>(final self::Extension4|method5::T% #this) → dynamic {}
-static method Extension4|get#method5<T extends core::Object? = dynamic>(final self::Extension4|get#method5::T% #this) → <S extends core::Object? = core::Object?>() → dynamic
+static method Extension4|method5<T extends core::Object? = dynamic, S extends core::Object? = core::Object?>(lowered final self::Extension4|method5::T% #this) → dynamic {}
+static method Extension4|get#method5<T extends core::Object? = dynamic>(lowered final self::Extension4|get#method5::T% #this) → <S extends core::Object? = core::Object?>() → dynamic
   return <S extends core::Object? = core::Object?>() → dynamic => self::Extension4|method5<self::Extension4|get#method5::T%, S%>(#this);
-static method Extension5|method1<T extends core::Object? = core::Object?, S extends core::Object = core::Object>(final self::Extension5|method1::T% #this) → dynamic {}
-static method Extension5|get#method1<T extends core::Object? = core::Object?>(final self::Extension5|get#method1::T% #this) → <S extends core::Object = core::Object>() → dynamic
+static method Extension5|method1<T extends core::Object? = core::Object?, S extends core::Object = core::Object>(lowered final self::Extension5|method1::T% #this) → dynamic {}
+static method Extension5|get#method1<T extends core::Object? = core::Object?>(lowered final self::Extension5|get#method1::T% #this) → <S extends core::Object = core::Object>() → dynamic
   return <S extends core::Object = core::Object>() → dynamic => self::Extension5|method1<self::Extension5|get#method1::T%, S>(#this);
-static method Extension5|method2<T extends core::Object? = core::Object?, S extends core::String = core::String>(final self::Extension5|method2::T% #this) → dynamic {}
-static method Extension5|get#method2<T extends core::Object? = core::Object?>(final self::Extension5|get#method2::T% #this) → <S extends core::String = core::String>() → dynamic
+static method Extension5|method2<T extends core::Object? = core::Object?, S extends core::String = core::String>(lowered final self::Extension5|method2::T% #this) → dynamic {}
+static method Extension5|get#method2<T extends core::Object? = core::Object?>(lowered final self::Extension5|get#method2::T% #this) → <S extends core::String = core::String>() → dynamic
   return <S extends core::String = core::String>() → dynamic => self::Extension5|method2<self::Extension5|get#method2::T%, S>(#this);
-static method Extension5|method3<T extends core::Object? = core::Object?, S extends dynamic = dynamic>(final self::Extension5|method3::T% #this) → dynamic {}
-static method Extension5|get#method3<T extends core::Object? = core::Object?>(final self::Extension5|get#method3::T% #this) → <S extends dynamic = dynamic>() → dynamic
+static method Extension5|method3<T extends core::Object? = core::Object?, S extends dynamic = dynamic>(lowered final self::Extension5|method3::T% #this) → dynamic {}
+static method Extension5|get#method3<T extends core::Object? = core::Object?>(lowered final self::Extension5|get#method3::T% #this) → <S extends dynamic = dynamic>() → dynamic
   return <S extends dynamic = dynamic>() → dynamic => self::Extension5|method3<self::Extension5|get#method3::T%, S%>(#this);
-static method Extension5|method4<T extends core::Object? = core::Object?, S extends core::Object? = dynamic>(final self::Extension5|method4::T% #this) → dynamic {}
-static method Extension5|get#method4<T extends core::Object? = core::Object?>(final self::Extension5|get#method4::T% #this) → <S extends core::Object? = dynamic>() → dynamic
+static method Extension5|method4<T extends core::Object? = core::Object?, S extends core::Object? = dynamic>(lowered final self::Extension5|method4::T% #this) → dynamic {}
+static method Extension5|get#method4<T extends core::Object? = core::Object?>(lowered final self::Extension5|get#method4::T% #this) → <S extends core::Object? = dynamic>() → dynamic
   return <S extends core::Object? = dynamic>() → dynamic => self::Extension5|method4<self::Extension5|get#method4::T%, S%>(#this);
-static method Extension5|method5<T extends core::Object? = core::Object?, S extends core::Object? = core::Object?>(final self::Extension5|method5::T% #this) → dynamic {}
-static method Extension5|get#method5<T extends core::Object? = core::Object?>(final self::Extension5|get#method5::T% #this) → <S extends core::Object? = core::Object?>() → dynamic
+static method Extension5|method5<T extends core::Object? = core::Object?, S extends core::Object? = core::Object?>(lowered final self::Extension5|method5::T% #this) → dynamic {}
+static method Extension5|get#method5<T extends core::Object? = core::Object?>(lowered final self::Extension5|get#method5::T% #this) → <S extends core::Object? = core::Object?>() → dynamic
   return <S extends core::Object? = core::Object?>() → dynamic => self::Extension5|method5<self::Extension5|get#method5::T%, S%>(#this);
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/extension_bounds.dart.weak.expect b/pkg/front_end/testcases/nnbd/extension_bounds.dart.weak.expect
index 0cf68fa..c1de6b4 100644
--- a/pkg/front_end/testcases/nnbd/extension_bounds.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/extension_bounds.dart.weak.expect
@@ -62,79 +62,79 @@
   method method5 = self::Extension5|method5;
   tearoff method5 = self::Extension5|get#method5;
 }
-static method Extension1|method1<T extends core::Object = core::Object, S extends core::Object = core::Object>(final self::Extension1|method1::T #this) → dynamic {}
-static method Extension1|get#method1<T extends core::Object = core::Object>(final self::Extension1|get#method1::T #this) → <S extends core::Object = core::Object>() → dynamic
+static method Extension1|method1<T extends core::Object = core::Object, S extends core::Object = core::Object>(lowered final self::Extension1|method1::T #this) → dynamic {}
+static method Extension1|get#method1<T extends core::Object = core::Object>(lowered final self::Extension1|get#method1::T #this) → <S extends core::Object = core::Object>() → dynamic
   return <S extends core::Object = core::Object>() → dynamic => self::Extension1|method1<self::Extension1|get#method1::T, S>(#this);
-static method Extension1|method2<T extends core::Object = core::Object, S extends core::String = core::String>(final self::Extension1|method2::T #this) → dynamic {}
-static method Extension1|get#method2<T extends core::Object = core::Object>(final self::Extension1|get#method2::T #this) → <S extends core::String = core::String>() → dynamic
+static method Extension1|method2<T extends core::Object = core::Object, S extends core::String = core::String>(lowered final self::Extension1|method2::T #this) → dynamic {}
+static method Extension1|get#method2<T extends core::Object = core::Object>(lowered final self::Extension1|get#method2::T #this) → <S extends core::String = core::String>() → dynamic
   return <S extends core::String = core::String>() → dynamic => self::Extension1|method2<self::Extension1|get#method2::T, S>(#this);
-static method Extension1|method3<T extends core::Object = core::Object, S extends dynamic = dynamic>(final self::Extension1|method3::T #this) → dynamic {}
-static method Extension1|get#method3<T extends core::Object = core::Object>(final self::Extension1|get#method3::T #this) → <S extends dynamic = dynamic>() → dynamic
+static method Extension1|method3<T extends core::Object = core::Object, S extends dynamic = dynamic>(lowered final self::Extension1|method3::T #this) → dynamic {}
+static method Extension1|get#method3<T extends core::Object = core::Object>(lowered final self::Extension1|get#method3::T #this) → <S extends dynamic = dynamic>() → dynamic
   return <S extends dynamic = dynamic>() → dynamic => self::Extension1|method3<self::Extension1|get#method3::T, S%>(#this);
-static method Extension1|method4<T extends core::Object = core::Object, S extends core::Object? = dynamic>(final self::Extension1|method4::T #this) → dynamic {}
-static method Extension1|get#method4<T extends core::Object = core::Object>(final self::Extension1|get#method4::T #this) → <S extends core::Object? = dynamic>() → dynamic
+static method Extension1|method4<T extends core::Object = core::Object, S extends core::Object? = dynamic>(lowered final self::Extension1|method4::T #this) → dynamic {}
+static method Extension1|get#method4<T extends core::Object = core::Object>(lowered final self::Extension1|get#method4::T #this) → <S extends core::Object? = dynamic>() → dynamic
   return <S extends core::Object? = dynamic>() → dynamic => self::Extension1|method4<self::Extension1|get#method4::T, S%>(#this);
-static method Extension1|method5<T extends core::Object = core::Object, S extends core::Object? = core::Object?>(final self::Extension1|method5::T #this) → dynamic {}
-static method Extension1|get#method5<T extends core::Object = core::Object>(final self::Extension1|get#method5::T #this) → <S extends core::Object? = core::Object?>() → dynamic
+static method Extension1|method5<T extends core::Object = core::Object, S extends core::Object? = core::Object?>(lowered final self::Extension1|method5::T #this) → dynamic {}
+static method Extension1|get#method5<T extends core::Object = core::Object>(lowered final self::Extension1|get#method5::T #this) → <S extends core::Object? = core::Object?>() → dynamic
   return <S extends core::Object? = core::Object?>() → dynamic => self::Extension1|method5<self::Extension1|get#method5::T, S%>(#this);
-static method Extension2|method1<T extends core::String = core::String, S extends core::Object = core::Object>(final self::Extension2|method1::T #this) → dynamic {}
-static method Extension2|get#method1<T extends core::String = core::String>(final self::Extension2|get#method1::T #this) → <S extends core::Object = core::Object>() → dynamic
+static method Extension2|method1<T extends core::String = core::String, S extends core::Object = core::Object>(lowered final self::Extension2|method1::T #this) → dynamic {}
+static method Extension2|get#method1<T extends core::String = core::String>(lowered final self::Extension2|get#method1::T #this) → <S extends core::Object = core::Object>() → dynamic
   return <S extends core::Object = core::Object>() → dynamic => self::Extension2|method1<self::Extension2|get#method1::T, S>(#this);
-static method Extension2|method2<T extends core::String = core::String, S extends core::String = core::String>(final self::Extension2|method2::T #this) → dynamic {}
-static method Extension2|get#method2<T extends core::String = core::String>(final self::Extension2|get#method2::T #this) → <S extends core::String = core::String>() → dynamic
+static method Extension2|method2<T extends core::String = core::String, S extends core::String = core::String>(lowered final self::Extension2|method2::T #this) → dynamic {}
+static method Extension2|get#method2<T extends core::String = core::String>(lowered final self::Extension2|get#method2::T #this) → <S extends core::String = core::String>() → dynamic
   return <S extends core::String = core::String>() → dynamic => self::Extension2|method2<self::Extension2|get#method2::T, S>(#this);
-static method Extension2|method3<T extends core::String = core::String, S extends dynamic = dynamic>(final self::Extension2|method3::T #this) → dynamic {}
-static method Extension2|get#method3<T extends core::String = core::String>(final self::Extension2|get#method3::T #this) → <S extends dynamic = dynamic>() → dynamic
+static method Extension2|method3<T extends core::String = core::String, S extends dynamic = dynamic>(lowered final self::Extension2|method3::T #this) → dynamic {}
+static method Extension2|get#method3<T extends core::String = core::String>(lowered final self::Extension2|get#method3::T #this) → <S extends dynamic = dynamic>() → dynamic
   return <S extends dynamic = dynamic>() → dynamic => self::Extension2|method3<self::Extension2|get#method3::T, S%>(#this);
-static method Extension2|get#method4<T extends core::String = core::String>(final self::Extension2|get#method4::T #this) → <S extends core::Object? = dynamic>() → dynamic
+static method Extension2|get#method4<T extends core::String = core::String>(lowered final self::Extension2|get#method4::T #this) → <S extends core::Object? = dynamic>() → dynamic
   return <S extends core::Object? = dynamic>() → dynamic => self::Extension2|method4<self::Extension2|get#method4::T, S%>(#this);
-static method Extension2|method4<T extends core::String = core::String, S extends core::Object? = dynamic>(final self::Extension2|method4::T #this) → dynamic {}
-static method Extension2|method5<T extends core::String = core::String, S extends core::Object? = core::Object?>(final self::Extension2|method5::T #this) → dynamic {}
-static method Extension2|get#method5<T extends core::String = core::String>(final self::Extension2|get#method5::T #this) → <S extends core::Object? = core::Object?>() → dynamic
+static method Extension2|method4<T extends core::String = core::String, S extends core::Object? = dynamic>(lowered final self::Extension2|method4::T #this) → dynamic {}
+static method Extension2|method5<T extends core::String = core::String, S extends core::Object? = core::Object?>(lowered final self::Extension2|method5::T #this) → dynamic {}
+static method Extension2|get#method5<T extends core::String = core::String>(lowered final self::Extension2|get#method5::T #this) → <S extends core::Object? = core::Object?>() → dynamic
   return <S extends core::Object? = core::Object?>() → dynamic => self::Extension2|method5<self::Extension2|get#method5::T, S%>(#this);
-static method Extension3|method1<T extends dynamic = dynamic, S extends core::Object = core::Object>(final self::Extension3|method1::T% #this) → dynamic {}
-static method Extension3|get#method1<T extends dynamic = dynamic>(final self::Extension3|get#method1::T% #this) → <S extends core::Object = core::Object>() → dynamic
+static method Extension3|method1<T extends dynamic = dynamic, S extends core::Object = core::Object>(lowered final self::Extension3|method1::T% #this) → dynamic {}
+static method Extension3|get#method1<T extends dynamic = dynamic>(lowered final self::Extension3|get#method1::T% #this) → <S extends core::Object = core::Object>() → dynamic
   return <S extends core::Object = core::Object>() → dynamic => self::Extension3|method1<self::Extension3|get#method1::T%, S>(#this);
-static method Extension3|method2<T extends dynamic = dynamic, S extends core::String = core::String>(final self::Extension3|method2::T% #this) → dynamic {}
-static method Extension3|get#method2<T extends dynamic = dynamic>(final self::Extension3|get#method2::T% #this) → <S extends core::String = core::String>() → dynamic
+static method Extension3|method2<T extends dynamic = dynamic, S extends core::String = core::String>(lowered final self::Extension3|method2::T% #this) → dynamic {}
+static method Extension3|get#method2<T extends dynamic = dynamic>(lowered final self::Extension3|get#method2::T% #this) → <S extends core::String = core::String>() → dynamic
   return <S extends core::String = core::String>() → dynamic => self::Extension3|method2<self::Extension3|get#method2::T%, S>(#this);
-static method Extension3|method3<T extends dynamic = dynamic, S extends dynamic = dynamic>(final self::Extension3|method3::T% #this) → dynamic {}
-static method Extension3|get#method3<T extends dynamic = dynamic>(final self::Extension3|get#method3::T% #this) → <S extends dynamic = dynamic>() → dynamic
+static method Extension3|method3<T extends dynamic = dynamic, S extends dynamic = dynamic>(lowered final self::Extension3|method3::T% #this) → dynamic {}
+static method Extension3|get#method3<T extends dynamic = dynamic>(lowered final self::Extension3|get#method3::T% #this) → <S extends dynamic = dynamic>() → dynamic
   return <S extends dynamic = dynamic>() → dynamic => self::Extension3|method3<self::Extension3|get#method3::T%, S%>(#this);
-static method Extension3|method4<T extends dynamic = dynamic, S extends core::Object? = dynamic>(final self::Extension3|method4::T% #this) → dynamic {}
-static method Extension3|get#method4<T extends dynamic = dynamic>(final self::Extension3|get#method4::T% #this) → <S extends core::Object? = dynamic>() → dynamic
+static method Extension3|method4<T extends dynamic = dynamic, S extends core::Object? = dynamic>(lowered final self::Extension3|method4::T% #this) → dynamic {}
+static method Extension3|get#method4<T extends dynamic = dynamic>(lowered final self::Extension3|get#method4::T% #this) → <S extends core::Object? = dynamic>() → dynamic
   return <S extends core::Object? = dynamic>() → dynamic => self::Extension3|method4<self::Extension3|get#method4::T%, S%>(#this);
-static method Extension3|method5<T extends dynamic = dynamic, S extends core::Object? = core::Object?>(final self::Extension3|method5::T% #this) → dynamic {}
-static method Extension3|get#method5<T extends dynamic = dynamic>(final self::Extension3|get#method5::T% #this) → <S extends core::Object? = core::Object?>() → dynamic
+static method Extension3|method5<T extends dynamic = dynamic, S extends core::Object? = core::Object?>(lowered final self::Extension3|method5::T% #this) → dynamic {}
+static method Extension3|get#method5<T extends dynamic = dynamic>(lowered final self::Extension3|get#method5::T% #this) → <S extends core::Object? = core::Object?>() → dynamic
   return <S extends core::Object? = core::Object?>() → dynamic => self::Extension3|method5<self::Extension3|get#method5::T%, S%>(#this);
-static method Extension4|method1<T extends core::Object? = dynamic, S extends core::Object = core::Object>(final self::Extension4|method1::T% #this) → dynamic {}
-static method Extension4|get#method1<T extends core::Object? = dynamic>(final self::Extension4|get#method1::T% #this) → <S extends core::Object = core::Object>() → dynamic
+static method Extension4|method1<T extends core::Object? = dynamic, S extends core::Object = core::Object>(lowered final self::Extension4|method1::T% #this) → dynamic {}
+static method Extension4|get#method1<T extends core::Object? = dynamic>(lowered final self::Extension4|get#method1::T% #this) → <S extends core::Object = core::Object>() → dynamic
   return <S extends core::Object = core::Object>() → dynamic => self::Extension4|method1<self::Extension4|get#method1::T%, S>(#this);
-static method Extension4|method2<T extends core::Object? = dynamic, S extends core::String = core::String>(final self::Extension4|method2::T% #this) → dynamic {}
-static method Extension4|get#method2<T extends core::Object? = dynamic>(final self::Extension4|get#method2::T% #this) → <S extends core::String = core::String>() → dynamic
+static method Extension4|method2<T extends core::Object? = dynamic, S extends core::String = core::String>(lowered final self::Extension4|method2::T% #this) → dynamic {}
+static method Extension4|get#method2<T extends core::Object? = dynamic>(lowered final self::Extension4|get#method2::T% #this) → <S extends core::String = core::String>() → dynamic
   return <S extends core::String = core::String>() → dynamic => self::Extension4|method2<self::Extension4|get#method2::T%, S>(#this);
-static method Extension4|method3<T extends core::Object? = dynamic, S extends dynamic = dynamic>(final self::Extension4|method3::T% #this) → dynamic {}
-static method Extension4|get#method3<T extends core::Object? = dynamic>(final self::Extension4|get#method3::T% #this) → <S extends dynamic = dynamic>() → dynamic
+static method Extension4|method3<T extends core::Object? = dynamic, S extends dynamic = dynamic>(lowered final self::Extension4|method3::T% #this) → dynamic {}
+static method Extension4|get#method3<T extends core::Object? = dynamic>(lowered final self::Extension4|get#method3::T% #this) → <S extends dynamic = dynamic>() → dynamic
   return <S extends dynamic = dynamic>() → dynamic => self::Extension4|method3<self::Extension4|get#method3::T%, S%>(#this);
-static method Extension4|method4<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(final self::Extension4|method4::T% #this) → dynamic {}
-static method Extension4|get#method4<T extends core::Object? = dynamic>(final self::Extension4|get#method4::T% #this) → <S extends core::Object? = dynamic>() → dynamic
+static method Extension4|method4<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(lowered final self::Extension4|method4::T% #this) → dynamic {}
+static method Extension4|get#method4<T extends core::Object? = dynamic>(lowered final self::Extension4|get#method4::T% #this) → <S extends core::Object? = dynamic>() → dynamic
   return <S extends core::Object? = dynamic>() → dynamic => self::Extension4|method4<self::Extension4|get#method4::T%, S%>(#this);
-static method Extension4|method5<T extends core::Object? = dynamic, S extends core::Object? = core::Object?>(final self::Extension4|method5::T% #this) → dynamic {}
-static method Extension4|get#method5<T extends core::Object? = dynamic>(final self::Extension4|get#method5::T% #this) → <S extends core::Object? = core::Object?>() → dynamic
+static method Extension4|method5<T extends core::Object? = dynamic, S extends core::Object? = core::Object?>(lowered final self::Extension4|method5::T% #this) → dynamic {}
+static method Extension4|get#method5<T extends core::Object? = dynamic>(lowered final self::Extension4|get#method5::T% #this) → <S extends core::Object? = core::Object?>() → dynamic
   return <S extends core::Object? = core::Object?>() → dynamic => self::Extension4|method5<self::Extension4|get#method5::T%, S%>(#this);
-static method Extension5|method1<T extends core::Object? = core::Object?, S extends core::Object = core::Object>(final self::Extension5|method1::T% #this) → dynamic {}
-static method Extension5|get#method1<T extends core::Object? = core::Object?>(final self::Extension5|get#method1::T% #this) → <S extends core::Object = core::Object>() → dynamic
+static method Extension5|method1<T extends core::Object? = core::Object?, S extends core::Object = core::Object>(lowered final self::Extension5|method1::T% #this) → dynamic {}
+static method Extension5|get#method1<T extends core::Object? = core::Object?>(lowered final self::Extension5|get#method1::T% #this) → <S extends core::Object = core::Object>() → dynamic
   return <S extends core::Object = core::Object>() → dynamic => self::Extension5|method1<self::Extension5|get#method1::T%, S>(#this);
-static method Extension5|method2<T extends core::Object? = core::Object?, S extends core::String = core::String>(final self::Extension5|method2::T% #this) → dynamic {}
-static method Extension5|get#method2<T extends core::Object? = core::Object?>(final self::Extension5|get#method2::T% #this) → <S extends core::String = core::String>() → dynamic
+static method Extension5|method2<T extends core::Object? = core::Object?, S extends core::String = core::String>(lowered final self::Extension5|method2::T% #this) → dynamic {}
+static method Extension5|get#method2<T extends core::Object? = core::Object?>(lowered final self::Extension5|get#method2::T% #this) → <S extends core::String = core::String>() → dynamic
   return <S extends core::String = core::String>() → dynamic => self::Extension5|method2<self::Extension5|get#method2::T%, S>(#this);
-static method Extension5|method3<T extends core::Object? = core::Object?, S extends dynamic = dynamic>(final self::Extension5|method3::T% #this) → dynamic {}
-static method Extension5|get#method3<T extends core::Object? = core::Object?>(final self::Extension5|get#method3::T% #this) → <S extends dynamic = dynamic>() → dynamic
+static method Extension5|method3<T extends core::Object? = core::Object?, S extends dynamic = dynamic>(lowered final self::Extension5|method3::T% #this) → dynamic {}
+static method Extension5|get#method3<T extends core::Object? = core::Object?>(lowered final self::Extension5|get#method3::T% #this) → <S extends dynamic = dynamic>() → dynamic
   return <S extends dynamic = dynamic>() → dynamic => self::Extension5|method3<self::Extension5|get#method3::T%, S%>(#this);
-static method Extension5|method4<T extends core::Object? = core::Object?, S extends core::Object? = dynamic>(final self::Extension5|method4::T% #this) → dynamic {}
-static method Extension5|get#method4<T extends core::Object? = core::Object?>(final self::Extension5|get#method4::T% #this) → <S extends core::Object? = dynamic>() → dynamic
+static method Extension5|method4<T extends core::Object? = core::Object?, S extends core::Object? = dynamic>(lowered final self::Extension5|method4::T% #this) → dynamic {}
+static method Extension5|get#method4<T extends core::Object? = core::Object?>(lowered final self::Extension5|get#method4::T% #this) → <S extends core::Object? = dynamic>() → dynamic
   return <S extends core::Object? = dynamic>() → dynamic => self::Extension5|method4<self::Extension5|get#method4::T%, S%>(#this);
-static method Extension5|method5<T extends core::Object? = core::Object?, S extends core::Object? = core::Object?>(final self::Extension5|method5::T% #this) → dynamic {}
-static method Extension5|get#method5<T extends core::Object? = core::Object?>(final self::Extension5|get#method5::T% #this) → <S extends core::Object? = core::Object?>() → dynamic
+static method Extension5|method5<T extends core::Object? = core::Object?, S extends core::Object? = core::Object?>(lowered final self::Extension5|method5::T% #this) → dynamic {}
+static method Extension5|get#method5<T extends core::Object? = core::Object?>(lowered final self::Extension5|get#method5::T% #this) → <S extends core::Object? = core::Object?>() → dynamic
   return <S extends core::Object? = core::Object?>() → dynamic => self::Extension5|method5<self::Extension5|get#method5::T%, S%>(#this);
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/extension_bounds.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/extension_bounds.dart.weak.transformed.expect
index 0cf68fa..c1de6b4 100644
--- a/pkg/front_end/testcases/nnbd/extension_bounds.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/extension_bounds.dart.weak.transformed.expect
@@ -62,79 +62,79 @@
   method method5 = self::Extension5|method5;
   tearoff method5 = self::Extension5|get#method5;
 }
-static method Extension1|method1<T extends core::Object = core::Object, S extends core::Object = core::Object>(final self::Extension1|method1::T #this) → dynamic {}
-static method Extension1|get#method1<T extends core::Object = core::Object>(final self::Extension1|get#method1::T #this) → <S extends core::Object = core::Object>() → dynamic
+static method Extension1|method1<T extends core::Object = core::Object, S extends core::Object = core::Object>(lowered final self::Extension1|method1::T #this) → dynamic {}
+static method Extension1|get#method1<T extends core::Object = core::Object>(lowered final self::Extension1|get#method1::T #this) → <S extends core::Object = core::Object>() → dynamic
   return <S extends core::Object = core::Object>() → dynamic => self::Extension1|method1<self::Extension1|get#method1::T, S>(#this);
-static method Extension1|method2<T extends core::Object = core::Object, S extends core::String = core::String>(final self::Extension1|method2::T #this) → dynamic {}
-static method Extension1|get#method2<T extends core::Object = core::Object>(final self::Extension1|get#method2::T #this) → <S extends core::String = core::String>() → dynamic
+static method Extension1|method2<T extends core::Object = core::Object, S extends core::String = core::String>(lowered final self::Extension1|method2::T #this) → dynamic {}
+static method Extension1|get#method2<T extends core::Object = core::Object>(lowered final self::Extension1|get#method2::T #this) → <S extends core::String = core::String>() → dynamic
   return <S extends core::String = core::String>() → dynamic => self::Extension1|method2<self::Extension1|get#method2::T, S>(#this);
-static method Extension1|method3<T extends core::Object = core::Object, S extends dynamic = dynamic>(final self::Extension1|method3::T #this) → dynamic {}
-static method Extension1|get#method3<T extends core::Object = core::Object>(final self::Extension1|get#method3::T #this) → <S extends dynamic = dynamic>() → dynamic
+static method Extension1|method3<T extends core::Object = core::Object, S extends dynamic = dynamic>(lowered final self::Extension1|method3::T #this) → dynamic {}
+static method Extension1|get#method3<T extends core::Object = core::Object>(lowered final self::Extension1|get#method3::T #this) → <S extends dynamic = dynamic>() → dynamic
   return <S extends dynamic = dynamic>() → dynamic => self::Extension1|method3<self::Extension1|get#method3::T, S%>(#this);
-static method Extension1|method4<T extends core::Object = core::Object, S extends core::Object? = dynamic>(final self::Extension1|method4::T #this) → dynamic {}
-static method Extension1|get#method4<T extends core::Object = core::Object>(final self::Extension1|get#method4::T #this) → <S extends core::Object? = dynamic>() → dynamic
+static method Extension1|method4<T extends core::Object = core::Object, S extends core::Object? = dynamic>(lowered final self::Extension1|method4::T #this) → dynamic {}
+static method Extension1|get#method4<T extends core::Object = core::Object>(lowered final self::Extension1|get#method4::T #this) → <S extends core::Object? = dynamic>() → dynamic
   return <S extends core::Object? = dynamic>() → dynamic => self::Extension1|method4<self::Extension1|get#method4::T, S%>(#this);
-static method Extension1|method5<T extends core::Object = core::Object, S extends core::Object? = core::Object?>(final self::Extension1|method5::T #this) → dynamic {}
-static method Extension1|get#method5<T extends core::Object = core::Object>(final self::Extension1|get#method5::T #this) → <S extends core::Object? = core::Object?>() → dynamic
+static method Extension1|method5<T extends core::Object = core::Object, S extends core::Object? = core::Object?>(lowered final self::Extension1|method5::T #this) → dynamic {}
+static method Extension1|get#method5<T extends core::Object = core::Object>(lowered final self::Extension1|get#method5::T #this) → <S extends core::Object? = core::Object?>() → dynamic
   return <S extends core::Object? = core::Object?>() → dynamic => self::Extension1|method5<self::Extension1|get#method5::T, S%>(#this);
-static method Extension2|method1<T extends core::String = core::String, S extends core::Object = core::Object>(final self::Extension2|method1::T #this) → dynamic {}
-static method Extension2|get#method1<T extends core::String = core::String>(final self::Extension2|get#method1::T #this) → <S extends core::Object = core::Object>() → dynamic
+static method Extension2|method1<T extends core::String = core::String, S extends core::Object = core::Object>(lowered final self::Extension2|method1::T #this) → dynamic {}
+static method Extension2|get#method1<T extends core::String = core::String>(lowered final self::Extension2|get#method1::T #this) → <S extends core::Object = core::Object>() → dynamic
   return <S extends core::Object = core::Object>() → dynamic => self::Extension2|method1<self::Extension2|get#method1::T, S>(#this);
-static method Extension2|method2<T extends core::String = core::String, S extends core::String = core::String>(final self::Extension2|method2::T #this) → dynamic {}
-static method Extension2|get#method2<T extends core::String = core::String>(final self::Extension2|get#method2::T #this) → <S extends core::String = core::String>() → dynamic
+static method Extension2|method2<T extends core::String = core::String, S extends core::String = core::String>(lowered final self::Extension2|method2::T #this) → dynamic {}
+static method Extension2|get#method2<T extends core::String = core::String>(lowered final self::Extension2|get#method2::T #this) → <S extends core::String = core::String>() → dynamic
   return <S extends core::String = core::String>() → dynamic => self::Extension2|method2<self::Extension2|get#method2::T, S>(#this);
-static method Extension2|method3<T extends core::String = core::String, S extends dynamic = dynamic>(final self::Extension2|method3::T #this) → dynamic {}
-static method Extension2|get#method3<T extends core::String = core::String>(final self::Extension2|get#method3::T #this) → <S extends dynamic = dynamic>() → dynamic
+static method Extension2|method3<T extends core::String = core::String, S extends dynamic = dynamic>(lowered final self::Extension2|method3::T #this) → dynamic {}
+static method Extension2|get#method3<T extends core::String = core::String>(lowered final self::Extension2|get#method3::T #this) → <S extends dynamic = dynamic>() → dynamic
   return <S extends dynamic = dynamic>() → dynamic => self::Extension2|method3<self::Extension2|get#method3::T, S%>(#this);
-static method Extension2|get#method4<T extends core::String = core::String>(final self::Extension2|get#method4::T #this) → <S extends core::Object? = dynamic>() → dynamic
+static method Extension2|get#method4<T extends core::String = core::String>(lowered final self::Extension2|get#method4::T #this) → <S extends core::Object? = dynamic>() → dynamic
   return <S extends core::Object? = dynamic>() → dynamic => self::Extension2|method4<self::Extension2|get#method4::T, S%>(#this);
-static method Extension2|method4<T extends core::String = core::String, S extends core::Object? = dynamic>(final self::Extension2|method4::T #this) → dynamic {}
-static method Extension2|method5<T extends core::String = core::String, S extends core::Object? = core::Object?>(final self::Extension2|method5::T #this) → dynamic {}
-static method Extension2|get#method5<T extends core::String = core::String>(final self::Extension2|get#method5::T #this) → <S extends core::Object? = core::Object?>() → dynamic
+static method Extension2|method4<T extends core::String = core::String, S extends core::Object? = dynamic>(lowered final self::Extension2|method4::T #this) → dynamic {}
+static method Extension2|method5<T extends core::String = core::String, S extends core::Object? = core::Object?>(lowered final self::Extension2|method5::T #this) → dynamic {}
+static method Extension2|get#method5<T extends core::String = core::String>(lowered final self::Extension2|get#method5::T #this) → <S extends core::Object? = core::Object?>() → dynamic
   return <S extends core::Object? = core::Object?>() → dynamic => self::Extension2|method5<self::Extension2|get#method5::T, S%>(#this);
-static method Extension3|method1<T extends dynamic = dynamic, S extends core::Object = core::Object>(final self::Extension3|method1::T% #this) → dynamic {}
-static method Extension3|get#method1<T extends dynamic = dynamic>(final self::Extension3|get#method1::T% #this) → <S extends core::Object = core::Object>() → dynamic
+static method Extension3|method1<T extends dynamic = dynamic, S extends core::Object = core::Object>(lowered final self::Extension3|method1::T% #this) → dynamic {}
+static method Extension3|get#method1<T extends dynamic = dynamic>(lowered final self::Extension3|get#method1::T% #this) → <S extends core::Object = core::Object>() → dynamic
   return <S extends core::Object = core::Object>() → dynamic => self::Extension3|method1<self::Extension3|get#method1::T%, S>(#this);
-static method Extension3|method2<T extends dynamic = dynamic, S extends core::String = core::String>(final self::Extension3|method2::T% #this) → dynamic {}
-static method Extension3|get#method2<T extends dynamic = dynamic>(final self::Extension3|get#method2::T% #this) → <S extends core::String = core::String>() → dynamic
+static method Extension3|method2<T extends dynamic = dynamic, S extends core::String = core::String>(lowered final self::Extension3|method2::T% #this) → dynamic {}
+static method Extension3|get#method2<T extends dynamic = dynamic>(lowered final self::Extension3|get#method2::T% #this) → <S extends core::String = core::String>() → dynamic
   return <S extends core::String = core::String>() → dynamic => self::Extension3|method2<self::Extension3|get#method2::T%, S>(#this);
-static method Extension3|method3<T extends dynamic = dynamic, S extends dynamic = dynamic>(final self::Extension3|method3::T% #this) → dynamic {}
-static method Extension3|get#method3<T extends dynamic = dynamic>(final self::Extension3|get#method3::T% #this) → <S extends dynamic = dynamic>() → dynamic
+static method Extension3|method3<T extends dynamic = dynamic, S extends dynamic = dynamic>(lowered final self::Extension3|method3::T% #this) → dynamic {}
+static method Extension3|get#method3<T extends dynamic = dynamic>(lowered final self::Extension3|get#method3::T% #this) → <S extends dynamic = dynamic>() → dynamic
   return <S extends dynamic = dynamic>() → dynamic => self::Extension3|method3<self::Extension3|get#method3::T%, S%>(#this);
-static method Extension3|method4<T extends dynamic = dynamic, S extends core::Object? = dynamic>(final self::Extension3|method4::T% #this) → dynamic {}
-static method Extension3|get#method4<T extends dynamic = dynamic>(final self::Extension3|get#method4::T% #this) → <S extends core::Object? = dynamic>() → dynamic
+static method Extension3|method4<T extends dynamic = dynamic, S extends core::Object? = dynamic>(lowered final self::Extension3|method4::T% #this) → dynamic {}
+static method Extension3|get#method4<T extends dynamic = dynamic>(lowered final self::Extension3|get#method4::T% #this) → <S extends core::Object? = dynamic>() → dynamic
   return <S extends core::Object? = dynamic>() → dynamic => self::Extension3|method4<self::Extension3|get#method4::T%, S%>(#this);
-static method Extension3|method5<T extends dynamic = dynamic, S extends core::Object? = core::Object?>(final self::Extension3|method5::T% #this) → dynamic {}
-static method Extension3|get#method5<T extends dynamic = dynamic>(final self::Extension3|get#method5::T% #this) → <S extends core::Object? = core::Object?>() → dynamic
+static method Extension3|method5<T extends dynamic = dynamic, S extends core::Object? = core::Object?>(lowered final self::Extension3|method5::T% #this) → dynamic {}
+static method Extension3|get#method5<T extends dynamic = dynamic>(lowered final self::Extension3|get#method5::T% #this) → <S extends core::Object? = core::Object?>() → dynamic
   return <S extends core::Object? = core::Object?>() → dynamic => self::Extension3|method5<self::Extension3|get#method5::T%, S%>(#this);
-static method Extension4|method1<T extends core::Object? = dynamic, S extends core::Object = core::Object>(final self::Extension4|method1::T% #this) → dynamic {}
-static method Extension4|get#method1<T extends core::Object? = dynamic>(final self::Extension4|get#method1::T% #this) → <S extends core::Object = core::Object>() → dynamic
+static method Extension4|method1<T extends core::Object? = dynamic, S extends core::Object = core::Object>(lowered final self::Extension4|method1::T% #this) → dynamic {}
+static method Extension4|get#method1<T extends core::Object? = dynamic>(lowered final self::Extension4|get#method1::T% #this) → <S extends core::Object = core::Object>() → dynamic
   return <S extends core::Object = core::Object>() → dynamic => self::Extension4|method1<self::Extension4|get#method1::T%, S>(#this);
-static method Extension4|method2<T extends core::Object? = dynamic, S extends core::String = core::String>(final self::Extension4|method2::T% #this) → dynamic {}
-static method Extension4|get#method2<T extends core::Object? = dynamic>(final self::Extension4|get#method2::T% #this) → <S extends core::String = core::String>() → dynamic
+static method Extension4|method2<T extends core::Object? = dynamic, S extends core::String = core::String>(lowered final self::Extension4|method2::T% #this) → dynamic {}
+static method Extension4|get#method2<T extends core::Object? = dynamic>(lowered final self::Extension4|get#method2::T% #this) → <S extends core::String = core::String>() → dynamic
   return <S extends core::String = core::String>() → dynamic => self::Extension4|method2<self::Extension4|get#method2::T%, S>(#this);
-static method Extension4|method3<T extends core::Object? = dynamic, S extends dynamic = dynamic>(final self::Extension4|method3::T% #this) → dynamic {}
-static method Extension4|get#method3<T extends core::Object? = dynamic>(final self::Extension4|get#method3::T% #this) → <S extends dynamic = dynamic>() → dynamic
+static method Extension4|method3<T extends core::Object? = dynamic, S extends dynamic = dynamic>(lowered final self::Extension4|method3::T% #this) → dynamic {}
+static method Extension4|get#method3<T extends core::Object? = dynamic>(lowered final self::Extension4|get#method3::T% #this) → <S extends dynamic = dynamic>() → dynamic
   return <S extends dynamic = dynamic>() → dynamic => self::Extension4|method3<self::Extension4|get#method3::T%, S%>(#this);
-static method Extension4|method4<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(final self::Extension4|method4::T% #this) → dynamic {}
-static method Extension4|get#method4<T extends core::Object? = dynamic>(final self::Extension4|get#method4::T% #this) → <S extends core::Object? = dynamic>() → dynamic
+static method Extension4|method4<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(lowered final self::Extension4|method4::T% #this) → dynamic {}
+static method Extension4|get#method4<T extends core::Object? = dynamic>(lowered final self::Extension4|get#method4::T% #this) → <S extends core::Object? = dynamic>() → dynamic
   return <S extends core::Object? = dynamic>() → dynamic => self::Extension4|method4<self::Extension4|get#method4::T%, S%>(#this);
-static method Extension4|method5<T extends core::Object? = dynamic, S extends core::Object? = core::Object?>(final self::Extension4|method5::T% #this) → dynamic {}
-static method Extension4|get#method5<T extends core::Object? = dynamic>(final self::Extension4|get#method5::T% #this) → <S extends core::Object? = core::Object?>() → dynamic
+static method Extension4|method5<T extends core::Object? = dynamic, S extends core::Object? = core::Object?>(lowered final self::Extension4|method5::T% #this) → dynamic {}
+static method Extension4|get#method5<T extends core::Object? = dynamic>(lowered final self::Extension4|get#method5::T% #this) → <S extends core::Object? = core::Object?>() → dynamic
   return <S extends core::Object? = core::Object?>() → dynamic => self::Extension4|method5<self::Extension4|get#method5::T%, S%>(#this);
-static method Extension5|method1<T extends core::Object? = core::Object?, S extends core::Object = core::Object>(final self::Extension5|method1::T% #this) → dynamic {}
-static method Extension5|get#method1<T extends core::Object? = core::Object?>(final self::Extension5|get#method1::T% #this) → <S extends core::Object = core::Object>() → dynamic
+static method Extension5|method1<T extends core::Object? = core::Object?, S extends core::Object = core::Object>(lowered final self::Extension5|method1::T% #this) → dynamic {}
+static method Extension5|get#method1<T extends core::Object? = core::Object?>(lowered final self::Extension5|get#method1::T% #this) → <S extends core::Object = core::Object>() → dynamic
   return <S extends core::Object = core::Object>() → dynamic => self::Extension5|method1<self::Extension5|get#method1::T%, S>(#this);
-static method Extension5|method2<T extends core::Object? = core::Object?, S extends core::String = core::String>(final self::Extension5|method2::T% #this) → dynamic {}
-static method Extension5|get#method2<T extends core::Object? = core::Object?>(final self::Extension5|get#method2::T% #this) → <S extends core::String = core::String>() → dynamic
+static method Extension5|method2<T extends core::Object? = core::Object?, S extends core::String = core::String>(lowered final self::Extension5|method2::T% #this) → dynamic {}
+static method Extension5|get#method2<T extends core::Object? = core::Object?>(lowered final self::Extension5|get#method2::T% #this) → <S extends core::String = core::String>() → dynamic
   return <S extends core::String = core::String>() → dynamic => self::Extension5|method2<self::Extension5|get#method2::T%, S>(#this);
-static method Extension5|method3<T extends core::Object? = core::Object?, S extends dynamic = dynamic>(final self::Extension5|method3::T% #this) → dynamic {}
-static method Extension5|get#method3<T extends core::Object? = core::Object?>(final self::Extension5|get#method3::T% #this) → <S extends dynamic = dynamic>() → dynamic
+static method Extension5|method3<T extends core::Object? = core::Object?, S extends dynamic = dynamic>(lowered final self::Extension5|method3::T% #this) → dynamic {}
+static method Extension5|get#method3<T extends core::Object? = core::Object?>(lowered final self::Extension5|get#method3::T% #this) → <S extends dynamic = dynamic>() → dynamic
   return <S extends dynamic = dynamic>() → dynamic => self::Extension5|method3<self::Extension5|get#method3::T%, S%>(#this);
-static method Extension5|method4<T extends core::Object? = core::Object?, S extends core::Object? = dynamic>(final self::Extension5|method4::T% #this) → dynamic {}
-static method Extension5|get#method4<T extends core::Object? = core::Object?>(final self::Extension5|get#method4::T% #this) → <S extends core::Object? = dynamic>() → dynamic
+static method Extension5|method4<T extends core::Object? = core::Object?, S extends core::Object? = dynamic>(lowered final self::Extension5|method4::T% #this) → dynamic {}
+static method Extension5|get#method4<T extends core::Object? = core::Object?>(lowered final self::Extension5|get#method4::T% #this) → <S extends core::Object? = dynamic>() → dynamic
   return <S extends core::Object? = dynamic>() → dynamic => self::Extension5|method4<self::Extension5|get#method4::T%, S%>(#this);
-static method Extension5|method5<T extends core::Object? = core::Object?, S extends core::Object? = core::Object?>(final self::Extension5|method5::T% #this) → dynamic {}
-static method Extension5|get#method5<T extends core::Object? = core::Object?>(final self::Extension5|get#method5::T% #this) → <S extends core::Object? = core::Object?>() → dynamic
+static method Extension5|method5<T extends core::Object? = core::Object?, S extends core::Object? = core::Object?>(lowered final self::Extension5|method5::T% #this) → dynamic {}
+static method Extension5|get#method5<T extends core::Object? = core::Object?>(lowered final self::Extension5|get#method5::T% #this) → <S extends core::Object? = core::Object?>() → dynamic
   return <S extends core::Object? = core::Object?>() → dynamic => self::Extension5|method5<self::Extension5|get#method5::T%, S%>(#this);
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/extension_never.dart.outline.expect b/pkg/front_end/testcases/nnbd/extension_never.dart.outline.expect
index 718b500..b564483 100644
--- a/pkg/front_end/testcases/nnbd/extension_never.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/extension_never.dart.outline.expect
@@ -5,9 +5,9 @@
   method extensionMethod = self::Extension|extensionMethod;
   tearoff extensionMethod = self::Extension|get#extensionMethod;
 }
-static method Extension|extensionMethod(final Never #this) → dynamic
+static method Extension|extensionMethod(lowered final Never #this) → dynamic
   ;
-static method Extension|get#extensionMethod(final Never #this) → () → dynamic
+static method Extension|get#extensionMethod(lowered final Never #this) → () → dynamic
   return () → dynamic => self::Extension|extensionMethod(#this);
 static method implicitAccess(Never never) → dynamic
   ;
diff --git a/pkg/front_end/testcases/nnbd/extension_never.dart.strong.expect b/pkg/front_end/testcases/nnbd/extension_never.dart.strong.expect
index 5c20141..0319a8a 100644
--- a/pkg/front_end/testcases/nnbd/extension_never.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/extension_never.dart.strong.expect
@@ -5,8 +5,8 @@
   method extensionMethod = self::Extension|extensionMethod;
   tearoff extensionMethod = self::Extension|get#extensionMethod;
 }
-static method Extension|extensionMethod(final Never #this) → dynamic {}
-static method Extension|get#extensionMethod(final Never #this) → () → dynamic
+static method Extension|extensionMethod(lowered final Never #this) → dynamic {}
+static method Extension|get#extensionMethod(lowered final Never #this) → () → dynamic
   return () → dynamic => self::Extension|extensionMethod(#this);
 static method implicitAccess(Never never) → dynamic {
   never.extensionMethod();
diff --git a/pkg/front_end/testcases/nnbd/extension_never.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/extension_never.dart.strong.transformed.expect
index 5c20141..0319a8a 100644
--- a/pkg/front_end/testcases/nnbd/extension_never.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/extension_never.dart.strong.transformed.expect
@@ -5,8 +5,8 @@
   method extensionMethod = self::Extension|extensionMethod;
   tearoff extensionMethod = self::Extension|get#extensionMethod;
 }
-static method Extension|extensionMethod(final Never #this) → dynamic {}
-static method Extension|get#extensionMethod(final Never #this) → () → dynamic
+static method Extension|extensionMethod(lowered final Never #this) → dynamic {}
+static method Extension|get#extensionMethod(lowered final Never #this) → () → dynamic
   return () → dynamic => self::Extension|extensionMethod(#this);
 static method implicitAccess(Never never) → dynamic {
   never.extensionMethod();
diff --git a/pkg/front_end/testcases/nnbd/extension_never.dart.weak.expect b/pkg/front_end/testcases/nnbd/extension_never.dart.weak.expect
index 5c94642..b3068c2 100644
--- a/pkg/front_end/testcases/nnbd/extension_never.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/extension_never.dart.weak.expect
@@ -6,8 +6,8 @@
   method extensionMethod = self::Extension|extensionMethod;
   tearoff extensionMethod = self::Extension|get#extensionMethod;
 }
-static method Extension|extensionMethod(final Never #this) → dynamic {}
-static method Extension|get#extensionMethod(final Never #this) → () → dynamic
+static method Extension|extensionMethod(lowered final Never #this) → dynamic {}
+static method Extension|get#extensionMethod(lowered final Never #this) → () → dynamic
   return () → dynamic => self::Extension|extensionMethod(#this);
 static method implicitAccess(Never never) → dynamic {
   let final Never #t1 = (let final Never #t2 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).extensionMethod() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
diff --git a/pkg/front_end/testcases/nnbd/extension_never.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/extension_never.dart.weak.transformed.expect
index 5c94642..b3068c2 100644
--- a/pkg/front_end/testcases/nnbd/extension_never.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/extension_never.dart.weak.transformed.expect
@@ -6,8 +6,8 @@
   method extensionMethod = self::Extension|extensionMethod;
   tearoff extensionMethod = self::Extension|get#extensionMethod;
 }
-static method Extension|extensionMethod(final Never #this) → dynamic {}
-static method Extension|get#extensionMethod(final Never #this) → () → dynamic
+static method Extension|extensionMethod(lowered final Never #this) → dynamic {}
+static method Extension|get#extensionMethod(lowered final Never #this) → () → dynamic
   return () → dynamic => self::Extension|extensionMethod(#this);
 static method implicitAccess(Never never) → dynamic {
   let final Never #t1 = (let final Never #t2 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).extensionMethod() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
diff --git a/pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart.outline.expect b/pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart.outline.expect
index d373301..7798a93 100644
--- a/pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart.outline.expect
@@ -18,13 +18,13 @@
   method method2 = self::BoundExtension|method2;
   tearoff method2 = self::BoundExtension|get#method2;
 }
-static method Extension|method1<T extends core::Object? = dynamic>(final self::Extension|method1::T% #this) → self::Extension|method1::T%
+static method Extension|method1<T extends core::Object? = dynamic>(lowered final self::Extension|method1::T% #this) → self::Extension|method1::T%
   ;
-static method Extension|get#method1<T extends core::Object? = dynamic>(final self::Extension|get#method1::T% #this) → () → self::Extension|get#method1::T%
+static method Extension|get#method1<T extends core::Object? = dynamic>(lowered final self::Extension|get#method1::T% #this) → () → self::Extension|get#method1::T%
   return () → self::Extension|get#method1::T% => self::Extension|method1<self::Extension|get#method1::T%>(#this);
-static method BoundExtension|method2<T extends self::Class = self::Class>(final self::BoundExtension|method2::T #this) → self::BoundExtension|method2::T
+static method BoundExtension|method2<T extends self::Class = self::Class>(lowered final self::BoundExtension|method2::T #this) → self::BoundExtension|method2::T
   ;
-static method BoundExtension|get#method2<T extends self::Class = self::Class>(final self::BoundExtension|get#method2::T #this) → () → self::BoundExtension|get#method2::T
+static method BoundExtension|get#method2<T extends self::Class = self::Class>(lowered final self::BoundExtension|get#method2::T #this) → () → self::BoundExtension|get#method2::T
   return () → self::BoundExtension|get#method2::T => self::BoundExtension|method2<self::BoundExtension|get#method2::T>(#this);
 static method test1<T extends core::Object? = dynamic>(self::test1::T% t1) → self::Class
   ;
diff --git a/pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart.strong.expect b/pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart.strong.expect
index a948972..4f5c95f 100644
--- a/pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart.strong.expect
@@ -39,13 +39,13 @@
   method method2 = self::BoundExtension|method2;
   tearoff method2 = self::BoundExtension|get#method2;
 }
-static method Extension|method1<T extends core::Object? = dynamic>(final self::Extension|method1::T% #this) → self::Extension|method1::T%
+static method Extension|method1<T extends core::Object? = dynamic>(lowered final self::Extension|method1::T% #this) → self::Extension|method1::T%
   return #this;
-static method Extension|get#method1<T extends core::Object? = dynamic>(final self::Extension|get#method1::T% #this) → () → self::Extension|get#method1::T%
+static method Extension|get#method1<T extends core::Object? = dynamic>(lowered final self::Extension|get#method1::T% #this) → () → self::Extension|get#method1::T%
   return () → self::Extension|get#method1::T% => self::Extension|method1<self::Extension|get#method1::T%>(#this);
-static method BoundExtension|method2<T extends self::Class = self::Class>(final self::BoundExtension|method2::T #this) → self::BoundExtension|method2::T
+static method BoundExtension|method2<T extends self::Class = self::Class>(lowered final self::BoundExtension|method2::T #this) → self::BoundExtension|method2::T
   return #this;
-static method BoundExtension|get#method2<T extends self::Class = self::Class>(final self::BoundExtension|get#method2::T #this) → () → self::BoundExtension|get#method2::T
+static method BoundExtension|get#method2<T extends self::Class = self::Class>(lowered final self::BoundExtension|get#method2::T #this) → () → self::BoundExtension|get#method2::T
   return () → self::BoundExtension|get#method2::T => self::BoundExtension|method2<self::BoundExtension|get#method2::T>(#this);
 static method test1<T extends core::Object? = dynamic>(self::test1::T% t1) → self::Class {
   if(t1 is{ForNonNullableByDefault} self::SubClass) {
diff --git a/pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart.strong.transformed.expect
index e6c4be4..c60f2f0 100644
--- a/pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart.strong.transformed.expect
@@ -39,13 +39,13 @@
   method method2 = self::BoundExtension|method2;
   tearoff method2 = self::BoundExtension|get#method2;
 }
-static method Extension|method1<T extends core::Object? = dynamic>(final self::Extension|method1::T% #this) → self::Extension|method1::T%
+static method Extension|method1<T extends core::Object? = dynamic>(lowered final self::Extension|method1::T% #this) → self::Extension|method1::T%
   return #this;
-static method Extension|get#method1<T extends core::Object? = dynamic>(final self::Extension|get#method1::T% #this) → () → self::Extension|get#method1::T%
+static method Extension|get#method1<T extends core::Object? = dynamic>(lowered final self::Extension|get#method1::T% #this) → () → self::Extension|get#method1::T%
   return () → self::Extension|get#method1::T% => self::Extension|method1<self::Extension|get#method1::T%>(#this);
-static method BoundExtension|method2<T extends self::Class = self::Class>(final self::BoundExtension|method2::T #this) → self::BoundExtension|method2::T
+static method BoundExtension|method2<T extends self::Class = self::Class>(lowered final self::BoundExtension|method2::T #this) → self::BoundExtension|method2::T
   return #this;
-static method BoundExtension|get#method2<T extends self::Class = self::Class>(final self::BoundExtension|get#method2::T #this) → () → self::BoundExtension|get#method2::T
+static method BoundExtension|get#method2<T extends self::Class = self::Class>(lowered final self::BoundExtension|get#method2::T #this) → () → self::BoundExtension|get#method2::T
   return () → self::BoundExtension|get#method2::T => self::BoundExtension|method2<self::BoundExtension|get#method2::T>(#this);
 static method test1<T extends core::Object? = dynamic>(self::test1::T% t1) → self::Class {
   if(t1 is{ForNonNullableByDefault} self::SubClass) {
diff --git a/pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart.weak.expect b/pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart.weak.expect
index a948972..4f5c95f 100644
--- a/pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart.weak.expect
@@ -39,13 +39,13 @@
   method method2 = self::BoundExtension|method2;
   tearoff method2 = self::BoundExtension|get#method2;
 }
-static method Extension|method1<T extends core::Object? = dynamic>(final self::Extension|method1::T% #this) → self::Extension|method1::T%
+static method Extension|method1<T extends core::Object? = dynamic>(lowered final self::Extension|method1::T% #this) → self::Extension|method1::T%
   return #this;
-static method Extension|get#method1<T extends core::Object? = dynamic>(final self::Extension|get#method1::T% #this) → () → self::Extension|get#method1::T%
+static method Extension|get#method1<T extends core::Object? = dynamic>(lowered final self::Extension|get#method1::T% #this) → () → self::Extension|get#method1::T%
   return () → self::Extension|get#method1::T% => self::Extension|method1<self::Extension|get#method1::T%>(#this);
-static method BoundExtension|method2<T extends self::Class = self::Class>(final self::BoundExtension|method2::T #this) → self::BoundExtension|method2::T
+static method BoundExtension|method2<T extends self::Class = self::Class>(lowered final self::BoundExtension|method2::T #this) → self::BoundExtension|method2::T
   return #this;
-static method BoundExtension|get#method2<T extends self::Class = self::Class>(final self::BoundExtension|get#method2::T #this) → () → self::BoundExtension|get#method2::T
+static method BoundExtension|get#method2<T extends self::Class = self::Class>(lowered final self::BoundExtension|get#method2::T #this) → () → self::BoundExtension|get#method2::T
   return () → self::BoundExtension|get#method2::T => self::BoundExtension|method2<self::BoundExtension|get#method2::T>(#this);
 static method test1<T extends core::Object? = dynamic>(self::test1::T% t1) → self::Class {
   if(t1 is{ForNonNullableByDefault} self::SubClass) {
diff --git a/pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart.weak.transformed.expect
index e6c4be4..c60f2f0 100644
--- a/pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart.weak.transformed.expect
@@ -39,13 +39,13 @@
   method method2 = self::BoundExtension|method2;
   tearoff method2 = self::BoundExtension|get#method2;
 }
-static method Extension|method1<T extends core::Object? = dynamic>(final self::Extension|method1::T% #this) → self::Extension|method1::T%
+static method Extension|method1<T extends core::Object? = dynamic>(lowered final self::Extension|method1::T% #this) → self::Extension|method1::T%
   return #this;
-static method Extension|get#method1<T extends core::Object? = dynamic>(final self::Extension|get#method1::T% #this) → () → self::Extension|get#method1::T%
+static method Extension|get#method1<T extends core::Object? = dynamic>(lowered final self::Extension|get#method1::T% #this) → () → self::Extension|get#method1::T%
   return () → self::Extension|get#method1::T% => self::Extension|method1<self::Extension|get#method1::T%>(#this);
-static method BoundExtension|method2<T extends self::Class = self::Class>(final self::BoundExtension|method2::T #this) → self::BoundExtension|method2::T
+static method BoundExtension|method2<T extends self::Class = self::Class>(lowered final self::BoundExtension|method2::T #this) → self::BoundExtension|method2::T
   return #this;
-static method BoundExtension|get#method2<T extends self::Class = self::Class>(final self::BoundExtension|get#method2::T #this) → () → self::BoundExtension|get#method2::T
+static method BoundExtension|get#method2<T extends self::Class = self::Class>(lowered final self::BoundExtension|get#method2::T #this) → () → self::BoundExtension|get#method2::T
   return () → self::BoundExtension|get#method2::T => self::BoundExtension|method2<self::BoundExtension|get#method2::T>(#this);
 static method test1<T extends core::Object? = dynamic>(self::test1::T% t1) → self::Class {
   if(t1 is{ForNonNullableByDefault} self::SubClass) {
diff --git a/pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart.outline.expect b/pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart.outline.expect
index fb834d9..da98632 100644
--- a/pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart.outline.expect
@@ -222,29 +222,29 @@
   ;
 static set property3(core::int value) → void
   ;
-static method Extension|get#property1<T extends core::Object? = dynamic, S extends self::Extension|get#property1::T% = dynamic>(final core::int #this) → core::int
+static method Extension|get#property1<T extends core::Object? = dynamic, S extends self::Extension|get#property1::T% = dynamic>(lowered final core::int #this) → core::int
   ;
-static method Extension|set#property1<T extends core::Object? = dynamic, S extends self::Extension|set#property1::T% = dynamic>(final core::int #this, core::int i) → void
+static method Extension|set#property1<T extends core::Object? = dynamic, S extends self::Extension|set#property1::T% = dynamic>(lowered final core::int #this, core::int i) → void
   ;
-static method Extension|get#property2<T extends core::Object? = dynamic, S extends self::Extension|get#property2::T% = dynamic>(final core::int #this) → core::int
+static method Extension|get#property2<T extends core::Object? = dynamic, S extends self::Extension|get#property2::T% = dynamic>(lowered final core::int #this) → core::int
   ;
-static method Extension|set#property2<T extends core::Object? = dynamic, S extends self::Extension|set#property2::T% = dynamic>(final core::int #this, core::num i) → void
+static method Extension|set#property2<T extends core::Object? = dynamic, S extends self::Extension|set#property2::T% = dynamic>(lowered final core::int #this, core::num i) → void
   ;
-static method Extension|get#property3<T extends core::Object? = dynamic, S extends self::Extension|get#property3::T% = dynamic>(final core::int #this) → core::num
+static method Extension|get#property3<T extends core::Object? = dynamic, S extends self::Extension|get#property3::T% = dynamic>(lowered final core::int #this) → core::num
   ;
-static method Extension|set#property3<T extends core::Object? = dynamic, S extends self::Extension|set#property3::T% = dynamic>(final core::int #this, core::int i) → void
+static method Extension|set#property3<T extends core::Object? = dynamic, S extends self::Extension|set#property3::T% = dynamic>(lowered final core::int #this, core::int i) → void
   ;
-static method Extension|get#property4<T extends core::Object? = dynamic, S extends self::Extension|get#property4::T% = dynamic>(final core::int #this) → self::Extension|get#property4::S%
+static method Extension|get#property4<T extends core::Object? = dynamic, S extends self::Extension|get#property4::T% = dynamic>(lowered final core::int #this) → self::Extension|get#property4::S%
   ;
-static method Extension|set#property4<T extends core::Object? = dynamic, S extends self::Extension|set#property4::T% = dynamic>(final core::int #this, self::Extension|set#property4::S% i) → void
+static method Extension|set#property4<T extends core::Object? = dynamic, S extends self::Extension|set#property4::T% = dynamic>(lowered final core::int #this, self::Extension|set#property4::S% i) → void
   ;
-static method Extension|get#property5<T extends core::Object? = dynamic, S extends self::Extension|get#property5::T% = dynamic>(final core::int #this) → self::Extension|get#property5::S%
+static method Extension|get#property5<T extends core::Object? = dynamic, S extends self::Extension|get#property5::T% = dynamic>(lowered final core::int #this) → self::Extension|get#property5::S%
   ;
-static method Extension|set#property5<T extends core::Object? = dynamic, S extends self::Extension|set#property5::T% = dynamic>(final core::int #this, self::Extension|set#property5::T% i) → void
+static method Extension|set#property5<T extends core::Object? = dynamic, S extends self::Extension|set#property5::T% = dynamic>(lowered final core::int #this, self::Extension|set#property5::T% i) → void
   ;
-static method Extension|get#property6<T extends core::Object? = dynamic, S extends self::Extension|get#property6::T% = dynamic>(final core::int #this) → self::Extension|get#property6::T%
+static method Extension|get#property6<T extends core::Object? = dynamic, S extends self::Extension|get#property6::T% = dynamic>(lowered final core::int #this) → self::Extension|get#property6::T%
   ;
-static method Extension|set#property6<T extends core::Object? = dynamic, S extends self::Extension|set#property6::T% = dynamic>(final core::int #this, self::Extension|set#property6::S% i) → void
+static method Extension|set#property6<T extends core::Object? = dynamic, S extends self::Extension|set#property6::T% = dynamic>(lowered final core::int #this, self::Extension|set#property6::S% i) → void
   ;
 static get Extension|property7() → core::int
   ;
diff --git a/pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart.strong.expect b/pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart.strong.expect
index f346415..f2f3537 100644
--- a/pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart.strong.expect
@@ -237,30 +237,30 @@
 static get property3() → core::num
   return 0;
 static set property3(core::int value) → void {}
-static method Extension|get#property1<T extends core::Object? = dynamic, S extends self::Extension|get#property1::T% = dynamic>(final core::int #this) → core::int
+static method Extension|get#property1<T extends core::Object? = dynamic, S extends self::Extension|get#property1::T% = dynamic>(lowered final core::int #this) → core::int
   return 0;
-static method Extension|set#property1<T extends core::Object? = dynamic, S extends self::Extension|set#property1::T% = dynamic>(final core::int #this, core::int i) → void {}
-static method Extension|get#property2<T extends core::Object? = dynamic, S extends self::Extension|get#property2::T% = dynamic>(final core::int #this) → core::int
+static method Extension|set#property1<T extends core::Object? = dynamic, S extends self::Extension|set#property1::T% = dynamic>(lowered final core::int #this, core::int i) → void {}
+static method Extension|get#property2<T extends core::Object? = dynamic, S extends self::Extension|get#property2::T% = dynamic>(lowered final core::int #this) → core::int
   return 0;
-static method Extension|set#property2<T extends core::Object? = dynamic, S extends self::Extension|set#property2::T% = dynamic>(final core::int #this, core::num i) → void {}
-static method Extension|get#property3<T extends core::Object? = dynamic, S extends self::Extension|get#property3::T% = dynamic>(final core::int #this) → core::num
+static method Extension|set#property2<T extends core::Object? = dynamic, S extends self::Extension|set#property2::T% = dynamic>(lowered final core::int #this, core::num i) → void {}
+static method Extension|get#property3<T extends core::Object? = dynamic, S extends self::Extension|get#property3::T% = dynamic>(lowered final core::int #this) → core::num
   return 0;
-static method Extension|set#property3<T extends core::Object? = dynamic, S extends self::Extension|set#property3::T% = dynamic>(final core::int #this, core::int i) → void {}
-static method Extension|get#property4<T extends core::Object? = dynamic, S extends self::Extension|get#property4::T% = dynamic>(final core::int #this) → self::Extension|get#property4::S%
+static method Extension|set#property3<T extends core::Object? = dynamic, S extends self::Extension|set#property3::T% = dynamic>(lowered final core::int #this, core::int i) → void {}
+static method Extension|get#property4<T extends core::Object? = dynamic, S extends self::Extension|get#property4::T% = dynamic>(lowered final core::int #this) → self::Extension|get#property4::S%
   return let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:130:22: Error: A value of type 'int' can't be returned from a function with return type 'S'.
   S get property4 => 0; // ok
                      ^" in 0 as{TypeError,ForNonNullableByDefault} <BottomType>;
-static method Extension|set#property4<T extends core::Object? = dynamic, S extends self::Extension|set#property4::T% = dynamic>(final core::int #this, self::Extension|set#property4::S% i) → void {}
-static method Extension|get#property5<T extends core::Object? = dynamic, S extends self::Extension|get#property5::T% = dynamic>(final core::int #this) → self::Extension|get#property5::S%
+static method Extension|set#property4<T extends core::Object? = dynamic, S extends self::Extension|set#property4::T% = dynamic>(lowered final core::int #this, self::Extension|set#property4::S% i) → void {}
+static method Extension|get#property5<T extends core::Object? = dynamic, S extends self::Extension|get#property5::T% = dynamic>(lowered final core::int #this) → self::Extension|get#property5::S%
   return let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:133:22: Error: A value of type 'int' can't be returned from a function with return type 'S'.
   S get property5 => 0; // ok
                      ^" in 0 as{TypeError,ForNonNullableByDefault} <BottomType>;
-static method Extension|set#property5<T extends core::Object? = dynamic, S extends self::Extension|set#property5::T% = dynamic>(final core::int #this, self::Extension|set#property5::T% i) → void {}
-static method Extension|get#property6<T extends core::Object? = dynamic, S extends self::Extension|get#property6::T% = dynamic>(final core::int #this) → self::Extension|get#property6::T%
+static method Extension|set#property5<T extends core::Object? = dynamic, S extends self::Extension|set#property5::T% = dynamic>(lowered final core::int #this, self::Extension|set#property5::T% i) → void {}
+static method Extension|get#property6<T extends core::Object? = dynamic, S extends self::Extension|get#property6::T% = dynamic>(lowered final core::int #this) → self::Extension|get#property6::T%
   return let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:136:22: Error: A value of type 'int' can't be returned from a function with return type 'T'.
   T get property6 => 0; // error
                      ^" in 0 as{TypeError,ForNonNullableByDefault} <BottomType>;
-static method Extension|set#property6<T extends core::Object? = dynamic, S extends self::Extension|set#property6::T% = dynamic>(final core::int #this, self::Extension|set#property6::S% i) → void {}
+static method Extension|set#property6<T extends core::Object? = dynamic, S extends self::Extension|set#property6::T% = dynamic>(lowered final core::int #this, self::Extension|set#property6::S% i) → void {}
 static get Extension|property7() → core::int
   return 0;
 static set Extension|property7(core::int value) → void {}
diff --git a/pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart.weak.expect b/pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart.weak.expect
index f346415..f2f3537 100644
--- a/pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart.weak.expect
@@ -237,30 +237,30 @@
 static get property3() → core::num
   return 0;
 static set property3(core::int value) → void {}
-static method Extension|get#property1<T extends core::Object? = dynamic, S extends self::Extension|get#property1::T% = dynamic>(final core::int #this) → core::int
+static method Extension|get#property1<T extends core::Object? = dynamic, S extends self::Extension|get#property1::T% = dynamic>(lowered final core::int #this) → core::int
   return 0;
-static method Extension|set#property1<T extends core::Object? = dynamic, S extends self::Extension|set#property1::T% = dynamic>(final core::int #this, core::int i) → void {}
-static method Extension|get#property2<T extends core::Object? = dynamic, S extends self::Extension|get#property2::T% = dynamic>(final core::int #this) → core::int
+static method Extension|set#property1<T extends core::Object? = dynamic, S extends self::Extension|set#property1::T% = dynamic>(lowered final core::int #this, core::int i) → void {}
+static method Extension|get#property2<T extends core::Object? = dynamic, S extends self::Extension|get#property2::T% = dynamic>(lowered final core::int #this) → core::int
   return 0;
-static method Extension|set#property2<T extends core::Object? = dynamic, S extends self::Extension|set#property2::T% = dynamic>(final core::int #this, core::num i) → void {}
-static method Extension|get#property3<T extends core::Object? = dynamic, S extends self::Extension|get#property3::T% = dynamic>(final core::int #this) → core::num
+static method Extension|set#property2<T extends core::Object? = dynamic, S extends self::Extension|set#property2::T% = dynamic>(lowered final core::int #this, core::num i) → void {}
+static method Extension|get#property3<T extends core::Object? = dynamic, S extends self::Extension|get#property3::T% = dynamic>(lowered final core::int #this) → core::num
   return 0;
-static method Extension|set#property3<T extends core::Object? = dynamic, S extends self::Extension|set#property3::T% = dynamic>(final core::int #this, core::int i) → void {}
-static method Extension|get#property4<T extends core::Object? = dynamic, S extends self::Extension|get#property4::T% = dynamic>(final core::int #this) → self::Extension|get#property4::S%
+static method Extension|set#property3<T extends core::Object? = dynamic, S extends self::Extension|set#property3::T% = dynamic>(lowered final core::int #this, core::int i) → void {}
+static method Extension|get#property4<T extends core::Object? = dynamic, S extends self::Extension|get#property4::T% = dynamic>(lowered final core::int #this) → self::Extension|get#property4::S%
   return let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:130:22: Error: A value of type 'int' can't be returned from a function with return type 'S'.
   S get property4 => 0; // ok
                      ^" in 0 as{TypeError,ForNonNullableByDefault} <BottomType>;
-static method Extension|set#property4<T extends core::Object? = dynamic, S extends self::Extension|set#property4::T% = dynamic>(final core::int #this, self::Extension|set#property4::S% i) → void {}
-static method Extension|get#property5<T extends core::Object? = dynamic, S extends self::Extension|get#property5::T% = dynamic>(final core::int #this) → self::Extension|get#property5::S%
+static method Extension|set#property4<T extends core::Object? = dynamic, S extends self::Extension|set#property4::T% = dynamic>(lowered final core::int #this, self::Extension|set#property4::S% i) → void {}
+static method Extension|get#property5<T extends core::Object? = dynamic, S extends self::Extension|get#property5::T% = dynamic>(lowered final core::int #this) → self::Extension|get#property5::S%
   return let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:133:22: Error: A value of type 'int' can't be returned from a function with return type 'S'.
   S get property5 => 0; // ok
                      ^" in 0 as{TypeError,ForNonNullableByDefault} <BottomType>;
-static method Extension|set#property5<T extends core::Object? = dynamic, S extends self::Extension|set#property5::T% = dynamic>(final core::int #this, self::Extension|set#property5::T% i) → void {}
-static method Extension|get#property6<T extends core::Object? = dynamic, S extends self::Extension|get#property6::T% = dynamic>(final core::int #this) → self::Extension|get#property6::T%
+static method Extension|set#property5<T extends core::Object? = dynamic, S extends self::Extension|set#property5::T% = dynamic>(lowered final core::int #this, self::Extension|set#property5::T% i) → void {}
+static method Extension|get#property6<T extends core::Object? = dynamic, S extends self::Extension|get#property6::T% = dynamic>(lowered final core::int #this) → self::Extension|get#property6::T%
   return let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:136:22: Error: A value of type 'int' can't be returned from a function with return type 'T'.
   T get property6 => 0; // error
                      ^" in 0 as{TypeError,ForNonNullableByDefault} <BottomType>;
-static method Extension|set#property6<T extends core::Object? = dynamic, S extends self::Extension|set#property6::T% = dynamic>(final core::int #this, self::Extension|set#property6::S% i) → void {}
+static method Extension|set#property6<T extends core::Object? = dynamic, S extends self::Extension|set#property6::T% = dynamic>(lowered final core::int #this, self::Extension|set#property6::S% i) → void {}
 static get Extension|property7() → core::int
   return 0;
 static set Extension|property7(core::int value) → void {}
diff --git a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.outline.expect b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.outline.expect
index 763d5e7..ced9893 100644
--- a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.outline.expect
@@ -224,33 +224,33 @@
   ;
 static set property3(core::int value) → void
   ;
-static method Extension|get#property1<T extends core::num = core::num>(final core::int #this) → core::int
+static method Extension|get#property1<T extends core::num = core::num>(lowered final core::int #this) → core::int
   ;
-static method Extension|set#property1<T extends core::num = core::num>(final core::int #this, core::int i) → void
+static method Extension|set#property1<T extends core::num = core::num>(lowered final core::int #this, core::int i) → void
   ;
-static method Extension|get#property2<T extends core::num = core::num>(final core::int #this) → core::int
+static method Extension|get#property2<T extends core::num = core::num>(lowered final core::int #this) → core::int
   ;
-static method Extension|set#property2<T extends core::num = core::num>(final core::int #this, core::int? i) → void
+static method Extension|set#property2<T extends core::num = core::num>(lowered final core::int #this, core::int? i) → void
   ;
-static method Extension|get#property3<T extends core::num = core::num>(final core::int #this) → core::int?
+static method Extension|get#property3<T extends core::num = core::num>(lowered final core::int #this) → core::int?
   ;
-static method Extension|set#property3<T extends core::num = core::num>(final core::int #this, core::int i) → void
+static method Extension|set#property3<T extends core::num = core::num>(lowered final core::int #this, core::int i) → void
   ;
-static method Extension|get#property4a<T extends core::num = core::num>(final core::int #this) → self::Extension|get#property4a::T
+static method Extension|get#property4a<T extends core::num = core::num>(lowered final core::int #this) → self::Extension|get#property4a::T
   ;
-static method Extension|set#property4a<T extends core::num = core::num>(final core::int #this, self::Extension|set#property4a::T i) → void
+static method Extension|set#property4a<T extends core::num = core::num>(lowered final core::int #this, self::Extension|set#property4a::T i) → void
   ;
-static method Extension|get#property4b<T extends core::num = core::num>(final core::int #this) → self::Extension|get#property4b::T?
+static method Extension|get#property4b<T extends core::num = core::num>(lowered final core::int #this) → self::Extension|get#property4b::T?
   ;
-static method Extension|set#property4b<T extends core::num = core::num>(final core::int #this, self::Extension|set#property4b::T? i) → void
+static method Extension|set#property4b<T extends core::num = core::num>(lowered final core::int #this, self::Extension|set#property4b::T? i) → void
   ;
-static method Extension|get#property5<T extends core::num = core::num>(final core::int #this) → self::Extension|get#property5::T
+static method Extension|get#property5<T extends core::num = core::num>(lowered final core::int #this) → self::Extension|get#property5::T
   ;
-static method Extension|set#property5<T extends core::num = core::num>(final core::int #this, self::Extension|set#property5::T? i) → void
+static method Extension|set#property5<T extends core::num = core::num>(lowered final core::int #this, self::Extension|set#property5::T? i) → void
   ;
-static method Extension|get#property6<T extends core::num = core::num>(final core::int #this) → self::Extension|get#property6::T?
+static method Extension|get#property6<T extends core::num = core::num>(lowered final core::int #this) → self::Extension|get#property6::T?
   ;
-static method Extension|set#property6<T extends core::num = core::num>(final core::int #this, self::Extension|set#property6::T i) → void
+static method Extension|set#property6<T extends core::num = core::num>(lowered final core::int #this, self::Extension|set#property6::T i) → void
   ;
 static get Extension|property7() → core::int
   ;
diff --git a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.strong.expect b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.strong.expect
index 40207f8..93b128d 100644
--- a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.strong.expect
@@ -243,35 +243,35 @@
 static get property3() → core::int?
   return 0;
 static set property3(core::int value) → void {}
-static method Extension|get#property1<T extends core::num = core::num>(final core::int #this) → core::int
+static method Extension|get#property1<T extends core::num = core::num>(lowered final core::int #this) → core::int
   return 0;
-static method Extension|set#property1<T extends core::num = core::num>(final core::int #this, core::int i) → void {}
-static method Extension|get#property2<T extends core::num = core::num>(final core::int #this) → core::int
+static method Extension|set#property1<T extends core::num = core::num>(lowered final core::int #this, core::int i) → void {}
+static method Extension|get#property2<T extends core::num = core::num>(lowered final core::int #this) → core::int
   return 0;
-static method Extension|set#property2<T extends core::num = core::num>(final core::int #this, core::int? i) → void {}
-static method Extension|get#property3<T extends core::num = core::num>(final core::int #this) → core::int?
+static method Extension|set#property2<T extends core::num = core::num>(lowered final core::int #this, core::int? i) → void {}
+static method Extension|get#property3<T extends core::num = core::num>(lowered final core::int #this) → core::int?
   return 0;
-static method Extension|set#property3<T extends core::num = core::num>(final core::int #this, core::int i) → void {}
-static method Extension|get#property4a<T extends core::num = core::num>(final core::int #this) → self::Extension|get#property4a::T
+static method Extension|set#property3<T extends core::num = core::num>(lowered final core::int #this, core::int i) → void {}
+static method Extension|get#property4a<T extends core::num = core::num>(lowered final core::int #this) → self::Extension|get#property4a::T
   return let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:134:23: Error: A value of type 'int' can't be returned from a function with return type 'T'.
   T get property4a => 0; // ok
                       ^" in 0 as{TypeError,ForNonNullableByDefault} <BottomType>;
-static method Extension|set#property4a<T extends core::num = core::num>(final core::int #this, self::Extension|set#property4a::T i) → void {}
-static method Extension|get#property4b<T extends core::num = core::num>(final core::int #this) → self::Extension|get#property4b::T?
+static method Extension|set#property4a<T extends core::num = core::num>(lowered final core::int #this, self::Extension|set#property4a::T i) → void {}
+static method Extension|get#property4b<T extends core::num = core::num>(lowered final core::int #this) → self::Extension|get#property4b::T?
   return let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:137:24: Error: A value of type 'int' can't be returned from a function with return type 'T?'.
   T? get property4b => 0; // ok
                        ^" in 0 as{TypeError,ForNonNullableByDefault} <BottomType>;
-static method Extension|set#property4b<T extends core::num = core::num>(final core::int #this, self::Extension|set#property4b::T? i) → void {}
-static method Extension|get#property5<T extends core::num = core::num>(final core::int #this) → self::Extension|get#property5::T
+static method Extension|set#property4b<T extends core::num = core::num>(lowered final core::int #this, self::Extension|set#property4b::T? i) → void {}
+static method Extension|get#property5<T extends core::num = core::num>(lowered final core::int #this) → self::Extension|get#property5::T
   return let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:140:22: Error: A value of type 'int' can't be returned from a function with return type 'T'.
   T get property5 => 0; // ok
                      ^" in 0 as{TypeError,ForNonNullableByDefault} <BottomType>;
-static method Extension|set#property5<T extends core::num = core::num>(final core::int #this, self::Extension|set#property5::T? i) → void {}
-static method Extension|get#property6<T extends core::num = core::num>(final core::int #this) → self::Extension|get#property6::T?
+static method Extension|set#property5<T extends core::num = core::num>(lowered final core::int #this, self::Extension|set#property5::T? i) → void {}
+static method Extension|get#property6<T extends core::num = core::num>(lowered final core::int #this) → self::Extension|get#property6::T?
   return let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:143:23: Error: A value of type 'int' can't be returned from a function with return type 'T?'.
   T? get property6 => 0; // error
                       ^" in 0 as{TypeError,ForNonNullableByDefault} <BottomType>;
-static method Extension|set#property6<T extends core::num = core::num>(final core::int #this, self::Extension|set#property6::T i) → void {}
+static method Extension|set#property6<T extends core::num = core::num>(lowered final core::int #this, self::Extension|set#property6::T i) → void {}
 static get Extension|property7() → core::int
   return 0;
 static set Extension|property7(core::int value) → void {}
diff --git a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.strong.transformed.expect
index 40207f8..93b128d 100644
--- a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.strong.transformed.expect
@@ -243,35 +243,35 @@
 static get property3() → core::int?
   return 0;
 static set property3(core::int value) → void {}
-static method Extension|get#property1<T extends core::num = core::num>(final core::int #this) → core::int
+static method Extension|get#property1<T extends core::num = core::num>(lowered final core::int #this) → core::int
   return 0;
-static method Extension|set#property1<T extends core::num = core::num>(final core::int #this, core::int i) → void {}
-static method Extension|get#property2<T extends core::num = core::num>(final core::int #this) → core::int
+static method Extension|set#property1<T extends core::num = core::num>(lowered final core::int #this, core::int i) → void {}
+static method Extension|get#property2<T extends core::num = core::num>(lowered final core::int #this) → core::int
   return 0;
-static method Extension|set#property2<T extends core::num = core::num>(final core::int #this, core::int? i) → void {}
-static method Extension|get#property3<T extends core::num = core::num>(final core::int #this) → core::int?
+static method Extension|set#property2<T extends core::num = core::num>(lowered final core::int #this, core::int? i) → void {}
+static method Extension|get#property3<T extends core::num = core::num>(lowered final core::int #this) → core::int?
   return 0;
-static method Extension|set#property3<T extends core::num = core::num>(final core::int #this, core::int i) → void {}
-static method Extension|get#property4a<T extends core::num = core::num>(final core::int #this) → self::Extension|get#property4a::T
+static method Extension|set#property3<T extends core::num = core::num>(lowered final core::int #this, core::int i) → void {}
+static method Extension|get#property4a<T extends core::num = core::num>(lowered final core::int #this) → self::Extension|get#property4a::T
   return let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:134:23: Error: A value of type 'int' can't be returned from a function with return type 'T'.
   T get property4a => 0; // ok
                       ^" in 0 as{TypeError,ForNonNullableByDefault} <BottomType>;
-static method Extension|set#property4a<T extends core::num = core::num>(final core::int #this, self::Extension|set#property4a::T i) → void {}
-static method Extension|get#property4b<T extends core::num = core::num>(final core::int #this) → self::Extension|get#property4b::T?
+static method Extension|set#property4a<T extends core::num = core::num>(lowered final core::int #this, self::Extension|set#property4a::T i) → void {}
+static method Extension|get#property4b<T extends core::num = core::num>(lowered final core::int #this) → self::Extension|get#property4b::T?
   return let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:137:24: Error: A value of type 'int' can't be returned from a function with return type 'T?'.
   T? get property4b => 0; // ok
                        ^" in 0 as{TypeError,ForNonNullableByDefault} <BottomType>;
-static method Extension|set#property4b<T extends core::num = core::num>(final core::int #this, self::Extension|set#property4b::T? i) → void {}
-static method Extension|get#property5<T extends core::num = core::num>(final core::int #this) → self::Extension|get#property5::T
+static method Extension|set#property4b<T extends core::num = core::num>(lowered final core::int #this, self::Extension|set#property4b::T? i) → void {}
+static method Extension|get#property5<T extends core::num = core::num>(lowered final core::int #this) → self::Extension|get#property5::T
   return let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:140:22: Error: A value of type 'int' can't be returned from a function with return type 'T'.
   T get property5 => 0; // ok
                      ^" in 0 as{TypeError,ForNonNullableByDefault} <BottomType>;
-static method Extension|set#property5<T extends core::num = core::num>(final core::int #this, self::Extension|set#property5::T? i) → void {}
-static method Extension|get#property6<T extends core::num = core::num>(final core::int #this) → self::Extension|get#property6::T?
+static method Extension|set#property5<T extends core::num = core::num>(lowered final core::int #this, self::Extension|set#property5::T? i) → void {}
+static method Extension|get#property6<T extends core::num = core::num>(lowered final core::int #this) → self::Extension|get#property6::T?
   return let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:143:23: Error: A value of type 'int' can't be returned from a function with return type 'T?'.
   T? get property6 => 0; // error
                       ^" in 0 as{TypeError,ForNonNullableByDefault} <BottomType>;
-static method Extension|set#property6<T extends core::num = core::num>(final core::int #this, self::Extension|set#property6::T i) → void {}
+static method Extension|set#property6<T extends core::num = core::num>(lowered final core::int #this, self::Extension|set#property6::T i) → void {}
 static get Extension|property7() → core::int
   return 0;
 static set Extension|property7(core::int value) → void {}
diff --git a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.weak.expect b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.weak.expect
index 40207f8..93b128d 100644
--- a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.weak.expect
@@ -243,35 +243,35 @@
 static get property3() → core::int?
   return 0;
 static set property3(core::int value) → void {}
-static method Extension|get#property1<T extends core::num = core::num>(final core::int #this) → core::int
+static method Extension|get#property1<T extends core::num = core::num>(lowered final core::int #this) → core::int
   return 0;
-static method Extension|set#property1<T extends core::num = core::num>(final core::int #this, core::int i) → void {}
-static method Extension|get#property2<T extends core::num = core::num>(final core::int #this) → core::int
+static method Extension|set#property1<T extends core::num = core::num>(lowered final core::int #this, core::int i) → void {}
+static method Extension|get#property2<T extends core::num = core::num>(lowered final core::int #this) → core::int
   return 0;
-static method Extension|set#property2<T extends core::num = core::num>(final core::int #this, core::int? i) → void {}
-static method Extension|get#property3<T extends core::num = core::num>(final core::int #this) → core::int?
+static method Extension|set#property2<T extends core::num = core::num>(lowered final core::int #this, core::int? i) → void {}
+static method Extension|get#property3<T extends core::num = core::num>(lowered final core::int #this) → core::int?
   return 0;
-static method Extension|set#property3<T extends core::num = core::num>(final core::int #this, core::int i) → void {}
-static method Extension|get#property4a<T extends core::num = core::num>(final core::int #this) → self::Extension|get#property4a::T
+static method Extension|set#property3<T extends core::num = core::num>(lowered final core::int #this, core::int i) → void {}
+static method Extension|get#property4a<T extends core::num = core::num>(lowered final core::int #this) → self::Extension|get#property4a::T
   return let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:134:23: Error: A value of type 'int' can't be returned from a function with return type 'T'.
   T get property4a => 0; // ok
                       ^" in 0 as{TypeError,ForNonNullableByDefault} <BottomType>;
-static method Extension|set#property4a<T extends core::num = core::num>(final core::int #this, self::Extension|set#property4a::T i) → void {}
-static method Extension|get#property4b<T extends core::num = core::num>(final core::int #this) → self::Extension|get#property4b::T?
+static method Extension|set#property4a<T extends core::num = core::num>(lowered final core::int #this, self::Extension|set#property4a::T i) → void {}
+static method Extension|get#property4b<T extends core::num = core::num>(lowered final core::int #this) → self::Extension|get#property4b::T?
   return let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:137:24: Error: A value of type 'int' can't be returned from a function with return type 'T?'.
   T? get property4b => 0; // ok
                        ^" in 0 as{TypeError,ForNonNullableByDefault} <BottomType>;
-static method Extension|set#property4b<T extends core::num = core::num>(final core::int #this, self::Extension|set#property4b::T? i) → void {}
-static method Extension|get#property5<T extends core::num = core::num>(final core::int #this) → self::Extension|get#property5::T
+static method Extension|set#property4b<T extends core::num = core::num>(lowered final core::int #this, self::Extension|set#property4b::T? i) → void {}
+static method Extension|get#property5<T extends core::num = core::num>(lowered final core::int #this) → self::Extension|get#property5::T
   return let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:140:22: Error: A value of type 'int' can't be returned from a function with return type 'T'.
   T get property5 => 0; // ok
                      ^" in 0 as{TypeError,ForNonNullableByDefault} <BottomType>;
-static method Extension|set#property5<T extends core::num = core::num>(final core::int #this, self::Extension|set#property5::T? i) → void {}
-static method Extension|get#property6<T extends core::num = core::num>(final core::int #this) → self::Extension|get#property6::T?
+static method Extension|set#property5<T extends core::num = core::num>(lowered final core::int #this, self::Extension|set#property5::T? i) → void {}
+static method Extension|get#property6<T extends core::num = core::num>(lowered final core::int #this) → self::Extension|get#property6::T?
   return let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:143:23: Error: A value of type 'int' can't be returned from a function with return type 'T?'.
   T? get property6 => 0; // error
                       ^" in 0 as{TypeError,ForNonNullableByDefault} <BottomType>;
-static method Extension|set#property6<T extends core::num = core::num>(final core::int #this, self::Extension|set#property6::T i) → void {}
+static method Extension|set#property6<T extends core::num = core::num>(lowered final core::int #this, self::Extension|set#property6::T i) → void {}
 static get Extension|property7() → core::int
   return 0;
 static set Extension|property7(core::int value) → void {}
diff --git a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.weak.transformed.expect
index 40207f8..93b128d 100644
--- a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.weak.transformed.expect
@@ -243,35 +243,35 @@
 static get property3() → core::int?
   return 0;
 static set property3(core::int value) → void {}
-static method Extension|get#property1<T extends core::num = core::num>(final core::int #this) → core::int
+static method Extension|get#property1<T extends core::num = core::num>(lowered final core::int #this) → core::int
   return 0;
-static method Extension|set#property1<T extends core::num = core::num>(final core::int #this, core::int i) → void {}
-static method Extension|get#property2<T extends core::num = core::num>(final core::int #this) → core::int
+static method Extension|set#property1<T extends core::num = core::num>(lowered final core::int #this, core::int i) → void {}
+static method Extension|get#property2<T extends core::num = core::num>(lowered final core::int #this) → core::int
   return 0;
-static method Extension|set#property2<T extends core::num = core::num>(final core::int #this, core::int? i) → void {}
-static method Extension|get#property3<T extends core::num = core::num>(final core::int #this) → core::int?
+static method Extension|set#property2<T extends core::num = core::num>(lowered final core::int #this, core::int? i) → void {}
+static method Extension|get#property3<T extends core::num = core::num>(lowered final core::int #this) → core::int?
   return 0;
-static method Extension|set#property3<T extends core::num = core::num>(final core::int #this, core::int i) → void {}
-static method Extension|get#property4a<T extends core::num = core::num>(final core::int #this) → self::Extension|get#property4a::T
+static method Extension|set#property3<T extends core::num = core::num>(lowered final core::int #this, core::int i) → void {}
+static method Extension|get#property4a<T extends core::num = core::num>(lowered final core::int #this) → self::Extension|get#property4a::T
   return let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:134:23: Error: A value of type 'int' can't be returned from a function with return type 'T'.
   T get property4a => 0; // ok
                       ^" in 0 as{TypeError,ForNonNullableByDefault} <BottomType>;
-static method Extension|set#property4a<T extends core::num = core::num>(final core::int #this, self::Extension|set#property4a::T i) → void {}
-static method Extension|get#property4b<T extends core::num = core::num>(final core::int #this) → self::Extension|get#property4b::T?
+static method Extension|set#property4a<T extends core::num = core::num>(lowered final core::int #this, self::Extension|set#property4a::T i) → void {}
+static method Extension|get#property4b<T extends core::num = core::num>(lowered final core::int #this) → self::Extension|get#property4b::T?
   return let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:137:24: Error: A value of type 'int' can't be returned from a function with return type 'T?'.
   T? get property4b => 0; // ok
                        ^" in 0 as{TypeError,ForNonNullableByDefault} <BottomType>;
-static method Extension|set#property4b<T extends core::num = core::num>(final core::int #this, self::Extension|set#property4b::T? i) → void {}
-static method Extension|get#property5<T extends core::num = core::num>(final core::int #this) → self::Extension|get#property5::T
+static method Extension|set#property4b<T extends core::num = core::num>(lowered final core::int #this, self::Extension|set#property4b::T? i) → void {}
+static method Extension|get#property5<T extends core::num = core::num>(lowered final core::int #this) → self::Extension|get#property5::T
   return let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:140:22: Error: A value of type 'int' can't be returned from a function with return type 'T'.
   T get property5 => 0; // ok
                      ^" in 0 as{TypeError,ForNonNullableByDefault} <BottomType>;
-static method Extension|set#property5<T extends core::num = core::num>(final core::int #this, self::Extension|set#property5::T? i) → void {}
-static method Extension|get#property6<T extends core::num = core::num>(final core::int #this) → self::Extension|get#property6::T?
+static method Extension|set#property5<T extends core::num = core::num>(lowered final core::int #this, self::Extension|set#property5::T? i) → void {}
+static method Extension|get#property6<T extends core::num = core::num>(lowered final core::int #this) → self::Extension|get#property6::T?
   return let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:143:23: Error: A value of type 'int' can't be returned from a function with return type 'T?'.
   T? get property6 => 0; // error
                       ^" in 0 as{TypeError,ForNonNullableByDefault} <BottomType>;
-static method Extension|set#property6<T extends core::num = core::num>(final core::int #this, self::Extension|set#property6::T i) → void {}
+static method Extension|set#property6<T extends core::num = core::num>(lowered final core::int #this, self::Extension|set#property6::T i) → void {}
 static get Extension|property7() → core::int
   return 0;
 static set Extension|property7(core::int value) → void {}
diff --git a/pkg/front_end/testcases/nnbd/infer_if_null.dart.outline.expect b/pkg/front_end/testcases/nnbd/infer_if_null.dart.outline.expect
index 1c9be60..2a3948c 100644
--- a/pkg/front_end/testcases/nnbd/infer_if_null.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/infer_if_null.dart.outline.expect
@@ -41,9 +41,9 @@
   ;
 static method test4() → dynamic
   ;
-static method E6|[]=(final core::double #this, core::int index, core::String? value) → void
+static method E6|[]=(lowered final core::double #this, core::int index, core::String? value) → void
   ;
-static method E6|[](final core::double #this, core::int index) → core::String?
+static method E6|[](lowered final core::double #this, core::int index) → core::String?
   ;
 static method test6() → dynamic
   ;
diff --git a/pkg/front_end/testcases/nnbd/infer_if_null.dart.strong.expect b/pkg/front_end/testcases/nnbd/infer_if_null.dart.strong.expect
index ac0794c..65650a7 100644
--- a/pkg/front_end/testcases/nnbd/infer_if_null.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/infer_if_null.dart.strong.expect
@@ -56,8 +56,8 @@
   core::List<core::String?> list = <core::String?>[null];
   core::String s = let final core::List<core::String?> #t10 = list in let final core::int #t11 = 0 in let final core::String? #t12 = #t10.{core::List::[]}(#t11) in #t12.{core::String::==}(null) ?{core::String} let final core::String #t13 = "bar" in let final void #t14 = #t10.{core::List::[]=}(#t11, #t13) in #t13 : #t12{core::String};
 }
-static method E6|[]=(final core::double #this, core::int index, core::String? value) → void {}
-static method E6|[](final core::double #this, core::int index) → core::String?
+static method E6|[]=(lowered final core::double #this, core::int index, core::String? value) → void {}
+static method E6|[](lowered final core::double #this, core::int index) → core::String?
   return null;
 static method test6() → dynamic {
   core::String s = let final core::double #t15 = 3.14 in let final core::int #t16 = 0 in let final core::String? #t17 = self::E6|[](#t15, #t16) in #t17.{core::String::==}(null) ?{core::String} let final core::String #t18 = "bar" in let final void #t19 = self::E6|[]=(#t15, #t16, #t18) in #t18 : #t17{core::String};
diff --git a/pkg/front_end/testcases/nnbd/infer_if_null.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/infer_if_null.dart.strong.transformed.expect
index 571f848..c4ec443 100644
--- a/pkg/front_end/testcases/nnbd/infer_if_null.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/infer_if_null.dart.strong.transformed.expect
@@ -56,8 +56,8 @@
   core::List<core::String?> list = <core::String?>[null];
   core::String s = let final core::List<core::String?> #t10 = list in let final core::int #t11 = 0 in let final core::String? #t12 = #t10.{core::List::[]}(#t11) in #t12.{core::String::==}(null) ?{core::String} let final core::String #t13 = "bar" in let final void #t14 = #t10.{core::List::[]=}(#t11, #t13) in #t13 : #t12{core::String};
 }
-static method E6|[]=(final core::double #this, core::int index, core::String? value) → void {}
-static method E6|[](final core::double #this, core::int index) → core::String?
+static method E6|[]=(lowered final core::double #this, core::int index, core::String? value) → void {}
+static method E6|[](lowered final core::double #this, core::int index) → core::String?
   return null;
 static method test6() → dynamic {
   core::String s = let final core::double #t15 = 3.14 in let final core::int #t16 = 0 in let final core::String? #t17 = self::E6|[](#t15, #t16) in #t17.{core::String::==}(null) ?{core::String} let final core::String #t18 = "bar" in let final void #t19 = self::E6|[]=(#t15, #t16, #t18) in #t18 : #t17{core::String};
diff --git a/pkg/front_end/testcases/nnbd/infer_if_null.dart.weak.expect b/pkg/front_end/testcases/nnbd/infer_if_null.dart.weak.expect
index ac0794c..65650a7 100644
--- a/pkg/front_end/testcases/nnbd/infer_if_null.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/infer_if_null.dart.weak.expect
@@ -56,8 +56,8 @@
   core::List<core::String?> list = <core::String?>[null];
   core::String s = let final core::List<core::String?> #t10 = list in let final core::int #t11 = 0 in let final core::String? #t12 = #t10.{core::List::[]}(#t11) in #t12.{core::String::==}(null) ?{core::String} let final core::String #t13 = "bar" in let final void #t14 = #t10.{core::List::[]=}(#t11, #t13) in #t13 : #t12{core::String};
 }
-static method E6|[]=(final core::double #this, core::int index, core::String? value) → void {}
-static method E6|[](final core::double #this, core::int index) → core::String?
+static method E6|[]=(lowered final core::double #this, core::int index, core::String? value) → void {}
+static method E6|[](lowered final core::double #this, core::int index) → core::String?
   return null;
 static method test6() → dynamic {
   core::String s = let final core::double #t15 = 3.14 in let final core::int #t16 = 0 in let final core::String? #t17 = self::E6|[](#t15, #t16) in #t17.{core::String::==}(null) ?{core::String} let final core::String #t18 = "bar" in let final void #t19 = self::E6|[]=(#t15, #t16, #t18) in #t18 : #t17{core::String};
diff --git a/pkg/front_end/testcases/nnbd/infer_if_null.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/infer_if_null.dart.weak.transformed.expect
index 571f848..c4ec443 100644
--- a/pkg/front_end/testcases/nnbd/infer_if_null.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/infer_if_null.dart.weak.transformed.expect
@@ -56,8 +56,8 @@
   core::List<core::String?> list = <core::String?>[null];
   core::String s = let final core::List<core::String?> #t10 = list in let final core::int #t11 = 0 in let final core::String? #t12 = #t10.{core::List::[]}(#t11) in #t12.{core::String::==}(null) ?{core::String} let final core::String #t13 = "bar" in let final void #t14 = #t10.{core::List::[]=}(#t11, #t13) in #t13 : #t12{core::String};
 }
-static method E6|[]=(final core::double #this, core::int index, core::String? value) → void {}
-static method E6|[](final core::double #this, core::int index) → core::String?
+static method E6|[]=(lowered final core::double #this, core::int index, core::String? value) → void {}
+static method E6|[](lowered final core::double #this, core::int index) → core::String?
   return null;
 static method test6() → dynamic {
   core::String s = let final core::double #t15 = 3.14 in let final core::int #t16 = 0 in let final core::String? #t17 = self::E6|[](#t15, #t16) in #t17.{core::String::==}(null) ?{core::String} let final core::String #t18 = "bar" in let final void #t19 = self::E6|[]=(#t15, #t16, #t18) in #t18 : #t17{core::String};
diff --git a/pkg/front_end/testcases/nnbd/issue41349.dart.outline.expect b/pkg/front_end/testcases/nnbd/issue41349.dart.outline.expect
index 15071a6e..6aa4264 100644
--- a/pkg/front_end/testcases/nnbd/issue41349.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue41349.dart.outline.expect
@@ -22,21 +22,21 @@
   method call = self::D|call;
   tearoff call = self::D|get#call;
 }
-static method B|foo(final self::A? #this) → dynamic
+static method B|foo(lowered final self::A? #this) → dynamic
   ;
-static method B|get#foo(final self::A? #this) → () → dynamic
+static method B|get#foo(lowered final self::A? #this) → () → dynamic
   return () → dynamic => self::B|foo(#this);
-static method B|bar(final self::A? #this) → dynamic
+static method B|bar(lowered final self::A? #this) → dynamic
   ;
-static method B|get#bar(final self::A? #this) → () → dynamic
+static method B|get#bar(lowered final self::A? #this) → () → dynamic
   return () → dynamic => self::B|bar(#this);
-static method C|bar(final self::A #this) → dynamic
+static method C|bar(lowered final self::A #this) → dynamic
   ;
-static method C|get#bar(final self::A #this) → () → dynamic
+static method C|get#bar(lowered final self::A #this) → () → dynamic
   return () → dynamic => self::C|bar(#this);
-static method D|call(final () →? core::int #this) → core::int
+static method D|call(lowered final () →? core::int #this) → core::int
   ;
-static method D|get#call(final () →? core::int #this) → () → core::int
+static method D|get#call(lowered final () →? core::int #this) → () → core::int
   return () → core::int => self::D|call(#this);
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/nnbd/issue41349.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue41349.dart.strong.expect
index 750eec3..e517198 100644
--- a/pkg/front_end/testcases/nnbd/issue41349.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue41349.dart.strong.expect
@@ -23,21 +23,21 @@
   method call = self::D|call;
   tearoff call = self::D|get#call;
 }
-static method B|foo(final self::A? #this) → dynamic
+static method B|foo(lowered final self::A? #this) → dynamic
   return 42;
-static method B|get#foo(final self::A? #this) → () → dynamic
+static method B|get#foo(lowered final self::A? #this) → () → dynamic
   return () → dynamic => self::B|foo(#this);
-static method B|bar(final self::A? #this) → dynamic
+static method B|bar(lowered final self::A? #this) → dynamic
   return 87;
-static method B|get#bar(final self::A? #this) → () → dynamic
+static method B|get#bar(lowered final self::A? #this) → () → dynamic
   return () → dynamic => self::B|bar(#this);
-static method C|bar(final self::A #this) → dynamic
+static method C|bar(lowered final self::A #this) → dynamic
   return 123;
-static method C|get#bar(final self::A #this) → () → dynamic
+static method C|get#bar(lowered final self::A #this) → () → dynamic
   return () → dynamic => self::C|bar(#this);
-static method D|call(final () →? core::int #this) → core::int
+static method D|call(lowered final () →? core::int #this) → core::int
   return 76;
-static method D|get#call(final () →? core::int #this) → () → core::int
+static method D|get#call(lowered final () →? core::int #this) → () → core::int
   return () → core::int => self::D|call(#this);
 static method main() → dynamic {
   self::testA(new self::A::•());
diff --git a/pkg/front_end/testcases/nnbd/issue41349.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41349.dart.strong.transformed.expect
index 750eec3..e517198 100644
--- a/pkg/front_end/testcases/nnbd/issue41349.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41349.dart.strong.transformed.expect
@@ -23,21 +23,21 @@
   method call = self::D|call;
   tearoff call = self::D|get#call;
 }
-static method B|foo(final self::A? #this) → dynamic
+static method B|foo(lowered final self::A? #this) → dynamic
   return 42;
-static method B|get#foo(final self::A? #this) → () → dynamic
+static method B|get#foo(lowered final self::A? #this) → () → dynamic
   return () → dynamic => self::B|foo(#this);
-static method B|bar(final self::A? #this) → dynamic
+static method B|bar(lowered final self::A? #this) → dynamic
   return 87;
-static method B|get#bar(final self::A? #this) → () → dynamic
+static method B|get#bar(lowered final self::A? #this) → () → dynamic
   return () → dynamic => self::B|bar(#this);
-static method C|bar(final self::A #this) → dynamic
+static method C|bar(lowered final self::A #this) → dynamic
   return 123;
-static method C|get#bar(final self::A #this) → () → dynamic
+static method C|get#bar(lowered final self::A #this) → () → dynamic
   return () → dynamic => self::C|bar(#this);
-static method D|call(final () →? core::int #this) → core::int
+static method D|call(lowered final () →? core::int #this) → core::int
   return 76;
-static method D|get#call(final () →? core::int #this) → () → core::int
+static method D|get#call(lowered final () →? core::int #this) → () → core::int
   return () → core::int => self::D|call(#this);
 static method main() → dynamic {
   self::testA(new self::A::•());
diff --git a/pkg/front_end/testcases/nnbd/issue41349.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue41349.dart.weak.expect
index 750eec3..e517198 100644
--- a/pkg/front_end/testcases/nnbd/issue41349.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue41349.dart.weak.expect
@@ -23,21 +23,21 @@
   method call = self::D|call;
   tearoff call = self::D|get#call;
 }
-static method B|foo(final self::A? #this) → dynamic
+static method B|foo(lowered final self::A? #this) → dynamic
   return 42;
-static method B|get#foo(final self::A? #this) → () → dynamic
+static method B|get#foo(lowered final self::A? #this) → () → dynamic
   return () → dynamic => self::B|foo(#this);
-static method B|bar(final self::A? #this) → dynamic
+static method B|bar(lowered final self::A? #this) → dynamic
   return 87;
-static method B|get#bar(final self::A? #this) → () → dynamic
+static method B|get#bar(lowered final self::A? #this) → () → dynamic
   return () → dynamic => self::B|bar(#this);
-static method C|bar(final self::A #this) → dynamic
+static method C|bar(lowered final self::A #this) → dynamic
   return 123;
-static method C|get#bar(final self::A #this) → () → dynamic
+static method C|get#bar(lowered final self::A #this) → () → dynamic
   return () → dynamic => self::C|bar(#this);
-static method D|call(final () →? core::int #this) → core::int
+static method D|call(lowered final () →? core::int #this) → core::int
   return 76;
-static method D|get#call(final () →? core::int #this) → () → core::int
+static method D|get#call(lowered final () →? core::int #this) → () → core::int
   return () → core::int => self::D|call(#this);
 static method main() → dynamic {
   self::testA(new self::A::•());
diff --git a/pkg/front_end/testcases/nnbd/issue41349.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41349.dart.weak.transformed.expect
index 750eec3..e517198 100644
--- a/pkg/front_end/testcases/nnbd/issue41349.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41349.dart.weak.transformed.expect
@@ -23,21 +23,21 @@
   method call = self::D|call;
   tearoff call = self::D|get#call;
 }
-static method B|foo(final self::A? #this) → dynamic
+static method B|foo(lowered final self::A? #this) → dynamic
   return 42;
-static method B|get#foo(final self::A? #this) → () → dynamic
+static method B|get#foo(lowered final self::A? #this) → () → dynamic
   return () → dynamic => self::B|foo(#this);
-static method B|bar(final self::A? #this) → dynamic
+static method B|bar(lowered final self::A? #this) → dynamic
   return 87;
-static method B|get#bar(final self::A? #this) → () → dynamic
+static method B|get#bar(lowered final self::A? #this) → () → dynamic
   return () → dynamic => self::B|bar(#this);
-static method C|bar(final self::A #this) → dynamic
+static method C|bar(lowered final self::A #this) → dynamic
   return 123;
-static method C|get#bar(final self::A #this) → () → dynamic
+static method C|get#bar(lowered final self::A #this) → () → dynamic
   return () → dynamic => self::C|bar(#this);
-static method D|call(final () →? core::int #this) → core::int
+static method D|call(lowered final () →? core::int #this) → core::int
   return 76;
-static method D|get#call(final () →? core::int #this) → () → core::int
+static method D|get#call(lowered final () →? core::int #this) → () → core::int
   return () → core::int => self::D|call(#this);
 static method main() → dynamic {
   self::testA(new self::A::•());
diff --git a/pkg/front_end/testcases/nnbd/issue43211.dart.outline.expect b/pkg/front_end/testcases/nnbd/issue43211.dart.outline.expect
index 1a53ad9..6cde1626 100644
--- a/pkg/front_end/testcases/nnbd/issue43211.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue43211.dart.outline.expect
@@ -137,13 +137,13 @@
 }
 extension ext2<X extends self::A<Null>? = self::A<Null>?> on self::A<X%> {
 }
-static method Extension1|method1<X extends self::A<self::Extension1|method1::X%>? = self::A<dynamic>?, Y extends self::A<self::Extension1|method1::Y%>? = self::A<dynamic>?>(final self::A<self::Extension1|method1::X%> #this, self::A<self::Extension1|method1::Y%> a, self::A<self::A<Null>>? b) → void
+static method Extension1|method1<X extends self::A<self::Extension1|method1::X%>? = self::A<dynamic>?, Y extends self::A<self::Extension1|method1::Y%>? = self::A<dynamic>?>(lowered final self::A<self::Extension1|method1::X%> #this, self::A<self::Extension1|method1::Y%> a, self::A<self::A<Null>>? b) → void
   ;
-static method Extension1|get#method1<X extends self::A<self::Extension1|get#method1::X%>? = self::A<dynamic>?>(final self::A<self::Extension1|get#method1::X%> #this) → <Y extends self::A<Y%>? = self::A<dynamic>?>(self::A<Y%>, self::A<self::A<Null>>?) → void
+static method Extension1|get#method1<X extends self::A<self::Extension1|get#method1::X%>? = self::A<dynamic>?>(lowered final self::A<self::Extension1|get#method1::X%> #this) → <Y extends self::A<Y%>? = self::A<dynamic>?>(self::A<Y%>, self::A<self::A<Null>>?) → void
   return <Y extends self::A<Y%>? = self::A<dynamic>?>(self::A<Y%> a, self::A<self::A<Null>>? b) → void => self::Extension1|method1<self::Extension1|get#method1::X%, Y%>(#this, a, b);
-static method Extension1|method2<X extends self::A<self::Extension1|method2::X%>? = self::A<dynamic>?, Y extends core::String = core::String>(final self::A<self::Extension1|method2::X%> #this, self::D<self::Extension1|method2::Y> a, self::D<core::String>? b) → void
+static method Extension1|method2<X extends self::A<self::Extension1|method2::X%>? = self::A<dynamic>?, Y extends core::String = core::String>(lowered final self::A<self::Extension1|method2::X%> #this, self::D<self::Extension1|method2::Y> a, self::D<core::String>? b) → void
   ;
-static method Extension1|get#method2<X extends self::A<self::Extension1|get#method2::X%>? = self::A<dynamic>?>(final self::A<self::Extension1|get#method2::X%> #this) → <Y extends core::String = core::String>(self::D<Y>, self::D<core::String>?) → void
+static method Extension1|get#method2<X extends self::A<self::Extension1|get#method2::X%>? = self::A<dynamic>?>(lowered final self::A<self::Extension1|get#method2::X%> #this) → <Y extends core::String = core::String>(self::D<Y>, self::D<core::String>?) → void
   return <Y extends core::String = core::String>(self::D<Y> a, self::D<core::String>? b) → void => self::Extension1|method2<self::Extension1|get#method2::X%, Y>(#this, a, b);
 static method test() → dynamic
   ;
diff --git a/pkg/front_end/testcases/nnbd/issue43211.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue43211.dart.strong.expect
index 5c0c199..2119a28 100644
--- a/pkg/front_end/testcases/nnbd/issue43211.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue43211.dart.strong.expect
@@ -243,17 +243,17 @@
 }
 extension ext2<X extends self::A<Null>? = self::A<Null>?> on self::A<X%> {
 }
-static method Extension1|method1<X extends self::A<self::Extension1|method1::X%>? = self::A<dynamic>?, Y extends self::A<self::Extension1|method1::Y%>? = self::A<dynamic>?>(final self::A<self::Extension1|method1::X%> #this, self::A<self::Extension1|method1::Y%> a, self::A<self::A<Null>>? b) → void {
+static method Extension1|method1<X extends self::A<self::Extension1|method1::X%>? = self::A<dynamic>?, Y extends self::A<self::Extension1|method1::Y%>? = self::A<dynamic>?>(lowered final self::A<self::Extension1|method1::X%> #this, self::A<self::Extension1|method1::Y%> a, self::A<self::A<Null>>? b) → void {
   self::A<self::Extension1|method1::Y%>? c;
   self::A<self::A<Null>>? d;
 }
-static method Extension1|get#method1<X extends self::A<self::Extension1|get#method1::X%>? = self::A<dynamic>?>(final self::A<self::Extension1|get#method1::X%> #this) → <Y extends self::A<Y%>? = self::A<dynamic>?>(self::A<Y%>, self::A<self::A<Null>>?) → void
+static method Extension1|get#method1<X extends self::A<self::Extension1|get#method1::X%>? = self::A<dynamic>?>(lowered final self::A<self::Extension1|get#method1::X%> #this) → <Y extends self::A<Y%>? = self::A<dynamic>?>(self::A<Y%>, self::A<self::A<Null>>?) → void
   return <Y extends self::A<Y%>? = self::A<dynamic>?>(self::A<Y%> a, self::A<self::A<Null>>? b) → void => self::Extension1|method1<self::Extension1|get#method1::X%, Y%>(#this, a, b);
-static method Extension1|method2<X extends self::A<self::Extension1|method2::X%>? = self::A<dynamic>?, Y extends core::String = core::String>(final self::A<self::Extension1|method2::X%> #this, self::D<self::Extension1|method2::Y> a, self::D<core::String>? b) → void {
+static method Extension1|method2<X extends self::A<self::Extension1|method2::X%>? = self::A<dynamic>?, Y extends core::String = core::String>(lowered final self::A<self::Extension1|method2::X%> #this, self::D<self::Extension1|method2::Y> a, self::D<core::String>? b) → void {
   self::D<self::Extension1|method2::Y>? c;
   self::D<core::String>? d;
 }
-static method Extension1|get#method2<X extends self::A<self::Extension1|get#method2::X%>? = self::A<dynamic>?>(final self::A<self::Extension1|get#method2::X%> #this) → <Y extends core::String = core::String>(self::D<Y>, self::D<core::String>?) → void
+static method Extension1|get#method2<X extends self::A<self::Extension1|get#method2::X%>? = self::A<dynamic>?>(lowered final self::A<self::Extension1|get#method2::X%> #this) → <Y extends core::String = core::String>(self::D<Y>, self::D<core::String>?) → void
   return <Y extends core::String = core::String>(self::D<Y> a, self::D<core::String>? b) → void => self::Extension1|method2<self::Extension1|get#method2::X%, Y>(#this, a, b);
 static method test() → dynamic {
   self::A<Null> a = new self::A::•<Null>();
diff --git a/pkg/front_end/testcases/nnbd/issue43211.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue43211.dart.strong.transformed.expect
index 07265e4..1eb8c28 100644
--- a/pkg/front_end/testcases/nnbd/issue43211.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43211.dart.strong.transformed.expect
@@ -243,17 +243,17 @@
 }
 extension ext2<X extends self::A<Null>? = self::A<Null>?> on self::A<X%> {
 }
-static method Extension1|method1<X extends self::A<self::Extension1|method1::X%>? = self::A<dynamic>?, Y extends self::A<self::Extension1|method1::Y%>? = self::A<dynamic>?>(final self::A<self::Extension1|method1::X%> #this, self::A<self::Extension1|method1::Y%> a, self::A<self::A<Null>>? b) → void {
+static method Extension1|method1<X extends self::A<self::Extension1|method1::X%>? = self::A<dynamic>?, Y extends self::A<self::Extension1|method1::Y%>? = self::A<dynamic>?>(lowered final self::A<self::Extension1|method1::X%> #this, self::A<self::Extension1|method1::Y%> a, self::A<self::A<Null>>? b) → void {
   self::A<self::Extension1|method1::Y%>? c;
   self::A<self::A<Null>>? d;
 }
-static method Extension1|get#method1<X extends self::A<self::Extension1|get#method1::X%>? = self::A<dynamic>?>(final self::A<self::Extension1|get#method1::X%> #this) → <Y extends self::A<Y%>? = self::A<dynamic>?>(self::A<Y%>, self::A<self::A<Null>>?) → void
+static method Extension1|get#method1<X extends self::A<self::Extension1|get#method1::X%>? = self::A<dynamic>?>(lowered final self::A<self::Extension1|get#method1::X%> #this) → <Y extends self::A<Y%>? = self::A<dynamic>?>(self::A<Y%>, self::A<self::A<Null>>?) → void
   return <Y extends self::A<Y%>? = self::A<dynamic>?>(self::A<Y%> a, self::A<self::A<Null>>? b) → void => self::Extension1|method1<self::Extension1|get#method1::X%, Y%>(#this, a, b);
-static method Extension1|method2<X extends self::A<self::Extension1|method2::X%>? = self::A<dynamic>?, Y extends core::String = core::String>(final self::A<self::Extension1|method2::X%> #this, self::D<self::Extension1|method2::Y> a, self::D<core::String>? b) → void {
+static method Extension1|method2<X extends self::A<self::Extension1|method2::X%>? = self::A<dynamic>?, Y extends core::String = core::String>(lowered final self::A<self::Extension1|method2::X%> #this, self::D<self::Extension1|method2::Y> a, self::D<core::String>? b) → void {
   self::D<self::Extension1|method2::Y>? c;
   self::D<core::String>? d;
 }
-static method Extension1|get#method2<X extends self::A<self::Extension1|get#method2::X%>? = self::A<dynamic>?>(final self::A<self::Extension1|get#method2::X%> #this) → <Y extends core::String = core::String>(self::D<Y>, self::D<core::String>?) → void
+static method Extension1|get#method2<X extends self::A<self::Extension1|get#method2::X%>? = self::A<dynamic>?>(lowered final self::A<self::Extension1|get#method2::X%> #this) → <Y extends core::String = core::String>(self::D<Y>, self::D<core::String>?) → void
   return <Y extends core::String = core::String>(self::D<Y> a, self::D<core::String>? b) → void => self::Extension1|method2<self::Extension1|get#method2::X%, Y>(#this, a, b);
 static method test() → dynamic {
   self::A<Null> a = new self::A::•<Null>();
diff --git a/pkg/front_end/testcases/nnbd/issue43211.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue43211.dart.weak.expect
index 5c0c199..2119a28 100644
--- a/pkg/front_end/testcases/nnbd/issue43211.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue43211.dart.weak.expect
@@ -243,17 +243,17 @@
 }
 extension ext2<X extends self::A<Null>? = self::A<Null>?> on self::A<X%> {
 }
-static method Extension1|method1<X extends self::A<self::Extension1|method1::X%>? = self::A<dynamic>?, Y extends self::A<self::Extension1|method1::Y%>? = self::A<dynamic>?>(final self::A<self::Extension1|method1::X%> #this, self::A<self::Extension1|method1::Y%> a, self::A<self::A<Null>>? b) → void {
+static method Extension1|method1<X extends self::A<self::Extension1|method1::X%>? = self::A<dynamic>?, Y extends self::A<self::Extension1|method1::Y%>? = self::A<dynamic>?>(lowered final self::A<self::Extension1|method1::X%> #this, self::A<self::Extension1|method1::Y%> a, self::A<self::A<Null>>? b) → void {
   self::A<self::Extension1|method1::Y%>? c;
   self::A<self::A<Null>>? d;
 }
-static method Extension1|get#method1<X extends self::A<self::Extension1|get#method1::X%>? = self::A<dynamic>?>(final self::A<self::Extension1|get#method1::X%> #this) → <Y extends self::A<Y%>? = self::A<dynamic>?>(self::A<Y%>, self::A<self::A<Null>>?) → void
+static method Extension1|get#method1<X extends self::A<self::Extension1|get#method1::X%>? = self::A<dynamic>?>(lowered final self::A<self::Extension1|get#method1::X%> #this) → <Y extends self::A<Y%>? = self::A<dynamic>?>(self::A<Y%>, self::A<self::A<Null>>?) → void
   return <Y extends self::A<Y%>? = self::A<dynamic>?>(self::A<Y%> a, self::A<self::A<Null>>? b) → void => self::Extension1|method1<self::Extension1|get#method1::X%, Y%>(#this, a, b);
-static method Extension1|method2<X extends self::A<self::Extension1|method2::X%>? = self::A<dynamic>?, Y extends core::String = core::String>(final self::A<self::Extension1|method2::X%> #this, self::D<self::Extension1|method2::Y> a, self::D<core::String>? b) → void {
+static method Extension1|method2<X extends self::A<self::Extension1|method2::X%>? = self::A<dynamic>?, Y extends core::String = core::String>(lowered final self::A<self::Extension1|method2::X%> #this, self::D<self::Extension1|method2::Y> a, self::D<core::String>? b) → void {
   self::D<self::Extension1|method2::Y>? c;
   self::D<core::String>? d;
 }
-static method Extension1|get#method2<X extends self::A<self::Extension1|get#method2::X%>? = self::A<dynamic>?>(final self::A<self::Extension1|get#method2::X%> #this) → <Y extends core::String = core::String>(self::D<Y>, self::D<core::String>?) → void
+static method Extension1|get#method2<X extends self::A<self::Extension1|get#method2::X%>? = self::A<dynamic>?>(lowered final self::A<self::Extension1|get#method2::X%> #this) → <Y extends core::String = core::String>(self::D<Y>, self::D<core::String>?) → void
   return <Y extends core::String = core::String>(self::D<Y> a, self::D<core::String>? b) → void => self::Extension1|method2<self::Extension1|get#method2::X%, Y>(#this, a, b);
 static method test() → dynamic {
   self::A<Null> a = new self::A::•<Null>();
diff --git a/pkg/front_end/testcases/nnbd/issue43211.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue43211.dart.weak.transformed.expect
index 07265e4..1eb8c28 100644
--- a/pkg/front_end/testcases/nnbd/issue43211.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43211.dart.weak.transformed.expect
@@ -243,17 +243,17 @@
 }
 extension ext2<X extends self::A<Null>? = self::A<Null>?> on self::A<X%> {
 }
-static method Extension1|method1<X extends self::A<self::Extension1|method1::X%>? = self::A<dynamic>?, Y extends self::A<self::Extension1|method1::Y%>? = self::A<dynamic>?>(final self::A<self::Extension1|method1::X%> #this, self::A<self::Extension1|method1::Y%> a, self::A<self::A<Null>>? b) → void {
+static method Extension1|method1<X extends self::A<self::Extension1|method1::X%>? = self::A<dynamic>?, Y extends self::A<self::Extension1|method1::Y%>? = self::A<dynamic>?>(lowered final self::A<self::Extension1|method1::X%> #this, self::A<self::Extension1|method1::Y%> a, self::A<self::A<Null>>? b) → void {
   self::A<self::Extension1|method1::Y%>? c;
   self::A<self::A<Null>>? d;
 }
-static method Extension1|get#method1<X extends self::A<self::Extension1|get#method1::X%>? = self::A<dynamic>?>(final self::A<self::Extension1|get#method1::X%> #this) → <Y extends self::A<Y%>? = self::A<dynamic>?>(self::A<Y%>, self::A<self::A<Null>>?) → void
+static method Extension1|get#method1<X extends self::A<self::Extension1|get#method1::X%>? = self::A<dynamic>?>(lowered final self::A<self::Extension1|get#method1::X%> #this) → <Y extends self::A<Y%>? = self::A<dynamic>?>(self::A<Y%>, self::A<self::A<Null>>?) → void
   return <Y extends self::A<Y%>? = self::A<dynamic>?>(self::A<Y%> a, self::A<self::A<Null>>? b) → void => self::Extension1|method1<self::Extension1|get#method1::X%, Y%>(#this, a, b);
-static method Extension1|method2<X extends self::A<self::Extension1|method2::X%>? = self::A<dynamic>?, Y extends core::String = core::String>(final self::A<self::Extension1|method2::X%> #this, self::D<self::Extension1|method2::Y> a, self::D<core::String>? b) → void {
+static method Extension1|method2<X extends self::A<self::Extension1|method2::X%>? = self::A<dynamic>?, Y extends core::String = core::String>(lowered final self::A<self::Extension1|method2::X%> #this, self::D<self::Extension1|method2::Y> a, self::D<core::String>? b) → void {
   self::D<self::Extension1|method2::Y>? c;
   self::D<core::String>? d;
 }
-static method Extension1|get#method2<X extends self::A<self::Extension1|get#method2::X%>? = self::A<dynamic>?>(final self::A<self::Extension1|get#method2::X%> #this) → <Y extends core::String = core::String>(self::D<Y>, self::D<core::String>?) → void
+static method Extension1|get#method2<X extends self::A<self::Extension1|get#method2::X%>? = self::A<dynamic>?>(lowered final self::A<self::Extension1|get#method2::X%> #this) → <Y extends core::String = core::String>(self::D<Y>, self::D<core::String>?) → void
   return <Y extends core::String = core::String>(self::D<Y> a, self::D<core::String>? b) → void => self::Extension1|method2<self::Extension1|get#method2::X%, Y>(#this, a, b);
 static method test() → dynamic {
   self::A<Null> a = new self::A::•<Null>();
diff --git a/pkg/front_end/testcases/nnbd/issue43278.dart.outline.expect b/pkg/front_end/testcases/nnbd/issue43278.dart.outline.expect
index 1ca6277..795331a 100644
--- a/pkg/front_end/testcases/nnbd/issue43278.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue43278.dart.outline.expect
@@ -19,11 +19,11 @@
 }
 static method test<T extends self::A? = self::A?>(self::A? a, self::test::T% t, dynamic d, core::int x) → dynamic
   ;
-static method Extension|get#fooExtension(final self::B #this) → core::int?
+static method Extension|get#fooExtension(lowered final self::B #this) → core::int?
   ;
-static method Extension|set#fooExtension(final self::B #this, core::int? value) → void
+static method Extension|set#fooExtension(lowered final self::B #this, core::int? value) → void
   ;
-static method Extension|get#barExtension(final self::B #this) → self::B
+static method Extension|get#barExtension(lowered final self::B #this) → self::B
   ;
 static method testExtension<T extends self::B? = self::B?>(self::B? b, self::testExtension::T% t, core::int x) → dynamic
   ;
diff --git a/pkg/front_end/testcases/nnbd/issue43278.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue43278.dart.strong.expect
index 3087b3b..caccef7 100644
--- a/pkg/front_end/testcases/nnbd/issue43278.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue43278.dart.strong.expect
@@ -71,10 +71,10 @@
   let final dynamic #t7 = d in #t7.foo.{core::Object::==}(null) ?{dynamic} #t7.foo = x : null;
   let final self::A? #t8 = a in #t8.{core::Object::==}(null) ?{core::int?} null : let final self::A #t9 = #t8{self::A}.{self::A::bar} in #t9.{self::A::foo}.{core::num::==}(null) ?{core::int} #t9.{self::A::foo} = x : null;
 }
-static method Extension|get#fooExtension(final self::B #this) → core::int?
+static method Extension|get#fooExtension(lowered final self::B #this) → core::int?
   return null;
-static method Extension|set#fooExtension(final self::B #this, core::int? value) → void {}
-static method Extension|get#barExtension(final self::B #this) → self::B
+static method Extension|set#fooExtension(lowered final self::B #this, core::int? value) → void {}
+static method Extension|get#barExtension(lowered final self::B #this) → self::B
   return new self::B::•();
 static method testExtension<T extends self::B? = self::B?>(self::B? b, self::testExtension::T% t, core::int x) → dynamic {
   let final self::B? #t10 = b in (let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:28:5: Error: Property 'fooExtension' cannot be accessed on 'B?' because it is potentially null.
diff --git a/pkg/front_end/testcases/nnbd/issue43278.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue43278.dart.strong.transformed.expect
index 3087b3b..caccef7 100644
--- a/pkg/front_end/testcases/nnbd/issue43278.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43278.dart.strong.transformed.expect
@@ -71,10 +71,10 @@
   let final dynamic #t7 = d in #t7.foo.{core::Object::==}(null) ?{dynamic} #t7.foo = x : null;
   let final self::A? #t8 = a in #t8.{core::Object::==}(null) ?{core::int?} null : let final self::A #t9 = #t8{self::A}.{self::A::bar} in #t9.{self::A::foo}.{core::num::==}(null) ?{core::int} #t9.{self::A::foo} = x : null;
 }
-static method Extension|get#fooExtension(final self::B #this) → core::int?
+static method Extension|get#fooExtension(lowered final self::B #this) → core::int?
   return null;
-static method Extension|set#fooExtension(final self::B #this, core::int? value) → void {}
-static method Extension|get#barExtension(final self::B #this) → self::B
+static method Extension|set#fooExtension(lowered final self::B #this, core::int? value) → void {}
+static method Extension|get#barExtension(lowered final self::B #this) → self::B
   return new self::B::•();
 static method testExtension<T extends self::B? = self::B?>(self::B? b, self::testExtension::T% t, core::int x) → dynamic {
   let final self::B? #t10 = b in (let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:28:5: Error: Property 'fooExtension' cannot be accessed on 'B?' because it is potentially null.
diff --git a/pkg/front_end/testcases/nnbd/issue43278.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue43278.dart.weak.expect
index 3087b3b..caccef7 100644
--- a/pkg/front_end/testcases/nnbd/issue43278.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue43278.dart.weak.expect
@@ -71,10 +71,10 @@
   let final dynamic #t7 = d in #t7.foo.{core::Object::==}(null) ?{dynamic} #t7.foo = x : null;
   let final self::A? #t8 = a in #t8.{core::Object::==}(null) ?{core::int?} null : let final self::A #t9 = #t8{self::A}.{self::A::bar} in #t9.{self::A::foo}.{core::num::==}(null) ?{core::int} #t9.{self::A::foo} = x : null;
 }
-static method Extension|get#fooExtension(final self::B #this) → core::int?
+static method Extension|get#fooExtension(lowered final self::B #this) → core::int?
   return null;
-static method Extension|set#fooExtension(final self::B #this, core::int? value) → void {}
-static method Extension|get#barExtension(final self::B #this) → self::B
+static method Extension|set#fooExtension(lowered final self::B #this, core::int? value) → void {}
+static method Extension|get#barExtension(lowered final self::B #this) → self::B
   return new self::B::•();
 static method testExtension<T extends self::B? = self::B?>(self::B? b, self::testExtension::T% t, core::int x) → dynamic {
   let final self::B? #t10 = b in (let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:28:5: Error: Property 'fooExtension' cannot be accessed on 'B?' because it is potentially null.
diff --git a/pkg/front_end/testcases/nnbd/issue43278.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue43278.dart.weak.transformed.expect
index 3087b3b..caccef7 100644
--- a/pkg/front_end/testcases/nnbd/issue43278.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43278.dart.weak.transformed.expect
@@ -71,10 +71,10 @@
   let final dynamic #t7 = d in #t7.foo.{core::Object::==}(null) ?{dynamic} #t7.foo = x : null;
   let final self::A? #t8 = a in #t8.{core::Object::==}(null) ?{core::int?} null : let final self::A #t9 = #t8{self::A}.{self::A::bar} in #t9.{self::A::foo}.{core::num::==}(null) ?{core::int} #t9.{self::A::foo} = x : null;
 }
-static method Extension|get#fooExtension(final self::B #this) → core::int?
+static method Extension|get#fooExtension(lowered final self::B #this) → core::int?
   return null;
-static method Extension|set#fooExtension(final self::B #this, core::int? value) → void {}
-static method Extension|get#barExtension(final self::B #this) → self::B
+static method Extension|set#fooExtension(lowered final self::B #this, core::int? value) → void {}
+static method Extension|get#barExtension(lowered final self::B #this) → self::B
   return new self::B::•();
 static method testExtension<T extends self::B? = self::B?>(self::B? b, self::testExtension::T% t, core::int x) → dynamic {
   let final self::B? #t10 = b in (let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:28:5: Error: Property 'fooExtension' cannot be accessed on 'B?' because it is potentially null.
diff --git a/pkg/front_end/testcases/nnbd/issue43591.dart.outline.expect b/pkg/front_end/testcases/nnbd/issue43591.dart.outline.expect
index dbf8690..f3c723d 100644
--- a/pkg/front_end/testcases/nnbd/issue43591.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue43591.dart.outline.expect
@@ -5,7 +5,7 @@
 extension E<T extends core::Object? = dynamic> on T% {
   get f = self::E|get#f;
 }
-static method E|get#f<T extends core::Object? = dynamic>(final self::E|get#f::T% #this) → (self::E|get#f::T%) → self::E|get#f::T%
+static method E|get#f<T extends core::Object? = dynamic>(lowered final self::E|get#f::T% #this) → (self::E|get#f::T%) → self::E|get#f::T%
   ;
 static method method1<S extends core::Object? = dynamic>(self::method1::S% s) → dynamic
   ;
diff --git a/pkg/front_end/testcases/nnbd/issue43591.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue43591.dart.strong.expect
index aae95d4..d9bdceb 100644
--- a/pkg/front_end/testcases/nnbd/issue43591.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue43591.dart.strong.expect
@@ -5,7 +5,7 @@
 extension E<T extends core::Object? = dynamic> on T% {
   get f = self::E|get#f;
 }
-static method E|get#f<T extends core::Object? = dynamic>(final self::E|get#f::T% #this) → (self::E|get#f::T%) → self::E|get#f::T%
+static method E|get#f<T extends core::Object? = dynamic>(lowered final self::E|get#f::T% #this) → (self::E|get#f::T%) → self::E|get#f::T%
   return (self::E|get#f::T% t) → self::E|get#f::T% => t;
 static method method1<S extends core::Object? = dynamic>(self::method1::S% s) → dynamic {
   (self::method1::S%) → self::method1::S% f = self::E|get#f<self::method1::S%>(s);
diff --git a/pkg/front_end/testcases/nnbd/issue43591.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue43591.dart.strong.transformed.expect
index aae95d4..d9bdceb 100644
--- a/pkg/front_end/testcases/nnbd/issue43591.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43591.dart.strong.transformed.expect
@@ -5,7 +5,7 @@
 extension E<T extends core::Object? = dynamic> on T% {
   get f = self::E|get#f;
 }
-static method E|get#f<T extends core::Object? = dynamic>(final self::E|get#f::T% #this) → (self::E|get#f::T%) → self::E|get#f::T%
+static method E|get#f<T extends core::Object? = dynamic>(lowered final self::E|get#f::T% #this) → (self::E|get#f::T%) → self::E|get#f::T%
   return (self::E|get#f::T% t) → self::E|get#f::T% => t;
 static method method1<S extends core::Object? = dynamic>(self::method1::S% s) → dynamic {
   (self::method1::S%) → self::method1::S% f = self::E|get#f<self::method1::S%>(s);
diff --git a/pkg/front_end/testcases/nnbd/issue43591.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue43591.dart.weak.expect
index aae95d4..d9bdceb 100644
--- a/pkg/front_end/testcases/nnbd/issue43591.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue43591.dart.weak.expect
@@ -5,7 +5,7 @@
 extension E<T extends core::Object? = dynamic> on T% {
   get f = self::E|get#f;
 }
-static method E|get#f<T extends core::Object? = dynamic>(final self::E|get#f::T% #this) → (self::E|get#f::T%) → self::E|get#f::T%
+static method E|get#f<T extends core::Object? = dynamic>(lowered final self::E|get#f::T% #this) → (self::E|get#f::T%) → self::E|get#f::T%
   return (self::E|get#f::T% t) → self::E|get#f::T% => t;
 static method method1<S extends core::Object? = dynamic>(self::method1::S% s) → dynamic {
   (self::method1::S%) → self::method1::S% f = self::E|get#f<self::method1::S%>(s);
diff --git a/pkg/front_end/testcases/nnbd/issue43591.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue43591.dart.weak.transformed.expect
index aae95d4..d9bdceb 100644
--- a/pkg/front_end/testcases/nnbd/issue43591.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43591.dart.weak.transformed.expect
@@ -5,7 +5,7 @@
 extension E<T extends core::Object? = dynamic> on T% {
   get f = self::E|get#f;
 }
-static method E|get#f<T extends core::Object? = dynamic>(final self::E|get#f::T% #this) → (self::E|get#f::T%) → self::E|get#f::T%
+static method E|get#f<T extends core::Object? = dynamic>(lowered final self::E|get#f::T% #this) → (self::E|get#f::T%) → self::E|get#f::T%
   return (self::E|get#f::T% t) → self::E|get#f::T% => t;
 static method method1<S extends core::Object? = dynamic>(self::method1::S% s) → dynamic {
   (self::method1::S%) → self::method1::S% f = self::E|get#f<self::method1::S%>(s);
diff --git a/pkg/front_end/testcases/nnbd/language_issue1182.dart.outline.expect b/pkg/front_end/testcases/nnbd/language_issue1182.dart.outline.expect
index 5032523..3cfc9db 100644
--- a/pkg/front_end/testcases/nnbd/language_issue1182.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/language_issue1182.dart.outline.expect
@@ -11,7 +11,7 @@
 extension Test<T extends core::Object? = dynamic> on T% {
   get test = self::Test|get#test;
 }
-static method Test|get#test<T extends core::Object? = dynamic>(final self::Test|get#test::T% #this) → (self::Test|get#test::T%) → self::Test|get#test::T%
+static method Test|get#test<T extends core::Object? = dynamic>(lowered final self::Test|get#test::T% #this) → (self::Test|get#test::T%) → self::Test|get#test::T%
   ;
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/nnbd/language_issue1182.dart.strong.expect b/pkg/front_end/testcases/nnbd/language_issue1182.dart.strong.expect
index 151bcbd..2057990 100644
--- a/pkg/front_end/testcases/nnbd/language_issue1182.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/language_issue1182.dart.strong.expect
@@ -13,6 +13,6 @@
 extension Test<T extends core::Object? = dynamic> on T% {
   get test = self::Test|get#test;
 }
-static method Test|get#test<T extends core::Object? = dynamic>(final self::Test|get#test::T% #this) → (self::Test|get#test::T%) → self::Test|get#test::T%
+static method Test|get#test<T extends core::Object? = dynamic>(lowered final self::Test|get#test::T% #this) → (self::Test|get#test::T%) → self::Test|get#test::T%
   return (self::Test|get#test::T% a) → self::Test|get#test::T% => #this;
 static method main() → void {}
diff --git a/pkg/front_end/testcases/nnbd/language_issue1182.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/language_issue1182.dart.strong.transformed.expect
index 151bcbd..2057990 100644
--- a/pkg/front_end/testcases/nnbd/language_issue1182.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/language_issue1182.dart.strong.transformed.expect
@@ -13,6 +13,6 @@
 extension Test<T extends core::Object? = dynamic> on T% {
   get test = self::Test|get#test;
 }
-static method Test|get#test<T extends core::Object? = dynamic>(final self::Test|get#test::T% #this) → (self::Test|get#test::T%) → self::Test|get#test::T%
+static method Test|get#test<T extends core::Object? = dynamic>(lowered final self::Test|get#test::T% #this) → (self::Test|get#test::T%) → self::Test|get#test::T%
   return (self::Test|get#test::T% a) → self::Test|get#test::T% => #this;
 static method main() → void {}
diff --git a/pkg/front_end/testcases/nnbd/language_issue1182.dart.weak.expect b/pkg/front_end/testcases/nnbd/language_issue1182.dart.weak.expect
index 151bcbd..2057990 100644
--- a/pkg/front_end/testcases/nnbd/language_issue1182.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/language_issue1182.dart.weak.expect
@@ -13,6 +13,6 @@
 extension Test<T extends core::Object? = dynamic> on T% {
   get test = self::Test|get#test;
 }
-static method Test|get#test<T extends core::Object? = dynamic>(final self::Test|get#test::T% #this) → (self::Test|get#test::T%) → self::Test|get#test::T%
+static method Test|get#test<T extends core::Object? = dynamic>(lowered final self::Test|get#test::T% #this) → (self::Test|get#test::T%) → self::Test|get#test::T%
   return (self::Test|get#test::T% a) → self::Test|get#test::T% => #this;
 static method main() → void {}
diff --git a/pkg/front_end/testcases/nnbd/language_issue1182.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/language_issue1182.dart.weak.transformed.expect
index 151bcbd..2057990 100644
--- a/pkg/front_end/testcases/nnbd/language_issue1182.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/language_issue1182.dart.weak.transformed.expect
@@ -13,6 +13,6 @@
 extension Test<T extends core::Object? = dynamic> on T% {
   get test = self::Test|get#test;
 }
-static method Test|get#test<T extends core::Object? = dynamic>(final self::Test|get#test::T% #this) → (self::Test|get#test::T%) → self::Test|get#test::T%
+static method Test|get#test<T extends core::Object? = dynamic>(lowered final self::Test|get#test::T% #this) → (self::Test|get#test::T%) → self::Test|get#test::T%
   return (self::Test|get#test::T% a) → self::Test|get#test::T% => #this;
 static method main() → void {}
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_cascade.dart.outline.expect b/pkg/front_end/testcases/nnbd/null_shorting_cascade.dart.outline.expect
index 7cc6fec..553a098 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting_cascade.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting_cascade.dart.outline.expect
@@ -12,9 +12,9 @@
   method extensionMethod = self::Extension|extensionMethod;
   tearoff extensionMethod = self::Extension|get#extensionMethod;
 }
-static method Extension|extensionMethod(final self::Class #this) → self::Class
+static method Extension|extensionMethod(lowered final self::Class #this) → self::Class
   ;
-static method Extension|get#extensionMethod(final self::Class #this) → () → self::Class
+static method Extension|get#extensionMethod(lowered final self::Class #this) → () → self::Class
   return () → self::Class => self::Extension|extensionMethod(#this);
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_cascade.dart.strong.expect b/pkg/front_end/testcases/nnbd/null_shorting_cascade.dart.strong.expect
index b67570c..a139a5e 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting_cascade.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting_cascade.dart.strong.expect
@@ -13,9 +13,9 @@
   method extensionMethod = self::Extension|extensionMethod;
   tearoff extensionMethod = self::Extension|get#extensionMethod;
 }
-static method Extension|extensionMethod(final self::Class #this) → self::Class
+static method Extension|extensionMethod(lowered final self::Class #this) → self::Class
   return #this;
-static method Extension|get#extensionMethod(final self::Class #this) → () → self::Class
+static method Extension|get#extensionMethod(lowered final self::Class #this) → () → self::Class
   return () → self::Class => self::Extension|extensionMethod(#this);
 static method main() → dynamic {
   self::Class? c;
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_cascade.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/null_shorting_cascade.dart.strong.transformed.expect
index b67570c..a139a5e 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting_cascade.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting_cascade.dart.strong.transformed.expect
@@ -13,9 +13,9 @@
   method extensionMethod = self::Extension|extensionMethod;
   tearoff extensionMethod = self::Extension|get#extensionMethod;
 }
-static method Extension|extensionMethod(final self::Class #this) → self::Class
+static method Extension|extensionMethod(lowered final self::Class #this) → self::Class
   return #this;
-static method Extension|get#extensionMethod(final self::Class #this) → () → self::Class
+static method Extension|get#extensionMethod(lowered final self::Class #this) → () → self::Class
   return () → self::Class => self::Extension|extensionMethod(#this);
 static method main() → dynamic {
   self::Class? c;
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_cascade.dart.weak.expect b/pkg/front_end/testcases/nnbd/null_shorting_cascade.dart.weak.expect
index b67570c..a139a5e 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting_cascade.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting_cascade.dart.weak.expect
@@ -13,9 +13,9 @@
   method extensionMethod = self::Extension|extensionMethod;
   tearoff extensionMethod = self::Extension|get#extensionMethod;
 }
-static method Extension|extensionMethod(final self::Class #this) → self::Class
+static method Extension|extensionMethod(lowered final self::Class #this) → self::Class
   return #this;
-static method Extension|get#extensionMethod(final self::Class #this) → () → self::Class
+static method Extension|get#extensionMethod(lowered final self::Class #this) → () → self::Class
   return () → self::Class => self::Extension|extensionMethod(#this);
 static method main() → dynamic {
   self::Class? c;
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_cascade.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/null_shorting_cascade.dart.weak.transformed.expect
index b67570c..a139a5e 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting_cascade.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting_cascade.dart.weak.transformed.expect
@@ -13,9 +13,9 @@
   method extensionMethod = self::Extension|extensionMethod;
   tearoff extensionMethod = self::Extension|get#extensionMethod;
 }
-static method Extension|extensionMethod(final self::Class #this) → self::Class
+static method Extension|extensionMethod(lowered final self::Class #this) → self::Class
   return #this;
-static method Extension|get#extensionMethod(final self::Class #this) → () → self::Class
+static method Extension|get#extensionMethod(lowered final self::Class #this) → () → self::Class
   return () → self::Class => self::Extension|extensionMethod(#this);
 static method main() → dynamic {
   self::Class? c;
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.outline.expect b/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.outline.expect
index 6e17131..8b10ec3 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.outline.expect
@@ -53,43 +53,43 @@
 extension Extension3 on self::Class3 {
   operator [] = self::Extension3|[];
 }
-static method Extension1|get#nullable1(final self::Class1 #this) → self::Class1?
+static method Extension1|get#nullable1(lowered final self::Class1 #this) → self::Class1?
   ;
-static method Extension1|set#nullable1(final self::Class1 #this, self::Class1? value) → void
+static method Extension1|set#nullable1(lowered final self::Class1 #this, self::Class1? value) → void
   ;
-static method Extension1|nonNullable1Method(final self::Class1 #this) → self::Class1
+static method Extension1|nonNullable1Method(lowered final self::Class1 #this) → self::Class1
   ;
-static method Extension1|get#nonNullable1Method(final self::Class1 #this) → () → self::Class1
+static method Extension1|get#nonNullable1Method(lowered final self::Class1 #this) → () → self::Class1
   return () → self::Class1 => self::Extension1|nonNullable1Method(#this);
-static method Extension1|[](final self::Class1 #this, self::Class1? key) → self::Class1?
+static method Extension1|[](lowered final self::Class1 #this, self::Class1? key) → self::Class1?
   ;
-static method Extension1|[]=(final self::Class1 #this, self::Class1? key, self::Class1? value) → void
+static method Extension1|[]=(lowered final self::Class1 #this, self::Class1? key, self::Class1? value) → void
   ;
-static method Extension1|+(final self::Class1 #this, core::int value) → self::Class1?
+static method Extension1|+(lowered final self::Class1 #this, core::int value) → self::Class1?
   ;
-static method Extension1|unary-(final self::Class1 #this) → self::Class1?
+static method Extension1|unary-(lowered final self::Class1 #this) → self::Class1?
   ;
-static method Extension1|get#nonNullable1(final self::Class1 #this) → self::Class1
+static method Extension1|get#nonNullable1(lowered final self::Class1 #this) → self::Class1
   ;
-static method Extension1|get#nonNullable2(final self::Class1 #this) → self::Class2
+static method Extension1|get#nonNullable2(lowered final self::Class1 #this) → self::Class2
   ;
-static method Extension2|nonNullable2Method(final self::Class2 #this) → self::Class2
+static method Extension2|nonNullable2Method(lowered final self::Class2 #this) → self::Class2
   ;
-static method Extension2|get#nonNullable2Method(final self::Class2 #this) → () → self::Class2
+static method Extension2|get#nonNullable2Method(lowered final self::Class2 #this) → () → self::Class2
   return () → self::Class2 => self::Extension2|nonNullable2Method(#this);
-static method Extension2|[](final self::Class2 #this, self::Class2? key) → self::Class2
+static method Extension2|[](lowered final self::Class2 #this, self::Class2? key) → self::Class2
   ;
-static method Extension2|[]=(final self::Class2 #this, self::Class2? key, self::Class2? value) → void
+static method Extension2|[]=(lowered final self::Class2 #this, self::Class2? key, self::Class2? value) → void
   ;
-static method Extension2|+(final self::Class2 #this, core::int value) → self::Class2
+static method Extension2|+(lowered final self::Class2 #this, core::int value) → self::Class2
   ;
-static method Extension2|unary-(final self::Class2 #this) → self::Class2
+static method Extension2|unary-(lowered final self::Class2 #this) → self::Class2
   ;
-static method Extension2|get#nonNullable2(final self::Class2 #this) → self::Class2
+static method Extension2|get#nonNullable2(lowered final self::Class2 #this) → self::Class2
   ;
-static method Extension2|set#nonNullable2(final self::Class2 #this, self::Class2 value) → void
+static method Extension2|set#nonNullable2(lowered final self::Class2 #this, self::Class2 value) → void
   ;
-static method Extension3|[](final self::Class3 #this, self::Class3? key) → self::Class2?
+static method Extension3|[](lowered final self::Class3 #this, self::Class3? key) → self::Class2?
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.strong.expect b/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.strong.expect
index ba0ed52..4e47ad6 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.strong.expect
@@ -79,46 +79,46 @@
 extension Extension3 on self::Class3 {
   operator [] = self::Extension3|[];
 }
-static method Extension1|get#nullable1(final self::Class1 #this) → self::Class1?
+static method Extension1|get#nullable1(lowered final self::Class1 #this) → self::Class1?
   return #this.{self::Class1::property1};
-static method Extension1|set#nullable1(final self::Class1 #this, self::Class1? value) → void {
+static method Extension1|set#nullable1(lowered final self::Class1 #this, self::Class1? value) → void {
   #this.{self::Class1::property} = value;
 }
-static method Extension1|nonNullable1Method(final self::Class1 #this) → self::Class1
+static method Extension1|nonNullable1Method(lowered final self::Class1 #this) → self::Class1
   return self::Extension1|get#nonNullable1(#this);
-static method Extension1|get#nonNullable1Method(final self::Class1 #this) → () → self::Class1
+static method Extension1|get#nonNullable1Method(lowered final self::Class1 #this) → () → self::Class1
   return () → self::Class1 => self::Extension1|nonNullable1Method(#this);
-static method Extension1|[](final self::Class1 #this, self::Class1? key) → self::Class1?
+static method Extension1|[](lowered final self::Class1 #this, self::Class1? key) → self::Class1?
   return self::Extension1|get#nullable1(#this);
-static method Extension1|[]=(final self::Class1 #this, self::Class1? key, self::Class1? value) → void {
+static method Extension1|[]=(lowered final self::Class1 #this, self::Class1? key, self::Class1? value) → void {
   #this.{self::Class1::property} = value;
 }
-static method Extension1|+(final self::Class1 #this, core::int value) → self::Class1?
+static method Extension1|+(lowered final self::Class1 #this, core::int value) → self::Class1?
   return self::Extension1|get#nullable1(#this);
-static method Extension1|unary-(final self::Class1 #this) → self::Class1?
+static method Extension1|unary-(lowered final self::Class1 #this) → self::Class1?
   return self::Extension1|get#nullable1(#this);
-static method Extension1|get#nonNullable1(final self::Class1 #this) → self::Class1
+static method Extension1|get#nonNullable1(lowered final self::Class1 #this) → self::Class1
   return #this.{self::Class1::property1};
-static method Extension1|get#nonNullable2(final self::Class1 #this) → self::Class2
+static method Extension1|get#nonNullable2(lowered final self::Class1 #this) → self::Class2
   return #this.{self::Class1::property2};
-static method Extension2|nonNullable2Method(final self::Class2 #this) → self::Class2
+static method Extension2|nonNullable2Method(lowered final self::Class2 #this) → self::Class2
   return self::Extension2|get#nonNullable2(#this);
-static method Extension2|get#nonNullable2Method(final self::Class2 #this) → () → self::Class2
+static method Extension2|get#nonNullable2Method(lowered final self::Class2 #this) → () → self::Class2
   return () → self::Class2 => self::Extension2|nonNullable2Method(#this);
-static method Extension2|[](final self::Class2 #this, self::Class2? key) → self::Class2
+static method Extension2|[](lowered final self::Class2 #this, self::Class2? key) → self::Class2
   return #this.{self::Class2::property};
-static method Extension2|[]=(final self::Class2 #this, self::Class2? key, self::Class2? value) → void
+static method Extension2|[]=(lowered final self::Class2 #this, self::Class2? key, self::Class2? value) → void
   return #this.{self::Class2::property};
-static method Extension2|+(final self::Class2 #this, core::int value) → self::Class2
+static method Extension2|+(lowered final self::Class2 #this, core::int value) → self::Class2
   return #this.{self::Class2::property};
-static method Extension2|unary-(final self::Class2 #this) → self::Class2
+static method Extension2|unary-(lowered final self::Class2 #this) → self::Class2
   return #this.{self::Class2::property};
-static method Extension2|get#nonNullable2(final self::Class2 #this) → self::Class2
+static method Extension2|get#nonNullable2(lowered final self::Class2 #this) → self::Class2
   return #this.{self::Class2::property};
-static method Extension2|set#nonNullable2(final self::Class2 #this, self::Class2 value) → void {
+static method Extension2|set#nonNullable2(lowered final self::Class2 #this, self::Class2 value) → void {
   #this.{self::Class2::property} = value;
 }
-static method Extension3|[](final self::Class3 #this, self::Class3? key) → self::Class2?
+static method Extension3|[](lowered final self::Class3 #this, self::Class3? key) → self::Class2?
   return #this.{self::Class3::property};
 static method main() → dynamic {
   self::propertyAccess(null);
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.strong.transformed.expect
index ba0ed52..4e47ad6 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.strong.transformed.expect
@@ -79,46 +79,46 @@
 extension Extension3 on self::Class3 {
   operator [] = self::Extension3|[];
 }
-static method Extension1|get#nullable1(final self::Class1 #this) → self::Class1?
+static method Extension1|get#nullable1(lowered final self::Class1 #this) → self::Class1?
   return #this.{self::Class1::property1};
-static method Extension1|set#nullable1(final self::Class1 #this, self::Class1? value) → void {
+static method Extension1|set#nullable1(lowered final self::Class1 #this, self::Class1? value) → void {
   #this.{self::Class1::property} = value;
 }
-static method Extension1|nonNullable1Method(final self::Class1 #this) → self::Class1
+static method Extension1|nonNullable1Method(lowered final self::Class1 #this) → self::Class1
   return self::Extension1|get#nonNullable1(#this);
-static method Extension1|get#nonNullable1Method(final self::Class1 #this) → () → self::Class1
+static method Extension1|get#nonNullable1Method(lowered final self::Class1 #this) → () → self::Class1
   return () → self::Class1 => self::Extension1|nonNullable1Method(#this);
-static method Extension1|[](final self::Class1 #this, self::Class1? key) → self::Class1?
+static method Extension1|[](lowered final self::Class1 #this, self::Class1? key) → self::Class1?
   return self::Extension1|get#nullable1(#this);
-static method Extension1|[]=(final self::Class1 #this, self::Class1? key, self::Class1? value) → void {
+static method Extension1|[]=(lowered final self::Class1 #this, self::Class1? key, self::Class1? value) → void {
   #this.{self::Class1::property} = value;
 }
-static method Extension1|+(final self::Class1 #this, core::int value) → self::Class1?
+static method Extension1|+(lowered final self::Class1 #this, core::int value) → self::Class1?
   return self::Extension1|get#nullable1(#this);
-static method Extension1|unary-(final self::Class1 #this) → self::Class1?
+static method Extension1|unary-(lowered final self::Class1 #this) → self::Class1?
   return self::Extension1|get#nullable1(#this);
-static method Extension1|get#nonNullable1(final self::Class1 #this) → self::Class1
+static method Extension1|get#nonNullable1(lowered final self::Class1 #this) → self::Class1
   return #this.{self::Class1::property1};
-static method Extension1|get#nonNullable2(final self::Class1 #this) → self::Class2
+static method Extension1|get#nonNullable2(lowered final self::Class1 #this) → self::Class2
   return #this.{self::Class1::property2};
-static method Extension2|nonNullable2Method(final self::Class2 #this) → self::Class2
+static method Extension2|nonNullable2Method(lowered final self::Class2 #this) → self::Class2
   return self::Extension2|get#nonNullable2(#this);
-static method Extension2|get#nonNullable2Method(final self::Class2 #this) → () → self::Class2
+static method Extension2|get#nonNullable2Method(lowered final self::Class2 #this) → () → self::Class2
   return () → self::Class2 => self::Extension2|nonNullable2Method(#this);
-static method Extension2|[](final self::Class2 #this, self::Class2? key) → self::Class2
+static method Extension2|[](lowered final self::Class2 #this, self::Class2? key) → self::Class2
   return #this.{self::Class2::property};
-static method Extension2|[]=(final self::Class2 #this, self::Class2? key, self::Class2? value) → void
+static method Extension2|[]=(lowered final self::Class2 #this, self::Class2? key, self::Class2? value) → void
   return #this.{self::Class2::property};
-static method Extension2|+(final self::Class2 #this, core::int value) → self::Class2
+static method Extension2|+(lowered final self::Class2 #this, core::int value) → self::Class2
   return #this.{self::Class2::property};
-static method Extension2|unary-(final self::Class2 #this) → self::Class2
+static method Extension2|unary-(lowered final self::Class2 #this) → self::Class2
   return #this.{self::Class2::property};
-static method Extension2|get#nonNullable2(final self::Class2 #this) → self::Class2
+static method Extension2|get#nonNullable2(lowered final self::Class2 #this) → self::Class2
   return #this.{self::Class2::property};
-static method Extension2|set#nonNullable2(final self::Class2 #this, self::Class2 value) → void {
+static method Extension2|set#nonNullable2(lowered final self::Class2 #this, self::Class2 value) → void {
   #this.{self::Class2::property} = value;
 }
-static method Extension3|[](final self::Class3 #this, self::Class3? key) → self::Class2?
+static method Extension3|[](lowered final self::Class3 #this, self::Class3? key) → self::Class2?
   return #this.{self::Class3::property};
 static method main() → dynamic {
   self::propertyAccess(null);
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.weak.expect b/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.weak.expect
index ba0ed52..4e47ad6 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.weak.expect
@@ -79,46 +79,46 @@
 extension Extension3 on self::Class3 {
   operator [] = self::Extension3|[];
 }
-static method Extension1|get#nullable1(final self::Class1 #this) → self::Class1?
+static method Extension1|get#nullable1(lowered final self::Class1 #this) → self::Class1?
   return #this.{self::Class1::property1};
-static method Extension1|set#nullable1(final self::Class1 #this, self::Class1? value) → void {
+static method Extension1|set#nullable1(lowered final self::Class1 #this, self::Class1? value) → void {
   #this.{self::Class1::property} = value;
 }
-static method Extension1|nonNullable1Method(final self::Class1 #this) → self::Class1
+static method Extension1|nonNullable1Method(lowered final self::Class1 #this) → self::Class1
   return self::Extension1|get#nonNullable1(#this);
-static method Extension1|get#nonNullable1Method(final self::Class1 #this) → () → self::Class1
+static method Extension1|get#nonNullable1Method(lowered final self::Class1 #this) → () → self::Class1
   return () → self::Class1 => self::Extension1|nonNullable1Method(#this);
-static method Extension1|[](final self::Class1 #this, self::Class1? key) → self::Class1?
+static method Extension1|[](lowered final self::Class1 #this, self::Class1? key) → self::Class1?
   return self::Extension1|get#nullable1(#this);
-static method Extension1|[]=(final self::Class1 #this, self::Class1? key, self::Class1? value) → void {
+static method Extension1|[]=(lowered final self::Class1 #this, self::Class1? key, self::Class1? value) → void {
   #this.{self::Class1::property} = value;
 }
-static method Extension1|+(final self::Class1 #this, core::int value) → self::Class1?
+static method Extension1|+(lowered final self::Class1 #this, core::int value) → self::Class1?
   return self::Extension1|get#nullable1(#this);
-static method Extension1|unary-(final self::Class1 #this) → self::Class1?
+static method Extension1|unary-(lowered final self::Class1 #this) → self::Class1?
   return self::Extension1|get#nullable1(#this);
-static method Extension1|get#nonNullable1(final self::Class1 #this) → self::Class1
+static method Extension1|get#nonNullable1(lowered final self::Class1 #this) → self::Class1
   return #this.{self::Class1::property1};
-static method Extension1|get#nonNullable2(final self::Class1 #this) → self::Class2
+static method Extension1|get#nonNullable2(lowered final self::Class1 #this) → self::Class2
   return #this.{self::Class1::property2};
-static method Extension2|nonNullable2Method(final self::Class2 #this) → self::Class2
+static method Extension2|nonNullable2Method(lowered final self::Class2 #this) → self::Class2
   return self::Extension2|get#nonNullable2(#this);
-static method Extension2|get#nonNullable2Method(final self::Class2 #this) → () → self::Class2
+static method Extension2|get#nonNullable2Method(lowered final self::Class2 #this) → () → self::Class2
   return () → self::Class2 => self::Extension2|nonNullable2Method(#this);
-static method Extension2|[](final self::Class2 #this, self::Class2? key) → self::Class2
+static method Extension2|[](lowered final self::Class2 #this, self::Class2? key) → self::Class2
   return #this.{self::Class2::property};
-static method Extension2|[]=(final self::Class2 #this, self::Class2? key, self::Class2? value) → void
+static method Extension2|[]=(lowered final self::Class2 #this, self::Class2? key, self::Class2? value) → void
   return #this.{self::Class2::property};
-static method Extension2|+(final self::Class2 #this, core::int value) → self::Class2
+static method Extension2|+(lowered final self::Class2 #this, core::int value) → self::Class2
   return #this.{self::Class2::property};
-static method Extension2|unary-(final self::Class2 #this) → self::Class2
+static method Extension2|unary-(lowered final self::Class2 #this) → self::Class2
   return #this.{self::Class2::property};
-static method Extension2|get#nonNullable2(final self::Class2 #this) → self::Class2
+static method Extension2|get#nonNullable2(lowered final self::Class2 #this) → self::Class2
   return #this.{self::Class2::property};
-static method Extension2|set#nonNullable2(final self::Class2 #this, self::Class2 value) → void {
+static method Extension2|set#nonNullable2(lowered final self::Class2 #this, self::Class2 value) → void {
   #this.{self::Class2::property} = value;
 }
-static method Extension3|[](final self::Class3 #this, self::Class3? key) → self::Class2?
+static method Extension3|[](lowered final self::Class3 #this, self::Class3? key) → self::Class2?
   return #this.{self::Class3::property};
 static method main() → dynamic {
   self::propertyAccess(null);
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.weak.transformed.expect
index ba0ed52..4e47ad6 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.weak.transformed.expect
@@ -79,46 +79,46 @@
 extension Extension3 on self::Class3 {
   operator [] = self::Extension3|[];
 }
-static method Extension1|get#nullable1(final self::Class1 #this) → self::Class1?
+static method Extension1|get#nullable1(lowered final self::Class1 #this) → self::Class1?
   return #this.{self::Class1::property1};
-static method Extension1|set#nullable1(final self::Class1 #this, self::Class1? value) → void {
+static method Extension1|set#nullable1(lowered final self::Class1 #this, self::Class1? value) → void {
   #this.{self::Class1::property} = value;
 }
-static method Extension1|nonNullable1Method(final self::Class1 #this) → self::Class1
+static method Extension1|nonNullable1Method(lowered final self::Class1 #this) → self::Class1
   return self::Extension1|get#nonNullable1(#this);
-static method Extension1|get#nonNullable1Method(final self::Class1 #this) → () → self::Class1
+static method Extension1|get#nonNullable1Method(lowered final self::Class1 #this) → () → self::Class1
   return () → self::Class1 => self::Extension1|nonNullable1Method(#this);
-static method Extension1|[](final self::Class1 #this, self::Class1? key) → self::Class1?
+static method Extension1|[](lowered final self::Class1 #this, self::Class1? key) → self::Class1?
   return self::Extension1|get#nullable1(#this);
-static method Extension1|[]=(final self::Class1 #this, self::Class1? key, self::Class1? value) → void {
+static method Extension1|[]=(lowered final self::Class1 #this, self::Class1? key, self::Class1? value) → void {
   #this.{self::Class1::property} = value;
 }
-static method Extension1|+(final self::Class1 #this, core::int value) → self::Class1?
+static method Extension1|+(lowered final self::Class1 #this, core::int value) → self::Class1?
   return self::Extension1|get#nullable1(#this);
-static method Extension1|unary-(final self::Class1 #this) → self::Class1?
+static method Extension1|unary-(lowered final self::Class1 #this) → self::Class1?
   return self::Extension1|get#nullable1(#this);
-static method Extension1|get#nonNullable1(final self::Class1 #this) → self::Class1
+static method Extension1|get#nonNullable1(lowered final self::Class1 #this) → self::Class1
   return #this.{self::Class1::property1};
-static method Extension1|get#nonNullable2(final self::Class1 #this) → self::Class2
+static method Extension1|get#nonNullable2(lowered final self::Class1 #this) → self::Class2
   return #this.{self::Class1::property2};
-static method Extension2|nonNullable2Method(final self::Class2 #this) → self::Class2
+static method Extension2|nonNullable2Method(lowered final self::Class2 #this) → self::Class2
   return self::Extension2|get#nonNullable2(#this);
-static method Extension2|get#nonNullable2Method(final self::Class2 #this) → () → self::Class2
+static method Extension2|get#nonNullable2Method(lowered final self::Class2 #this) → () → self::Class2
   return () → self::Class2 => self::Extension2|nonNullable2Method(#this);
-static method Extension2|[](final self::Class2 #this, self::Class2? key) → self::Class2
+static method Extension2|[](lowered final self::Class2 #this, self::Class2? key) → self::Class2
   return #this.{self::Class2::property};
-static method Extension2|[]=(final self::Class2 #this, self::Class2? key, self::Class2? value) → void
+static method Extension2|[]=(lowered final self::Class2 #this, self::Class2? key, self::Class2? value) → void
   return #this.{self::Class2::property};
-static method Extension2|+(final self::Class2 #this, core::int value) → self::Class2
+static method Extension2|+(lowered final self::Class2 #this, core::int value) → self::Class2
   return #this.{self::Class2::property};
-static method Extension2|unary-(final self::Class2 #this) → self::Class2
+static method Extension2|unary-(lowered final self::Class2 #this) → self::Class2
   return #this.{self::Class2::property};
-static method Extension2|get#nonNullable2(final self::Class2 #this) → self::Class2
+static method Extension2|get#nonNullable2(lowered final self::Class2 #this) → self::Class2
   return #this.{self::Class2::property};
-static method Extension2|set#nonNullable2(final self::Class2 #this, self::Class2 value) → void {
+static method Extension2|set#nonNullable2(lowered final self::Class2 #this, self::Class2 value) → void {
   #this.{self::Class2::property} = value;
 }
-static method Extension3|[](final self::Class3 #this, self::Class3? key) → self::Class2?
+static method Extension3|[](lowered final self::Class3 #this, self::Class3? key) → self::Class2?
   return #this.{self::Class3::property};
 static method main() → dynamic {
   self::propertyAccess(null);
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.outline.expect b/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.outline.expect
index 6e17131..8b10ec3 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.outline.expect
@@ -53,43 +53,43 @@
 extension Extension3 on self::Class3 {
   operator [] = self::Extension3|[];
 }
-static method Extension1|get#nullable1(final self::Class1 #this) → self::Class1?
+static method Extension1|get#nullable1(lowered final self::Class1 #this) → self::Class1?
   ;
-static method Extension1|set#nullable1(final self::Class1 #this, self::Class1? value) → void
+static method Extension1|set#nullable1(lowered final self::Class1 #this, self::Class1? value) → void
   ;
-static method Extension1|nonNullable1Method(final self::Class1 #this) → self::Class1
+static method Extension1|nonNullable1Method(lowered final self::Class1 #this) → self::Class1
   ;
-static method Extension1|get#nonNullable1Method(final self::Class1 #this) → () → self::Class1
+static method Extension1|get#nonNullable1Method(lowered final self::Class1 #this) → () → self::Class1
   return () → self::Class1 => self::Extension1|nonNullable1Method(#this);
-static method Extension1|[](final self::Class1 #this, self::Class1? key) → self::Class1?
+static method Extension1|[](lowered final self::Class1 #this, self::Class1? key) → self::Class1?
   ;
-static method Extension1|[]=(final self::Class1 #this, self::Class1? key, self::Class1? value) → void
+static method Extension1|[]=(lowered final self::Class1 #this, self::Class1? key, self::Class1? value) → void
   ;
-static method Extension1|+(final self::Class1 #this, core::int value) → self::Class1?
+static method Extension1|+(lowered final self::Class1 #this, core::int value) → self::Class1?
   ;
-static method Extension1|unary-(final self::Class1 #this) → self::Class1?
+static method Extension1|unary-(lowered final self::Class1 #this) → self::Class1?
   ;
-static method Extension1|get#nonNullable1(final self::Class1 #this) → self::Class1
+static method Extension1|get#nonNullable1(lowered final self::Class1 #this) → self::Class1
   ;
-static method Extension1|get#nonNullable2(final self::Class1 #this) → self::Class2
+static method Extension1|get#nonNullable2(lowered final self::Class1 #this) → self::Class2
   ;
-static method Extension2|nonNullable2Method(final self::Class2 #this) → self::Class2
+static method Extension2|nonNullable2Method(lowered final self::Class2 #this) → self::Class2
   ;
-static method Extension2|get#nonNullable2Method(final self::Class2 #this) → () → self::Class2
+static method Extension2|get#nonNullable2Method(lowered final self::Class2 #this) → () → self::Class2
   return () → self::Class2 => self::Extension2|nonNullable2Method(#this);
-static method Extension2|[](final self::Class2 #this, self::Class2? key) → self::Class2
+static method Extension2|[](lowered final self::Class2 #this, self::Class2? key) → self::Class2
   ;
-static method Extension2|[]=(final self::Class2 #this, self::Class2? key, self::Class2? value) → void
+static method Extension2|[]=(lowered final self::Class2 #this, self::Class2? key, self::Class2? value) → void
   ;
-static method Extension2|+(final self::Class2 #this, core::int value) → self::Class2
+static method Extension2|+(lowered final self::Class2 #this, core::int value) → self::Class2
   ;
-static method Extension2|unary-(final self::Class2 #this) → self::Class2
+static method Extension2|unary-(lowered final self::Class2 #this) → self::Class2
   ;
-static method Extension2|get#nonNullable2(final self::Class2 #this) → self::Class2
+static method Extension2|get#nonNullable2(lowered final self::Class2 #this) → self::Class2
   ;
-static method Extension2|set#nonNullable2(final self::Class2 #this, self::Class2 value) → void
+static method Extension2|set#nonNullable2(lowered final self::Class2 #this, self::Class2 value) → void
   ;
-static method Extension3|[](final self::Class3 #this, self::Class3? key) → self::Class2?
+static method Extension3|[](lowered final self::Class3 #this, self::Class3? key) → self::Class2?
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.strong.expect b/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.strong.expect
index 595c5b9..dead545 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.strong.expect
@@ -79,46 +79,46 @@
 extension Extension3 on self::Class3 {
   operator [] = self::Extension3|[];
 }
-static method Extension1|get#nullable1(final self::Class1 #this) → self::Class1?
+static method Extension1|get#nullable1(lowered final self::Class1 #this) → self::Class1?
   return #this.{self::Class1::property1};
-static method Extension1|set#nullable1(final self::Class1 #this, self::Class1? value) → void {
+static method Extension1|set#nullable1(lowered final self::Class1 #this, self::Class1? value) → void {
   #this.{self::Class1::property} = value;
 }
-static method Extension1|nonNullable1Method(final self::Class1 #this) → self::Class1
+static method Extension1|nonNullable1Method(lowered final self::Class1 #this) → self::Class1
   return self::Extension1|get#nonNullable1(#this);
-static method Extension1|get#nonNullable1Method(final self::Class1 #this) → () → self::Class1
+static method Extension1|get#nonNullable1Method(lowered final self::Class1 #this) → () → self::Class1
   return () → self::Class1 => self::Extension1|nonNullable1Method(#this);
-static method Extension1|[](final self::Class1 #this, self::Class1? key) → self::Class1?
+static method Extension1|[](lowered final self::Class1 #this, self::Class1? key) → self::Class1?
   return self::Extension1|get#nullable1(#this);
-static method Extension1|[]=(final self::Class1 #this, self::Class1? key, self::Class1? value) → void {
+static method Extension1|[]=(lowered final self::Class1 #this, self::Class1? key, self::Class1? value) → void {
   #this.{self::Class1::property} = value;
 }
-static method Extension1|+(final self::Class1 #this, core::int value) → self::Class1?
+static method Extension1|+(lowered final self::Class1 #this, core::int value) → self::Class1?
   return self::Extension1|get#nullable1(#this);
-static method Extension1|unary-(final self::Class1 #this) → self::Class1?
+static method Extension1|unary-(lowered final self::Class1 #this) → self::Class1?
   return self::Extension1|get#nullable1(#this);
-static method Extension1|get#nonNullable1(final self::Class1 #this) → self::Class1
+static method Extension1|get#nonNullable1(lowered final self::Class1 #this) → self::Class1
   return #this.{self::Class1::property1};
-static method Extension1|get#nonNullable2(final self::Class1 #this) → self::Class2
+static method Extension1|get#nonNullable2(lowered final self::Class1 #this) → self::Class2
   return #this.{self::Class1::property2};
-static method Extension2|nonNullable2Method(final self::Class2 #this) → self::Class2
+static method Extension2|nonNullable2Method(lowered final self::Class2 #this) → self::Class2
   return self::Extension2|get#nonNullable2(#this);
-static method Extension2|get#nonNullable2Method(final self::Class2 #this) → () → self::Class2
+static method Extension2|get#nonNullable2Method(lowered final self::Class2 #this) → () → self::Class2
   return () → self::Class2 => self::Extension2|nonNullable2Method(#this);
-static method Extension2|[](final self::Class2 #this, self::Class2? key) → self::Class2
+static method Extension2|[](lowered final self::Class2 #this, self::Class2? key) → self::Class2
   return #this.{self::Class2::property};
-static method Extension2|[]=(final self::Class2 #this, self::Class2? key, self::Class2? value) → void
+static method Extension2|[]=(lowered final self::Class2 #this, self::Class2? key, self::Class2? value) → void
   return #this.{self::Class2::property};
-static method Extension2|+(final self::Class2 #this, core::int value) → self::Class2
+static method Extension2|+(lowered final self::Class2 #this, core::int value) → self::Class2
   return #this.{self::Class2::property};
-static method Extension2|unary-(final self::Class2 #this) → self::Class2
+static method Extension2|unary-(lowered final self::Class2 #this) → self::Class2
   return #this.{self::Class2::property};
-static method Extension2|get#nonNullable2(final self::Class2 #this) → self::Class2
+static method Extension2|get#nonNullable2(lowered final self::Class2 #this) → self::Class2
   return #this.{self::Class2::property};
-static method Extension2|set#nonNullable2(final self::Class2 #this, self::Class2 value) → void {
+static method Extension2|set#nonNullable2(lowered final self::Class2 #this, self::Class2 value) → void {
   #this.{self::Class2::property} = value;
 }
-static method Extension3|[](final self::Class3 #this, self::Class3? key) → self::Class2?
+static method Extension3|[](lowered final self::Class3 #this, self::Class3? key) → self::Class2?
   return #this.{self::Class3::property};
 static method main() → dynamic {
   self::propertyAccess(null);
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.strong.transformed.expect
index 595c5b9..dead545 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.strong.transformed.expect
@@ -79,46 +79,46 @@
 extension Extension3 on self::Class3 {
   operator [] = self::Extension3|[];
 }
-static method Extension1|get#nullable1(final self::Class1 #this) → self::Class1?
+static method Extension1|get#nullable1(lowered final self::Class1 #this) → self::Class1?
   return #this.{self::Class1::property1};
-static method Extension1|set#nullable1(final self::Class1 #this, self::Class1? value) → void {
+static method Extension1|set#nullable1(lowered final self::Class1 #this, self::Class1? value) → void {
   #this.{self::Class1::property} = value;
 }
-static method Extension1|nonNullable1Method(final self::Class1 #this) → self::Class1
+static method Extension1|nonNullable1Method(lowered final self::Class1 #this) → self::Class1
   return self::Extension1|get#nonNullable1(#this);
-static method Extension1|get#nonNullable1Method(final self::Class1 #this) → () → self::Class1
+static method Extension1|get#nonNullable1Method(lowered final self::Class1 #this) → () → self::Class1
   return () → self::Class1 => self::Extension1|nonNullable1Method(#this);
-static method Extension1|[](final self::Class1 #this, self::Class1? key) → self::Class1?
+static method Extension1|[](lowered final self::Class1 #this, self::Class1? key) → self::Class1?
   return self::Extension1|get#nullable1(#this);
-static method Extension1|[]=(final self::Class1 #this, self::Class1? key, self::Class1? value) → void {
+static method Extension1|[]=(lowered final self::Class1 #this, self::Class1? key, self::Class1? value) → void {
   #this.{self::Class1::property} = value;
 }
-static method Extension1|+(final self::Class1 #this, core::int value) → self::Class1?
+static method Extension1|+(lowered final self::Class1 #this, core::int value) → self::Class1?
   return self::Extension1|get#nullable1(#this);
-static method Extension1|unary-(final self::Class1 #this) → self::Class1?
+static method Extension1|unary-(lowered final self::Class1 #this) → self::Class1?
   return self::Extension1|get#nullable1(#this);
-static method Extension1|get#nonNullable1(final self::Class1 #this) → self::Class1
+static method Extension1|get#nonNullable1(lowered final self::Class1 #this) → self::Class1
   return #this.{self::Class1::property1};
-static method Extension1|get#nonNullable2(final self::Class1 #this) → self::Class2
+static method Extension1|get#nonNullable2(lowered final self::Class1 #this) → self::Class2
   return #this.{self::Class1::property2};
-static method Extension2|nonNullable2Method(final self::Class2 #this) → self::Class2
+static method Extension2|nonNullable2Method(lowered final self::Class2 #this) → self::Class2
   return self::Extension2|get#nonNullable2(#this);
-static method Extension2|get#nonNullable2Method(final self::Class2 #this) → () → self::Class2
+static method Extension2|get#nonNullable2Method(lowered final self::Class2 #this) → () → self::Class2
   return () → self::Class2 => self::Extension2|nonNullable2Method(#this);
-static method Extension2|[](final self::Class2 #this, self::Class2? key) → self::Class2
+static method Extension2|[](lowered final self::Class2 #this, self::Class2? key) → self::Class2
   return #this.{self::Class2::property};
-static method Extension2|[]=(final self::Class2 #this, self::Class2? key, self::Class2? value) → void
+static method Extension2|[]=(lowered final self::Class2 #this, self::Class2? key, self::Class2? value) → void
   return #this.{self::Class2::property};
-static method Extension2|+(final self::Class2 #this, core::int value) → self::Class2
+static method Extension2|+(lowered final self::Class2 #this, core::int value) → self::Class2
   return #this.{self::Class2::property};
-static method Extension2|unary-(final self::Class2 #this) → self::Class2
+static method Extension2|unary-(lowered final self::Class2 #this) → self::Class2
   return #this.{self::Class2::property};
-static method Extension2|get#nonNullable2(final self::Class2 #this) → self::Class2
+static method Extension2|get#nonNullable2(lowered final self::Class2 #this) → self::Class2
   return #this.{self::Class2::property};
-static method Extension2|set#nonNullable2(final self::Class2 #this, self::Class2 value) → void {
+static method Extension2|set#nonNullable2(lowered final self::Class2 #this, self::Class2 value) → void {
   #this.{self::Class2::property} = value;
 }
-static method Extension3|[](final self::Class3 #this, self::Class3? key) → self::Class2?
+static method Extension3|[](lowered final self::Class3 #this, self::Class3? key) → self::Class2?
   return #this.{self::Class3::property};
 static method main() → dynamic {
   self::propertyAccess(null);
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.weak.expect b/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.weak.expect
index 595c5b9..dead545 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.weak.expect
@@ -79,46 +79,46 @@
 extension Extension3 on self::Class3 {
   operator [] = self::Extension3|[];
 }
-static method Extension1|get#nullable1(final self::Class1 #this) → self::Class1?
+static method Extension1|get#nullable1(lowered final self::Class1 #this) → self::Class1?
   return #this.{self::Class1::property1};
-static method Extension1|set#nullable1(final self::Class1 #this, self::Class1? value) → void {
+static method Extension1|set#nullable1(lowered final self::Class1 #this, self::Class1? value) → void {
   #this.{self::Class1::property} = value;
 }
-static method Extension1|nonNullable1Method(final self::Class1 #this) → self::Class1
+static method Extension1|nonNullable1Method(lowered final self::Class1 #this) → self::Class1
   return self::Extension1|get#nonNullable1(#this);
-static method Extension1|get#nonNullable1Method(final self::Class1 #this) → () → self::Class1
+static method Extension1|get#nonNullable1Method(lowered final self::Class1 #this) → () → self::Class1
   return () → self::Class1 => self::Extension1|nonNullable1Method(#this);
-static method Extension1|[](final self::Class1 #this, self::Class1? key) → self::Class1?
+static method Extension1|[](lowered final self::Class1 #this, self::Class1? key) → self::Class1?
   return self::Extension1|get#nullable1(#this);
-static method Extension1|[]=(final self::Class1 #this, self::Class1? key, self::Class1? value) → void {
+static method Extension1|[]=(lowered final self::Class1 #this, self::Class1? key, self::Class1? value) → void {
   #this.{self::Class1::property} = value;
 }
-static method Extension1|+(final self::Class1 #this, core::int value) → self::Class1?
+static method Extension1|+(lowered final self::Class1 #this, core::int value) → self::Class1?
   return self::Extension1|get#nullable1(#this);
-static method Extension1|unary-(final self::Class1 #this) → self::Class1?
+static method Extension1|unary-(lowered final self::Class1 #this) → self::Class1?
   return self::Extension1|get#nullable1(#this);
-static method Extension1|get#nonNullable1(final self::Class1 #this) → self::Class1
+static method Extension1|get#nonNullable1(lowered final self::Class1 #this) → self::Class1
   return #this.{self::Class1::property1};
-static method Extension1|get#nonNullable2(final self::Class1 #this) → self::Class2
+static method Extension1|get#nonNullable2(lowered final self::Class1 #this) → self::Class2
   return #this.{self::Class1::property2};
-static method Extension2|nonNullable2Method(final self::Class2 #this) → self::Class2
+static method Extension2|nonNullable2Method(lowered final self::Class2 #this) → self::Class2
   return self::Extension2|get#nonNullable2(#this);
-static method Extension2|get#nonNullable2Method(final self::Class2 #this) → () → self::Class2
+static method Extension2|get#nonNullable2Method(lowered final self::Class2 #this) → () → self::Class2
   return () → self::Class2 => self::Extension2|nonNullable2Method(#this);
-static method Extension2|[](final self::Class2 #this, self::Class2? key) → self::Class2
+static method Extension2|[](lowered final self::Class2 #this, self::Class2? key) → self::Class2
   return #this.{self::Class2::property};
-static method Extension2|[]=(final self::Class2 #this, self::Class2? key, self::Class2? value) → void
+static method Extension2|[]=(lowered final self::Class2 #this, self::Class2? key, self::Class2? value) → void
   return #this.{self::Class2::property};
-static method Extension2|+(final self::Class2 #this, core::int value) → self::Class2
+static method Extension2|+(lowered final self::Class2 #this, core::int value) → self::Class2
   return #this.{self::Class2::property};
-static method Extension2|unary-(final self::Class2 #this) → self::Class2
+static method Extension2|unary-(lowered final self::Class2 #this) → self::Class2
   return #this.{self::Class2::property};
-static method Extension2|get#nonNullable2(final self::Class2 #this) → self::Class2
+static method Extension2|get#nonNullable2(lowered final self::Class2 #this) → self::Class2
   return #this.{self::Class2::property};
-static method Extension2|set#nonNullable2(final self::Class2 #this, self::Class2 value) → void {
+static method Extension2|set#nonNullable2(lowered final self::Class2 #this, self::Class2 value) → void {
   #this.{self::Class2::property} = value;
 }
-static method Extension3|[](final self::Class3 #this, self::Class3? key) → self::Class2?
+static method Extension3|[](lowered final self::Class3 #this, self::Class3? key) → self::Class2?
   return #this.{self::Class3::property};
 static method main() → dynamic {
   self::propertyAccess(null);
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.weak.transformed.expect
index 595c5b9..dead545 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.weak.transformed.expect
@@ -79,46 +79,46 @@
 extension Extension3 on self::Class3 {
   operator [] = self::Extension3|[];
 }
-static method Extension1|get#nullable1(final self::Class1 #this) → self::Class1?
+static method Extension1|get#nullable1(lowered final self::Class1 #this) → self::Class1?
   return #this.{self::Class1::property1};
-static method Extension1|set#nullable1(final self::Class1 #this, self::Class1? value) → void {
+static method Extension1|set#nullable1(lowered final self::Class1 #this, self::Class1? value) → void {
   #this.{self::Class1::property} = value;
 }
-static method Extension1|nonNullable1Method(final self::Class1 #this) → self::Class1
+static method Extension1|nonNullable1Method(lowered final self::Class1 #this) → self::Class1
   return self::Extension1|get#nonNullable1(#this);
-static method Extension1|get#nonNullable1Method(final self::Class1 #this) → () → self::Class1
+static method Extension1|get#nonNullable1Method(lowered final self::Class1 #this) → () → self::Class1
   return () → self::Class1 => self::Extension1|nonNullable1Method(#this);
-static method Extension1|[](final self::Class1 #this, self::Class1? key) → self::Class1?
+static method Extension1|[](lowered final self::Class1 #this, self::Class1? key) → self::Class1?
   return self::Extension1|get#nullable1(#this);
-static method Extension1|[]=(final self::Class1 #this, self::Class1? key, self::Class1? value) → void {
+static method Extension1|[]=(lowered final self::Class1 #this, self::Class1? key, self::Class1? value) → void {
   #this.{self::Class1::property} = value;
 }
-static method Extension1|+(final self::Class1 #this, core::int value) → self::Class1?
+static method Extension1|+(lowered final self::Class1 #this, core::int value) → self::Class1?
   return self::Extension1|get#nullable1(#this);
-static method Extension1|unary-(final self::Class1 #this) → self::Class1?
+static method Extension1|unary-(lowered final self::Class1 #this) → self::Class1?
   return self::Extension1|get#nullable1(#this);
-static method Extension1|get#nonNullable1(final self::Class1 #this) → self::Class1
+static method Extension1|get#nonNullable1(lowered final self::Class1 #this) → self::Class1
   return #this.{self::Class1::property1};
-static method Extension1|get#nonNullable2(final self::Class1 #this) → self::Class2
+static method Extension1|get#nonNullable2(lowered final self::Class1 #this) → self::Class2
   return #this.{self::Class1::property2};
-static method Extension2|nonNullable2Method(final self::Class2 #this) → self::Class2
+static method Extension2|nonNullable2Method(lowered final self::Class2 #this) → self::Class2
   return self::Extension2|get#nonNullable2(#this);
-static method Extension2|get#nonNullable2Method(final self::Class2 #this) → () → self::Class2
+static method Extension2|get#nonNullable2Method(lowered final self::Class2 #this) → () → self::Class2
   return () → self::Class2 => self::Extension2|nonNullable2Method(#this);
-static method Extension2|[](final self::Class2 #this, self::Class2? key) → self::Class2
+static method Extension2|[](lowered final self::Class2 #this, self::Class2? key) → self::Class2
   return #this.{self::Class2::property};
-static method Extension2|[]=(final self::Class2 #this, self::Class2? key, self::Class2? value) → void
+static method Extension2|[]=(lowered final self::Class2 #this, self::Class2? key, self::Class2? value) → void
   return #this.{self::Class2::property};
-static method Extension2|+(final self::Class2 #this, core::int value) → self::Class2
+static method Extension2|+(lowered final self::Class2 #this, core::int value) → self::Class2
   return #this.{self::Class2::property};
-static method Extension2|unary-(final self::Class2 #this) → self::Class2
+static method Extension2|unary-(lowered final self::Class2 #this) → self::Class2
   return #this.{self::Class2::property};
-static method Extension2|get#nonNullable2(final self::Class2 #this) → self::Class2
+static method Extension2|get#nonNullable2(lowered final self::Class2 #this) → self::Class2
   return #this.{self::Class2::property};
-static method Extension2|set#nonNullable2(final self::Class2 #this, self::Class2 value) → void {
+static method Extension2|set#nonNullable2(lowered final self::Class2 #this, self::Class2 value) → void {
   #this.{self::Class2::property} = value;
 }
-static method Extension3|[](final self::Class3 #this, self::Class3? key) → self::Class2?
+static method Extension3|[](lowered final self::Class3 #this, self::Class3? key) → self::Class2?
   return #this.{self::Class3::property};
 static method main() → dynamic {
   self::propertyAccess(null);
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_index.dart.outline.expect b/pkg/front_end/testcases/nnbd/null_shorting_index.dart.outline.expect
index c13bf31..8e9e154 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting_index.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting_index.dart.outline.expect
@@ -21,9 +21,9 @@
   operator [] = self::Extension|[];
   operator []= = self::Extension|[]=;
 }
-static method Extension|[](final self::Class2 #this, core::int index) → core::int
+static method Extension|[](lowered final self::Class2 #this, core::int index) → core::int
   ;
-static method Extension|[]=(final self::Class2 #this, core::int index, core::int value) → void
+static method Extension|[]=(lowered final self::Class2 #this, core::int index, core::int value) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_index.dart.strong.expect b/pkg/front_end/testcases/nnbd/null_shorting_index.dart.strong.expect
index e391c8f..dc52187 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting_index.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting_index.dart.strong.expect
@@ -77,9 +77,9 @@
   operator [] = self::Extension|[];
   operator []= = self::Extension|[]=;
 }
-static method Extension|[](final self::Class2 #this, core::int index) → core::int
+static method Extension|[](lowered final self::Class2 #this, core::int index) → core::int
   return #this.{self::Class2::field};
-static method Extension|[]=(final self::Class2 #this, core::int index, core::int value) → void {
+static method Extension|[]=(lowered final self::Class2 #this, core::int index, core::int value) → void {
   #this.{self::Class2::field} = value;
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_index.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/null_shorting_index.dart.strong.transformed.expect
index 9838019..5b7b144 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting_index.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting_index.dart.strong.transformed.expect
@@ -77,9 +77,9 @@
   operator [] = self::Extension|[];
   operator []= = self::Extension|[]=;
 }
-static method Extension|[](final self::Class2 #this, core::int index) → core::int
+static method Extension|[](lowered final self::Class2 #this, core::int index) → core::int
   return #this.{self::Class2::field};
-static method Extension|[]=(final self::Class2 #this, core::int index, core::int value) → void {
+static method Extension|[]=(lowered final self::Class2 #this, core::int index, core::int value) → void {
   #this.{self::Class2::field} = value;
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_index.dart.weak.expect b/pkg/front_end/testcases/nnbd/null_shorting_index.dart.weak.expect
index e391c8f..dc52187 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting_index.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting_index.dart.weak.expect
@@ -77,9 +77,9 @@
   operator [] = self::Extension|[];
   operator []= = self::Extension|[]=;
 }
-static method Extension|[](final self::Class2 #this, core::int index) → core::int
+static method Extension|[](lowered final self::Class2 #this, core::int index) → core::int
   return #this.{self::Class2::field};
-static method Extension|[]=(final self::Class2 #this, core::int index, core::int value) → void {
+static method Extension|[]=(lowered final self::Class2 #this, core::int index, core::int value) → void {
   #this.{self::Class2::field} = value;
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_index.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/null_shorting_index.dart.weak.transformed.expect
index 7e7ea06..e604a49 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting_index.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting_index.dart.weak.transformed.expect
@@ -77,9 +77,9 @@
   operator [] = self::Extension|[];
   operator []= = self::Extension|[]=;
 }
-static method Extension|[](final self::Class2 #this, core::int index) → core::int
+static method Extension|[](lowered final self::Class2 #this, core::int index) → core::int
   return #this.{self::Class2::field};
-static method Extension|[]=(final self::Class2 #this, core::int index, core::int value) → void {
+static method Extension|[]=(lowered final self::Class2 #this, core::int index, core::int value) → void {
   #this.{self::Class2::field} = value;
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/nnbd/nullable_extension.dart.outline.expect b/pkg/front_end/testcases/nnbd/nullable_extension.dart.outline.expect
index 738963d..79d4bd9 100644
--- a/pkg/front_end/testcases/nnbd/nullable_extension.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_extension.dart.outline.expect
@@ -10,7 +10,7 @@
 extension _extension#0 on self::A? {
   get text = self::_extension#0|get#text;
 }
-static method _extension#0|get#text(final self::A? #this) → core::String
+static method _extension#0|get#text(lowered final self::A? #this) → core::String
   ;
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/nnbd/nullable_extension.dart.strong.expect b/pkg/front_end/testcases/nnbd/nullable_extension.dart.strong.expect
index 4b74dec..a732aa4 100644
--- a/pkg/front_end/testcases/nnbd/nullable_extension.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_extension.dart.strong.expect
@@ -11,7 +11,7 @@
 extension _extension#0 on self::A? {
   get text = self::_extension#0|get#text;
 }
-static method _extension#0|get#text(final self::A? #this) → core::String
+static method _extension#0|get#text(lowered final self::A? #this) → core::String
   return "Lily was here";
 static method main() → void {
   self::A? a = null;
diff --git a/pkg/front_end/testcases/nnbd/nullable_extension.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/nullable_extension.dart.strong.transformed.expect
index 4b74dec..a732aa4 100644
--- a/pkg/front_end/testcases/nnbd/nullable_extension.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_extension.dart.strong.transformed.expect
@@ -11,7 +11,7 @@
 extension _extension#0 on self::A? {
   get text = self::_extension#0|get#text;
 }
-static method _extension#0|get#text(final self::A? #this) → core::String
+static method _extension#0|get#text(lowered final self::A? #this) → core::String
   return "Lily was here";
 static method main() → void {
   self::A? a = null;
diff --git a/pkg/front_end/testcases/nnbd/nullable_extension.dart.weak.expect b/pkg/front_end/testcases/nnbd/nullable_extension.dart.weak.expect
index 4b74dec..a732aa4 100644
--- a/pkg/front_end/testcases/nnbd/nullable_extension.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_extension.dart.weak.expect
@@ -11,7 +11,7 @@
 extension _extension#0 on self::A? {
   get text = self::_extension#0|get#text;
 }
-static method _extension#0|get#text(final self::A? #this) → core::String
+static method _extension#0|get#text(lowered final self::A? #this) → core::String
   return "Lily was here";
 static method main() → void {
   self::A? a = null;
diff --git a/pkg/front_end/testcases/nnbd/nullable_extension.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/nullable_extension.dart.weak.transformed.expect
index 4b74dec..a732aa4 100644
--- a/pkg/front_end/testcases/nnbd/nullable_extension.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_extension.dart.weak.transformed.expect
@@ -11,7 +11,7 @@
 extension _extension#0 on self::A? {
   get text = self::_extension#0|get#text;
 }
-static method _extension#0|get#text(final self::A? #this) → core::String
+static method _extension#0|get#text(lowered final self::A? #this) → core::String
   return "Lily was here";
 static method main() → void {
   self::A? a = null;
diff --git a/pkg/front_end/testcases/nnbd/nullable_setter.dart.outline.expect b/pkg/front_end/testcases/nnbd/nullable_setter.dart.outline.expect
index 3f88610..57f6140 100644
--- a/pkg/front_end/testcases/nnbd/nullable_setter.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_setter.dart.outline.expect
@@ -15,9 +15,9 @@
   operator []= = self::_extension#0|[]=;
   set setter = self::_extension#0|set#setter;
 }
-static method _extension#0|set#setter(final self::C? #this, core::String v) → void
+static method _extension#0|set#setter(lowered final self::C? #this, core::String v) → void
   ;
-static method _extension#0|[]=(final self::C? #this, core::int index, core::String value) → void
+static method _extension#0|[]=(lowered final self::C? #this, core::int index, core::String value) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/nnbd/nullable_setter.dart.strong.expect b/pkg/front_end/testcases/nnbd/nullable_setter.dart.strong.expect
index ac016f2..4e21e645 100644
--- a/pkg/front_end/testcases/nnbd/nullable_setter.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_setter.dart.strong.expect
@@ -14,10 +14,10 @@
   operator []= = self::_extension#0|[]=;
   set setter = self::_extension#0|set#setter;
 }
-static method _extension#0|set#setter(final self::C? #this, core::String v) → void {
+static method _extension#0|set#setter(lowered final self::C? #this, core::String v) → void {
   let final self::C? #t1 = #this in #t1.{core::Object::==}(null) ?{core::String?} null : #t1{self::C}.{self::C::m} = v;
 }
-static method _extension#0|[]=(final self::C? #this, core::int index, core::String value) → void {
+static method _extension#0|[]=(lowered final self::C? #this, core::int index, core::String value) → void {
   let final self::C? #t2 = #this in #t2.{core::Object::==}(null) ?{core::String?} null : #t2{self::C}.{self::C::m} = "${index}${value}";
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/nnbd/nullable_setter.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/nullable_setter.dart.strong.transformed.expect
index d367854..fdac0fc 100644
--- a/pkg/front_end/testcases/nnbd/nullable_setter.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_setter.dart.strong.transformed.expect
@@ -14,10 +14,10 @@
   operator []= = self::_extension#0|[]=;
   set setter = self::_extension#0|set#setter;
 }
-static method _extension#0|set#setter(final self::C? #this, core::String v) → void {
+static method _extension#0|set#setter(lowered final self::C? #this, core::String v) → void {
   let final self::C? #t1 = #this in #t1.{core::Object::==}(null) ?{core::String?} null : #t1{self::C}.{self::C::m} = v;
 }
-static method _extension#0|[]=(final self::C? #this, core::int index, core::String value) → void {
+static method _extension#0|[]=(lowered final self::C? #this, core::int index, core::String value) → void {
   let final self::C? #t2 = #this in #t2.{core::Object::==}(null) ?{core::String?} null : #t2{self::C}.{self::C::m} = "${index}${value}";
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/nnbd/nullable_setter.dart.weak.expect b/pkg/front_end/testcases/nnbd/nullable_setter.dart.weak.expect
index ac016f2..4e21e645 100644
--- a/pkg/front_end/testcases/nnbd/nullable_setter.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_setter.dart.weak.expect
@@ -14,10 +14,10 @@
   operator []= = self::_extension#0|[]=;
   set setter = self::_extension#0|set#setter;
 }
-static method _extension#0|set#setter(final self::C? #this, core::String v) → void {
+static method _extension#0|set#setter(lowered final self::C? #this, core::String v) → void {
   let final self::C? #t1 = #this in #t1.{core::Object::==}(null) ?{core::String?} null : #t1{self::C}.{self::C::m} = v;
 }
-static method _extension#0|[]=(final self::C? #this, core::int index, core::String value) → void {
+static method _extension#0|[]=(lowered final self::C? #this, core::int index, core::String value) → void {
   let final self::C? #t2 = #this in #t2.{core::Object::==}(null) ?{core::String?} null : #t2{self::C}.{self::C::m} = "${index}${value}";
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/nnbd/nullable_setter.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/nullable_setter.dart.weak.transformed.expect
index d367854..fdac0fc 100644
--- a/pkg/front_end/testcases/nnbd/nullable_setter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_setter.dart.weak.transformed.expect
@@ -14,10 +14,10 @@
   operator []= = self::_extension#0|[]=;
   set setter = self::_extension#0|set#setter;
 }
-static method _extension#0|set#setter(final self::C? #this, core::String v) → void {
+static method _extension#0|set#setter(lowered final self::C? #this, core::String v) → void {
   let final self::C? #t1 = #this in #t1.{core::Object::==}(null) ?{core::String?} null : #t1{self::C}.{self::C::m} = v;
 }
-static method _extension#0|[]=(final self::C? #this, core::int index, core::String value) → void {
+static method _extension#0|[]=(lowered final self::C? #this, core::int index, core::String value) → void {
   let final self::C? #t2 = #this in #t2.{core::Object::==}(null) ?{core::String?} null : #t2{self::C}.{self::C::m} = "${index}${value}";
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/nnbd/potentially_nullable_access.dart.outline.expect b/pkg/front_end/testcases/nnbd/potentially_nullable_access.dart.outline.expect
index df25b02..c7750b7 100644
--- a/pkg/front_end/testcases/nnbd/potentially_nullable_access.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/potentially_nullable_access.dart.outline.expect
@@ -64,29 +64,29 @@
 static field () → core::int topLevelExtensionFunctionTypeTearOff;
 static field dynamic topLevelExtensionFunctionGetter;
 static field void topLevelExtensionFunctionTypeGetter;
-static method Extension|+(final self::Class #this, core::int value) → core::int
+static method Extension|+(lowered final self::Class #this, core::int value) → core::int
   ;
-static method Extension|unary-(final self::Class #this) → core::int
+static method Extension|unary-(lowered final self::Class #this) → core::int
   ;
-static method Extension|[](final self::Class #this, core::int index) → core::int
+static method Extension|[](lowered final self::Class #this, core::int index) → core::int
   ;
-static method Extension|[]=(final self::Class #this, core::int index, core::int value) → void
+static method Extension|[]=(lowered final self::Class #this, core::int index, core::int value) → void
   ;
-static method Extension|call(final self::Class #this) → core::int
+static method Extension|call(lowered final self::Class #this) → core::int
   ;
-static method Extension|get#call(final self::Class #this) → () → core::int
+static method Extension|get#call(lowered final self::Class #this) → () → core::int
   return () → core::int => self::Extension|call(#this);
-static method Extension|get#extensionProperty(final self::Class #this) → core::int
+static method Extension|get#extensionProperty(lowered final self::Class #this) → core::int
   ;
-static method Extension|set#extensionProperty(final self::Class #this, core::int value) → void
+static method Extension|set#extensionProperty(lowered final self::Class #this, core::int value) → void
   ;
-static method Extension|extensionMethod(final self::Class #this) → core::int
+static method Extension|extensionMethod(lowered final self::Class #this) → core::int
   ;
-static method Extension|get#extensionMethod(final self::Class #this) → () → core::int
+static method Extension|get#extensionMethod(lowered final self::Class #this) → () → core::int
   return () → core::int => self::Extension|extensionMethod(#this);
-static method Extension|get#extensionFunctionGetter(final self::Class #this) → core::Function
+static method Extension|get#extensionFunctionGetter(lowered final self::Class #this) → core::Function
   ;
-static method Extension|get#extensionFunctionTypeGetter(final self::Class #this) → () → void
+static method Extension|get#extensionFunctionTypeGetter(lowered final self::Class #this) → () → void
   ;
 static get nullableFunction() → core::Function?
   ;
diff --git a/pkg/front_end/testcases/nnbd/potentially_nullable_access.dart.strong.expect b/pkg/front_end/testcases/nnbd/potentially_nullable_access.dart.strong.expect
index c104f5c..aa9a084 100644
--- a/pkg/front_end/testcases/nnbd/potentially_nullable_access.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/potentially_nullable_access.dart.strong.expect
@@ -617,27 +617,27 @@
 Try calling using ?.call instead.
     nullableClass.extensionFunctionTypeGetter();
                   ^" in self::Extension|get#extensionFunctionTypeGetter(self::nullableClass).call();
-static method Extension|+(final self::Class #this, core::int value) → core::int
+static method Extension|+(lowered final self::Class #this, core::int value) → core::int
   return 0;
-static method Extension|unary-(final self::Class #this) → core::int
+static method Extension|unary-(lowered final self::Class #this) → core::int
   return 0;
-static method Extension|[](final self::Class #this, core::int index) → core::int
+static method Extension|[](lowered final self::Class #this, core::int index) → core::int
   return 0;
-static method Extension|[]=(final self::Class #this, core::int index, core::int value) → void {}
-static method Extension|call(final self::Class #this) → core::int
+static method Extension|[]=(lowered final self::Class #this, core::int index, core::int value) → void {}
+static method Extension|call(lowered final self::Class #this) → core::int
   return 0;
-static method Extension|get#call(final self::Class #this) → () → core::int
+static method Extension|get#call(lowered final self::Class #this) → () → core::int
   return () → core::int => self::Extension|call(#this);
-static method Extension|get#extensionProperty(final self::Class #this) → core::int
+static method Extension|get#extensionProperty(lowered final self::Class #this) → core::int
   return 0;
-static method Extension|set#extensionProperty(final self::Class #this, core::int value) → void {}
-static method Extension|extensionMethod(final self::Class #this) → core::int
+static method Extension|set#extensionProperty(lowered final self::Class #this, core::int value) → void {}
+static method Extension|extensionMethod(lowered final self::Class #this) → core::int
   return 0;
-static method Extension|get#extensionMethod(final self::Class #this) → () → core::int
+static method Extension|get#extensionMethod(lowered final self::Class #this) → () → core::int
   return () → core::int => self::Extension|extensionMethod(#this);
-static method Extension|get#extensionFunctionGetter(final self::Class #this) → core::Function
+static method Extension|get#extensionFunctionGetter(lowered final self::Class #this) → core::Function
   return () → Null {};
-static method Extension|get#extensionFunctionTypeGetter(final self::Class #this) → () → void
+static method Extension|get#extensionFunctionTypeGetter(lowered final self::Class #this) → () → void
   return () → void {};
 static get nullableFunction() → core::Function?
   return () → Null {};
diff --git a/pkg/front_end/testcases/nnbd/potentially_nullable_access.dart.weak.expect b/pkg/front_end/testcases/nnbd/potentially_nullable_access.dart.weak.expect
index c104f5c..aa9a084 100644
--- a/pkg/front_end/testcases/nnbd/potentially_nullable_access.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/potentially_nullable_access.dart.weak.expect
@@ -617,27 +617,27 @@
 Try calling using ?.call instead.
     nullableClass.extensionFunctionTypeGetter();
                   ^" in self::Extension|get#extensionFunctionTypeGetter(self::nullableClass).call();
-static method Extension|+(final self::Class #this, core::int value) → core::int
+static method Extension|+(lowered final self::Class #this, core::int value) → core::int
   return 0;
-static method Extension|unary-(final self::Class #this) → core::int
+static method Extension|unary-(lowered final self::Class #this) → core::int
   return 0;
-static method Extension|[](final self::Class #this, core::int index) → core::int
+static method Extension|[](lowered final self::Class #this, core::int index) → core::int
   return 0;
-static method Extension|[]=(final self::Class #this, core::int index, core::int value) → void {}
-static method Extension|call(final self::Class #this) → core::int
+static method Extension|[]=(lowered final self::Class #this, core::int index, core::int value) → void {}
+static method Extension|call(lowered final self::Class #this) → core::int
   return 0;
-static method Extension|get#call(final self::Class #this) → () → core::int
+static method Extension|get#call(lowered final self::Class #this) → () → core::int
   return () → core::int => self::Extension|call(#this);
-static method Extension|get#extensionProperty(final self::Class #this) → core::int
+static method Extension|get#extensionProperty(lowered final self::Class #this) → core::int
   return 0;
-static method Extension|set#extensionProperty(final self::Class #this, core::int value) → void {}
-static method Extension|extensionMethod(final self::Class #this) → core::int
+static method Extension|set#extensionProperty(lowered final self::Class #this, core::int value) → void {}
+static method Extension|extensionMethod(lowered final self::Class #this) → core::int
   return 0;
-static method Extension|get#extensionMethod(final self::Class #this) → () → core::int
+static method Extension|get#extensionMethod(lowered final self::Class #this) → () → core::int
   return () → core::int => self::Extension|extensionMethod(#this);
-static method Extension|get#extensionFunctionGetter(final self::Class #this) → core::Function
+static method Extension|get#extensionFunctionGetter(lowered final self::Class #this) → core::Function
   return () → Null {};
-static method Extension|get#extensionFunctionTypeGetter(final self::Class #this) → () → void
+static method Extension|get#extensionFunctionTypeGetter(lowered final self::Class #this) → () → void
   return () → void {};
 static get nullableFunction() → core::Function?
   return () → Null {};
diff --git a/pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart.outline.expect b/pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart.outline.expect
index 6834f82..175965c3 100644
--- a/pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart.outline.expect
@@ -21,11 +21,11 @@
   operator []= = self::E|[]=;
   operator [] = self::E|[];
 }
-static method E|get#foo(final core::String #this) → core::int
+static method E|get#foo(lowered final core::String #this) → core::int
   ;
-static method E|[]=(final core::String #this, core::int index, core::int value) → void
+static method E|[]=(lowered final core::String #this, core::int index, core::int value) → void
   ;
-static method E|[](final core::String #this, core::int index) → core::int
+static method E|[](lowered final core::String #this, core::int index) → core::int
   ;
 static method warning(core::String s, core::List<core::String> l, core::Map<core::String, core::int> m) → dynamic
   ;
diff --git a/pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart.strong.expect b/pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart.strong.expect
index 7b28b33..bba165a 100644
--- a/pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart.strong.expect
@@ -125,10 +125,10 @@
   operator []= = self::E|[]=;
   operator [] = self::E|[];
 }
-static method E|get#foo(final core::String #this) → core::int
+static method E|get#foo(lowered final core::String #this) → core::int
   return 42;
-static method E|[]=(final core::String #this, core::int index, core::int value) → void {}
-static method E|[](final core::String #this, core::int index) → core::int
+static method E|[]=(lowered final core::String #this, core::int index, core::int value) → void {}
+static method E|[](lowered final core::String #this, core::int index) → core::int
   return 42;
 static method warning(core::String s, core::List<core::String> l, core::Map<core::String, core::int> m) → dynamic {
   let final core::String #t2 = s in #t2.{core::String::==}(null) ?{core::int?} null : #t2.{core::String::length};
diff --git a/pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart.strong.transformed.expect
index 624e377..7896b4b 100644
--- a/pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart.strong.transformed.expect
@@ -125,10 +125,10 @@
   operator []= = self::E|[]=;
   operator [] = self::E|[];
 }
-static method E|get#foo(final core::String #this) → core::int
+static method E|get#foo(lowered final core::String #this) → core::int
   return 42;
-static method E|[]=(final core::String #this, core::int index, core::int value) → void {}
-static method E|[](final core::String #this, core::int index) → core::int
+static method E|[]=(lowered final core::String #this, core::int index, core::int value) → void {}
+static method E|[](lowered final core::String #this, core::int index) → core::int
   return 42;
 static method warning(core::String s, core::List<core::String> l, core::Map<core::String, core::int> m) → dynamic {
   let final core::String #t2 = s in #t2.{core::String::==}(null) ?{core::int?} null : #t2.{core::String::length};
diff --git a/pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart.weak.expect b/pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart.weak.expect
index 7b28b33..bba165a 100644
--- a/pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart.weak.expect
@@ -125,10 +125,10 @@
   operator []= = self::E|[]=;
   operator [] = self::E|[];
 }
-static method E|get#foo(final core::String #this) → core::int
+static method E|get#foo(lowered final core::String #this) → core::int
   return 42;
-static method E|[]=(final core::String #this, core::int index, core::int value) → void {}
-static method E|[](final core::String #this, core::int index) → core::int
+static method E|[]=(lowered final core::String #this, core::int index, core::int value) → void {}
+static method E|[](lowered final core::String #this, core::int index) → core::int
   return 42;
 static method warning(core::String s, core::List<core::String> l, core::Map<core::String, core::int> m) → dynamic {
   let final core::String #t2 = s in #t2.{core::String::==}(null) ?{core::int?} null : #t2.{core::String::length};
diff --git a/pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart.weak.transformed.expect
index 624e377..7896b4b 100644
--- a/pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart.weak.transformed.expect
@@ -125,10 +125,10 @@
   operator []= = self::E|[]=;
   operator [] = self::E|[];
 }
-static method E|get#foo(final core::String #this) → core::int
+static method E|get#foo(lowered final core::String #this) → core::int
   return 42;
-static method E|[]=(final core::String #this, core::int index, core::int value) → void {}
-static method E|[](final core::String #this, core::int index) → core::int
+static method E|[]=(lowered final core::String #this, core::int index, core::int value) → void {}
+static method E|[](lowered final core::String #this, core::int index) → core::int
   return 42;
 static method warning(core::String s, core::List<core::String> l, core::Map<core::String, core::int> m) → dynamic {
   let final core::String #t2 = s in #t2.{core::String::==}(null) ?{core::int?} null : #t2.{core::String::length};
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue42660.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/issue42660.dart.weak.expect
index 88ec031..1d99576 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue42660.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue42660.dart.weak.expect
@@ -51,9 +51,9 @@
   method m = iss::E|m;
   tearoff m = iss::E|get#m;
 }
-static method E|m(final core::int #this) → core::String
+static method E|m(lowered final core::int #this) → core::String
   return "m";
-static method E|get#m(final core::int #this) → () → core::String
+static method E|get#m(lowered final core::int #this) → () → core::String
   return () → core::String => iss::E|m(#this);
 static method f() → core::int?
   return 4;
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue42660.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/issue42660.dart.weak.transformed.expect
index 88ec031..1d99576 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue42660.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue42660.dart.weak.transformed.expect
@@ -51,9 +51,9 @@
   method m = iss::E|m;
   tearoff m = iss::E|get#m;
 }
-static method E|m(final core::int #this) → core::String
+static method E|m(lowered final core::int #this) → core::String
   return "m";
-static method E|get#m(final core::int #this) → () → core::String
+static method E|get#m(lowered final core::int #this) → () → core::String
   return () → core::String => iss::E|m(#this);
 static method f() → core::int?
   return 4;
diff --git a/pkg/front_end/testcases/nnbd_mixed/no_null_shorting_explicit_extension.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/no_null_shorting_explicit_extension.dart.weak.expect
index 4ea1564..a622905 100644
--- a/pkg/front_end/testcases/nnbd_mixed/no_null_shorting_explicit_extension.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/no_null_shorting_explicit_extension.dart.weak.expect
@@ -28,23 +28,23 @@
   operator unary- = self::Extension|unary-;
   set field = self::Extension|set#field;
 }
-static method Extension|get#field(final self::Class* #this) → self::Class*
+static method Extension|get#field(lowered final self::Class* #this) → self::Class*
   return #this.{self::Class::_field};
-static method Extension|set#field(final self::Class* #this, self::Class* value) → void {
+static method Extension|set#field(lowered final self::Class* #this, self::Class* value) → void {
   #this.{self::Class::_field} = value;
 }
-static method Extension|method(final self::Class* #this) → self::Class*
+static method Extension|method(lowered final self::Class* #this) → self::Class*
   return self::Extension|get#field(#this);
-static method Extension|get#method(final self::Class* #this) → () →* self::Class*
+static method Extension|get#method(lowered final self::Class* #this) → () →* self::Class*
   return () → self::Class* => self::Extension|method(#this);
-static method Extension|[](final self::Class* #this, self::Class* key) → self::Class*
+static method Extension|[](lowered final self::Class* #this, self::Class* key) → self::Class*
   return self::Extension|get#field(#this);
-static method Extension|[]=(final self::Class* #this, self::Class* key, self::Class* value) → void {
+static method Extension|[]=(lowered final self::Class* #this, self::Class* key, self::Class* value) → void {
   self::Extension|set#field(#this, value);
 }
-static method Extension|+(final self::Class* #this, core::int* value) → self::Class*
+static method Extension|+(lowered final self::Class* #this, core::int* value) → self::Class*
   return self::Extension|get#field(#this);
-static method Extension|unary-(final self::Class* #this) → self::Class*
+static method Extension|unary-(lowered final self::Class* #this) → self::Class*
   return self::Extension|get#field(#this);
 static method main() → dynamic {
   self::propertyAccess(null);
diff --git a/pkg/front_end/testcases/nnbd_mixed/no_null_shorting_explicit_extension.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/no_null_shorting_explicit_extension.dart.weak.transformed.expect
index 4ea1564..a622905 100644
--- a/pkg/front_end/testcases/nnbd_mixed/no_null_shorting_explicit_extension.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/no_null_shorting_explicit_extension.dart.weak.transformed.expect
@@ -28,23 +28,23 @@
   operator unary- = self::Extension|unary-;
   set field = self::Extension|set#field;
 }
-static method Extension|get#field(final self::Class* #this) → self::Class*
+static method Extension|get#field(lowered final self::Class* #this) → self::Class*
   return #this.{self::Class::_field};
-static method Extension|set#field(final self::Class* #this, self::Class* value) → void {
+static method Extension|set#field(lowered final self::Class* #this, self::Class* value) → void {
   #this.{self::Class::_field} = value;
 }
-static method Extension|method(final self::Class* #this) → self::Class*
+static method Extension|method(lowered final self::Class* #this) → self::Class*
   return self::Extension|get#field(#this);
-static method Extension|get#method(final self::Class* #this) → () →* self::Class*
+static method Extension|get#method(lowered final self::Class* #this) → () →* self::Class*
   return () → self::Class* => self::Extension|method(#this);
-static method Extension|[](final self::Class* #this, self::Class* key) → self::Class*
+static method Extension|[](lowered final self::Class* #this, self::Class* key) → self::Class*
   return self::Extension|get#field(#this);
-static method Extension|[]=(final self::Class* #this, self::Class* key, self::Class* value) → void {
+static method Extension|[]=(lowered final self::Class* #this, self::Class* key, self::Class* value) → void {
   self::Extension|set#field(#this, value);
 }
-static method Extension|+(final self::Class* #this, core::int* value) → self::Class*
+static method Extension|+(lowered final self::Class* #this, core::int* value) → self::Class*
   return self::Extension|get#field(#this);
-static method Extension|unary-(final self::Class* #this) → self::Class*
+static method Extension|unary-(lowered final self::Class* #this) → self::Class*
   return self::Extension|get#field(#this);
 static method main() → dynamic {
   self::propertyAccess(null);
diff --git a/pkg/front_end/testcases/nnbd_mixed/no_null_shorting_extension.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/no_null_shorting_extension.dart.weak.expect
index d0cc332..6b754ec 100644
--- a/pkg/front_end/testcases/nnbd_mixed/no_null_shorting_extension.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/no_null_shorting_extension.dart.weak.expect
@@ -28,23 +28,23 @@
   operator unary- = self::Extension|unary-;
   set field = self::Extension|set#field;
 }
-static method Extension|get#field(final self::Class* #this) → self::Class*
+static method Extension|get#field(lowered final self::Class* #this) → self::Class*
   return #this.{self::Class::_field};
-static method Extension|set#field(final self::Class* #this, self::Class* value) → void {
+static method Extension|set#field(lowered final self::Class* #this, self::Class* value) → void {
   #this.{self::Class::_field} = value;
 }
-static method Extension|method(final self::Class* #this) → self::Class*
+static method Extension|method(lowered final self::Class* #this) → self::Class*
   return self::Extension|get#field(#this);
-static method Extension|get#method(final self::Class* #this) → () →* self::Class*
+static method Extension|get#method(lowered final self::Class* #this) → () →* self::Class*
   return () → self::Class* => self::Extension|method(#this);
-static method Extension|[](final self::Class* #this, self::Class* key) → self::Class*
+static method Extension|[](lowered final self::Class* #this, self::Class* key) → self::Class*
   return self::Extension|get#field(#this);
-static method Extension|[]=(final self::Class* #this, self::Class* key, self::Class* value) → void {
+static method Extension|[]=(lowered final self::Class* #this, self::Class* key, self::Class* value) → void {
   self::Extension|set#field(#this, value);
 }
-static method Extension|+(final self::Class* #this, core::int* value) → self::Class*
+static method Extension|+(lowered final self::Class* #this, core::int* value) → self::Class*
   return self::Extension|get#field(#this);
-static method Extension|unary-(final self::Class* #this) → self::Class*
+static method Extension|unary-(lowered final self::Class* #this) → self::Class*
   return self::Extension|get#field(#this);
 static method main() → dynamic {
   self::propertyAccess(null);
diff --git a/pkg/front_end/testcases/nnbd_mixed/no_null_shorting_extension.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/no_null_shorting_extension.dart.weak.transformed.expect
index d0cc332..6b754ec 100644
--- a/pkg/front_end/testcases/nnbd_mixed/no_null_shorting_extension.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/no_null_shorting_extension.dart.weak.transformed.expect
@@ -28,23 +28,23 @@
   operator unary- = self::Extension|unary-;
   set field = self::Extension|set#field;
 }
-static method Extension|get#field(final self::Class* #this) → self::Class*
+static method Extension|get#field(lowered final self::Class* #this) → self::Class*
   return #this.{self::Class::_field};
-static method Extension|set#field(final self::Class* #this, self::Class* value) → void {
+static method Extension|set#field(lowered final self::Class* #this, self::Class* value) → void {
   #this.{self::Class::_field} = value;
 }
-static method Extension|method(final self::Class* #this) → self::Class*
+static method Extension|method(lowered final self::Class* #this) → self::Class*
   return self::Extension|get#field(#this);
-static method Extension|get#method(final self::Class* #this) → () →* self::Class*
+static method Extension|get#method(lowered final self::Class* #this) → () →* self::Class*
   return () → self::Class* => self::Extension|method(#this);
-static method Extension|[](final self::Class* #this, self::Class* key) → self::Class*
+static method Extension|[](lowered final self::Class* #this, self::Class* key) → self::Class*
   return self::Extension|get#field(#this);
-static method Extension|[]=(final self::Class* #this, self::Class* key, self::Class* value) → void {
+static method Extension|[]=(lowered final self::Class* #this, self::Class* key, self::Class* value) → void {
   self::Extension|set#field(#this, value);
 }
-static method Extension|+(final self::Class* #this, core::int* value) → self::Class*
+static method Extension|+(lowered final self::Class* #this, core::int* value) → self::Class*
   return self::Extension|get#field(#this);
-static method Extension|unary-(final self::Class* #this) → self::Class*
+static method Extension|unary-(lowered final self::Class* #this) → self::Class*
   return self::Extension|get#field(#this);
 static method main() → dynamic {
   self::propertyAccess(null);
diff --git a/pkg/front_end/testcases/nnbd_mixed/nullable_extension_on_opt_out.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/nullable_extension_on_opt_out.dart.weak.expect
index 1752064..da4369b 100644
--- a/pkg/front_end/testcases/nnbd_mixed/nullable_extension_on_opt_out.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/nullable_extension_on_opt_out.dart.weak.expect
@@ -8,7 +8,7 @@
 extension _extension#0 on nul::A? {
   get text = self::_extension#0|get#text;
 }
-static method _extension#0|get#text(final nul::A? #this) → core::String
+static method _extension#0|get#text(lowered final nul::A? #this) → core::String
   return "Lily was here";
 static method main() → void {
   nul::A? a = null;
diff --git a/pkg/front_end/testcases/nnbd_mixed/nullable_extension_on_opt_out.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/nullable_extension_on_opt_out.dart.weak.transformed.expect
index 1752064..da4369b 100644
--- a/pkg/front_end/testcases/nnbd_mixed/nullable_extension_on_opt_out.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/nullable_extension_on_opt_out.dart.weak.transformed.expect
@@ -8,7 +8,7 @@
 extension _extension#0 on nul::A? {
   get text = self::_extension#0|get#text;
 }
-static method _extension#0|get#text(final nul::A? #this) → core::String
+static method _extension#0|get#text(lowered final nul::A? #this) → core::String
   return "Lily was here";
 static method main() → void {
   nul::A? a = null;
diff --git a/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.expect
index 20bc8a1..0f9dd17 100644
--- a/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.expect
@@ -112,9 +112,9 @@
   return !null.{core::Object::==}(i);
 static method ifNullOptOut(core::int* i) → dynamic
   return let final core::int* #t6 = i in #t6.{core::num::==}(null) ?{core::int*} 42 : #t6;
-static method OptOutExtension|[](final self::OptOutClass1* #this, core::int* index) → core::int*
+static method OptOutExtension|[](lowered final self::OptOutClass1* #this, core::int* index) → core::int*
   return index;
-static method OptOutExtension|[]=(final self::OptOutClass1* #this, core::int* index, core::int* value) → void {}
+static method OptOutExtension|[]=(lowered final self::OptOutClass1* #this, core::int* index, core::int* value) → void {}
 static method extensionIfNullOptOut1(core::int* i) → dynamic
   return let final self::OptOutClass1* #t7 = new self::OptOutClass1::•() in let final core::int* #t8 = i in let final core::int* #t9 = self::OptOutExtension|[](#t7, #t8) in #t9.{core::num::==}(null) ?{core::int*} let final core::int* #t10 = 42 in let final void #t11 = self::OptOutExtension|[]=(#t7, #t8, #t10) in #t10 : #t9;
 static method extensionIfNullOptOut1ForEffect(core::int* i) → dynamic {
@@ -454,9 +454,9 @@
   return !null.{core::Object::==}(i);
 static method ifNullOptIn(core::int i) → dynamic
   return let final core::int #t40 = i in #t40.{core::num::==}(null) ?{core::int} 42 : #t40;
-static method OptInExtension|[](final uns::OptInClass1 #this, core::int index) → core::int
+static method OptInExtension|[](lowered final uns::OptInClass1 #this, core::int index) → core::int
   return index;
-static method OptInExtension|[]=(final uns::OptInClass1 #this, core::int index, core::int value) → void {}
+static method OptInExtension|[]=(lowered final uns::OptInClass1 #this, core::int index, core::int value) → void {}
 static method extensionIfNullOptIn1(core::int i) → dynamic
   return let final uns::OptInClass1 #t41 = new uns::OptInClass1::•() in let final core::int #t42 = i in let final core::int #t43 = uns::OptInExtension|[](#t41, #t42) in #t43.{core::num::==}(null) ?{core::int} let final core::int #t44 = 42 in let final void #t45 = uns::OptInExtension|[]=(#t41, #t42, #t44) in #t44 : #t43;
 static method extensionIfNullOptIn1ForEffect(core::int i) → dynamic {
diff --git a/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.transformed.expect
index 272a76b..54fdabb 100644
--- a/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.transformed.expect
@@ -112,9 +112,9 @@
   return !null.{core::Object::==}(i);
 static method ifNullOptOut(core::int* i) → dynamic
   return let final core::int* #t6 = i in #t6.{core::num::==}(null) ?{core::int*} 42 : #t6;
-static method OptOutExtension|[](final self::OptOutClass1* #this, core::int* index) → core::int*
+static method OptOutExtension|[](lowered final self::OptOutClass1* #this, core::int* index) → core::int*
   return index;
-static method OptOutExtension|[]=(final self::OptOutClass1* #this, core::int* index, core::int* value) → void {}
+static method OptOutExtension|[]=(lowered final self::OptOutClass1* #this, core::int* index, core::int* value) → void {}
 static method extensionIfNullOptOut1(core::int* i) → dynamic
   return let final self::OptOutClass1* #t7 = new self::OptOutClass1::•() in let final core::int* #t8 = i in let final core::int* #t9 = self::OptOutExtension|[](#t7, #t8) in #t9.{core::num::==}(null) ?{core::int*} let final core::int* #t10 = 42 in let final void #t11 = self::OptOutExtension|[]=(#t7, #t8, #t10) in #t10 : #t9;
 static method extensionIfNullOptOut1ForEffect(core::int* i) → dynamic {
@@ -454,9 +454,9 @@
   return !null.{core::Object::==}(i);
 static method ifNullOptIn(core::int i) → dynamic
   return let final core::int #t40 = i in #t40.{core::num::==}(null) ?{core::int} 42 : #t40;
-static method OptInExtension|[](final uns::OptInClass1 #this, core::int index) → core::int
+static method OptInExtension|[](lowered final uns::OptInClass1 #this, core::int index) → core::int
   return index;
-static method OptInExtension|[]=(final uns::OptInClass1 #this, core::int index, core::int value) → void {}
+static method OptInExtension|[]=(lowered final uns::OptInClass1 #this, core::int index, core::int value) → void {}
 static method extensionIfNullOptIn1(core::int i) → dynamic
   return let final uns::OptInClass1 #t41 = new uns::OptInClass1::•() in let final core::int #t42 = i in let final core::int #t43 = uns::OptInExtension|[](#t41, #t42) in #t43.{core::num::==}(null) ?{core::int} let final core::int #t44 = 42 in let final void #t45 = uns::OptInExtension|[]=(#t41, #t42, #t44) in #t44 : #t43;
 static method extensionIfNullOptIn1ForEffect(core::int i) → dynamic {
diff --git a/pkg/kernel/binary.md b/pkg/kernel/binary.md
index 99a36f4..a93760a 100644
--- a/pkg/kernel/binary.md
+++ b/pkg/kernel/binary.md
@@ -147,7 +147,7 @@
 
 type ComponentFile {
   UInt32 magic = 0x90ABCDEF;
-  UInt32 formatVersion = 51;
+  UInt32 formatVersion = 52;
   Byte[10] shortSdkHash;
   List<String> problemsAsJson; // Described in problems.md.
   Library[] libraries;
@@ -1206,7 +1206,7 @@
   List<Expression> annotations;
 
   Byte flags (isFinal, isConst, isFieldFormal, isCovariant,
-              isInScope, isGenericCovariantImpl, isLate, isRequired);
+              isGenericCovariantImpl, isLate, isRequired, isLowered);
   // For named parameters, this is the parameter name.
   // For other variables, the name is cosmetic, may be empty,
   // and is not necessarily unique.
diff --git a/pkg/kernel/lib/ast.dart b/pkg/kernel/lib/ast.dart
index f3d8ace..41c88aa 100644
--- a/pkg/kernel/lib/ast.dart
+++ b/pkg/kernel/lib/ast.dart
@@ -7138,7 +7138,8 @@
       bool isFieldFormal: false,
       bool isCovariant: false,
       bool isLate: false,
-      bool isRequired: false}) {
+      bool isRequired: false,
+      bool isLowered: false}) {
     assert(type != null);
     initializer?.parent = this;
     if (flags != -1) {
@@ -7150,6 +7151,7 @@
       this.isCovariant = isCovariant;
       this.isLate = isLate;
       this.isRequired = isRequired;
+      this.isLowered = isLowered;
     }
   }
 
@@ -7160,6 +7162,7 @@
       bool isFieldFormal: false,
       bool isLate: false,
       bool isRequired: false,
+      bool isLowered: false,
       this.type: const DynamicType()}) {
     assert(type != null);
     initializer?.parent = this;
@@ -7168,16 +7171,17 @@
     this.isFieldFormal = isFieldFormal;
     this.isLate = isLate;
     this.isRequired = isRequired;
+    this.isLowered = isLowered;
   }
 
   static const int FlagFinal = 1 << 0; // Must match serialized bit positions.
   static const int FlagConst = 1 << 1;
   static const int FlagFieldFormal = 1 << 2;
   static const int FlagCovariant = 1 << 3;
-  static const int FlagInScope = 1 << 4; // Temporary flag used by verifier.
-  static const int FlagGenericCovariantImpl = 1 << 5;
-  static const int FlagLate = 1 << 6;
-  static const int FlagRequired = 1 << 7;
+  static const int FlagGenericCovariantImpl = 1 << 4;
+  static const int FlagLate = 1 << 5;
+  static const int FlagRequired = 1 << 6;
+  static const int FlagLowered = 1 << 7;
 
   bool get isFinal => flags & FlagFinal != 0;
   bool get isConst => flags & FlagConst != 0;
@@ -7210,6 +7214,16 @@
   /// positional parameters and local variables.
   bool get isRequired => flags & FlagRequired != 0;
 
+  /// Whether the variable is part of a lowering.
+  ///
+  /// If a variable is part of a lowering its name may be synthesized so that it
+  /// doesn't reflect the name used in the source code and might not have a
+  /// one-to-one correspondence with the variable in the source.
+  ///
+  /// Lowering is used for instance of encoding of 'this' in extension instance
+  /// members and encoding of late locals.
+  bool get isLowered => flags & FlagLowered != 0;
+
   /// Whether the variable is assignable.
   ///
   /// This is `true` if the variable is neither constant nor final, or if it
@@ -7254,6 +7268,10 @@
     flags = value ? (flags | FlagRequired) : (flags & ~FlagRequired);
   }
 
+  void set isLowered(bool value) {
+    flags = value ? (flags | FlagLowered) : (flags & ~FlagLowered);
+  }
+
   void clearAnnotations() {
     annotations = const <Expression>[];
   }
diff --git a/pkg/kernel/lib/binary/tag.dart b/pkg/kernel/lib/binary/tag.dart
index 86522b9..5fa202a 100644
--- a/pkg/kernel/lib/binary/tag.dart
+++ b/pkg/kernel/lib/binary/tag.dart
@@ -146,7 +146,7 @@
   /// Internal version of kernel binary format.
   /// Bump it when making incompatible changes in kernel binaries.
   /// Keep in sync with runtime/vm/kernel_binary.h, pkg/kernel/binary.md.
-  static const int BinaryFormatVersion = 51;
+  static const int BinaryFormatVersion = 52;
 }
 
 abstract class ConstantTag {
diff --git a/pkg/kernel/lib/text/ast_to_text.dart b/pkg/kernel/lib/text/ast_to_text.dart
index 1bed6f2..b9d95ab 100644
--- a/pkg/kernel/lib/text/ast_to_text.dart
+++ b/pkg/kernel/lib/text/ast_to_text.dart
@@ -2051,6 +2051,7 @@
     if (showOffsets) writeWord("[${node.fileOffset}]");
     if (showMetadata) writeMetadata(node);
     writeAnnotationList(node.annotations, separateLines: false);
+    writeModifier(node.isLowered, 'lowered');
     writeModifier(node.isLate, 'late');
     writeModifier(node.isRequired, 'required');
     writeModifier(node.isCovariant, 'covariant');
diff --git a/pkg/kernel/lib/text/text_serializer.dart b/pkg/kernel/lib/text/text_serializer.dart
index b94afb4..a1c93ab 100644
--- a/pkg/kernel/lib/text/text_serializer.dart
+++ b/pkg/kernel/lib/text/text_serializer.dart
@@ -751,10 +751,10 @@
   VariableDeclaration.FlagConst: "const",
   VariableDeclaration.FlagFieldFormal: "field-formal",
   VariableDeclaration.FlagCovariant: "covariant",
-  VariableDeclaration.FlagInScope: "in-scope",
   VariableDeclaration.FlagGenericCovariantImpl: "generic-covariant-impl",
   VariableDeclaration.FlagLate: "late",
   VariableDeclaration.FlagRequired: "required",
+  VariableDeclaration.FlagLowered: "lowered",
 };
 
 class VariableDeclarationFlagTagger implements Tagger<int> {
diff --git a/pkg/kernel/lib/verifier.dart b/pkg/kernel/lib/verifier.dart
index 5f0d085..0db1f2b 100644
--- a/pkg/kernel/lib/verifier.dart
+++ b/pkg/kernel/lib/verifier.dart
@@ -49,6 +49,8 @@
   final Set<Class> classes = new Set<Class>();
   final Set<Typedef> typedefs = new Set<Typedef>();
   Set<TypeParameter> typeParametersInScope = new Set<TypeParameter>();
+  Set<VariableDeclaration> variableDeclarationsInScope =
+      new Set<VariableDeclaration>();
   final List<VariableDeclaration> variableStack = <VariableDeclaration>[];
   final Map<Typedef, TypedefState> typedefState = <Typedef, TypedefState>{};
   final Set<Constant> seenConstants = <Constant>{};
@@ -162,15 +164,15 @@
   }
 
   void declareVariable(VariableDeclaration variable) {
-    if (variable.flags & VariableDeclaration.FlagInScope != 0) {
+    if (variableDeclarationsInScope.contains(variable)) {
       problem(variable, "Variable '$variable' declared more than once.");
     }
-    variable.flags |= VariableDeclaration.FlagInScope;
+    variableDeclarationsInScope.add(variable);
     variableStack.add(variable);
   }
 
   void undeclareVariable(VariableDeclaration variable) {
-    variable.flags &= ~VariableDeclaration.FlagInScope;
+    variableDeclarationsInScope.remove(variable);
   }
 
   void declareTypeParameters(List<TypeParameter> parameters) {
@@ -195,7 +197,7 @@
   }
 
   void checkVariableInScope(VariableDeclaration variable, TreeNode where) {
-    if (variable.flags & VariableDeclaration.FlagInScope == 0) {
+    if (!variableDeclarationsInScope.contains(variable)) {
       problem(where, "Variable '$variable' used out of scope.");
     }
   }
diff --git a/runtime/vm/compiler/aot/precompiler.cc b/runtime/vm/compiler/aot/precompiler.cc
index 7a8f7b8..d7f198e 100644
--- a/runtime/vm/compiler/aot/precompiler.cc
+++ b/runtime/vm/compiler/aot/precompiler.cc
@@ -2116,6 +2116,8 @@
 }
 
 void Precompiler::DropMetadata() {
+  SafepointWriteRwLocker ml(T, T->isolate_group()->program_lock());
+
   Library& lib = Library::Handle(Z);
   for (intptr_t i = 0; i < libraries_.Length(); i++) {
     lib ^= libraries_.At(i);
diff --git a/runtime/vm/compiler/frontend/constant_reader.cc b/runtime/vm/compiler/frontend/constant_reader.cc
index 6eb0a03..a8cb442 100644
--- a/runtime/vm/compiler/frontend/constant_reader.cc
+++ b/runtime/vm/compiler/frontend/constant_reader.cc
@@ -59,15 +59,15 @@
 
 ObjectPtr ConstantReader::ReadAnnotations() {
   intptr_t list_length = helper_->ReadListLength();  // read list length.
-  const Array& metadata_values =
-      Array::Handle(Z, Array::New(list_length, H.allocation_space()));
+  const auto& metadata_values =
+      Array::Handle(Z, ImmutableArray::New(list_length, H.allocation_space()));
   Instance& value = Instance::Handle(Z);
   for (intptr_t i = 0; i < list_length; ++i) {
     // This will read the expression.
     value = ReadConstantExpression();
     metadata_values.SetAt(i, value);
   }
-  return metadata_values.raw();
+  return H.Canonicalize(metadata_values);
 }
 
 InstancePtr ConstantReader::ReadConstant(intptr_t constant_offset) {
diff --git a/runtime/vm/compiler/frontend/kernel_translation_helper.h b/runtime/vm/compiler/frontend/kernel_translation_helper.h
index b60884c2..36c8a5e 100644
--- a/runtime/vm/compiler/frontend/kernel_translation_helper.h
+++ b/runtime/vm/compiler/frontend/kernel_translation_helper.h
@@ -387,9 +387,10 @@
     kFinal = 1 << 0,
     kConst = 1 << 1,
     kCovariant = 1 << 3,
-    kIsGenericCovariantImpl = 1 << 5,
-    kLate = 1 << 6,
-    kRequired = 1 << 7,
+    kIsGenericCovariantImpl = 1 << 4,
+    kLate = 1 << 5,
+    kRequired = 1 << 6,
+    kLowered = 1 << 7,
   };
 
   explicit VariableDeclarationHelper(KernelReaderHelper* helper)
diff --git a/runtime/vm/compiler/recognized_methods_list.h b/runtime/vm/compiler/recognized_methods_list.h
index a78c350..6c80aa5 100644
--- a/runtime/vm/compiler/recognized_methods_list.h
+++ b/runtime/vm/compiler/recognized_methods_list.h
@@ -17,8 +17,8 @@
   V(Object, Object., ObjectConstructor, 0x89c467da)                            \
   V(List, ., ListFactory, 0x1892cc51)                                          \
   V(_List, ., ObjectArrayAllocate, 0x4c9d39e2)                                 \
-  V(_List, []=, ObjectArraySetIndexed, 0xe98d0a9e)                             \
-  V(_GrowableList, []=, GrowableArraySetIndexed, 0xe98d0a9e)                   \
+  V(_List, []=, ObjectArraySetIndexed, 0xa06ee8ae)                             \
+  V(_GrowableList, []=, GrowableArraySetIndexed, 0xa06ee8ae)                   \
   V(_TypedList, _getInt8, ByteArrayBaseGetInt8, 0x30688af4)                    \
   V(_TypedList, _getUint8, ByteArrayBaseGetUint8, 0x31c4acea)                  \
   V(_TypedList, _getInt16, ByteArrayBaseGetInt16, 0x4885450f)                  \
@@ -194,8 +194,8 @@
   V(Pointer, get:address, FfiGetAddress, 0x55255ebc)                           \
   V(::, reachabilityFence, ReachabilityFence, 0xde1dc5bd)                      \
   V(_Utf8Decoder, _scan, Utf8DecoderScan, 0xb35ced99)                          \
-  V(_Future, timeout, FutureTimeout, 0x39966bdf)                               \
-  V(Future, wait, FutureWait, 0x9f3934e1)                                      \
+  V(_Future, timeout, FutureTimeout, 0x6ad7d1ef)                               \
+  V(Future, wait, FutureWait, 0xb4396ca1)                                      \
 
 // List of intrinsics:
 // (class-name, function-name, intrinsification method, fingerprint).
@@ -300,39 +300,39 @@
 
 #define GRAPH_TYPED_DATA_INTRINSICS_LIST(V)                                    \
   V(_Int8List, [], Int8ArrayGetIndexed, 0x0cc3b782)                            \
-  V(_Int8List, []=, Int8ArraySetIndexed, 0xb44a501b)                           \
+  V(_Int8List, []=, Int8ArraySetIndexed, 0xbbb0b00b)                           \
   V(_Uint8List, [], Uint8ArrayGetIndexed, 0x723c3b42)                          \
-  V(_Uint8List, []=, Uint8ArraySetIndexed, 0x00d95bdf)                         \
+  V(_Uint8List, []=, Uint8ArraySetIndexed, 0x083fbbcf)                         \
   V(_ExternalUint8Array, [], ExternalUint8ArrayGetIndexed, 0x723c3b42)         \
-  V(_ExternalUint8Array, []=, ExternalUint8ArraySetIndexed, 0x00d95bdf)        \
+  V(_ExternalUint8Array, []=, ExternalUint8ArraySetIndexed, 0x083fbbcf)        \
   V(_Uint8ClampedList, [], Uint8ClampedArrayGetIndexed, 0x723c3b42)            \
-  V(_Uint8ClampedList, []=, Uint8ClampedArraySetIndexed, 0xf6d9117f)           \
+  V(_Uint8ClampedList, []=, Uint8ClampedArraySetIndexed, 0xfe3f716f)           \
   V(_ExternalUint8ClampedArray, [], ExternalUint8ClampedArrayGetIndexed,       \
     0x723c3b42)                                                                \
   V(_ExternalUint8ClampedArray, []=, ExternalUint8ClampedArraySetIndexed,      \
-    0xf6d9117f)                                                                \
+    0xfe3f716f)                                                                \
   V(_Int16List, [], Int16ArrayGetIndexed, 0xecc216e2)                          \
-  V(_Int16List, []=, Int16ArraySetIndexed, 0x44ca13a6)                         \
+  V(_Int16List, []=, Int16ArraySetIndexed, 0x4c307396)                         \
   V(_Uint16List, [], Uint16ArrayGetIndexed, 0xd09af2e2)                        \
-  V(_Uint16List, []=, Uint16ArraySetIndexed, 0x2d0cbb1d)                       \
+  V(_Uint16List, []=, Uint16ArraySetIndexed, 0x34731b0d)                       \
   V(_Int32List, [], Int32ArrayGetIndexed, 0xee5fbc81)                          \
-  V(_Int32List, []=, Int32ArraySetIndexed, 0x22fe9045)                         \
+  V(_Int32List, []=, Int32ArraySetIndexed, 0x2a64f035)                         \
   V(_Uint32List, [], Uint32ArrayGetIndexed, 0x3db22221)                        \
-  V(_Uint32List, []=, Uint32ArraySetIndexed, 0x0ea204c5)                       \
+  V(_Uint32List, []=, Uint32ArraySetIndexed, 0x160864b5)                       \
   V(_Int64List, [], Int64ArrayGetIndexed, 0x272816c1)                          \
-  V(_Int64List, []=, Int64ArraySetIndexed, 0xeb40c2c3)                         \
+  V(_Int64List, []=, Int64ArraySetIndexed, 0x53c7e8d3)                         \
   V(_Uint64List, [], Uint64ArrayGetIndexed, 0x63ec7c41)                        \
-  V(_Uint64List, []=, Uint64ArraySetIndexed, 0xb6a233fb)                       \
+  V(_Uint64List, []=, Uint64ArraySetIndexed, 0x1f295a0b)                       \
   V(_Float64List, [], Float64ArrayGetIndexed, 0x4a2c55fc)                      \
-  V(_Float64List, []=, Float64ArraySetIndexed, 0x9f268215)                     \
+  V(_Float64List, []=, Float64ArraySetIndexed, 0x07ada825)                     \
   V(_Float32List, [], Float32ArrayGetIndexed, 0x202a571c)                      \
-  V(_Float32List, []=, Float32ArraySetIndexed, 0xfa74df43)                     \
+  V(_Float32List, []=, Float32ArraySetIndexed, 0x62fc0553)                     \
   V(_Float32x4List, [], Float32x4ArrayGetIndexed, 0x96b1f063)                  \
-  V(_Float32x4List, []=, Float32x4ArraySetIndexed, 0xe010721e)                 \
+  V(_Float32x4List, []=, Float32x4ArraySetIndexed, 0x4897982e)                 \
   V(_Int32x4List, [], Int32x4ArrayGetIndexed, 0x9cc8b9ab)                      \
-  V(_Int32x4List, []=, Int32x4ArraySetIndexed, 0x0a7fdb7e)                     \
+  V(_Int32x4List, []=, Int32x4ArraySetIndexed, 0x7307018e)                     \
   V(_Float64x2List, [], Float64x2ArrayGetIndexed, 0x674f0479)                  \
-  V(_Float64x2List, []=, Float64x2ArraySetIndexed, 0x0b505db2)                 \
+  V(_Float64x2List, []=, Float64x2ArraySetIndexed, 0x73d783c2)                 \
   V(_TypedList, get:length, TypedListLength, 0x3097c769)                       \
   V(_TypedListView, get:length, TypedListViewLength, 0x3097c769)               \
   V(_ByteDataView, get:length, ByteDataViewLength, 0x3097c769)                 \
@@ -352,7 +352,7 @@
 #define GRAPH_CORE_INTRINSICS_LIST(V)                                          \
   V(_List, get:length, ObjectArrayLength, 0x3097c769)                          \
   V(_List, [], ObjectArrayGetIndexed, 0x78f4f491)                              \
-  V(_List, _setIndexed, ObjectArraySetIndexedUnchecked, 0x367abfe8)            \
+  V(_List, _setIndexed, ObjectArraySetIndexedUnchecked, 0xf233cfd8)            \
   V(_ImmutableList, get:length, ImmutableArrayLength, 0x3097c769)              \
   V(_ImmutableList, [], ImmutableArrayGetIndexed, 0x78f4f491)                  \
   V(_GrowableList, get:length, GrowableArrayLength, 0x3097c769)                \
@@ -360,7 +360,7 @@
   V(_GrowableList, _setData, GrowableArraySetData, 0x9388253f)                 \
   V(_GrowableList, _setLength, GrowableArraySetLength, 0xba5d44fc)             \
   V(_GrowableList, [], GrowableArrayGetIndexed, 0x78f4f491)                    \
-  V(_GrowableList, _setIndexed, GrowableArraySetIndexedUnchecked, 0xa1960d27)  \
+  V(_GrowableList, _setIndexed, GrowableArraySetIndexedUnchecked, 0x5d4f1d17)  \
   V(_StringBase, get:length, StringBaseLength, 0x3097c769)                     \
   V(_OneByteString, codeUnitAt, OneByteStringCodeUnitAt, 0x323db7d0)           \
   V(_TwoByteString, codeUnitAt, TwoByteStringCodeUnitAt, 0x323db7d0)           \
diff --git a/runtime/vm/kernel_binary.h b/runtime/vm/kernel_binary.h
index 0805ac0..f547c0b 100644
--- a/runtime/vm/kernel_binary.h
+++ b/runtime/vm/kernel_binary.h
@@ -20,8 +20,8 @@
 static const uint32_t kMagicProgramFile = 0x90ABCDEFu;
 
 // Both version numbers are inclusive.
-static const uint32_t kMinSupportedKernelFormatVersion = 51;
-static const uint32_t kMaxSupportedKernelFormatVersion = 51;
+static const uint32_t kMinSupportedKernelFormatVersion = 52;
+static const uint32_t kMaxSupportedKernelFormatVersion = 52;
 
 // Keep in sync with package:kernel/lib/binary/tag.dart
 #define KERNEL_TAG_LIST(V)                                                     \
diff --git a/runtime/vm/kernel_loader.cc b/runtime/vm/kernel_loader.cc
index 878582b..f6fe2fa 100644
--- a/runtime/vm/kernel_loader.cc
+++ b/runtime/vm/kernel_loader.cc
@@ -771,6 +771,9 @@
 }
 
 void KernelLoader::LoadLibrary(const Library& library) {
+  // This will be invoked by VM bootstrapping code.
+  SafepointWriteRwLocker ml(thread_, thread_->isolate_group()->program_lock());
+
   ASSERT(!library.Loaded());
 
   const auto& uri = String::Handle(Z, library.url());
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 1347673..57ff8c6 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -11610,6 +11610,9 @@
 #if defined(DART_PRECOMPILED_RUNTIME)
   UNREACHABLE();
 #else
+  Thread* thread = Thread::Current();
+  ASSERT(thread->isolate_group()->program_lock()->IsCurrentThreadWriter());
+
   MetadataMap map(metadata());
   map.UpdateOrInsert(declaration, Smi::Handle(Smi::New(kernel_offset)));
   set_metadata(map.Release());
@@ -11623,16 +11626,21 @@
   RELEASE_ASSERT(declaration.IsClass() || declaration.IsField() ||
                  declaration.IsFunction() || declaration.IsLibrary() ||
                  declaration.IsTypeParameter() || declaration.IsNamespace());
+
+  auto thread = Thread::Current();
+  auto zone = thread->zone();
+
   if (declaration.IsLibrary()) {
     // Ensure top-level class is loaded as it may contain annotations of
     // a library.
-    const auto& cls = Class::Handle(toplevel_class());
+    const auto& cls = Class::Handle(zone, toplevel_class());
     if (!cls.IsNull()) {
       cls.EnsureDeclarationLoaded();
     }
   }
-  Object& value = Object::Handle();
+  Object& value = Object::Handle(zone);
   {
+    SafepointReadRwLocker ml(thread, thread->isolate_group()->program_lock());
     MetadataMap map(metadata());
     value = map.GetOrNull(declaration);
     set_metadata(map.Release());
@@ -11646,21 +11654,26 @@
     ASSERT(value.IsArray());
     return value.raw();
   }
-  intptr_t kernel_offset = Smi::Cast(value).Value();
+  const auto& smi_value = Smi::Cast(value);
+  intptr_t kernel_offset = smi_value.Value();
   ASSERT(kernel_offset > 0);
-  value = kernel::EvaluateMetadata(
-      *this, kernel_offset,
-      /* is_annotations_offset = */ declaration.IsLibrary() ||
-          declaration.IsNamespace());
-  if (value.IsArray() || value.IsNull()) {
-    ASSERT(value.raw() != Object::empty_array().raw());
-    if (!Compiler::IsBackgroundCompilation()) {
-      MetadataMap map(metadata());
-      map.UpdateOrInsert(declaration, value);
-      set_metadata(map.Release());
+  const auto& evaluated_value = Object::Handle(
+      zone, kernel::EvaluateMetadata(
+                *this, kernel_offset,
+                /* is_annotations_offset = */ declaration.IsLibrary() ||
+                    declaration.IsNamespace()));
+  if (evaluated_value.IsArray() || evaluated_value.IsNull()) {
+    ASSERT(evaluated_value.raw() != Object::empty_array().raw());
+    SafepointWriteRwLocker ml(thread, thread->isolate_group()->program_lock());
+    MetadataMap map(metadata());
+    if (map.GetOrNull(declaration) == smi_value.raw()) {
+      map.UpdateOrInsert(declaration, evaluated_value);
+    } else {
+      ASSERT(map.GetOrNull(declaration) == evaluated_value.raw());
     }
+    set_metadata(map.Release());
   }
-  return value.raw();
+  return evaluated_value.raw();
 #endif  // defined(DART_PRECOMPILED_RUNTIME)
 }
 
@@ -12332,7 +12345,11 @@
 }
 
 void Library::set_metadata(const Array& value) const {
-  raw_ptr()->set_metadata(value.raw());
+  if (raw_ptr()->metadata() != value.raw()) {
+    DEBUG_ASSERT(
+        IsolateGroup::Current()->program_lock()->IsCurrentThreadWriter());
+    raw_ptr()->set_metadata(value.raw());
+  }
 }
 
 LibraryPtr Library::ImportLibraryAt(intptr_t index) const {
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index 960f3f1..467e1b1 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -4963,7 +4963,11 @@
   void set_flags(uint8_t flags) const;
   bool HasExports() const;
   ArrayPtr loaded_scripts() const { return raw_ptr()->loaded_scripts(); }
-  ArrayPtr metadata() const { return raw_ptr()->metadata(); }
+  ArrayPtr metadata() const {
+    DEBUG_ASSERT(
+        IsolateGroup::Current()->program_lock()->IsCurrentThreadReader());
+    return raw_ptr()->metadata();
+  }
   void set_metadata(const Array& value) const;
   ArrayPtr dictionary() const { return raw_ptr()->dictionary(); }
   void InitClassDictionary() const;
diff --git a/runtime/vm/os_fuchsia.cc b/runtime/vm/os_fuchsia.cc
index 0a9ffa1..e79827b 100644
--- a/runtime/vm/os_fuchsia.cc
+++ b/runtime/vm/os_fuchsia.cc
@@ -23,6 +23,7 @@
 #include <zircon/syscalls.h>
 #include <zircon/syscalls/object.h>
 #include <zircon/time.h>
+#include <zircon/threads.h>
 #include <zircon/types.h>
 
 #include "platform/assert.h"
@@ -216,9 +217,11 @@
 }
 
 int64_t OS::GetCurrentThreadCPUMicros() {
-  zx_time_t now = 0;
-  zx_clock_get(ZX_CLOCK_THREAD, &now);
-  return now / kNanosecondsPerMicrosecond;
+  zx_info_thread_stats_t info = {};
+  zx_status_t status = zx_object_get_info(thrd_get_zx_handle(thrd_current()),
+                                          ZX_INFO_THREAD_STATS, &info,
+                                          sizeof(info), nullptr, nullptr);
+  return status == ZX_OK ? info.total_runtime / kNanosecondsPerMicrosecond : 0;
 }
 
 // On Fuchsia, thread timestamp values are not used in the tracing/timeline
diff --git a/tests/co19/co19-dart2js.status b/tests/co19/co19-dart2js.status
index 1fe42fe..3208f10 100644
--- a/tests/co19/co19-dart2js.status
+++ b/tests/co19/co19-dart2js.status
@@ -49,7 +49,7 @@
 LibTest/core/int/operator_truncating_division_A01_t02: SkipByDesign # Division by zero is not an error in JavaScript
 LibTest/core/int/parse_A01_t02: SkipByDesign # big integers cannot be represented in JavaScript
 LibTest/core/int/remainder_A01_t03: SkipByDesign # Division by zero is not an error in JavaScript
-LibTest/html/HttpRequest/*: Skip # https://github.com/dart-lang/co19/issues/932
+LibTest/html/HttpRequest/responseText_A01_t02: Skip # https://github.com/dart-lang/co19/issues/932
 LibTest/html/HttpRequestUpload/*: Skip # https://github.com/dart-lang/co19/issues/932
 LibTest/io/*: SkipByDesign # dart:io not supported.
 LibTest/isolate/*: SkipByDesign # dart:isolate not supported.
diff --git a/tests/co19/co19-dartdevc.status b/tests/co19/co19-dartdevc.status
index 50a7573..776d905 100644
--- a/tests/co19/co19-dartdevc.status
+++ b/tests/co19/co19-dartdevc.status
@@ -85,7 +85,7 @@
 LibTest/core/int/remainder_A01_t03: SkipByDesign # Division by zero is not an error in JavaScript
 LibTest/html/Element/blur_A01_t01: Skip # Times out
 LibTest/html/Element/focus_A01_t01: Skip # Times out
-LibTest/html/HttpRequest/*: Skip # https://github.com/dart-lang/co19/issues/932
+LibTest/html/HttpRequest/responseText_A01_t02: Skip # https://github.com/dart-lang/co19/issues/932
 LibTest/html/HttpRequestUpload/*: Skip # https://github.com/dart-lang/co19/issues/932
 LibTest/html/IFrameElement/blur_A01_t01: Skip # Times out
 LibTest/html/IFrameElement/focus_A01_t01: Skip # Times out
diff --git a/tools/VERSION b/tools/VERSION
index 679ae2d..8594b2d 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 12
 PATCH 0
-PRERELEASE 132
+PRERELEASE 133
 PRERELEASE_PATCH 0
\ No newline at end of file